Skip to content

Commit 519b11e

Browse files
committed
WIP fix: Restore kernel-browser-runtime sourcemaps in extension
1 parent 576e9bf commit 519b11e

5 files changed

Lines changed: 68 additions & 26 deletions

File tree

packages/extension/scripts/build-constants.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ export const trustedPreludes = {
1212
background: {
1313
path: path.resolve(sourceDir, 'env/background-trusted-prelude.js'),
1414
},
15+
'kernel-worker': { content: "import './endoify.js';" },
1516
};

packages/extension/src/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
},
1313
"permissions": ["offscreen", "unlimitedStorage"],
1414
"sandbox": {
15-
"pages": ["browser-runtime/vat/iframe.html"]
15+
"pages": ["iframe.html"]
1616
},
1717
"content_security_policy": {
1818
"extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'none'; frame-ancestors 'none';",

packages/extension/src/offscreen.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ async function makeKernelWorker(): Promise<{
5151
kernelStream: DuplexStream<JsonRpcResponse, JsonRpcCall>;
5252
vatWorkerService: VatWorkerServer;
5353
}> {
54-
const worker = new Worker('browser-runtime/kernel-worker/index.js', {
54+
const worker = new Worker('kernel-worker.js', {
5555
type: 'module',
5656
});
5757

@@ -69,7 +69,7 @@ async function makeKernelWorker(): Promise<{
6969
(vatId) =>
7070
makeIframeVatWorker({
7171
id: vatId,
72-
iframeUri: 'browser-runtime/vat/iframe.html',
72+
iframeUri: 'iframe.html',
7373
getPort: initializeMessageChannel,
7474
logger: logger.subLogger({
7575
tags: ['iframe-vat-worker', vatId],

packages/extension/vite.config.ts

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
/// <reference types="vitest" />
33

44
import {
5+
deduplicateAssets,
56
extensionDev,
67
htmlTrustedPrelude,
78
jsTrustedPrelude,
@@ -13,27 +14,39 @@ import { checker as viteChecker } from 'vite-plugin-checker';
1314
import { viteStaticCopy } from 'vite-plugin-static-copy';
1415
import type { Target } from 'vite-plugin-static-copy';
1516

16-
import {
17-
sourceDir,
18-
buildDir,
19-
trustedPreludes,
20-
} from './scripts/build-constants.mjs';
17+
import {} from // sourceDir,
18+
// buildDir,
19+
// trustedPreludes,
20+
'./scripts/build-constants.mjs';
21+
22+
const dirname = path.dirname(new URL(import.meta.url).pathname);
23+
const packagesDir = path.resolve(dirname, '..');
24+
const extensionDir = path.resolve(packagesDir, 'extension');
25+
const sourceDir = path.resolve(extensionDir, 'src');
26+
const outDir = path.resolve(extensionDir, 'dist');
27+
const kernelBrowserRuntimeSrcDir = path.resolve(
28+
packagesDir,
29+
'kernel-browser-runtime/src',
30+
);
31+
32+
export const trustedPreludes = {
33+
background: {
34+
path: path.resolve(sourceDir, 'env/background-trusted-prelude.js'),
35+
},
36+
'kernel-worker': { content: "import './endoify.js';" },
37+
};
2138

2239
/**
2340
* Files that need to be statically copied to the destination directory.
2441
* Paths are relative from the project root directory.
2542
*/
2643
const staticCopyTargets: readonly (string | Target)[] = [
2744
// The extension manifest
28-
'manifest.json',
29-
// External modules
30-
'env/dev-console.js',
31-
'env/background-trusted-prelude.js',
32-
'../../kernel-shims/dist/endoify.js',
33-
{
34-
src: '../../kernel-browser-runtime/dist/static/*',
35-
dest: './browser-runtime',
36-
},
45+
path.resolve(sourceDir, 'manifest.json'),
46+
// Trusted prelude-related
47+
path.resolve(sourceDir, 'env/dev-console.js'),
48+
path.resolve(sourceDir, 'env/background-trusted-prelude.js'),
49+
path.resolve(packagesDir, 'kernel-shims/dist/endoify.js'),
3750
];
3851

3952
// https://vitejs.dev/config/
@@ -45,16 +58,26 @@ export default defineConfig(({ mode }) => {
4558
}
4659

4760
return {
48-
root: sourceDir,
61+
root: packagesDir,
4962

5063
build: {
64+
assetsDir: '',
5165
emptyOutDir: true,
52-
outDir: buildDir,
66+
// Disable Vite's module preload, which may cause SES-dependent code to run before lockdown.
67+
modulePreload: false,
68+
outDir,
5369
rollupOptions: {
5470
input: {
5571
background: path.resolve(sourceDir, 'background.ts'),
5672
offscreen: path.resolve(sourceDir, 'offscreen.html'),
5773
popup: path.resolve(sourceDir, 'popup.html'),
74+
// kernel-browser-runtime
75+
'kernel-worker': path.resolve(
76+
kernelBrowserRuntimeSrcDir,
77+
'kernel-worker',
78+
'kernel-worker.ts',
79+
),
80+
vat: path.resolve(kernelBrowserRuntimeSrcDir, 'vat', 'iframe.html'),
5881
},
5982
output: {
6083
entryFileNames: '[name].js',
@@ -82,10 +105,30 @@ export default defineConfig(({ mode }) => {
82105
silent: isDev,
83106
}),
84107
viteChecker({ typescript: { tsconfigPath: 'tsconfig.build.json' } }),
85-
// Import sourcemaps from our own libraries
86-
// For whatever reason, the types don't match, but it works
108+
// Deduplicate sqlite-wasm assets
109+
deduplicateAssets({
110+
assetFilter: (fileName) =>
111+
fileName.includes('sqlite3-') &&
112+
!fileName.includes('sqlite3-opfs-async-proxy'),
113+
expectedCount: 2,
114+
}),
115+
// Would you believe that there's no other way to do this?
116+
{
117+
name: 'move-html-files-to-root',
118+
generateBundle: {
119+
order: 'post',
120+
handler(_, bundle) {
121+
for (const chunk of Object.values(bundle)) {
122+
if (!chunk.fileName.endsWith('.html')) {
123+
continue;
124+
}
125+
chunk.fileName = path.basename(chunk.fileName);
126+
}
127+
},
128+
},
129+
},
87130
// Open the extension in the browser when watching
88-
isWatching && extensionDev({ extensionPath: buildDir }),
131+
isWatching && extensionDev({ extensionPath: outDir }),
89132
],
90133
};
91134
});

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,11 @@ export default defineConfig(({ mode }) => {
6262
vat: path.resolve(sourceDir, 'vat', 'iframe.html'),
6363
},
6464
output: {
65-
format: 'esm',
6665
// Basically, create directories for each entry point and put all related
6766
// files in them.
6867
entryFileNames: (chunkInfo) => {
69-
// This property isn't really documented, but it appears to be equivalent
70-
// to the keys of `rollupOptions.input`.
68+
// This property isn't really documented, but it appears to be the absolute path
69+
// to the entry point.
7170
if (!chunkInfo.facadeModuleId) {
7271
return '[name].js';
7372
}
@@ -85,7 +84,6 @@ export default defineConfig(({ mode }) => {
8584
},
8685
chunkFileNames: '[name].js',
8786
assetFileNames: '[name].[ext]',
88-
preserveModulesRoot: sourceDir,
8987
},
9088
},
9189
...(isDev

0 commit comments

Comments
 (0)