22/// <reference types="vitest" />
33
44import {
5+ deduplicateAssets ,
56 extensionDev ,
67 htmlTrustedPrelude ,
78 jsTrustedPrelude ,
@@ -13,27 +14,39 @@ import { checker as viteChecker } from 'vite-plugin-checker';
1314import { viteStaticCopy } from 'vite-plugin-static-copy' ;
1415import 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 */
2643const 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} ) ;
0 commit comments