@volter/browser-substrate 0.1.131 → 0.1.133
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/catalog/demand-input.json +23 -26
- package/catalog/published/profile.json +4 -1
- package/catalog/published/v1/artifacts/sha256/0dde568b5b331900694620b905a098b230fdcec99bdd4dae8555f716fbbdc31e +0 -0
- package/catalog/published/v1/artifacts/sha256/0dde568b5b331900694620b905a098b230fdcec99bdd4dae8555f716fbbdc31e.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/0e6d21ea3c0794519406e3a629fda659ba5e160048aabef334e11c39ffe3141f +0 -0
- package/catalog/published/v1/artifacts/sha256/0e6d21ea3c0794519406e3a629fda659ba5e160048aabef334e11c39ffe3141f.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/1ad26ae231b3b0924f19cf59eba59a14eab9d81e23d4a6f4963a73223bf1599e +0 -0
- package/catalog/published/v1/artifacts/sha256/1ad26ae231b3b0924f19cf59eba59a14eab9d81e23d4a6f4963a73223bf1599e.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/22c4e8bb098c8892abbc219a0779f2c2325c7b1b7fe86af3fcbc10b41e88cab3 +0 -0
- package/catalog/published/v1/artifacts/sha256/22c4e8bb098c8892abbc219a0779f2c2325c7b1b7fe86af3fcbc10b41e88cab3.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/2aec86c0de68469758763716b490a5976b6efc86395dbda20094d3e00f19e237 +0 -0
- package/catalog/published/v1/artifacts/sha256/2aec86c0de68469758763716b490a5976b6efc86395dbda20094d3e00f19e237.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/2eb1afb25f97181a7024d4f20027572766baf5e298f10c81bf6cf14b3935ffa1 +0 -0
- package/catalog/published/v1/artifacts/sha256/2eb1afb25f97181a7024d4f20027572766baf5e298f10c81bf6cf14b3935ffa1.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/44bdc4eb993af76098524b457050eba6de0eef2a3aaf3e44cad1d1bf37feb0ed +0 -0
- package/catalog/published/v1/artifacts/sha256/44bdc4eb993af76098524b457050eba6de0eef2a3aaf3e44cad1d1bf37feb0ed.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/44f224bdc27dca8669603a7f69a15091fb05816b03cc7cdf74bb7c033d679bda +0 -0
- package/catalog/published/v1/artifacts/sha256/44f224bdc27dca8669603a7f69a15091fb05816b03cc7cdf74bb7c033d679bda.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/608dce53b0510adebcc35c4fc8cbd03fdcd2b0aef46c97408a58004b695560ec +0 -0
- package/catalog/published/v1/artifacts/sha256/608dce53b0510adebcc35c4fc8cbd03fdcd2b0aef46c97408a58004b695560ec.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/68fd1d330615dcc53916a8d028cf0e4f0eec89b9fc240e025f2e4afa3898334d +0 -0
- package/catalog/published/v1/artifacts/sha256/68fd1d330615dcc53916a8d028cf0e4f0eec89b9fc240e025f2e4afa3898334d.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/7ea6e9ae767d25851bcb6e522af3fb2f29e280554ed8caedda3440e70eafd640 +0 -0
- package/catalog/published/v1/artifacts/sha256/7ea6e9ae767d25851bcb6e522af3fb2f29e280554ed8caedda3440e70eafd640.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/857efce895fedba5f4d143b759ad5c7ec532cf89cf1b3cd775abc01a92613e2b +0 -0
- package/catalog/published/v1/artifacts/sha256/857efce895fedba5f4d143b759ad5c7ec532cf89cf1b3cd775abc01a92613e2b.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/a087c9be0888ff3cccf9ef844851fc4d45c11f905d11a0543549af3c002ac0aa +0 -0
- package/catalog/published/v1/artifacts/sha256/a087c9be0888ff3cccf9ef844851fc4d45c11f905d11a0543549af3c002ac0aa.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/a2bc367802986f1c5297fc6e95ee8f0b1496eca41dbb129090c43dd798c7320a +0 -0
- package/catalog/published/v1/artifacts/sha256/a2bc367802986f1c5297fc6e95ee8f0b1496eca41dbb129090c43dd798c7320a.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/a519dc170d76d7e9705c79e1b40ea36b1b8d46410f788bbb73a92a0ded37b216 +0 -0
- package/catalog/published/v1/artifacts/sha256/a519dc170d76d7e9705c79e1b40ea36b1b8d46410f788bbb73a92a0ded37b216.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/ae0706d25f0209e750d9f1b227fe8b12aea31d684ff7133207938a7a86bd7cac +0 -0
- package/catalog/published/v1/artifacts/sha256/ae0706d25f0209e750d9f1b227fe8b12aea31d684ff7133207938a7a86bd7cac.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/b5b8c43607702daef23b2f3df3099d07e8c8e392d55305b0a28aae3bac7a41a8 +0 -0
- package/catalog/published/v1/artifacts/sha256/b5b8c43607702daef23b2f3df3099d07e8c8e392d55305b0a28aae3bac7a41a8.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/c2f1c0fa4f79f465a9681abaac1e31b9cf8cb0b217698ee1d2c0ff810fcf3ef2 +0 -0
- package/catalog/published/v1/artifacts/sha256/c2f1c0fa4f79f465a9681abaac1e31b9cf8cb0b217698ee1d2c0ff810fcf3ef2.headers.json +1 -0
- package/catalog/published/v1/artifacts/sha256/c3ce5504bd36dca993a3233aae4bcf98a15932c3cc955b380a584ca9b3654fe6 +0 -0
- package/catalog/published/v1/artifacts/sha256/c3ce5504bd36dca993a3233aae4bcf98a15932c3cc955b380a584ca9b3654fe6.headers.json +1 -0
- package/catalog/published/v1/catalog.json +1 -1
- package/catalog/published/v1/catalogs/sha256/{05968a229c8b3f8b54472842cf7fae36c242e29640c4bfdf4d016f544e56b081.json → 1e2e4636d3edc259d161938c35d244579d714ee550dd437dd8052527257c4913.json} +1 -1
- package/catalog/published/v1/locks/sha256/8774e29a90421e258ffe794479f490f0bb9a5ad18992501f4a4b8724946bc5ea.json +1 -0
- package/catalog/published/v1/locks/sha256/8774e29a90421e258ffe794479f490f0bb9a5ad18992501f4a4b8724946bc5ea.json.headers.json +1 -0
- package/catalog/published/v1/locks/sha256/a0afe6eb2bf01c70330f3254aebdc632c88b37e8f74bf94630aa032082e9f8aa.json +1 -0
- package/catalog/published/v1/locks/sha256/a0afe6eb2bf01c70330f3254aebdc632c88b37e8f74bf94630aa032082e9f8aa.json.headers.json +1 -0
- package/catalog/published/v1/locks/sha256/d620d587eef3abfe242655f425c1b58593a16ec44df6fe6c581cf43187ed2a44.json +1 -0
- package/catalog/published/v1/locks/sha256/d620d587eef3abfe242655f425c1b58593a16ec44df6fe6c581cf43187ed2a44.json.headers.json +1 -0
- package/catalog/published/v1/locks/sha256/e2aa898376ac7441136725b07cca237aa954908e4cfc1f23a9fe00cf7de09682.json +1 -0
- package/catalog/published/v1/locks/sha256/e2aa898376ac7441136725b07cca237aa954908e4cfc1f23a9fe00cf7de09682.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/1d81bbc0eb949801ae8923812ecdce0084767419f64e89a55151cd148f5cd1b2.json +1 -0
- package/catalog/published/v1/manifests/sha256/1d81bbc0eb949801ae8923812ecdce0084767419f64e89a55151cd148f5cd1b2.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/2fb69681c1296589abbe43727a663d01d9d8479bc6d5fa8721f42ffe0c3561a7.json +1 -0
- package/catalog/published/v1/manifests/sha256/2fb69681c1296589abbe43727a663d01d9d8479bc6d5fa8721f42ffe0c3561a7.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/36c9274254103e78c5348ad791fed667516140b7af0642099bbf47ef4f53d890.json +1 -0
- package/catalog/published/v1/manifests/sha256/36c9274254103e78c5348ad791fed667516140b7af0642099bbf47ef4f53d890.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/3e3a36367e510235bd5bde86ad43eec365ea0104540b07d369b0ef3f9ada03bc.json +1 -0
- package/catalog/published/v1/manifests/sha256/3e3a36367e510235bd5bde86ad43eec365ea0104540b07d369b0ef3f9ada03bc.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/4936c927e6c26f0059ca3e0640df8c789b81a14087ebc5eef3beb1610e5bd04c.json +1 -0
- package/catalog/published/v1/manifests/sha256/4936c927e6c26f0059ca3e0640df8c789b81a14087ebc5eef3beb1610e5bd04c.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/50bffdc836ab04fe3a629b6b05de0e397608535b54301afa1928f5c56ebbe5cc.json +1 -0
- package/catalog/published/v1/manifests/sha256/50bffdc836ab04fe3a629b6b05de0e397608535b54301afa1928f5c56ebbe5cc.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/55b16f905125ae8d99528e202f7adf93efd406872a01ca87215b89421127891a.json +1 -0
- package/catalog/published/v1/manifests/sha256/55b16f905125ae8d99528e202f7adf93efd406872a01ca87215b89421127891a.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/5c157348675c4e2c4c4ac4361a290eb9a6d4d94234b3c88f2de32ea02a378ebf.json +1 -0
- package/catalog/published/v1/manifests/sha256/5c157348675c4e2c4c4ac4361a290eb9a6d4d94234b3c88f2de32ea02a378ebf.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/790ec3d63c661336b53562800f79d2c1d5514bba3cae4598c14ee6d27e494215.json +1 -0
- package/catalog/published/v1/manifests/sha256/790ec3d63c661336b53562800f79d2c1d5514bba3cae4598c14ee6d27e494215.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/87547c854971ef1a71229fea31b8b23ff79eb086b86ddbab3c8932fcb99be7ff.json +1 -0
- package/catalog/published/v1/manifests/sha256/87547c854971ef1a71229fea31b8b23ff79eb086b86ddbab3c8932fcb99be7ff.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/8bdf05b266f5e88ba2285c5df8c4669c9563615db49b2232108f9b5a520e937b.json +1 -0
- package/catalog/published/v1/manifests/sha256/8bdf05b266f5e88ba2285c5df8c4669c9563615db49b2232108f9b5a520e937b.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/947574aab78b0dd25696ebd0818c37fd7fb5ff155b6da475989586cf111d9b00.json +1 -0
- package/catalog/published/v1/manifests/sha256/947574aab78b0dd25696ebd0818c37fd7fb5ff155b6da475989586cf111d9b00.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/b37369ce5ea8ee2d6a33547fd869ff288515d06721a603dda497c29efa1961c1.json +1 -0
- package/catalog/published/v1/manifests/sha256/b37369ce5ea8ee2d6a33547fd869ff288515d06721a603dda497c29efa1961c1.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/b7e0146b018e2778913230fd5776c959cd8d4252cb1ee5ff4781dccac79b8530.json +1 -0
- package/catalog/published/v1/manifests/sha256/b7e0146b018e2778913230fd5776c959cd8d4252cb1ee5ff4781dccac79b8530.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/c31843879803e9f3462643279eb736cf5fa02628062a1a93ad600af32a171b2c.json +1 -0
- package/catalog/published/v1/manifests/sha256/c31843879803e9f3462643279eb736cf5fa02628062a1a93ad600af32a171b2c.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/c3bc41ee338d6b67a11b68b7557d54c177391332db2ab10226e26c8bc4e209c3.json +1 -0
- package/catalog/published/v1/manifests/sha256/c3bc41ee338d6b67a11b68b7557d54c177391332db2ab10226e26c8bc4e209c3.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/ddb91a53e5dd7c86d9ace7d8582d2b8b5ea94a64bc80aef18ca0011dd5123aa5.json +1 -0
- package/catalog/published/v1/manifests/sha256/ddb91a53e5dd7c86d9ace7d8582d2b8b5ea94a64bc80aef18ca0011dd5123aa5.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/f5f894715fe5d8717576410d44710db17ae99fa71a7c98cf6306589f8b59b9fa.json +1 -0
- package/catalog/published/v1/manifests/sha256/f5f894715fe5d8717576410d44710db17ae99fa71a7c98cf6306589f8b59b9fa.json.headers.json +1 -0
- package/catalog/published/v1/manifests/sha256/f9da999dfff0f40cebba66f90924b57ad4a3aee3532c468fe4d5a3bbb72d0e30.json +1 -0
- package/catalog/published/v1/manifests/sha256/f9da999dfff0f40cebba66f90924b57ad4a3aee3532c468fe4d5a3bbb72d0e30.json.headers.json +1 -0
- package/dist/cli/host-managers.d.ts.map +1 -1
- package/dist/cli/host-managers.js +24 -3
- package/dist/cli/host-managers.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +5 -5
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/provision-catalog.d.ts.map +1 -1
- package/dist/cli/provision-catalog.js +18 -2
- package/dist/cli/provision-catalog.js.map +1 -1
- package/dist/shell/assets/{node-execution-worker-8963896fc0b53580.js → node-execution-worker-298552de1105af3a.js} +32 -1
- package/dist/shell/assets/{shell-DWB5HWvM.js → shell-DaFiRjDJ.js} +461 -461
- package/dist/shell/index.html +1 -1
- package/dist/shell/node-execution-worker.js +1 -1
- package/package.json +1 -1
- /package/catalog/published/v1/catalogs/sha256/{05968a229c8b3f8b54472842cf7fae36c242e29640c4bfdf4d016f544e56b081.json.headers.json → 1e2e4636d3edc259d161938c35d244579d714ee550dd437dd8052527257c4913.json.headers.json} +0 -0
|
@@ -6096,7 +6096,38 @@ ${preloadLines(preloads)}`;const program=bootstrap+(printIndex>=0?`console.log($
|
|
|
6096
6096
|
> ${label} ${phase}
|
|
6097
6097
|
> ${command}
|
|
6098
6098
|
|
|
6099
|
-
`;if(phaseHeading)options.onStderr?.(phaseHeading);const result2=await this.options.runShellCommand(command,{...options,env:{...options.env,npm_lifecycle_event:phase,npm_package_name:manifest.name??"",npm_package_version:manifest.version??"",PATH:scriptPath(cwd,options.env?.PATH)}});stdout+=result2.stdout;stderr+=phaseHeading+result2.stderr;if(result2.exitCode!==0)return{...result2,stdout,stderr}}return{stdout,stderr,exitCode:0}}let scriptArgv;try{scriptArgv=parseCommandWords(script)}catch{return this.runContainer(argv,options)}if(scriptArgv[0]!=="vite"&&!(scriptArgv[0]==="next"&&scriptArgv[1]==="dev"))return this.runContainer(argv,options);if(separator>=0)scriptArgv.push(...argv.slice(separator+1));options.onStderr?.(heading);const result=scriptArgv[0]==="next"?await this.runNext(scriptArgv,options):await this.runVite(scriptArgv,options);return{...result,stderr:`${heading}${result.stderr}`}}ensureBunRuntime(){const vfs2=this.container.vfs;if(vfs2.existsSync(BUN_GLOBALS_PATH)&&vfs2.existsSync(BUN_BUILD_PATH))return;vfs2.mkdirSync(BUN_RUNTIME_DIRECTORY,{recursive:true});vfs2.writeFileSync(BUN_GLOBALS_PATH,BUN_GLOBALS_SOURCE);vfs2.writeFileSync(BUN_BUILD_PATH,BUN_BUILD_SOURCE)}nativeBindingPrelude(cwd){const selected=Object.entries(this.options.preparedBindings??{}).filter(([root2])=>(cwd??"/workspace/app")===root2||(cwd??"/workspace/app").startsWith(`${root2}/`)).sort((a,b)=>b[0].length-a[0].length)[0];const bindings=this.options.preparedBinding?.(cwd)??(selected?Object.fromEntries(Object.entries(selected[1]).map(([source,target])=>[`${selected[0]==="/"?"":selected[0]}/${source}`,`${selected[0]==="/"?"":selected[0]}/${target}`])):{});const refused=Object.entries(this.options.preparedModuleRefusals??{}).filter(([root2])=>(cwd??"/workspace/app")===root2||(cwd??"/workspace/app").startsWith(`${root2}/`)).sort((a,b)=>b[0].length-a[0].length)[0];const refusals=this.options.preparedModuleRefusal?.(cwd)??(refused?Object.fromEntries(Object.entries(refused[1]).map(([path3,reason])=>[`${refused[0]==="/"?"":refused[0]}/${path3}`,reason])):{});for(const[path3,reason]of Object.entries(refusals))if(!path3.startsWith("/")||normalizeAbsolutePath(path3)!==path3||!reason.trim())throw new Error(`Prepared module refusal malformed: ${path3}`);
|
|
6099
|
+
`;if(phaseHeading)options.onStderr?.(phaseHeading);const result2=await this.options.runShellCommand(command,{...options,env:{...options.env,npm_lifecycle_event:phase,npm_package_name:manifest.name??"",npm_package_version:manifest.version??"",PATH:scriptPath(cwd,options.env?.PATH)}});stdout+=result2.stdout;stderr+=phaseHeading+result2.stderr;if(result2.exitCode!==0)return{...result2,stdout,stderr}}return{stdout,stderr,exitCode:0}}let scriptArgv;try{scriptArgv=parseCommandWords(script)}catch{return this.runContainer(argv,options)}if(scriptArgv[0]!=="vite"&&!(scriptArgv[0]==="next"&&scriptArgv[1]==="dev"))return this.runContainer(argv,options);if(separator>=0)scriptArgv.push(...argv.slice(separator+1));options.onStderr?.(heading);const result=scriptArgv[0]==="next"?await this.runNext(scriptArgv,options):await this.runVite(scriptArgv,options);return{...result,stderr:`${heading}${result.stderr}`}}ensureBunRuntime(){const vfs2=this.container.vfs;if(vfs2.existsSync(BUN_GLOBALS_PATH)&&vfs2.existsSync(BUN_BUILD_PATH))return;vfs2.mkdirSync(BUN_RUNTIME_DIRECTORY,{recursive:true});vfs2.writeFileSync(BUN_GLOBALS_PATH,BUN_GLOBALS_SOURCE);vfs2.writeFileSync(BUN_BUILD_PATH,BUN_BUILD_SOURCE)}nativeBindingPrelude(cwd){const selected=Object.entries(this.options.preparedBindings??{}).filter(([root2])=>(cwd??"/workspace/app")===root2||(cwd??"/workspace/app").startsWith(`${root2}/`)).sort((a,b)=>b[0].length-a[0].length)[0];const bindings=this.options.preparedBinding?.(cwd)??(selected?Object.fromEntries(Object.entries(selected[1]).map(([source,target])=>[`${selected[0]==="/"?"":selected[0]}/${source}`,`${selected[0]==="/"?"":selected[0]}/${target}`])):{});const refused=Object.entries(this.options.preparedModuleRefusals??{}).filter(([root2])=>(cwd??"/workspace/app")===root2||(cwd??"/workspace/app").startsWith(`${root2}/`)).sort((a,b)=>b[0].length-a[0].length)[0];const refusals=this.options.preparedModuleRefusal?.(cwd)??(refused?Object.fromEntries(Object.entries(refused[1]).map(([path3,reason])=>[`${refused[0]==="/"?"":refused[0]}/${path3}`,reason])):{});for(const[path3,reason]of Object.entries(refusals))if(!path3.startsWith("/")||normalizeAbsolutePath(path3)!==path3||!reason.trim())throw new Error(`Prepared module refusal malformed: ${path3}`);for(const[source,target]of Object.entries(bindings)){if(!source.startsWith("/")||!source.endsWith(".node")||!target.startsWith("/")||!target.endsWith(".cjs")||normalizeAbsolutePath(source)!==source||normalizeAbsolutePath(target)!==target||!this.container.vfs.existsSync(target))throw new Error(`Prepared native export binding missing/malformed: ${source}`)}return`(() => {
|
|
6100
|
+
const bindings = Object.freeze(${JSON.stringify(bindings)});
|
|
6101
|
+
const refusals = Object.freeze(${JSON.stringify(refusals)});
|
|
6102
|
+
const { fileURLToPath, pathToFileURL } = require("node:url");
|
|
6103
|
+
const { dirname, resolve } = require("node:path");
|
|
6104
|
+
const { registerHooks } = require("node:module");
|
|
6105
|
+
if (typeof registerHooks !== "function") throw new Error("Prepared native exports require Node synchronous module hooks; prepare a compatible engine on the host.");
|
|
6106
|
+
const refuse = (path, cause) => {
|
|
6107
|
+
const root = Object.keys(refusals).filter(root => path === root || path.startsWith(root + "/")).sort((a, b) => b.length - a.length)[0];
|
|
6108
|
+
const error = new Error(root ? refusals[root] : "Native addon " + path + " has no qualified browser export binding. Prepare and publish its exact native export closure through publish-demand-catalog.mjs on a machine.");
|
|
6109
|
+
error.code = "ERR_UNPREPARED_PROVISION";
|
|
6110
|
+
if (cause) error.cause = cause;
|
|
6111
|
+
throw error;
|
|
6112
|
+
};
|
|
6113
|
+
registerHooks({ resolve(specifier, context, nextResolve) {
|
|
6114
|
+
// Native binaries may deliberately be absent from a prepared image.
|
|
6115
|
+
// Exact mappings still resolve their qualified CJS export; otherwise
|
|
6116
|
+
// report the native load rather than losing the preparation door to
|
|
6117
|
+
// the ordinary missing-file resolution error.
|
|
6118
|
+
const requested = specifier.startsWith("file:") ? fileURLToPath(specifier) : specifier.startsWith("/") ? resolve(specifier) : specifier.startsWith(".") && context.parentURL?.startsWith("file:") ? resolve(dirname(fileURLToPath(context.parentURL)), specifier) : undefined;
|
|
6119
|
+
if (requested?.endsWith(".node") && Object.keys(refusals).some(root => requested === root || requested.startsWith(root + "/"))) refuse(requested);
|
|
6120
|
+
if (requested?.endsWith(".node") && bindings[requested]) return { url: pathToFileURL(bindings[requested]).href, shortCircuit: true };
|
|
6121
|
+
let resolved;
|
|
6122
|
+
try { resolved = nextResolve(specifier, context); }
|
|
6123
|
+
catch (cause) { if (requested?.endsWith(".node")) refuse(requested, cause); throw cause; }
|
|
6124
|
+
const path = resolved.url.startsWith("file:") ? fileURLToPath(resolved.url) : undefined;
|
|
6125
|
+
if (path && Object.keys(refusals).some(root => path === root || path.startsWith(root + "/"))) refuse(path);
|
|
6126
|
+
if (path && bindings[path]) return { url: pathToFileURL(bindings[path]).href, shortCircuit: true };
|
|
6127
|
+
if (path?.endsWith(".node")) refuse(path);
|
|
6128
|
+
return resolved;
|
|
6129
|
+
} });
|
|
6130
|
+
})();
|
|
6100
6131
|
`}async runNodeFile(argv,options,preloads=[]){const target=argv[1];if(!target||target.startsWith("-")){return this.runContainer(argv,options)}const cwd=normalizeAbsolutePath(options.cwd??"/");const targetPath=normalizeAbsolutePath(target.startsWith("/")?target:`${cwd}/${target}`);if(!this.container.vfs.existsSync(targetPath))return this.runContainer(argv,options);const nativePrelude=this.nativeBindingPrelude(options.cwd);if(preloads.length===0&&!nativePrelude&&!options.env?.[BUN_ENVIRONMENT_FLAG]){return this.runNodeContainer(argv,options)}const executablePath=targetPath;const temporaryDirectory=preloads.length>0?cwd:"/tmp/browser-runtime-node-entry";const temporaryPath=`${temporaryDirectory==="/"?"":temporaryDirectory}/${preloads.length>0?".browser-runtime-node-entry-":""}${globalThis.crypto.randomUUID()}.cjs`;const runtimeFiles=this.options.runtimeFiles??this.container.vfs;runtimeFiles.mkdirSync(temporaryDirectory,{recursive:true});runtimeFiles.writeFileSync(temporaryPath,[nativePrelude,`Object.assign(process.env, ${JSON.stringify(options.env??{})});`,`process.argv = ${JSON.stringify(["node",targetPath,...argv.slice(2)])};`,...options.env?.[BUN_ENVIRONMENT_FLAG]?[`require(${JSON.stringify(BUN_GLOBALS_PATH)});`]:[],...preloads.length>0?[preloadLines(preloads)]:[],`require("module")._load(${JSON.stringify(executablePath)}, null, true);`,""].join("\n"));try{return await this.runNodeContainer(["node",temporaryPath],options)}finally{if(runtimeFiles.existsSync(temporaryPath))runtimeFiles.unlinkSync(temporaryPath)}}runNext(argv,options){const cli=this.installedBin("next",normalizeAbsolutePath(options.cwd??"/"));if(!cli)return Promise.resolve({stdout:"",stderr:"next: the project has no next installed to run it.\n",exitCode:1});let args=[...argv];if(args[1]==="dev"){const turbo=args.some(arg=>arg==="--turbopack"||arg==="--turbo");args=args.filter(arg=>arg!=="--turbopack"&&arg!=="--turbo");if(this.nextGeneration(normalizeAbsolutePath(options.cwd??"/"))>=16&&!args.includes("--webpack"))args.push("--webpack");if(turbo)options.onStderr?.("next dev: Turbopack is a native binary the tab cannot run; bundling with webpack.\n")}return cli(args,options)}runVite(argv,options){const cli=this.installedBin("vite",normalizeAbsolutePath(options.cwd??"/"));if(cli)return cli(argv,options);return Promise.resolve({stdout:"",stderr:"vite: the project has no vite installed to run it.\n",exitCode:1})}runContainer(argv,options){const environment=Object.entries({...this.options.preparedEnvironment?.(options.cwd)??Object.entries(this.options.preparedEnvironments??{}).filter(([root2])=>(options.cwd??"/workspace/app")===root2||(options.cwd??"/workspace/app").startsWith(`${root2}/`)).sort((a,b)=>b[0].length-a[0].length)[0]?.[1]??{},...options.env??{}}).filter(([name])=>EXPORTABLE_NAME.test(name)&&!SHELL_OWNED_NAMES.has(name)).map(([name,value])=>`${name}=${renderCommand([value])}`);const command=[...environment,renderCommand(argv)].join(" ");return this.container.run(command,options)}async runNodeContainer(argv,options){if(nodeProcessHostInstalled())options={...options,held:false};options={...options,env:{...this.options.preparedEnvironment?.(options.cwd)??Object.entries(this.options.preparedEnvironments??{}).filter(([root2])=>(options.cwd??"/workspace/app")===root2||(options.cwd??"/workspace/app").startsWith(`${root2}/`)).sort((a,b)=>b[0].length-a[0].length)[0]?.[1]??{},...options.env??{}}};try{await this.rolldown?.prepare(normalizeAbsolutePath(options.cwd??"/"))}catch(error){const stderr=`Rolldown metadata registration failed: ${error instanceof Error?error.message:String(error)}
|
|
6101
6132
|
`;options.onStderr?.(stderr);return{stdout:"",stderr,exitCode:1}}const portsBeforeLaunch=new Set(this.container.serverBridge.getServerPorts());if(!this.container.isolated&&this.nodeFetchDepth===0){this.originalFetch=globalThis.fetch.bind(globalThis);globalThis.fetch=this.loopbackFetch;this.hadOriginalChildProcessExecutor=Reflect.has(globalThis,childProcessExecutorSymbol);this.originalChildProcessExecutor=Reflect.get(globalThis,childProcessExecutorSymbol);const childProcessRunner=this.options.runChildProcessCommand??this.options.runShellCommand;if(childProcessRunner){Reflect.set(globalThis,childProcessExecutorSymbol,{bypass:0,...options.signal?{parentSignal:options.signal}:{},run:async(command,runOptions)=>{const hold2=runOptions.hold??{value:true};this.heldChildren.add(hold2);try{return await childProcessRunner(command,runOptions)}finally{this.heldChildren.delete(hold2)}}})}}const namedToken=options.processToken;const processToken=typeof namedToken==="string"?namedToken:globalThis.crypto.randomUUID();const owner=this.container;const pendingTimers=()=>owner.pendingTimers?.(processToken)??0;const heldBuilds=()=>(Reflect.get(globalThis,"__browserRuntimeHeldWork")?.count??0)+(this.rolldown?.pendingWork??0);const bridgeChildren=()=>Reflect.get(globalThis,childProcessExecutorSymbol)?.pending?.(processToken)??0;const executionController=options.signal?new AbortController:void 0;const stopOnKill=()=>{executionController?.abort();owner.stopProcess?.(processToken)};options.signal?.addEventListener("abort",stopOnKill,{once:true});if(!this.container.isolated)this.nodeFetchDepth+=1;try{let lastOutputAt;const liveStdin=options.stdinStream;let stdinOpen=liveStdin!==void 0;const heldStdin=liveStdin===void 0?void 0:(async function*(){try{for await(const chunk of liveStdin)yield chunk}finally{stdinOpen=false;lastOutputAt=Date.now()}})();const containerOptions=(({signal:_signal,onStdout,onStderr,...rest})=>({...rest,processToken,...heldStdin?{stdinStream:heldStdin}:{},...executionController?{signal:executionController.signal}:{},...onStdout?{onStdout:chunk=>{lastOutputAt=Date.now();onStdout(chunk)}}:{},...onStderr?{onStderr:chunk=>{lastOutputAt=Date.now();onStderr(chunk)}}:{}}))(options);const childProcessBridge=this.container.isolated?void 0:Reflect.get(globalThis,childProcessExecutorSymbol);if(childProcessBridge)childProcessBridge.bypass+=1;const launchedAt=Date.now();const execution=this.runContainer(argv,containerOptions);await nextTask();const portsOwned=()=>owner.processPorts?.(processToken)??this.container.serverBridge.getServerPorts().filter(port2=>!portsBeforeLaunch.has(port2));let ownedPorts=portsOwned();if(options.held!==true)return await execution;const holdSignal=options.signal??new AbortController().signal;if(ownedPorts.length===0){let settled;void execution.then(result2=>{settled=result2});let lastTickAt=Date.now();let quietSince=lastTickAt;while(!holdSignal.aborted){ownedPorts=portsOwned();if(ownedPorts.length>0)break;const now=Date.now();if(now-lastTickAt>150)quietSince=now;lastTickAt=now;const idle=now-Math.max(lastOutputAt??launchedAt,quietSince)>=500;const working=!settled&&stdinOpen||pendingTimers()>0||[...this.heldChildren].some(hold2=>hold2.value)||bridgeChildren()>0||heldBuilds()>0;if(working)quietSince=now;if(settled&&!working&&(liveStdin===void 0||idle))break;if(!settled&&executionController&&!working&&idle){break}await delay(50)}if(ownedPorts.length===0)ownedPorts=portsOwned();if(ownedPorts.length===0){const idleStop2=!settled&&executionController!==void 0&&!holdSignal.aborted;if(!settled)executionController?.abort();const result2=settled??await execution;return holdSignal.aborted?{...result2,exitCode:143}:idleStop2&&result2.exitCode===143?{...result2,exitCode:0}:result2}}while(!holdSignal.aborted&&(owner.processPorts?portsOwned().length>0:ownedPorts.some(port2=>this.container.serverBridge.getServerPorts().includes(port2)))){await delay(50)}if(holdSignal.aborted&&!owner.processPorts){for(const port2 of ownedPorts){if(this.container.serverBridge.getServerPorts().includes(port2)){this.container.serverBridge.unregisterServer(port2)}}}const idleStop=executionController!==void 0&&!holdSignal.aborted;executionController?.abort();const result=await execution;return holdSignal.aborted?{...result,exitCode:143}:idleStop&&result.exitCode===143?{...result,exitCode:0}:result}finally{if(owner.processPorts?.(processToken).length===0)owner.stopProcess?.(processToken);options.signal?.removeEventListener("abort",stopOnKill);if(!this.container.isolated)this.nodeFetchDepth-=1;if(!this.container.isolated&&this.nodeFetchDepth===0){if(this.originalFetch)globalThis.fetch=this.originalFetch;this.originalFetch=void 0;if(this.hadOriginalChildProcessExecutor){Reflect.set(globalThis,childProcessExecutorSymbol,this.originalChildProcessExecutor)}else{Reflect.deleteProperty(globalThis,childProcessExecutorSymbol)}this.hadOriginalChildProcessExecutor=false;this.originalChildProcessExecutor=void 0}}}loopbackFetch=async(input,init)=>{const request=new Request(input,init);const url2=new URL(request.url);const port2=url2.port?Number(url2.port):url2.protocol==="http:"?80:443;const local2=(url2.protocol==="http:"||url2.protocol==="https:")&&(url2.hostname==="127.0.0.1"||url2.hostname==="localhost"||url2.hostname.endsWith(".localhost")||url2.hostname==="[::1]");if(!local2){if(url2.protocol!=="https:")throw new Error("Browser Node external requests require HTTPS.");this.options.authorizeExternalRequest?.(url2);if(!this.originalFetch)throw new Error("Browser fetch is unavailable.");return this.originalFetch(input,init)}if(!this.container.serverBridge.getServerPorts().includes(port2)){const here=globalThis.location;if(here?.host&&url2.host===here.host&&this.originalFetch)return this.originalFetch(input,init);throw new Error(`Virtual loopback port ${port2} is not listening (${url2.href}; this page is ${here?.host??"unknown"}).`)}const headers={};request.headers.forEach((value,name)=>{headers[name]=value});headers.host=url2.host;const body=request.method==="GET"||request.method==="HEAD"?void 0:await request.arrayBuffer();const response=await this.container.serverBridge.handleRequest(port2,request.method,`${url2.pathname}${url2.search}`,headers,body);const responseHeaders=new Headers;for(const[name,value]of Object.entries(response.headers)){for(const item of Array.isArray(value)?value:[value])responseHeaders.append(name,item)}const bodyForbidden=request.method==="HEAD"||[204,205,304].includes(response.statusCode);const responseBody=!bodyForbidden&&response.body?Uint8Array.from(response.body):null;return new Response(responseBody,{status:response.statusCode,statusText:response.statusMessage??"",headers:responseHeaders})}};function nextTask(){return delay(0)}function delay(milliseconds){const nativeSetTimeout=globalThis.__browserRuntimeNativeSetTimeout??globalThis.setTimeout;return new Promise(resolve2=>nativeSetTimeout.call(globalThis,resolve2,milliseconds))}function normalizeAbsolutePath(value){const parts=[];for(const part of`/${value}`.split("/")){if(!part||part===".")continue;if(part==="..")parts.pop();else parts.push(part)}return`/${parts.join("/")}`}function ensureFsAppend(container2){const shim=container2.runtime?.fsShim;if(!shim||typeof shim.writeFileSync!=="function"||typeof shim.appendFileSync==="function")return;const encoder11=new TextEncoder;const bytes2=value=>typeof value==="string"?encoder11.encode(value):value;const appendSync=(path3,data2,options)=>{let existing=new Uint8Array(0);try{existing=bytes2(shim.readFileSync(path3))}catch{}const next2=bytes2(data2);const joined=new Uint8Array(existing.length+next2.length);joined.set(existing);joined.set(next2,existing.length);shim.writeFileSync(path3,joined,options)};shim.appendFileSync=appendSync;shim.appendFile=(path3,data2,optionsOrCallback,callback)=>{const done=typeof optionsOrCallback==="function"?optionsOrCallback:callback;try{appendSync(path3,data2,typeof optionsOrCallback==="function"?void 0:optionsOrCallback);done?.(null)}catch(error){done?.(error)}};if(shim.promises&&typeof shim.promises==="object"){shim.promises.appendFile=async(path3,data2,options)=>appendSync(path3,data2,options)}}function nodePreloads(argv,env){const preloads=[];const take=(words,strip)=>{const kept=[];for(let index2=0;index2<words.length;index2+=1){const word=words[index2];if(word==="--require"||word==="-r"||word==="--import"){const name=words[index2+1];if(name!==void 0){preloads.push(name);index2+=1}continue}const inline=/^--(?:require|import)=(.+)$/u.exec(word);if(inline){preloads.push(inline[1]);continue}if(strip&&!word.startsWith("-")){kept.push(...words.slice(index2));break}kept.push(word)}return kept};const nodeOptions=env.NODE_OPTIONS?.match(/(?:[^\s"]+|"[^"]*")+/gu)?.map(word=>word.replace(/^"|"$/gu,""))??[];take(nodeOptions,false);const[program,...rest]=argv;return{argv:[program,...take(rest,true)],preloads}}function preloadLines(preloads){return preloads.map(name=>`require(${JSON.stringify(name)});`).join("\n")+(preloads.length>0?"\n":"")}function networkProgram(command){const unquote=word=>word.replace(/^(['"])([\s\S]*)\1$/u,"$2");const words=command.trim().split(/\s+/u).map(unquote);let index2=words[0]==="env"?1:0;while(index2<words.length&&/^[A-Za-z_][A-Za-z0-9_]*=/u.test(words[index2]))index2+=1;const executable=words[index2]?.split("/").at(-1)??"node";return/^[A-Za-z0-9._+-]{1,64}$/u.test(executable)?executable:"node"}function programFromCommand(command,executablePath){return networkProgram(executablePath??command)}function programOfPid(pid,runs2,pidOf){for(const[id2,run]of runs2){if(pidOf(String(id2))?.pid===pid)return run.program}return void 0}function inheritedProgram(ppid,runs2,pidOf,processByPid2){const seen=new Set;let current3=ppid;while(current3>0&&!seen.has(current3)){seen.add(current3);const named=programOfPid(current3,runs2,pidOf);if(named)return named;current3=processByPid2(current3)?.ppid??0}return void 0}function owningRun(token,runs2,pidOf,processByPid2){const ids=pidOf(token);if(!ids)return void 0;const runOfPid=pid=>{for(const id2 of runs2.keys())if(pidOf(String(id2))?.pid===pid)return id2;return void 0};const own=runOfPid(ids.pid);if(own!==void 0)return own;const seen=new Set;let current3=ids.ppid;while(current3>0&&!seen.has(current3)){seen.add(current3);const named=runOfPid(current3);if(named!==void 0)return named;current3=processByPid2(current3)?.ppid??0}return void 0}function networkProgramNow(runs2,token,pidOf,processByPid2){const activePrograms=[...new Set([...runs2.values()].map(run=>run.program))];const ids=pidOf(token);if(ids){const own=programOfPid(ids.pid,runs2,pidOf);const program=own??inheritedProgram(ids.ppid,runs2,pidOf,processByPid2);if(program){return{program,attributed:true,activePrograms,...own===void 0?{pid:ids.pid}:{}}}}if(token!==null){const owned2=runs2.get(Number(token));if(owned2)return{program:owned2.program,attributed:true,activePrograms}}let latest;for(const run of runs2.values())if(!latest||run.startedAt>latest.startedAt)latest=run;return{program:latest?.program??"node",attributed:false,activePrograms}}function tabnodeContainerView(container2,vfs2,overrides={}){return new Proxy(container2,{get(target,key){if(key==="vfs")return vfs2;if(key in overrides)return overrides[key];const value=Reflect.get(target,key);return typeof value==="function"?value.bind(target):value}})}var scope3=self;console.log("[boot-trace]",JSON.stringify({event:"worker-module-ready",at:Date.now()}));scope3.addEventListener("error",event=>{const error=event.error;console.error(`[node worker] uncaught: ${event.message} at ${event.filename||"<generated>"}:${event.lineno}:${event.colno}
|
|
6102
6133
|
${error?.stack??"(no stack)"}`)});scope3.addEventListener("unhandledrejection",event=>{const reason=event.reason;console.error(`[node worker] unhandled rejection: ${reason?.stack??String(reason)}`)});var executorSymbol=Symbol.for("@volter/browser-runtime/child-process-executor");var port;var container;var packStore;var packStoreProjectId;async function openStoreReads(grant){const clock=new Int32Array(grant.clock);const before=Atomics.load(clock,STORE_CLOCK_EPOCH);let openedAt=before;const began=Date.now();const opening=openPackReader({navigator:scope3.navigator},grant.projectId,grant.seed,grant.imageLine).then(reader=>{if(reader?.seeded()&&grant.seed)openedAt=grant.seed.epoch;processReader=reader;return reader}).catch(cause=>{console.warn(`This process reads the project's files through their owner: its own reader did not open (${cause instanceof Error?cause.message:String(cause)}).`);return void 0});await Promise.race([opening,new Promise(resolve2=>setTimeout(resolve2,STORE_OPEN_BUDGET_MS))]);console.log(`[boot-trace] ${JSON.stringify({event:"store-open",at:Date.now(),ms:Date.now()-began,opened:processReader!==void 0})}`);return{opening,clock:grant.clock,get openedAt(){return openedAt}}}var STORE_OPEN_BUDGET_MS=1500;function storeReadsFor(filesystem){const active2=container;if(!packStore||!packStoreProjectId||!active2||filesystem!==active2.vfs||!(filesystem instanceof PackedVirtualFS))return{};const store=packStore,projectId=packStoreProjectId;return{storeReads:()=>{if(packStore!==store)return void 0;const clock=store.clock();const seed=store.readerSeed({overlays:true});const imageLine=seed?.packagesImage?store.imageLine():void 0;return{projectId,clock,...seed?{seed}:{},...imageLine?{imageLine}:{}}}}}var storeWriteFailure;function reportStoreWriteFailure(){const failure=storeWriteFailure;if(!failure)return;storeWriteFailure=void 0;throw failure}var packages;var packagesFilesystem;var processReader;var imageBlocked=()=>realmBlockedReads.size===0?void 0:Object.fromEntries([...realmBlockedReads].map(([reader,{ranges,ms:ms2}])=>[reader,{ranges,ms:Math.round(ms2)}]));var releasePackagesOpen;var initializationStarted=false;var workerDisposing=false;var portStreams=new Map;var childInputSupported=false;var releaseProject;var bundler;var threads;var workerOptions={};function configureNodeExecutionWorker(options){workerOptions=options}var toolchain;var invocationPolicy;var invocationFiles;var executionConfiguration;var confinedRuns=new Map;var nodeProcesses=new NodeProcessSupervisor;var rootRuntimeFiles;var programs=new Map;var commandResolver;function routeCommand2(command,cwd){if(!toolchain)return void 0;let argv;try{argv=parseCommandWords(command)}catch{return void 0}const env={};while(argv.length){const assignment=/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/su.exec(argv[0]);if(!assignment)break;env[assignment[1]]=assignment[2];argv.shift()}if(argv[0]==="/usr/bin/env"&&argv.length>1)argv.shift();let name=argv[0];if(name===void 0)return void 0;if(name.startsWith("/")&&!programs.has(name)){const basename2=name.slice(name.lastIndexOf("/")+1);if(programs.has(basename2)){name=basename2;argv[0]=basename2}}const runner2=programs.get(name)??commandResolver?.(name,cwd);return runner2?{argv,runner:runner2,env}:void 0}async function runCommand2(command,options){const links=splitShellChain(command);if(links.length===1)return runOneCommand(command,options);let stdout="";let stderr="";let exitCode=0;for(const link2 of links){if(!chainContinues(link2.operator,exitCode))continue;const result=await runOneCommand(link2.command,options);stdout+=result.stdout;stderr+=result.stderr;exitCode=result.exitCode}return{stdout,stderr,exitCode}}function runOneCommand(command,options){assertWorkerActive();options.signal?.throwIfAborted();const shellLine=shellCommandLine(command);if(shellLine!==void 0){const{executablePath:_shell,...lineOptions}=options;return runCommand2(shellLine,lineOptions)}const routed=routeCommand2(command,options.cwd??"/");if(routed)return routed.runner(routed.argv,{...options,env:{...options.env,...routed.env}});return engineRun(requiredContainer(),command,options)}function engineRun(active2,command,options){const bridge=Reflect.get(globalThis,executorSymbol);if(bridge)bridge.bypass+=1;return active2.run(command,options)}function toolchainContainer(active2){return tabnodeContainerView(active2,active2.vfs,{isolated:true,run:(command,options)=>engineRun(active2,command,options)})}var sharedModuleCache;var moduleCacheAnswers=new Map;var nextModuleCacheRequest=1;function askOwnerModuleCache(message){const id2=nextModuleCacheRequest++;return new Promise((resolve2,reject)=>{moduleCacheAnswers.set(id2,{resolve:resolve2,reject});send({...message,id:id2})})}var ownerModuleCache={link:(key,target)=>askOwnerModuleCache({type:"module-cache-link",key,target}),keep:async(key,code3,target)=>{await askOwnerModuleCache({type:"module-cache-keep",key,code:code3,target})}};function moduleCacheOption(vfs2){const moduleCache=projectModuleCache(vfs2);return moduleCache?{moduleCache}:{}}function projectModuleCache(vfs2){if(invocationFiles&&!packages)return ownerModuleCache;if(!packages||!packagesFilesystem||!(vfs2 instanceof PackedVirtualFS))return void 0;sharedModuleCache??=moduleCacheOver(packages,packagesFilesystem,vfs2);return sharedModuleCache}function installToolchain(active2,options){const moduleCache=projectModuleCache(active2.vfs);toolchain=new TabnodeToolchain(toolchainContainer(active2),{baselineCommands:options.baselineCommands??[],...invocationFiles?{runtimeFiles:invocationFiles.runtimeFiles}:rootRuntimeFiles?{runtimeFiles:rootRuntimeFiles}:{},...options.preparedCompilers?{preparedCompilers:Object.fromEntries(Object.entries(options.preparedCompilers).map(([root2,binding2])=>[root2,{...binding2,url:new URL(binding2.url,scope3.location.href).href}]))}:{},...moduleCache?{moduleCache}:{},...options.browserImports?{browserImports:options.browserImports}:{},...options.defaultVitePort!==void 0?{defaultVitePort:options.defaultVitePort}:{},...options.registryScopes?{registryScopes:options.registryScopes}:{},preparedBinding:cwd=>{const selected=[...new Map([...Object.entries(options.preparedBindings??{}),...preparedBindings])].filter(([root2])=>(cwd??"/workspace/app")===root2||(cwd??"/workspace/app").startsWith(`${root2}/`)).sort((a,b)=>b[0].length-a[0].length)[0];return selected?Object.fromEntries(Object.entries(selected[1]).map(([source,target])=>[`${selected[0]==="/"?"":selected[0]}/${source}`,`${selected[0]==="/"?"":selected[0]}/${target}`])):{}},preparedModuleRefusal:cwd=>{const selected=[...new Map([...Object.entries(options.preparedModuleRefusals??{}),...preparedModuleRefusals])].filter(([root2])=>(cwd??"/workspace/app")===root2||(cwd??"/workspace/app").startsWith(`${root2}/`)).sort((a,b)=>b[0].length-a[0].length)[0];return selected?Object.fromEntries(Object.entries(selected[1]).map(([path3,reason])=>[`${selected[0]==="/"?"":selected[0]}/${path3}`,reason])):{}},preparedEnvironment:cwd=>{const selected=[...new Map([...Object.entries(options.preparedEnvironments??{}),...preparedEnvironments])].filter(([root2])=>(cwd??"/workspace/app")===root2||(cwd??"/workspace/app").startsWith(`${root2}/`)).sort((a,b)=>b[0].length-a[0].length)[0];return selected?.[1]??{}},runShellCommand:runCommand2,runChildProcessCommand:runCommand2,authorizeExternalRequest:()=>void 0});toolchain.register({registerProgram:(name,runner2)=>{programs.set(name,runner2)},registerCommandResolver:resolver=>{commandResolver=resolver}});for(const manager of(options.baselineCommands??[]).filter(manager2=>["yarn","bun","corepack"].includes(manager2)))programs.set(manager,packageManagerAliasRunner(manager,runCommand2))}var suppressFilesystemEvents=false;var importingFilesystemRoot;var activeRuns=new Map;function beginRun(id2,command,extra){console.log(`[boot-trace] ${JSON.stringify({event:"run-start",at:Date.now(),id:id2,program:programFromCommand(command,extra.executablePath)})}`);const{executablePath,...rest}=extra;activeRuns.set(id2,{...rest,program:programFromCommand(command,executablePath),command,startedAt:Date.now()})}function enginePids(){if(!container)return void 0;const engine=container;if(typeof engine.runPid!=="function"||typeof engine.processByPid!=="function")return void 0;return{token:()=>engine.currentProcessToken(),runPid:engine.runPid,processByPid:engine.processByPid}}function attributionNow(){const engine=enginePids();return networkProgramNow(activeRuns,engine?.token()??container?.currentProcessToken()??null,token=>engine?.runPid(token),pid=>engine?.processByPid(pid))}var nextFetchId=1;var pendingFetches=new Map;var responseStreams=new Map;var fetchAbortCleanup=new Map;var fetchActivities=new Map;function pullFetch(id2){const owned2=fetchActivities.get(id2);try{if(owned2)owned2.pulls.push(owned2.activity.hold());send({type:"fetch-pull",id:id2})}catch(cause){owned2?.cancel();throw cause}}var filesystemForwardingScheduled=false;var settleEngineInitialized;var initialized=new Promise((resolve2,reject)=>{settleEngineInitialized={resolve:resolve2,reject}});void initialized.catch(()=>void 0);publishEngineInitialized(initialized);scope3.addEventListener("message",event=>{if(receiveNodeThread(event))return;if(port||event.data.type!=="attach"||!(event.data.port instanceof MessagePort))return;console.log("[boot-trace]",JSON.stringify({event:"worker-attach-received",at:Date.now()}));port=event.data.port;port.addEventListener("message",message=>void receive(message.data));port.start();send({type:"attached"})});async function receive(message){if(message.type==="module-cache-answer"){const waiter=moduleCacheAnswers.get(message.id);moduleCacheAnswers.delete(message.id);if(message.error)waiter?.reject(new Error(message.error));else waiter?.resolve(message.linked);return}try{if(message.type==="dispose"){if(!workerDisposing)await disposeWorker();return}assertWorkerActive();if(message.type==="init-confined"){if(initializationStarted)throw new Error("Browser Node host initialization has already started.");initializationStarted=true;childInputSupported=message.childInputVersion===1;const processRegistry2=new NodeProcessRegistryClient(message.processRegistry);installProcessRegistry(processRegistry2,message.initialProcess);if(processRegistry2.streams)installNativeStreamTransport(processRegistry2.streams);if(message.nodeProcess){if(!message.initialProcess||message.initialProcess.token!=="1"||!processRegistry2.streams){throw new Error("Node process execution requires its admitted run and native stream channel.")}installNodeEntryBridge(message.initialProcess.token,message.nodeProcess)}if(message.filesystemPolicy===void 0&&!message.nodeProcess)throw new Error("An ordinary Node realm requires process admission.");invocationPolicy=message.filesystemPolicy===void 0?void 0:normalizeProcessFilesystemPolicy(message.filesystemPolicy);if(message.preparedFiles&&!message.nodeProcess)throw new Error("Prepared entries require Node process admission.");const files=nodeInvocationFilesystem(message.filesystem,invocationPolicy,message.nodeProcess?{files:message.preparedFiles??[],limits:message.nodeProcess}:void 0,message.storeReads?await openStoreReads(message.storeReads):void 0);invocationFiles=files;container=createContainer({...message.options,vfs:files.guest});installPortForwarding();if(message.bundler)installBundler(container.vfs,message.bundler);threads=installNodeThreadHost(container.vfs,message.bundler,void 0,message.threadLauncher?{launcher:message.threadLauncher,...message.nodeProcess?{prepared:()=>({files:captureNodePreparedFiles(files.runtimeFiles,message.nodeProcess),limits:message.nodeProcess})}:{}}:void 0);installToolchain(container,message.toolchain??{});installNetworkBroker();installChildProcessBridge();restrictNodeWorkerAuthority();send({type:"initialized",id:message.id,filesystemPolicyVersion:1,processRegistryVersion:1,...processRegistry2.streams?{nativeStreamVersion:1}:{},...message.nodeProcess?{nodeProcessVersion:1}:{},...typeof container?.signalProcess==="function"?{signalVersion:1}:{},inputBytesVersion:1,store:{opened:false,index:[]}});return}if(message.type==="init"){if(initializationStarted)throw new Error("Browser Node host initialization has already started.");initializationStarted=true;nodeProcesses.prepareWorkers(scope3.location.href);childInputSupported=message.childInputVersion===1;executionConfiguration={options:message.options,...message.bundler?{bundler:message.bundler}:{},...message.toolchain?{toolchain:message.toolchain}:{}};{const handoff2=takeStoreHandoff();const held=handoff2?.held??await holdProjectStores({projectId:String(message.store.projectId),...message.store.limits?{limits:message.store.limits}:{},report:work=>send({type:"initializing",id:message.id,work}),disposing:()=>workerDisposing});releaseProject=held.releaseProject;releasePackagesOpen=held.releasePackagesOpen;packages=held.shared;installPackageStore(held.shared);const store=held.store;packStore=store;for(const plan of held.preparedPlans??[])preparedProjectPlans.set(plan.root,plan.key);packStoreProjectId=String(message.store.projectId);const opened=held.opened;const{startedAt,phases}=held;const phase=(name,since)=>{phases.push(`${name} ${Math.round(performance.now()-since)} ms`);return performance.now()};const at3=performance.now();container=createContainer({...message.options,vfs:new PackedVirtualFS(store)});for(const entry of handoff2?.overlay??[]){if(entry.type==="directory"){if(!container.vfs.existsSync(entry.path))container.vfs.mkdirSync(entry.path,{recursive:true})}else container.vfs.writeFileSync(entry.path,entry.bytes)}{const active3=container;mountContainerProc(active3.vfs,ownerProcessTable,()=>active3.serverBridge.getServerPorts().map(port2=>{const pid=active3.portPid(port2);return{port:port2,...pid?{pid}:{}}}),()=>active3.streamHandles())}phase("engine",at3);console.log(`[worker] started in ${Math.round(performance.now()-startedAt)} ms: ${phases.join(", ")}`);if(message.toolchain?.typeStripperModuleUrl)await installTypeStripper(new URL(message.toolchain.typeStripperModuleUrl,scope3.location.href).href);webSocketRelay=createVirtualWebSocketRelay(relayed=>send({type:"ws",message:relayed}));if(message.bundler)installBundler(container.vfs,message.bundler);threads=installNodeThreadHost(container.vfs,message.bundler,{projectId:String(message.store.projectId),flush:()=>store.flush()});installFilesystemForwarding(container.vfs);installRootNodeEntryBridge();if(message.toolchain)installToolchain(container,message.toolchain);installNetworkBroker();installChildProcessBridge();const index2=[];let sharedIndex;if(!handoff2){if(message.sharedPageIndexVersion===1){store.clock();const seed=store.readerSeed({current:true});if(seed)sharedIndex={buffer:seed.index,roots:PROJECT_ROOTS,bytes:seed.liveBytes+seed.linkedBytes}}if(!sharedIndex)for(const[path3,entry]of store.entries)index2.push([path3,entry.type,entry.length,entry.mode,entry.mtimeMs])}send({type:"initialized",id:message.id,filesystemPolicyVersion:1,inputBytesVersion:1,store:{opened,index:index2,...sharedIndex?{sharedIndex}:{},treeImport:true,limitsVersion:1,entryReadVersion:1}});settleEngineInitialized?.resolve();return}}if(message.type==="fetch-response-start"){const pending=pendingFetches.get(message.id);if(!pending)return;pendingFetches.delete(message.id);try{const id2=message.id;const body=pending.method==="HEAD"||[204,205,304].includes(message.status)?null:new ReadableStream({start(controller){responseStreams.set(id2,controller)},pull(){pullFetch(id2)},cancel(){responseStreams.delete(id2);fetchAbortCleanup.get(id2)?.();fetchAbortCleanup.delete(id2);try{send({type:"fetch-abort",id:id2})}catch{}}},{highWaterMark:0});fetchActivities.get(id2)?.headersDone();pending.resolve({body,status:message.status,statusText:message.statusText,headers:message.headers});if(body===null)pullFetch(id2)}catch(cause){fetchAbortCleanup.get(message.id)?.();fetchAbortCleanup.delete(message.id);try{send({type:"fetch-abort",id:message.id})}catch{}pending.reject(cause instanceof Error?cause:new Error(String(cause)))}return}if(message.type==="fetch-response-chunk"){fetchActivities.get(message.id)?.pulls.shift()?.();responseStreams.get(message.id)?.enqueue(new Uint8Array(message.body));return}if(message.type==="fetch-response-end"){const stream=responseStreams.get(message.id);responseStreams.delete(message.id);fetchAbortCleanup.get(message.id)?.();fetchAbortCleanup.delete(message.id);stream?.close();return}if(message.type==="fetch-response"||message.type==="fetch-error"){const pending=pendingFetches.get(message.id);if(message.type==="fetch-error"){if(pending){pendingFetches.delete(message.id);pending.reject(new Error(message.error))}const stream=responseStreams.get(message.id);responseStreams.delete(message.id);fetchAbortCleanup.get(message.id)?.();fetchAbortCleanup.delete(message.id);stream?.error(new Error(message.error))}else if(!pending)return;else{pendingFetches.delete(message.id);fetchAbortCleanup.get(message.id)?.();fetchAbortCleanup.delete(message.id);try{pending.resolve({body:pending.method==="HEAD"||[204,205,304].includes(message.status)?null:new ReadableStream({start(controller){controller.enqueue(new Uint8Array(message.body));controller.close()}}),status:message.status,statusText:message.statusText,headers:message.headers})}catch(cause){pending.reject(cause instanceof Error?cause:new Error(String(cause)))}}return}if(message.type==="apply-layers"){try{const result=await applyImageLayers(message.url,message.digest,(parts,total)=>send({type:"applying-layers",id:message.id,parts,total}),message.prepared);send({type:"layers-applied",id:message.id,...result})}catch(cause){send({type:"layers-applied",id:message.id,parts:0,units:0,bytes:0,skipped:false,error:cause instanceof Error?cause.message:String(cause)})}return}if(message.type==="link-program"){try{send({type:"linked-program",id:message.id,...await linkImageProgram(message.source,message.target)})}catch(cause){send({type:"linked-program",id:message.id,linked:false,files:0,error:cause instanceof Error?cause.message:String(cause)})}return}if(message.type==="link-packages"){try{if(!linkPlan)throw new Error("The origin's package store is not open.");const result=await linkPlan(message.root,message.plan,(linked,total,waiting)=>send({type:"linking-packages",id:message.id,linked,total,...waiting?{waiting}:{}}));send({type:"linked-packages",id:message.id,...result})}catch(cause){const described=cause instanceof Error?cause.message?`${cause.name==="Error"?"":`${cause.name}: `}${cause.message}`:cause.name:String(cause);send({type:"linked-packages",id:message.id,linked:0,fetched:0,fromStore:0,error:described})}return}if(message.type==="pack-store-abort"){packStoreOperations.get(message.id)?.abort();return}if(message.type==="pack-store"){const controller=new AbortController;packStoreOperations.set(message.id,controller);try{await answerPackStore(message,controller.signal,{packages,project:packStore,linkShared:(source,target)=>{const vfs2=requiredContainer().vfs;if(!(vfs2 instanceof PackedVirtualFS))throw new Error("The live pack needs the worker's packed filesystem.");vfs2.linkShared(source,target)},send})}finally{packStoreOperations.delete(message.id)}return}if(message.type==="image-file"){const pending=pendingImageFiles.get(message.id);pendingImageFiles.delete(message.id);if(!pending)return;if(message.error!==void 0||message.bytes===void 0)pending.reject(new Error(`The image's file could not be read: ${message.error??"the page answered without it"}`));else pending.resolve({bytes:new Uint8Array(message.bytes),inflated:message.inflated===true});return}if(message.type==="image-pack"){const pending=pendingImagePacks.get(message.id);pendingImagePacks.delete(message.id);if(!pending)return;if(message.error!==void 0||message.text===void 0)pending.reject(new Error(message.error??"the page answered without the pack"));else pending.resolve(message.text);return}if(message.type==="image-packs-expected"){imagePacksKnown??=new Promise(resolve2=>{settleImagePacksKnown=resolve2});return}if(message.type==="image-packs-abandoned"){settleImagePacksKnown?.();imagePacksKnown=settleImagePacksKnown=void 0;return}if(message.type==="image-packs"){try{const packs=readImagePacks(message.keys);settleImagePacksKnown?.();imagePacksKnown=settleImagePacksKnown=void 0;if(message.bodies?.length)await linkPreparedBodies(message.bodies);send({type:"image-packs-read",id:message.id,packs})}catch(cause){send({type:"image-packs-read",id:message.id,packs:0,error:cause instanceof Error?cause.message:String(cause)})}finally{settleImagePacksKnown?.();imagePacksKnown=settleImagePacksKnown=void 0}return}if(message.type==="ws"){webSocketRelay?.receive(message.message);return}if(message.type==="watched-paths"){const vfs2=container?.vfs;const paths=typeof vfs2?.watchedPaths==="function"?vfs2.watchedPaths():vfs2?.watchers?[...vfs2.watchers.entries()].filter(([,entries])=>[...entries].some(entry=>!entry.closed)).map(([path3,entries])=>({path:path3,recursive:[...entries].some(entry=>!entry.closed&&entry.recursive===true)})):[];send({type:"watched-paths",id:message.id,paths});return}if(message.type==="store-stats"){const account=installAccounting();send({type:"store-stats",id:message.id,stats:packStore?{...packStore.stats(),...account?{install:account}:{}}:null});return}if(message.type==="image-startup-set"){send({type:"image-startup-set",id:message.id,ranges:packages?.imageStartupSet()??[]});return}if(message.type==="image-prefetch"){const startedAt=performance.now();const prefetch=packages?.prefetchImage(message.ranges,message.streams)??{queued:0,done:Promise.resolve()};send({type:"image-prefetch",id:message.id,queued:prefetch.queued});if(prefetch.queued>0)void prefetch.done.then(()=>send({type:"image-prefetched",id:message.id,ms:Math.round(performance.now()-startedAt)}));return}if(message.type==="profile-probe"){send({type:"profile-pong",id:message.id});return}if(message.type==="host-ports"){hostPorts=new Set(message.ports.filter(candidate=>Number.isInteger(candidate)&&candidate>0&&candidate<65536));for(const listener of hostPortListeners)listener(hostPorts);return}if(message.type==="listen-net"||message.type==="unlisten-net"||message.type==="net-data"||message.type==="net-end"){handleNetMessage(message);return}if(message.type==="child-input-consumed"){const pending=pendingChildInput.get(message.id);pendingChildInput.delete(message.id);pending?.resolve();return}if(message.type==="child-fd-consumed"){const key=childFdKey(message.id,message.fd);const pending=pendingChildFdInput.get(key);pendingChildFdInput.delete(key);pending?.resolve();return}if(message.type==="child-fd-output"||message.type==="child-fd-close"){const pending=pendingChildren.get(message.id);const descriptor=validChildFd(message.fd)?pending?.descriptors?.[message.fd]:void 0;if(!pending||!descriptor)return;if(message.type==="child-fd-close"){descriptor.end();return}if(!(message.bytes instanceof ArrayBuffer)||message.bytes.byteLength>childChunkBytes){pendingChildren.delete(message.id);try{send({type:"child-abort",id:message.id})}catch{}pending.reject(new Error("Child process descriptor chunks must be at most 64 KiB."));return}descriptor.write(new Uint8Array(message.bytes));return}if(message.type==="child-output"||message.type==="child-result"||message.type==="child-error"){const pending=pendingChildren.get(message.id);if(!pending)return;if(message.type==="child-output"){if(message.stream==="stdout")pending.onStdout?.(message.chunk);else pending.onStderr?.(message.chunk);return}console.log(`[boot-trace] ${JSON.stringify({event:message.type,at:Date.now(),id:message.id,owner:pending.owner})}`);pendingChildren.delete(message.id);if(message.type==="child-error")pending.reject(new Error(message.error));else pending.resolve({stdout:message.stdout,stderr:message.stderr,exitCode:message.exitCode,...message.signal?{signal:message.signal}:{}});return}const active2=requiredContainer();if(message.type==="fs-watch-event"){invocationFiles?.notifyWatch(message.event,message.path);return}if(message.type==="fs-event"){invocationFiles?.notify(message.event,message.path);return}if(message.type==="run"&&message.filesystemPolicy&&!invocationPolicy){if(!executionConfiguration)throw new Error("Confined Node execution has no worker configuration.");const configuration=executionConfiguration;const policy=normalizeProcessFilesystemPolicy(message.filesystemPolicy);const controller=new AbortController;confinedRuns.set(message.id,controller);beginRun(message.id,message.command,{controller,...message.cwd?{cwd:message.cwd}:{},...message.executablePath?{executablePath:message.executablePath}:{}});const liveStdin=message.liveStdin?openLiveStdin(message.id):void 0;const terminal=message.terminal?openTerminal(message.id,message.terminal):void 0;void nodeProcesses.run(message.command,{...message.cwd?{cwd:message.cwd}:{},...message.env?{env:message.env}:{},...message.stdin!==void 0?{stdin:message.stdin}:{},...liveStdin?{stdinStream:liveStdin}:{},...terminal?{terminal}:{},signal:controller.signal,onStdout:chunk=>send({type:"output",id:message.id,stream:"stdout",chunk}),onStderr:chunk=>send({type:"output",id:message.id,stream:"stderr",chunk})},{filesystem:active2.vfs,...storeReadsFor(active2.vfs),policy,workerUrl:scope3.location.href,configuration,serverBridge:active2.serverBridge,net:pageNetHost,hostPorts:hostPortsHost,...moduleCacheOption(active2.vfs),runChild:(command,options,argv)=>requestChild(command,options,message.id,argv),http:request=>brokerHttpOnce(request,{program:programFromCommand(message.command,message.executablePath),attributed:true,activePrograms:[programFromCommand(message.command,message.executablePath)]})}).then(async result=>{await packStore?.flush();flushFilesystemForwarding();sendResult(message.id,result)}).catch(cause=>{flushFilesystemForwarding();sendError(message.id,cause)}).finally(()=>{confinedRuns.delete(message.id);activeRuns.delete(message.id);liveStdins.get(message.id)?.close(true);liveStdins.delete(message.id);terminals.delete(message.id)});return}if(message.type==="run"){const chain=splitShellChain(message.command).length>1;const routed=chain?void 0:routeCommand2(message.command,message.cwd??"/");const controller=new AbortController;beginRun(message.id,message.command,{...controller?{controller}:{},...message.cwd?{cwd:message.cwd}:{},...message.executablePath?{executablePath:message.executablePath}:{}});launchPorts.set(message.id,new Set(vfsServerBridge().getServerPorts()));if(message.interactive)heldRuns.add(message.id);const liveStdin=message.liveStdin?openLiveStdin(message.id):void 0;const terminal=message.terminal?openTerminal(message.id,message.terminal):void 0;const runOptions={...message.cwd?{cwd:message.cwd}:{},...message.env?{env:message.env}:{},...controller?{signal:controller.signal}:{},held:message.interactive,...{processToken:String(message.id)},...message.stdin!==void 0?{stdin:message.stdin}:{},...liveStdin?{stdinStream:liveStdin}:{},...terminal?{terminal}:{},onStdout:chunk=>send({type:"output",id:message.id,stream:"stdout",chunk}),onStderr:chunk=>send({type:"output",id:message.id,stream:"stderr",chunk})};const running=chain?runCommand2(message.command,runOptions):routed?routed.runner(routed.argv,{...runOptions,env:{...runOptions.env,...routed.env}}):engineRun(active2,message.command,runOptions);void running.then(async result=>{console.log(`[boot-trace] ${JSON.stringify({event:"body-return",at:Date.now(),id:message.id,exitCode:result.exitCode,ports:runPorts(message.id),imageBlocked:imageBlocked()})}`);await workSettled(message.id,message.interactive);flushFilesystemForwarding();const aborted=activeRuns.get(message.id)?.controller?.signal.aborted===true;sendResult(message.id,aborted&&result.exitCode===0?{...result,exitCode:143}:result)},cause=>{flushFilesystemForwarding();sendError(message.id,cause)}).finally(()=>{liveStdins.get(message.id)?.close(true);liveStdins.delete(message.id);terminals.delete(message.id);activeRuns.delete(message.id);launchPorts.delete(message.id);heldRuns.delete(message.id)})}else if(message.type==="stdin"){if(message.id!==void 0){const input=liveStdins.get(message.id);if(message.bytes&&input){const id2=message.id;void input.write(new Uint8Array(message.bytes)).then(()=>send({type:"stdin-consumed",id:id2})).catch(cause=>{activeRuns.get(id2)?.controller?.abort(cause);if(!workerDisposing)sendError(id2,cause)})}else if(input)input.push(message.data);else if(message.data!==void 0)active2.sendInput(message.data,String(message.id))}else active2.sendInput(message.data)}else if(message.type==="stdin-end"){liveStdins.get(message.id)?.close();liveStdins.delete(message.id)}else if(message.type==="resize"){terminals.get(message.id)?.resize(message.columns,message.rows)}else if(message.type==="signal"){active2.signalProcess?.(String(message.id),message.signal)}else if(message.type==="abort"){if(heldRuns.has(message.id))closeRunServers(message.id);confinedRuns.get(message.id)?.abort();for(const[childId,child]of pendingChildren){if(child.owner===message.id)send({type:"child-abort",id:childId})}active2.stopProcess?.(String(message.id));liveStdins.get(message.id)?.close(true);liveStdins.delete(message.id);terminals.delete(message.id);activeRuns.get(message.id)?.controller?.abort()}else if(message.type==="fs-apply"){suppressFilesystemEvents=true;try{for(const operation of message.operations){try{applyStoreOperation(active2.vfs,operation)}catch(cause){storeWriteFailure??=cause instanceof Error?cause:new Error(String(cause));const paths=operation.op==="rename"?[operation.from,operation.to]:[operation.path];for(const path3 of paths)queueIndexForwarding(storeEntryOf(active2.vfs,path3));console.error(`The workspace refused ${operation.op} ${paths.join(" -> ")}: ${cause instanceof Error?cause.message:String(cause)}`)}}}finally{suppressFilesystemEvents=false}}else if(message.type==="fs-import"){reportStoreWriteFailure();if(!(active2.vfs instanceof PackedVirtualFS)||!packStore){send({type:"fs-imported",id:message.id,applied:false,changes:[]});return}flushFilesystemForwarding();const root2=normalizeStorePath2(message.tree.root);importingFilesystemRoot=root2;suppressFilesystemEvents=true;let applied;try{applied=active2.vfs.importTree(message.tree)}finally{suppressFilesystemEvents=false;importingFilesystemRoot=void 0}const changes=[];if(applied){changes.push([root2,null]);for(const[path3,entry]of packStore.descendants(root2)){changes.push([path3,entry.type,entry.type==="file"?entry.length:0,entry.mode,entry.mtimeMs])}}send({type:"fs-imported",id:message.id,applied,changes})}else if(message.type==="fs-read"){try{const bytes2=Uint8Array.from(active2.vfs.readFileSync(message.path));const body=bytes2.buffer.slice(bytes2.byteOffset,bytes2.byteOffset+bytes2.byteLength);send({type:"fs-read-result",id:message.id,bytes:body},[body])}catch(cause){sendError(message.id,cause)}}else if(message.type==="fs-entry"){reportStoreWriteFailure();const path3=normalizeStorePath2(message.path);flushFilesystemForwarding();if(!active2.vfs.existsSync(path3)){send({type:"fs-entry-result",id:message.id})}else{const stat2=active2.vfs.statSync(path3);const metadata={path:path3,mode:stat2.mode&4095,mtimeMs:stat2.mtimeMs};if(stat2.isDirectory()){send({type:"fs-entry-result",id:message.id,entry:{...metadata,type:"directory"}})}else{const bytes2=Uint8Array.from(active2.vfs.readFileSync(path3));send({type:"fs-entry-result",id:message.id,entry:{...metadata,type:"file",bytes:bytes2}},[bytes2.buffer])}}}else if(message.type==="fs-flush"){reportStoreWriteFailure();packStore?.flush();send({type:"fs-flushed",id:message.id})}else if(message.type==="port-stream-request"){const stream={abort:new AbortController,pause:()=>void 0,resume:()=>void 0};portStreams.set(message.id,stream);try{const answered=await active2.serverBridge.handleStreamingRequest(message.port,message.method,message.url,message.headers,message.body,{start:(statusCode,statusMessage,headers)=>send({type:"port-stream-head",id:message.id,statusCode,statusMessage,headers}),chunk:chunk=>{const body=Uint8Array.from(chunk).buffer;send({type:"port-stream-chunk",id:message.id,body},[body])},end:()=>send({type:"port-stream-end",id:message.id})},{signal:stream.abort.signal,control:(pause,resume)=>{stream.pause=pause;stream.resume=resume}});if(!answered){send({type:"port-stream-head",id:message.id,statusCode:503,statusMessage:"Service Unavailable",headers:{}});send({type:"port-stream-end",id:message.id})}}finally{portStreams.delete(message.id)}}else if(message.type==="port-stream-control"){const stream=portStreams.get(message.id);if(message.action==="pause")stream?.pause();else if(message.action==="resume")stream?.resume();else stream?.abort.abort()}else if(message.type==="request"){const response=await active2.serverBridge.handleRequest(message.port,message.method,message.url,message.headers,message.body);const bytes2=response.body?Uint8Array.from(response.body):new Uint8Array;const body=bytes2.buffer.slice(bytes2.byteOffset,bytes2.byteOffset+bytes2.byteLength);send({type:"response",id:message.id,statusCode:response.statusCode,statusMessage:response.statusMessage??"",headers:response.headers,body},[body])}}catch(cause){if(message.type==="init")settleEngineInitialized?.reject(cause);if("id"in message&&typeof message.id==="number")sendError(message.id,cause)}}function assertWorkerActive(){if(workerDisposing)throw new Error("Browser Node host is disposed.")}async function disposeWorker(){workerDisposing=true;const reapedProcesses=nodeProcesses.dispose();const failures=[];const release2=operation=>{try{operation()}catch(cause){failures.push(cause)}};for(const controller of confinedRuns.values())release2(()=>controller.abort());confinedRuns.clear();for(const socket of netSockets.values())release2(()=>socket.destroy());netSockets.clear();for(const unlisten of netListeners.values())release2(unlisten);netListeners.clear();netListenerChanges.clear();for(const controller of packStoreOperations.values())controller.abort();packStoreOperations.clear();for(const run of activeRuns.values())release2(()=>run.controller?.abort());for(const input of liveStdins.values())release2(()=>input.close(true));liveStdins.clear();terminals.clear();for(const pending of pendingChildren.values())pending.reject(new Error("Browser Node host was disposed."));pendingChildren.clear();for(const pending of pendingFetches.values())pending.reject(new Error("Browser Node host was disposed."));pendingFetches.clear();for(const stream of responseStreams.values())stream.error(new Error("Browser Node host was disposed."));responseStreams.clear();for(const cleanup of fetchAbortCleanup.values())cleanup();fetchAbortCleanup.clear();await reapedProcesses;release2(()=>threads?.dispose());threads=void 0;try{await toolchain?.dispose()}catch(cause){failures.push(cause)}toolchain=void 0;preparedEnvironments.clear();preparedBindings.clear();preparedModuleRefusals.clear();release2(()=>bundler?.dispose());bundler=void 0;release2(()=>packStore?.close());packStore=void 0;release2(()=>packages?.close());packages=void 0;release2(()=>releasePackagesOpen?.());releasePackagesOpen=void 0;release2(()=>releaseProject?.());releaseProject=void 0;activeRuns.clear();release2(()=>port?.close());if(failures.length)console.error("Browser Node worker cleanup failed.",new AggregateError(failures));scope3.close()}function installBundler(vfs2,options){bundler=new BrowserBundler(vfs2,options);const shim=esbuildShim;shim.setModuleURL(new URL(options.esbuildModuleUrl,scope3.location.href).href);shim.setWasmURL(new URL(options.esbuildWasmUrl,scope3.location.href).href);if(options.rollupModuleUrl)Reflect.set(globalThis,"__browserRuntimeRollupUrl",new URL(options.rollupModuleUrl,scope3.location.href).href);Reflect.set(globalThis,"__browserRuntimeRollupFs",rollupFsOver(requiredContainer().vfs));bundler.prebundle=vitePrebundleAssembler(vfs2,projectModuleCache(vfs2));shim.useHost(bundler)}function normalizeStorePath2(path3){const parts=[];for(const part of path3.split("/")){if(!part||part===".")continue;if(part==="..")parts.pop();else parts.push(part)}return`/${parts.join("/")}`}var installAccount={packages:0,linkedFromStore:0,downloadMs:0,downloadBytes:0,lockWaitMs:0,extractMs:0,extractHelpers:0,applyMs:0,linkMs:0,announceMs:0,sharedFlushes:0,sharedFlushMs:0,elapsedMs:0,lastAt:0};var packStoreOperations=new Map;function installAccounting(){if(installAccount.packages===0)return void 0;const{firstAt,lastAt,...account}=installAccount;return{...account,elapsedMs:firstAt===void 0?0:Math.round(lastAt-firstAt)}}function installPackageStore(shared){const sharedFilesystem=new PackedVirtualFS(shared,PACKAGES_ROOT);packagesFilesystem=sharedFilesystem;const making=new Map;const ensure=async(key,tarballUrl,integrity,pack)=>{try{return await make(key,tarballUrl,integrity,pack)}finally{making.delete(key)}};const make=async(key,tarballUrl,integrity,pack)=>{const startedAt=performance.now();installAccount.firstAt??=startedAt;if(!pack){installTrap({door:"package extraction",subject:`${key} has no pack; the tab would download and extract ${tarballUrl}`,detail:{key,tarball:tarballUrl,...integrity?{integrity}:{}}})}const digest=pack.artifact.digest;const store=livePackStore(shared);let fetched=false;if(!await store.hasTree(digest)){making.set(key,"receiving");const bytes2=await imageFile(pack.url);const actual=`sha256:${[...new Uint8Array(await crypto.subtle.digest("SHA-256",bytes2))].map(byte=>byte.toString(16).padStart(2,"0")).join("")}`;if(actual!==digest||bytes2.byteLength!==pack.artifact.bytes){installTrap({door:"image pack",subject:`${key}'s pack at ${pack.url} is not the artifact the plan names (${bytes2.byteLength} bytes, ${actual}; the plan names ${pack.artifact.bytes} bytes, ${digest})`,detail:{key}})}installAccount.downloadBytes+=bytes2.byteLength;installAccount.downloadMs+=performance.now()-startedAt;making.set(key,"storing");const stagedAt=performance.now();await store.stageArtifact(digest,bytes2,pack.artifact);installAccount.extractMs+=performance.now()-stagedAt;fetched=true}return{home:browserPackExpandedPath(digest),fetched}};const link2=(vfs2,home,path3,fromStore)=>{if(fromStore)installAccount.linkedFromStore+=1;const linkStartedAt=performance.now();const announcedBefore=vfs2.linkTiming.announceMs;vfs2.linkShared(home,path3);installAccount.linkMs+=performance.now()-linkStartedAt;installAccount.announceMs+=vfs2.linkTiming.announceMs-announcedBefore;installAccount.packages+=1;installAccount.lastAt=performance.now()};const hook=async(name,pkg,pkgPath,vfs2)=>{if(!(vfs2 instanceof PackedVirtualFS))return false;const ensured=await ensure(`${name}@${pkg.version}`,pkg.tarballUrl);if(!ensured)return false;link2(vfs2,ensured.home,pkgPath,!ensured.fetched);return true};Reflect.set(globalThis,Symbol.for("@volter/browser-runtime/package-install"),hook);linkPlan=async(root2,plan,progress)=>{const vfs2=requiredContainer().vfs;if(!(vfs2 instanceof PackedVirtualFS))throw new Error("The image's dependency plan needs the worker's store.");preparedBindings.set(root2,{...plan.nativeBindings??{}});preparedModuleRefusals.set(root2,{...plan.moduleRefusals??{}});if(executionConfiguration?.toolchain)executionConfiguration.toolchain.preparedModuleRefusals=Object.fromEntries(new Map([...Object.entries(executionConfiguration.toolchain.preparedModuleRefusals??{}),...preparedModuleRefusals]));if(executionConfiguration?.toolchain)executionConfiguration.toolchain.preparedBindings=Object.fromEntries(new Map([...Object.entries(executionConfiguration.toolchain.preparedBindings??{}),...preparedBindings]));preparedEnvironments.set(root2,{...plan.environment??{}});const at3=path3=>`${root2==="/"?"":root2}/${path3}`;const phases={};let phaseAt=performance.now();const phase=name=>{const now=performance.now();phases[name]=Math.round(now-phaseAt);phaseAt=now};const total=plan.links.length;let linked=0;let fetched=0;let fromStore=0;let lastReported=performance.now();const checkedAt=performance.now();installAccount.firstAt??=checkedAt;const prelinked=plan.key!==void 0&&preparedProjectPlans.get(root2)===plan.key;if(prelinked)preparedProjectPlans.delete(root2);const held=prelinked?new Set:await livePackStore(shared).presentTrees(plan.packages.flatMap(entry=>entry.pack?[entry.pack.artifact.digest]:[]));installAccount.lockWaitMs+=performance.now()-checkedAt;const homes=new Map;const homeOf=index2=>{let pending=homes.get(index2);if(!pending){const entry=plan.packages[index2];const digest=entry.pack?.artifact.digest;if(digest!==void 0&&held.has(digest)){fromStore+=1;pending=Promise.resolve({home:browserPackExpandedPath(digest),fetched:false});homes.set(index2,pending);return pending}pending=ensure(`${entry.name}@${entry.version}`,entry.tarball,entry.integrity,entry.pack).then(ensured=>{if(!ensured)throw new Error(`${entry.name}@${entry.version}: this thread cannot fetch packages into the store.`);if(ensured.fetched)fetched+=1;else fromStore+=1;return ensured});homes.set(index2,pending)}return pending};const links=[...plan.links].sort((left,right)=>depth3(left.path)-depth3(right.path)||left.path.localeCompare(right.path));const platformFits=new Map;const fitsPlatform=(index2,home)=>{let fits=platformFits.get(index2);if(fits!==void 0)return fits;if(plan.packages[index2]?.placed){platformFits.set(index2,true);return true}const prepared=plan.packages[index2]?.linuxX64;if(prepared!==void 0){platformFits.set(index2,prepared);return prepared}fits=true;try{const store=packagesFilesystem&&packagesFilesystem.existsSync(`${home}/package.json`)?packagesFilesystem:vfs2;const manifest=JSON.parse(store.readFileSync(`${home}/package.json`,"utf8"));const allows=(field,value)=>{if(!Array.isArray(field)||field.length===0)return true;const names2=field.filter(item=>typeof item==="string");const denied=names2.filter(name=>name.startsWith("!")).map(name=>name.slice(1));const allowed=names2.filter(name=>!name.startsWith("!"));if(denied.includes(value))return false;return allowed.length===0||allowed.includes(value)};fits=allows(manifest.os,"linux")&&allows(manifest.cpu,"x64")}catch{}platformFits.set(index2,fits);return fits};const place=async entry=>{const{home,fetched:wasFetched}=await homeOf(entry.package);if(!fitsPlatform(entry.package,home)){const stale=at3(entry.path);try{if(vfs2.existsSync(stale))removeTree2(vfs2,stale)}catch{}}else{link2(vfs2,home,at3(entry.path),!wasFetched)}linked+=1;if(performance.now()-lastReported>500){lastReported=performance.now();progress(linked,total)}};const nested=path3=>{const at4=path3.lastIndexOf("node_modules/");const rest=(at4<0?path3:path3.slice(at4+"node_modules/".length)).split("/").filter(Boolean);const nameLength=rest[0]?.startsWith("@")?2:1;return rest.length>nameLength};const first=links.filter(entry=>!nested(entry.path));const later=links.filter(entry=>nested(entry.path));const concurrency=16;let next2=0;let stopped2=false;let linkedAtLastLook=-1;const watch2=setInterval(()=>{if(linked!==linkedAtLastLook){linkedAtLastLook=linked;return}progress(linked,total,[...making].map(([key,stage])=>`${key} ${stage}`))},STALL_REPORT_MS);try{const placed=await Promise.allSettled(Array.from({length:prelinked?0:Math.min(concurrency,first.length)},async()=>{while(!stopped2){const index2=next2++;if(index2>=first.length)return;try{await place(first[index2])}catch(cause){stopped2=true;throw cause}}}));const failures=placed.filter(result=>result.status==="rejected").map(result=>result.reason);if(failures.length===1)throw failures[0];if(failures.length>1)throw new AggregateError(failures,"Package placement failed.");if(prelinked){linked=total;fromStore=new Set(plan.links.filter(entry=>plan.packages[entry.package]?.placed||plan.packages[entry.package]?.linuxX64!==false).map(entry=>entry.package)).size}else for(const entry of later)await place(entry)}finally{clearInterval(watch2)}phase(prelinked?"prelinkedMs":"linksMs");for(const bin of plan.bins){const path3=at3(bin.path);const directory2=path3.slice(0,path3.lastIndexOf("/"));if(!vfs2.existsSync(directory2))vfs2.mkdirSync(directory2,{recursive:true});vfs2.writeFileSync(path3,`node "${at3(bin.target)}" "$@"
|