Skip to content

Commit 576e9bf

Browse files
committed
refactor: Extract deduplicate-wasm vite plugin to vite-plugins package
1 parent 600cd72 commit 576e9bf

5 files changed

Lines changed: 51 additions & 24 deletions

File tree

packages/kernel-browser-runtime/vite.config.ts

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// eslint-disable-next-line spaced-comment
22
/// <reference types="vitest" />
33

4-
import { jsTrustedPrelude } from '@ocap/vite-plugins';
4+
import { deduplicateAssets, jsTrustedPrelude } from '@ocap/vite-plugins';
55
import type { PreludeRecord } from '@ocap/vite-plugins';
66
import path from 'path';
77
import { defineConfig } from 'vite';
@@ -110,28 +110,13 @@ export default defineConfig(({ mode }) => {
110110
// (It's probably related to the the file being conditionally imported in multiple places.)
111111
// To avoid bloating the bundle, we delete the duplicate files. Thankfully, these files are
112112
// extraneous because we don't hit their code paths in practice. (If we did, things would
113-
// blow up spectacularly.)
114-
{
115-
name: 'deduplicate-sqlite-wasm',
116-
enforce: 'post',
117-
generateBundle(_, bundle) {
118-
const extraneousAssets = Object.values(bundle).filter(
119-
(assetOrChunk) =>
120-
assetOrChunk.fileName.startsWith('sqlite3-') &&
121-
!assetOrChunk.fileName.includes('sqlite3-opfs-async-proxy'),
122-
);
123-
124-
if (extraneousAssets.length !== 2) {
125-
throw new Error(
126-
`Expected 2 extraneous sqlite3.wasm assets, got ${extraneousAssets.length}: ${extraneousAssets.map((asset) => asset.fileName).join(', ')}`,
127-
);
128-
}
129-
130-
for (const asset of extraneousAssets) {
131-
delete bundle[asset.fileName];
132-
}
133-
},
134-
},
113+
// blow up.)
114+
deduplicateAssets({
115+
assetFilter: (fileName) =>
116+
fileName.startsWith('sqlite3-') &&
117+
!fileName.includes('sqlite3-opfs-async-proxy'),
118+
expectedCount: 2,
119+
}),
135120
],
136121
};
137122
});
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import type { Plugin as VitePlugin } from 'vite';
2+
3+
type Options = {
4+
assetFilter: (fileName: string) => boolean;
5+
expectedCount: number;
6+
};
7+
8+
/**
9+
* Vite plugin that deletes extraneous assets from the bundle.
10+
*
11+
* @param options - Options for the plugin
12+
* @param options.assetFilter - A function that filters the assets to be deleted
13+
* @param options.expectedCount - The expected number of assets to be deleted
14+
* @throws If the number of extraneous assets is not equal to the expected count.
15+
* @returns The Vite plugin.
16+
*/
17+
export function deduplicateAssets({
18+
assetFilter,
19+
expectedCount,
20+
}: Options): VitePlugin {
21+
return {
22+
name: 'ocap-kernel:deduplicate-assets',
23+
enforce: 'post',
24+
generateBundle(_, bundle) {
25+
const extraneousAssets = Object.values(bundle).filter((assetOrChunk) =>
26+
assetFilter(assetOrChunk.fileName),
27+
);
28+
29+
if (extraneousAssets.length !== expectedCount) {
30+
throw new Error(
31+
`Expected ${expectedCount} extraneous assets, got ${extraneousAssets.length}: ${extraneousAssets.map((asset) => asset.fileName).join(', ')}`,
32+
);
33+
}
34+
35+
for (const asset of extraneousAssets) {
36+
delete bundle[asset.fileName];
37+
}
38+
},
39+
};
40+
}

packages/vite-plugins/src/extension-dev.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export function extensionDev({
2323
};
2424

2525
return {
26-
name: 'vite:extension-dev',
26+
name: 'ocap-kernel:extension-dev',
2727

2828
// This is called when the server starts
2929
async configureServer(server) {

packages/vite-plugins/src/index.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import * as indexModule from './index.ts';
55
describe('index', () => {
66
it('has the expected exports', () => {
77
expect(Object.keys(indexModule).sort()).toStrictEqual([
8+
'deduplicateAssets',
89
'extensionDev',
910
'htmlTrustedPrelude',
1011
'jsTrustedPrelude',

packages/vite-plugins/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from './deduplicate-assets.ts';
12
export * from './extension-dev.ts';
23
export * from './html-trusted-prelude.ts';
34
export * from './js-trusted-prelude.ts';

0 commit comments

Comments
 (0)