Compare commits

...

7 Commits

Author SHA1 Message Date
GitHub Actions 9d97164c20 chore(release): v0.16.6 2024-02-10 10:29:52 +00:00
lionelhorn 6d526e7043 feat: Add option to customize the analysis artifacts output (#431)
Co-authored-by: Aaron Klinker <aaronklinker1@gmail.com>
2024-02-10 04:26:33 -06:00
Aaron Klinker 946072fc5a docs: Fix createShadowRootUi unmount calls 2024-02-10 04:04:16 -06:00
Aaron Klinker 6b8dfdf02d chore: Enable skipped test since it works now 2024-02-10 03:01:38 -06:00
okou ba85fdf470 fix: Use insertBefore on mounting content script UI 2024-02-10 03:01:38 -06:00
okou 295f8601e3 refactor: Use Element.prepend on mounting UI 2024-02-10 03:01:38 -06:00
Aaron a38ccd8624 doc: Fix custom block 2024-02-09 05:20:51 -06:00
17 changed files with 190 additions and 24 deletions
+29
View File
@@ -1,5 +1,34 @@
# Changelog
## v0.16.6
[compare changes](https://github.com/wxt-dev/wxt/compare/v0.16.5...v0.16.6)
### 🚀 Enhancements
- Add option to customize the analysis artifacts output ([#431](https://github.com/wxt-dev/wxt/pull/431))
### 🩹 Fixes
- Use `insertBefore` on mounting content script UI ([ba85fdf](https://github.com/wxt-dev/wxt/commit/ba85fdf))
### 💅 Refactors
- Use `Element.prepend` on mounting UI ([295f860](https://github.com/wxt-dev/wxt/commit/295f860))
### 📖 Documentation
- Fix `createShadowRootUi` unmount calls ([946072f](https://github.com/wxt-dev/wxt/commit/946072f))
### 🏡 Chore
- Enable skipped test since it works now ([6b8dfdf](https://github.com/wxt-dev/wxt/commit/6b8dfdf))
### ❤️ Contributors
- Lionelhorn
- Okou
## v0.16.5
[compare changes](https://github.com/wxt-dev/wxt/compare/v0.16.4...v0.16.5)
+4 -4
View File
@@ -233,7 +233,7 @@ export default defineContentScript({
},
onRemove: (app) => {
// Unmount the app when the UI is removed
app.unmount();
app?.unmount();
},
});
@@ -268,7 +268,7 @@ export default defineContentScript({
},
onRemove: (root) => {
// Unmount the root when the UI is removed
root.unmount();
root?.unmount();
},
});
@@ -303,7 +303,7 @@ export default defineContentScript({
},
onRemove: (app) => {
// Destroy the app when the UI is removed
app.$destroy();
app?.$destroy();
},
});
@@ -335,7 +335,7 @@ export default defineContentScript({
},
onRemove: (unmount) => {
// Unmount the app when the UI is removed
unmount();
unmount?.();
},
});
+1 -1
View File
@@ -83,6 +83,6 @@ Normally, to manually reload an extension, you have to visit `chrome://extension
When running `wxt` command to start the dev server, WXT adds a keyboard shortcut, `ctrl+E` for Windows/Linux and `cmd+E` for Mac, that reloads the extension when pressed, without visiting `chrome://extensions`.
:::note
:::info
This shortcut is only available during development, and is not be added to your extension when running `wxt build` or `wxt-zip`.
:::
+93
View File
@@ -0,0 +1,93 @@
import { describe, it, expect, beforeEach } from 'vitest';
import { TestProject } from '../utils';
import { resetBundleIncrement } from '~/core/builders/vite/plugins';
describe('Analysis', () => {
beforeEach(() => {
resetBundleIncrement();
});
it('should outptut a stats.html with no part files by default', async () => {
const project = new TestProject();
project.addFile('entrypoints/popup.html');
project.addFile('entrypoints/options.html');
project.addFile(
'entrypoints/background.ts',
'export default defineBackground(() => {});',
);
await project.build({
analysis: {
enabled: true,
},
});
expect(await project.fileExists('stats.html')).toBe(true);
expect(await project.fileExists('.output/chrome-mv3/stats-0.json')).toBe(
false,
);
});
it('should save part files when requested', async () => {
const project = new TestProject();
project.addFile('entrypoints/popup.html');
project.addFile('entrypoints/options.html');
project.addFile(
'entrypoints/background.ts',
'export default defineBackground(() => {});',
);
await project.build({
analysis: {
enabled: true,
keepArtifacts: true,
},
});
expect(await project.fileExists('stats.html')).toBe(true);
expect(await project.fileExists('stats-0.json')).toBe(true);
expect(await project.fileExists('stats-1.json')).toBe(true);
});
it('should support customizing the stats output directory', async () => {
const project = new TestProject();
project.addFile('entrypoints/popup.html');
project.addFile('entrypoints/options.html');
project.addFile(
'entrypoints/background.ts',
'export default defineBackground(() => {});',
);
await project.build({
analysis: {
enabled: true,
outputFile: 'stats/bundle.html',
},
});
expect(await project.fileExists('stats/bundle.html')).toBe(true);
});
it('should place artifacts next to the custom output file', async () => {
const project = new TestProject();
project.addFile('entrypoints/popup.html');
project.addFile('entrypoints/options.html');
project.addFile(
'entrypoints/background.ts',
'export default defineBackground(() => {});',
);
await project.build({
analysis: {
enabled: true,
outputFile: 'stats/bundle.html',
keepArtifacts: true,
},
});
console.log(project.root);
expect(await project.fileExists('stats/bundle.html')).toBe(true);
expect(await project.fileExists('stats/bundle-0.json')).toBe(true);
expect(await project.fileExists('stats/bundle-1.json')).toBe(true);
});
});
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "wxt",
"type": "module",
"version": "0.16.5",
"version": "0.16.6",
"description": "Next gen framework for developing web extensions",
"engines": {
"node": ">=18",
@@ -367,7 +367,7 @@ describe('Content Script UIs', () => {
});
});
describe.todo('after', () => {
describe('after', () => {
it('should append the UI after the anchor', () => {
const ui = createIntegratedUi(ctx, {
position: 'inline',
+3 -7
View File
@@ -211,20 +211,16 @@ function mountUi(
anchor.append(root);
break;
case 'first':
if (anchor.firstChild) {
anchor.insertBefore(root, anchor.firstChild);
} else {
anchor.append(root);
}
anchor.prepend(root);
break;
case 'replace':
anchor.replaceWith(root);
break;
case 'after':
anchor.replaceWith(anchor, root);
anchor.parentElement?.insertBefore(root, anchor.nextElementSibling);
break;
case 'before':
anchor.replaceWith(root, anchor);
anchor.parentElement?.insertBefore(root, anchor);
break;
default:
options.append(anchor, root);
@@ -10,6 +10,16 @@ export function bundleAnalysis(
): vite.Plugin {
return visualizer({
template: 'raw-data',
filename: path.resolve(config.outDir, `stats-${increment++}.json`),
}) as vite.Plugin;
filename: path.resolve(
config.analysis.outputDir,
`${config.analysis.outputName}-${increment++}.json`,
),
});
}
/**
* @deprecated FOR TESTING ONLY.
*/
export function resetBundleIncrement() {
increment = 0;
}
+6 -3
View File
@@ -87,8 +87,8 @@ export async function internalBuild(): Promise<BuildOutput> {
}
async function combineAnalysisStats(): Promise<void> {
const unixFiles = await glob(`stats-*.json`, {
cwd: wxt.config.outDir,
const unixFiles = await glob(`${wxt.config.analysis.outputName}-*.json`, {
cwd: wxt.config.analysis.outputDir,
absolute: true,
});
const absolutePaths = unixFiles.map(unnormalizePath);
@@ -104,7 +104,10 @@ async function combineAnalysisStats(): Promise<void> {
],
{ cwd: wxt.config.root, stdio: 'inherit' },
);
await Promise.all(absolutePaths.map((statsFile) => fs.remove(statsFile)));
if (!wxt.config.analysis.keepArtifacts) {
await Promise.all(absolutePaths.map((statsFile) => fs.remove(statsFile)));
}
}
function printValidationResults({
+11 -4
View File
@@ -100,6 +100,13 @@ export async function resolveConfig(
}).map(([key, value]) => [key, path.resolve(root, value)]),
);
const analysisOutputFile = path.resolve(
root,
mergedConfig.analysis?.outputFile ?? 'stats.html',
);
const analysisOutputDir = path.dirname(analysisOutputFile);
const analysisOutputName = path.parse(analysisOutputFile).name;
const finalConfig: Omit<ResolvedConfig, 'builder'> = {
browser,
command,
@@ -129,10 +136,10 @@ export async function resolveConfig(
analysis: {
enabled: mergedConfig.analysis?.enabled ?? false,
template: mergedConfig.analysis?.template ?? 'treemap',
outputFile: path.resolve(
root,
mergedConfig.analysis?.outputFile ?? 'stats.html',
),
outputFile: analysisOutputFile,
outputDir: analysisOutputDir,
outputName: analysisOutputName,
keepArtifacts: mergedConfig.analysis?.keepArtifacts ?? false,
},
userConfigMetadata: userConfigMetadata ?? {},
alias,
+3
View File
@@ -237,6 +237,9 @@ export const fakeResolvedConfig = fakeObjectCreator<ResolvedConfig>(() => {
enabled: false,
template: 'treemap',
outputFile: fakeFile(),
outputDir: fakeDir(),
outputName: 'stats',
keepArtifacts: false,
},
zip: {
artifactTemplate: '{{name}}-{{version}}.zip',
+21 -1
View File
@@ -212,9 +212,24 @@ export interface InlineConfig {
/**
* Name of the output HTML file. Relative to the project's root directory.
*
* Changing the filename of the outputFile also effects the names of the artifacts generated
* when setting `keepArtifacts` to true:
* - "stats.html" => "stats-*.json"
* - "stats/bundle.html" => "bundle-*.json"
* - ".analysis/index.html" => "index-*.json"
*
* @default "stats.html"
*/
outputFile?: string;
/**
* By default, the `stats-*.json` artifacts generated during bundle analysis are deleted. Set to
* `true` to keep them.
*
* One stats file is output per build step.
*
* @default false
*/
keepArtifacts?: boolean;
};
/**
* Add additional paths to the `.wxt/tsconfig.json`. Use this instead of overwriting the `paths`
@@ -901,8 +916,13 @@ export interface ResolvedConfig {
analysis: {
enabled: boolean;
template: NonNullable<PluginVisualizerOptions['template']>;
/** Absolute file path */
/** Absolute file path to the `stats.html` file */
outputFile: string;
/** The directory where the final `stats.html` file is located */
outputDir: string;
/** Name of the `stats.html` file, minus ".html" */
outputName: string;
keepArtifacts: boolean;
};
userConfigMetadata: Omit<C12ResolvedConfig<UserConfig>, 'config'>;
/**
+1
View File
@@ -10,6 +10,7 @@ lerna-debug.log*
node_modules
.output
stats.html
stats-*.json
.wxt
web-ext.config.ts
+1
View File
@@ -10,6 +10,7 @@ lerna-debug.log*
node_modules
.output
stats.html
stats-*.json
.wxt
web-ext.config.ts
+1
View File
@@ -10,6 +10,7 @@ lerna-debug.log*
node_modules
.output
stats.html
stats-*.json
.wxt
web-ext.config.ts
+1
View File
@@ -10,6 +10,7 @@ lerna-debug.log*
node_modules
.output
stats.html
stats-*.json
.wxt
web-ext.config.ts
+1
View File
@@ -10,6 +10,7 @@ lerna-debug.log*
node_modules
.output
stats.html
stats-*.json
.wxt
web-ext.config.ts