@ricsam/isolate 0.1.8 → 0.1.10
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/dist/cjs/internal/encoding/index.cjs +27 -4
- package/dist/cjs/internal/encoding/index.cjs.map +3 -3
- package/dist/cjs/internal/fetch/index.cjs +2 -7
- package/dist/cjs/internal/fetch/index.cjs.map +3 -3
- package/dist/cjs/internal/module-loader/bundle.cjs +128 -1
- package/dist/cjs/internal/module-loader/bundle.cjs.map +3 -3
- package/dist/cjs/modules/index.cjs +6 -1
- package/dist/cjs/modules/index.cjs.map +3 -3
- package/dist/cjs/package.json +1 -1
- package/dist/mjs/internal/encoding/index.mjs +27 -4
- package/dist/mjs/internal/encoding/index.mjs.map +3 -3
- package/dist/mjs/internal/fetch/index.mjs +2 -7
- package/dist/mjs/internal/fetch/index.mjs.map +3 -3
- package/dist/mjs/internal/module-loader/bundle.mjs +129 -2
- package/dist/mjs/internal/module-loader/bundle.mjs.map +3 -3
- package/dist/mjs/modules/index.mjs +6 -1
- package/dist/mjs/modules/index.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/package.json +1 -1
|
@@ -103,7 +103,9 @@ function isNodeBuiltin(source) {
|
|
|
103
103
|
return nodeBuiltins.has(topLevel);
|
|
104
104
|
}
|
|
105
105
|
var NODE_BUILTIN_SHIM_PREFIX = "\x00node-builtin-shim:";
|
|
106
|
+
var BROWSER_EMPTY_MODULE_PREFIX = "\x00browser-empty:";
|
|
106
107
|
var HOST_ASYNC_WRAP_PROVIDERS_JSON = JSON.stringify(import_node_async_hooks.asyncWrapProviders);
|
|
108
|
+
var BROWSER_MAPPING_EXTENSIONS = [".tsx", ".jsx", ".ts", ".mjs", ".js", ".cjs", ".json"];
|
|
107
109
|
function getNodeBuiltinShimCode(source) {
|
|
108
110
|
if (source === "ws" || source === "node:ws") {
|
|
109
111
|
return `
|
|
@@ -541,6 +543,130 @@ function pickImportTarget(value, wildcardMatch) {
|
|
|
541
543
|
}
|
|
542
544
|
return null;
|
|
543
545
|
}
|
|
546
|
+
var browserMappingsByPackageRoot = new Map;
|
|
547
|
+
function packageBrowserMappingsPlugin() {
|
|
548
|
+
return {
|
|
549
|
+
name: "package-browser-mappings",
|
|
550
|
+
resolveId(source, importer) {
|
|
551
|
+
if (!importer || importer.startsWith("\x00")) {
|
|
552
|
+
return null;
|
|
553
|
+
}
|
|
554
|
+
const browserMappings = getBrowserMappingsForImporter(importer);
|
|
555
|
+
if (!browserMappings) {
|
|
556
|
+
return null;
|
|
557
|
+
}
|
|
558
|
+
const mappedTarget = resolveBrowserMapping(source, importer, browserMappings);
|
|
559
|
+
if (mappedTarget === undefined) {
|
|
560
|
+
return null;
|
|
561
|
+
}
|
|
562
|
+
if (mappedTarget === false) {
|
|
563
|
+
return `${BROWSER_EMPTY_MODULE_PREFIX}${browserMappings.packageRoot}\x00${source}`;
|
|
564
|
+
}
|
|
565
|
+
if (import_resolve.isBareSpecifier(mappedTarget) || mappedTarget.startsWith("node:")) {
|
|
566
|
+
return this.resolve(mappedTarget, importer, { skipSelf: true }).then((resolved) => resolved ?? { id: mappedTarget });
|
|
567
|
+
}
|
|
568
|
+
return mappedTarget;
|
|
569
|
+
},
|
|
570
|
+
load(id) {
|
|
571
|
+
if (id.startsWith(BROWSER_EMPTY_MODULE_PREFIX)) {
|
|
572
|
+
return `export default {};
|
|
573
|
+
`;
|
|
574
|
+
}
|
|
575
|
+
return null;
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
function getBrowserMappingsForImporter(importer) {
|
|
580
|
+
const packageJsonPath = findNearestPackageJsonPath(importer);
|
|
581
|
+
if (!packageJsonPath) {
|
|
582
|
+
return null;
|
|
583
|
+
}
|
|
584
|
+
const packageRoot = import_node_path.default.dirname(packageJsonPath);
|
|
585
|
+
let cachedMappings = browserMappingsByPackageRoot.get(packageRoot);
|
|
586
|
+
if (cachedMappings === undefined) {
|
|
587
|
+
try {
|
|
588
|
+
const packageJson = JSON.parse(import_node_fs.default.readFileSync(packageJsonPath, "utf-8"));
|
|
589
|
+
const browserField = packageJson.browser;
|
|
590
|
+
cachedMappings = typeof browserField === "object" && browserField !== null && !Array.isArray(browserField) ? Object.fromEntries(Object.entries(browserField).filter((entry) => typeof entry[1] === "string" || entry[1] === false)) : null;
|
|
591
|
+
} catch {
|
|
592
|
+
cachedMappings = null;
|
|
593
|
+
}
|
|
594
|
+
browserMappingsByPackageRoot.set(packageRoot, cachedMappings);
|
|
595
|
+
}
|
|
596
|
+
if (!cachedMappings) {
|
|
597
|
+
return null;
|
|
598
|
+
}
|
|
599
|
+
return { packageRoot, mappings: cachedMappings };
|
|
600
|
+
}
|
|
601
|
+
function resolveBrowserMapping(source, importer, browserMappings) {
|
|
602
|
+
const keysToTry = [];
|
|
603
|
+
if (import_resolve.isBareSpecifier(source) || source.startsWith("node:")) {
|
|
604
|
+
keysToTry.push(source);
|
|
605
|
+
if (source.startsWith("node:")) {
|
|
606
|
+
keysToTry.push(source.slice(5));
|
|
607
|
+
}
|
|
608
|
+
} else {
|
|
609
|
+
const importerDir = import_node_path.default.dirname(importer);
|
|
610
|
+
const unresolvedTarget = source.startsWith("/") ? source : import_node_path.default.resolve(importerDir, source);
|
|
611
|
+
if (unresolvedTarget !== browserMappings.packageRoot && !unresolvedTarget.startsWith(browserMappings.packageRoot + import_node_path.default.sep)) {
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
614
|
+
keysToTry.push(`./${toPosixPath(import_node_path.default.relative(browserMappings.packageRoot, unresolvedTarget))}`);
|
|
615
|
+
const resolvedTarget = import_resolve.resolveFilePath(unresolvedTarget);
|
|
616
|
+
if (resolvedTarget) {
|
|
617
|
+
keysToTry.push(`./${toPosixPath(import_node_path.default.relative(browserMappings.packageRoot, resolvedTarget))}`);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
for (const key of keysToTry) {
|
|
621
|
+
const mappedTarget = browserMappings.mappings[key];
|
|
622
|
+
if (mappedTarget === undefined) {
|
|
623
|
+
continue;
|
|
624
|
+
}
|
|
625
|
+
if (mappedTarget === false) {
|
|
626
|
+
return false;
|
|
627
|
+
}
|
|
628
|
+
if (import_resolve.isBareSpecifier(mappedTarget) || mappedTarget.startsWith("node:")) {
|
|
629
|
+
return mappedTarget;
|
|
630
|
+
}
|
|
631
|
+
const absoluteTarget = mappedTarget.startsWith("/") ? mappedTarget : import_node_path.default.resolve(browserMappings.packageRoot, mappedTarget);
|
|
632
|
+
return resolveBrowserMappingTargetPath(absoluteTarget) ?? absoluteTarget;
|
|
633
|
+
}
|
|
634
|
+
return;
|
|
635
|
+
}
|
|
636
|
+
function findNearestPackageJsonPath(filePath) {
|
|
637
|
+
let currentDir = import_node_path.default.dirname(filePath);
|
|
638
|
+
while (true) {
|
|
639
|
+
const packageJsonPath = import_node_path.default.join(currentDir, "package.json");
|
|
640
|
+
if (import_node_fs.default.existsSync(packageJsonPath)) {
|
|
641
|
+
return packageJsonPath;
|
|
642
|
+
}
|
|
643
|
+
const parentDir = import_node_path.default.dirname(currentDir);
|
|
644
|
+
if (parentDir === currentDir) {
|
|
645
|
+
return null;
|
|
646
|
+
}
|
|
647
|
+
currentDir = parentDir;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
function toPosixPath(filePath) {
|
|
651
|
+
return filePath.split(import_node_path.default.sep).join("/");
|
|
652
|
+
}
|
|
653
|
+
function resolveBrowserMappingTargetPath(basePath) {
|
|
654
|
+
const resolved = import_resolve.resolveFilePath(basePath);
|
|
655
|
+
if (resolved) {
|
|
656
|
+
return resolved;
|
|
657
|
+
}
|
|
658
|
+
if (import_node_path.default.extname(basePath) === ".browser") {
|
|
659
|
+
for (const extension of BROWSER_MAPPING_EXTENSIONS) {
|
|
660
|
+
const candidate = `${basePath}${extension}`;
|
|
661
|
+
try {
|
|
662
|
+
if (import_node_fs.default.statSync(candidate).isFile()) {
|
|
663
|
+
return candidate;
|
|
664
|
+
}
|
|
665
|
+
} catch {}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
return null;
|
|
669
|
+
}
|
|
544
670
|
function getCommonJsNamedExports(specifier, rootDir) {
|
|
545
671
|
const resolvedHostPath = resolvePackageImportPath(specifier, rootDir);
|
|
546
672
|
if (!resolvedHostPath) {
|
|
@@ -651,6 +777,7 @@ async function doBundleSpecifier(specifier, rootDir) {
|
|
|
651
777
|
plugins: [
|
|
652
778
|
packageEntryWrapperPlugin(specifier, namedExports),
|
|
653
779
|
externalizeDepsPlugin(packageName),
|
|
780
|
+
packageBrowserMappingsPlugin(),
|
|
654
781
|
nodeResolve({
|
|
655
782
|
rootDir,
|
|
656
783
|
browser: false,
|
|
@@ -781,4 +908,4 @@ function clearBundleCache() {
|
|
|
781
908
|
bundleCache.clear();
|
|
782
909
|
}
|
|
783
910
|
|
|
784
|
-
//# debugId=
|
|
911
|
+
//# debugId=18A8EE3C3887536664756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/module-loader/bundle.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { asyncWrapProviders as hostAsyncWrapProviders } from \"node:async_hooks\";\nimport { builtinModules, createRequire } from \"node:module\";\nimport { rollup, type Plugin } from \"rollup\";\nimport * as nodeResolveModule from \"@rollup/plugin-node-resolve\";\nimport * as commonjsModule from \"@rollup/plugin-commonjs\";\nimport * as jsonModule from \"@rollup/plugin-json\";\nimport * as replaceModule from \"@rollup/plugin-replace\";\nimport { detectFormat, parseSpecifier } from \"./resolve.cjs\";\nimport { processTypeScript, isTypeScriptFile } from \"./strip-types.cjs\";\nimport type { RollupCommonJSOptions } from \"@rollup/plugin-commonjs\";\nimport type { RollupJsonOptions } from \"@rollup/plugin-json\";\nimport type { RollupReplaceOptions } from \"@rollup/plugin-replace\";\n\n// Handle CJS default exports\nconst nodeResolve = ((nodeResolveModule as any).default ||\n nodeResolveModule) as (typeof nodeResolveModule)[\"nodeResolve\"];\nconst commonjs = ((commonjsModule as any).default || commonjsModule) as (\n options?: RollupCommonJSOptions\n) => Plugin;\nconst json = ((jsonModule as any).default || jsonModule) as (\n options?: RollupJsonOptions\n) => Plugin;\nconst replace = ((replaceModule as any).default || replaceModule) as (\n options?: RollupReplaceOptions\n) => Plugin;\n\nconst commonjsInteropOptions = {\n // External package imports are resolved by later loader calls as ESM bundles,\n // so CommonJS requires need ESM-aware interop instead of default-import assumptions.\n esmExternals: true,\n requireReturnsDefault: \"auto\",\n} satisfies RollupCommonJSOptions;\n\nconst PACKAGE_ENTRY_WRAPPER_PREFIX = \"\\0package-entry-wrapper:\";\nconst INVALID_FUNCTION_EXPORT_NAMES = new Set([\n \"arguments\",\n \"caller\",\n \"length\",\n \"name\",\n \"prototype\",\n]);\n\n/**\n * Set of Node.js built-in module names (e.g. \"fs\", \"path\", \"crypto\").\n */\nconst nodeBuiltins = new Set(builtinModules);\n\n/**\n * Check if a specifier refers to a Node.js built-in module.\n * Handles bare names (\"fs\"), subpaths (\"fs/promises\"), and node: prefix (\"node:fs\").\n */\nfunction isNodeBuiltin(source: string): boolean {\n const name = source.startsWith(\"node:\") ? source.slice(5) : source;\n const topLevel = name.split(\"/\")[0]!;\n return nodeBuiltins.has(topLevel);\n}\n\nconst NODE_BUILTIN_SHIM_PREFIX = \"\\0node-builtin-shim:\";\nconst HOST_ASYNC_WRAP_PROVIDERS_JSON = JSON.stringify(hostAsyncWrapProviders);\n\nexport function getNodeBuiltinShimCode(source: string): string {\n if (source === \"ws\" || source === \"node:ws\") {\n return `\nconst WebSocketShim = globalThis.WebSocket;\n\nif (!WebSocketShim) {\n throw new Error(\"The isolate runtime does not provide a global WebSocket implementation.\");\n}\n\nexport { WebSocketShim as WebSocket };\nexport default WebSocketShim;\n`;\n }\n\n if (source === \"async_hooks\" || source === \"node:async_hooks\") {\n return `\nconst AsyncContextShim = globalThis.AsyncContext;\nconst asyncInternals = globalThis.__isolateAsyncContextInternals;\n\nif (\n !AsyncContextShim\n || !asyncInternals?.AsyncContextFrame\n || typeof asyncInternals.createResource !== \"function\"\n || typeof asyncInternals.runWithResource !== \"function\"\n || typeof asyncInternals.destroyResource !== \"function\"\n || typeof asyncInternals.enableHook !== \"function\"\n || typeof asyncInternals.disableHook !== \"function\"\n) {\n throw new Error(\n \"node:async_hooks requires AsyncContext support in the isolate engine.\"\n );\n}\n\nconst { AsyncContextFrame } = asyncInternals;\nconst NO_STORE = Symbol(\"AsyncLocalStorage.noStore\");\nconst asyncWrapProviders = Object.assign(\n Object.create(null),\n ${HOST_ASYNC_WRAP_PROVIDERS_JSON},\n);\n\nfunction validateHookCallback(name, value) {\n if (value !== undefined && typeof value !== \"function\") {\n throw new TypeError(\"hook.\" + name + \" must be a function\");\n }\n}\n\nclass AsyncHook {\n #callbacks;\n #enabled;\n\n constructor(callbacks) {\n this.#callbacks = callbacks;\n this.#enabled = false;\n }\n\n enable() {\n if (!this.#enabled) {\n this.#enabled = true;\n asyncInternals.enableHook(this, this.#callbacks);\n }\n return this;\n }\n\n disable() {\n if (this.#enabled) {\n this.#enabled = false;\n asyncInternals.disableHook(this);\n }\n return this;\n }\n}\n\nfunction createHook(callbacks) {\n const { init, before, after, destroy, promiseResolve } = callbacks;\n\n validateHookCallback(\"init\", init);\n validateHookCallback(\"before\", before);\n validateHookCallback(\"after\", after);\n validateHookCallback(\"destroy\", destroy);\n validateHookCallback(\"promiseResolve\", promiseResolve);\n\n return new AsyncHook({\n init,\n before,\n after,\n destroy,\n promiseResolve,\n });\n}\n\nfunction executionAsyncId() {\n return asyncInternals.executionAsyncId();\n}\n\nfunction triggerAsyncId() {\n return asyncInternals.triggerAsyncId();\n}\n\nfunction executionAsyncResource() {\n return asyncInternals.executionAsyncResource();\n}\n\nclass AsyncResource {\n #snapshot;\n #resourceState;\n\n constructor(type, options = {}) {\n const normalizedOptions =\n options && typeof options === \"object\" ? options : {};\n\n this.#snapshot = new AsyncContextShim.Snapshot();\n this.#resourceState = asyncInternals.createResource(\n String(type),\n this,\n {\n triggerAsyncId: normalizedOptions.triggerAsyncId,\n },\n );\n }\n\n runInAsyncScope(fn, thisArg, ...args) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"AsyncResource.runInAsyncScope requires a function\");\n }\n return this.#snapshot.run(\n () => asyncInternals.runWithResource(\n this.#resourceState,\n fn,\n thisArg,\n args,\n ),\n );\n }\n\n bind(fn, thisArg) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"AsyncResource.bind requires a function\");\n }\n const resource = this;\n return function bound(...args) {\n return resource.runInAsyncScope(\n fn,\n thisArg === undefined ? this : thisArg,\n ...args,\n );\n };\n }\n\n emitDestroy() {\n if (!asyncInternals.destroyResource(this.#resourceState)) {\n throw new Error(\"AsyncResource.emitDestroy() must only be called once\");\n }\n return this;\n }\n\n asyncId() {\n return this.#resourceState.asyncId;\n }\n\n triggerAsyncId() {\n return this.#resourceState.triggerAsyncId;\n }\n\n static bind(fn, type, thisArg) {\n return new AsyncResource(type).bind(fn, thisArg);\n }\n}\n\nclass AsyncLocalStorage {\n #variable;\n #defaultValue;\n #token;\n #disabled;\n\n constructor(options = {}) {\n const normalizedOptions =\n options && typeof options === \"object\" ? options : {};\n\n this.#defaultValue = normalizedOptions.defaultValue;\n this.#token = Symbol(\"AsyncLocalStorage.token\");\n this.#disabled = false;\n this.#variable = new AsyncContextShim.Variable({\n defaultValue: NO_STORE,\n name: normalizedOptions.name,\n });\n }\n\n get name() {\n return this.#variable.name;\n }\n\n disable() {\n this.#token = Symbol(\"AsyncLocalStorage.token\");\n this.#disabled = true;\n AsyncContextFrame.disable(this.#variable);\n }\n\n enterWith(store) {\n this.#disabled = false;\n AsyncContextFrame.set(\n new AsyncContextFrame(this.#variable, {\n token: this.#token,\n hasValue: true,\n store,\n }),\n );\n }\n\n run(store, callback, ...args) {\n if (typeof callback !== \"function\") {\n throw new TypeError(\"AsyncLocalStorage.run requires a function\");\n }\n this.#disabled = false;\n return this.#variable.run(\n {\n token: this.#token,\n hasValue: true,\n store,\n },\n callback,\n ...args,\n );\n }\n\n exit(callback, ...args) {\n if (typeof callback !== \"function\") {\n throw new TypeError(\"AsyncLocalStorage.exit requires a function\");\n }\n return this.#variable.run(\n {\n token: this.#token,\n hasValue: false,\n store: undefined,\n },\n callback,\n ...args,\n );\n }\n\n getStore() {\n const entry = this.#variable.get();\n if (entry === NO_STORE) {\n return this.#disabled ? undefined : this.#defaultValue;\n }\n if (!entry || entry.token !== this.#token) {\n return undefined;\n }\n if (!entry.hasValue) {\n return undefined;\n }\n return entry.store;\n }\n\n static bind(fn) {\n return AsyncResource.bind(fn, \"AsyncLocalStorage.bind\");\n }\n\n static snapshot() {\n const snapshot = new AsyncContextShim.Snapshot();\n return function runInAsyncScope(fn, ...args) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"AsyncLocalStorage.snapshot requires a function\");\n }\n return snapshot.run(fn, ...args);\n };\n }\n}\n\nexport {\n AsyncLocalStorage,\n AsyncResource,\n asyncWrapProviders,\n createHook,\n executionAsyncId,\n executionAsyncResource,\n triggerAsyncId,\n};\nexport default {\n AsyncLocalStorage,\n AsyncResource,\n asyncWrapProviders,\n createHook,\n executionAsyncId,\n executionAsyncResource,\n triggerAsyncId,\n};\n`;\n }\n\n return \"export default {};\\n\";\n}\n\n/**\n * Rollup plugin that provides empty shims for Node.js built-in modules.\n * Place after nodeResolve — acts as a catch-all for builtins that the\n * package's browser field didn't map to false.\n */\nfunction shimNodeBuiltinsPlugin(): Plugin {\n return {\n name: \"shim-node-builtins\",\n resolveId(source) {\n if (isNodeBuiltin(source)) {\n return { id: `${NODE_BUILTIN_SHIM_PREFIX}${source}`, moduleSideEffects: false };\n }\n return null;\n },\n load(id) {\n if (id.startsWith(NODE_BUILTIN_SHIM_PREFIX)) {\n return getNodeBuiltinShimCode(id.slice(NODE_BUILTIN_SHIM_PREFIX.length));\n }\n return null;\n },\n };\n}\n\nfunction isValidEsmIdentifier(name: string): boolean {\n return /^[$A-Z_a-z][$\\w]*$/.test(name);\n}\n\nfunction resolvePackageImportPath(specifier: string, rootDir: string): string | null {\n const resolver = createRequire(path.join(rootDir, \"__isolate_module_loader__.js\"));\n\n let resolvedRequirePath: string;\n try {\n resolvedRequirePath = resolver.resolve(specifier);\n } catch {\n return null;\n }\n\n const { packageName, subpath } = parseSpecifier(specifier);\n const packageJsonPath = findPackageJsonPath(resolvedRequirePath, packageName);\n if (!packageJsonPath) {\n return resolvedRequirePath;\n }\n\n let packageJson: Record<string, unknown>;\n try {\n packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as Record<string, unknown>;\n } catch {\n return resolvedRequirePath;\n }\n\n const packageRoot = path.dirname(packageJsonPath);\n const exportPath = resolveImportEntryFromPackageJson(packageJson, subpath);\n\n if (exportPath) {\n return path.resolve(packageRoot, exportPath);\n }\n\n if (!subpath) {\n const moduleEntry = packageJson.module;\n if (typeof moduleEntry === \"string\") {\n return path.resolve(packageRoot, moduleEntry);\n }\n\n const browserEntry = packageJson.browser;\n if (typeof browserEntry === \"string\") {\n return path.resolve(packageRoot, browserEntry);\n }\n }\n\n return resolvedRequirePath;\n}\n\nfunction findPackageJsonPath(resolvedPath: string, packageName: string): string | null {\n let currentDir = path.dirname(resolvedPath);\n let matchedPackageJsonPath: string | null = null;\n\n while (true) {\n const packageJsonPath = path.join(currentDir, \"package.json\");\n\n if (fs.existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as { name?: string };\n if (packageJson.name === packageName) {\n // Keep walking upward: published packages often include nested\n // dist/cjs or dist/mjs package.json files with the same name, but the\n // real package root higher up contains the export map we need.\n matchedPackageJsonPath = packageJsonPath;\n }\n } catch {\n // Keep walking upward if a parent package.json is malformed.\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n return matchedPackageJsonPath;\n }\n currentDir = parentDir;\n }\n}\n\nfunction resolveImportEntryFromPackageJson(\n packageJson: Record<string, unknown>,\n subpath: string\n): string | null {\n const exportsField = packageJson.exports;\n if (exportsField === undefined) {\n return null;\n }\n\n const exportKey = subpath ? `.${subpath}` : \".\";\n\n if (isConditionalExportsObject(exportsField)) {\n if (exportKey !== \".\") {\n return null;\n }\n return pickImportTarget(exportsField);\n }\n\n if (typeof exportsField === \"object\" && exportsField !== null && !Array.isArray(exportsField)) {\n const exportsRecord = exportsField as Record<string, unknown>;\n const directTarget = exportsRecord[exportKey];\n if (directTarget !== undefined) {\n return pickImportTarget(directTarget);\n }\n\n for (const [pattern, target] of Object.entries(exportsRecord)) {\n if (!pattern.includes(\"*\")) {\n continue;\n }\n\n const starIndex = pattern.indexOf(\"*\");\n const prefix = pattern.slice(0, starIndex);\n const suffix = pattern.slice(starIndex + 1);\n\n if (!exportKey.startsWith(prefix) || !exportKey.endsWith(suffix)) {\n continue;\n }\n\n const wildcardMatch = exportKey.slice(\n prefix.length,\n suffix.length > 0 ? -suffix.length : undefined,\n );\n\n return pickImportTarget(target, wildcardMatch);\n }\n\n return null;\n }\n\n return exportKey === \".\" ? pickImportTarget(exportsField) : null;\n}\n\nfunction isConditionalExportsObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\"\n && value !== null\n && !Array.isArray(value)\n && Object.keys(value).every((key) => !key.startsWith(\".\"));\n}\n\nfunction pickImportTarget(value: unknown, wildcardMatch?: string): string | null {\n if (typeof value === \"string\") {\n return wildcardMatch === undefined ? value : value.replaceAll(\"*\", wildcardMatch);\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const target = pickImportTarget(item, wildcardMatch);\n if (target) {\n return target;\n }\n }\n return null;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n\n const record = value as Record<string, unknown>;\n\n for (const key of [\"workerd\", \"worker\", \"edge-light\", \"import\", \"module\", \"default\", \"browser\"]) {\n if (key in record) {\n const target = pickImportTarget(record[key], wildcardMatch);\n if (target) {\n return target;\n }\n }\n }\n\n for (const nestedValue of Object.values(record)) {\n const target = pickImportTarget(nestedValue, wildcardMatch);\n if (target) {\n return target;\n }\n }\n\n return null;\n}\n\nfunction getCommonJsNamedExports(specifier: string, rootDir: string): string[] {\n const resolvedHostPath = resolvePackageImportPath(specifier, rootDir);\n if (!resolvedHostPath) {\n return [];\n }\n\n let code: string;\n try {\n code = fs.readFileSync(resolvedHostPath, \"utf-8\");\n } catch {\n return [];\n }\n\n if (detectFormat(resolvedHostPath, code) !== \"cjs\") {\n return [];\n }\n\n let moduleExports: unknown;\n try {\n moduleExports = createRequire(resolvedHostPath)(resolvedHostPath);\n } catch {\n return [];\n }\n\n if (moduleExports == null || (typeof moduleExports !== \"object\" && typeof moduleExports !== \"function\")) {\n return [];\n }\n\n const names = new Set([\n ...Object.keys(moduleExports),\n ...Object.getOwnPropertyNames(moduleExports),\n ]);\n\n names.delete(\"default\");\n names.delete(\"__esModule\");\n\n if (typeof moduleExports === \"function\") {\n for (const name of INVALID_FUNCTION_EXPORT_NAMES) {\n names.delete(name);\n }\n }\n\n return [...names].filter(isValidEsmIdentifier).sort();\n}\n\nfunction packageEntryWrapperPlugin(specifier: string, namedExports: string[]): Plugin {\n const wrapperId = `${PACKAGE_ENTRY_WRAPPER_PREFIX}${specifier}`;\n\n return {\n name: \"package-entry-wrapper\",\n resolveId(source) {\n if (source === wrapperId) {\n return wrapperId;\n }\n return null;\n },\n load(id) {\n if (id !== wrapperId) {\n return null;\n }\n\n const namedExportLines = namedExports.map(\n (name) => `export const ${name} = __packageDefault.${name};`\n );\n\n return [\n `import __packageDefault from ${JSON.stringify(specifier)};`,\n \"export default __packageDefault;\",\n ...namedExportLines,\n ].join(\"\\n\");\n },\n };\n}\n\n/**\n * Cache for bundled npm packages. Key includes specifier + resolution root.\n */\nconst bundleCache = new Map<string, { code: string }>();\n\n/**\n * In-flight bundle promises to avoid duplicate concurrent bundles.\n */\nconst bundlesInFlight = new Map<string, Promise<{ code: string }>>();\n\n/**\n * Create a Rollup plugin that externalizes all bare specifiers that don't\n * belong to the current package. Internal files of the package are inlined;\n * other npm packages remain as import statements.\n */\nfunction externalizeDepsPlugin(currentPackageName: string): Plugin {\n return {\n name: \"externalize-deps\",\n resolveId(source, importer) {\n // Don't externalize the entry point\n if (!importer) return null;\n\n // Don't externalize relative imports (internal to the package)\n if (source.startsWith(\".\") || source.startsWith(\"/\")) return null;\n\n // Keep package-private imports inside the current bundle so Rollup can\n // resolve them through the importing package's `imports` map.\n if (source.startsWith(\"#\")) return null;\n\n // Don't externalize Node.js builtins — let nodeResolve handle them\n // via the package's browser field (e.g. \"fs\": false → empty module)\n if (isNodeBuiltin(source)) return null;\n\n // Check if this is a different npm package\n const { packageName } = parseSpecifier(source);\n if (packageName !== currentPackageName) {\n return { id: source, external: true };\n }\n\n // Same package — let Rollup resolve it normally\n return null;\n },\n };\n}\n\n/**\n * Bundle a bare specifier (npm package) using Rollup.\n *\n * Each unique bare specifier gets its own bundle with:\n * - node-resolve with worker/server-safe export conditions\n * - commonjs conversion\n * - json support\n * - process.env.NODE_ENV replacement\n * - External deps (other npm packages) left as import statements\n *\n * Results are cached permanently (npm packages are static).\n */\nexport async function bundleSpecifier(\n specifier: string,\n rootDir: string\n): Promise<{ code: string }> {\n const cacheKey = `${specifier}\\0${rootDir}`;\n\n // Check cache\n const cached = bundleCache.get(cacheKey);\n if (cached) return cached;\n\n // Check in-flight\n const inFlight = bundlesInFlight.get(cacheKey);\n if (inFlight) return inFlight;\n\n const promise = doBundleSpecifier(specifier, rootDir);\n bundlesInFlight.set(cacheKey, promise);\n\n try {\n const result = await promise;\n bundleCache.set(cacheKey, result);\n return result;\n } finally {\n bundlesInFlight.delete(cacheKey);\n }\n}\n\nasync function doBundleSpecifier(\n specifier: string,\n rootDir: string\n): Promise<{ code: string }> {\n const { packageName } = parseSpecifier(specifier);\n const namedExports = getCommonJsNamedExports(specifier, rootDir);\n const input = namedExports.length > 0\n ? `${PACKAGE_ENTRY_WRAPPER_PREFIX}${specifier}`\n : specifier;\n\n const bundle = await rollup({\n input,\n // Disable tree-shaking: we're creating a virtual module that must faithfully\n // expose all package exports. We can't predict which ones user code will import.\n // Without this, exports like AWS SDK's ConverseStreamOutput (a namespace with\n // a visit() helper that nothing inside the bundle references) get dropped.\n treeshake: false,\n plugins: [\n packageEntryWrapperPlugin(specifier, namedExports),\n externalizeDepsPlugin(packageName),\n nodeResolve({\n rootDir,\n browser: false,\n exportConditions: [\"workerd\", \"worker\", \"edge-light\"],\n }),\n shimNodeBuiltinsPlugin(),\n commonjs(commonjsInteropOptions),\n json(),\n replace({\n preventAssignment: true,\n values: { \"process.env.NODE_ENV\": JSON.stringify(\"development\") },\n }),\n ],\n onwarn: (warning, warn) => {\n if (warning.code === \"CIRCULAR_DEPENDENCY\") return;\n if (warning.code === \"THIS_IS_UNDEFINED\") return;\n if (warning.code === \"UNUSED_EXTERNAL_IMPORT\") return;\n if (warning.code === \"EMPTY_BUNDLE\") return;\n // Suppress warnings about named imports from shimmed Node.js builtins\n if (warning.code === \"MISSING_EXPORT\" && warning.exporter?.startsWith(NODE_BUILTIN_SHIM_PREFIX)) return;\n warn(warning);\n },\n });\n\n const { output } = await bundle.generate({\n format: \"es\",\n sourcemap: \"inline\",\n inlineDynamicImports: true,\n });\n await bundle.close();\n\n const code = output[0]!.code;\n return { code };\n}\n\n/**\n * Create a Rollup plugin that externalizes ALL bare specifiers.\n * Used for module aliases where the host file's relative imports are bundled\n * but npm package dependencies are left as external imports.\n */\nfunction externalizeAllBareSpecifiersPlugin(): Plugin {\n return {\n name: \"externalize-all-bare-specifiers\",\n resolveId(source, importer) {\n if (!importer) return null;\n if (source.startsWith(\".\") || source.startsWith(\"/\")) return null;\n if (source.startsWith(\"#\")) return null;\n // Don't externalize Node.js builtins — let nodeResolve/shim handle them\n if (isNodeBuiltin(source)) return null;\n return { id: source, external: true };\n },\n };\n}\n\n/**\n * Create a Rollup transform plugin that strips TypeScript types.\n */\nfunction stripTypeScriptPlugin(): Plugin {\n return {\n name: \"strip-typescript\",\n transform(code, id) {\n if (isTypeScriptFile(id)) {\n return { code: processTypeScript(code, id), map: null };\n }\n return null;\n },\n };\n}\n\nconst TS_EXTENSIONS = [\".ts\", \".tsx\", \".mts\", \".cts\"];\n\n/**\n * Bundle a host file using Rollup, inlining its relative imports.\n *\n * - Uses the host file path as Rollup input\n * - Externalizes ALL bare specifiers (npm packages)\n * - Strips TypeScript via processTypeScript\n * - Shares the bundleCache/bundlesInFlight (no key collision since file paths start with `/`)\n *\n * Results are cached permanently.\n */\nexport async function bundleHostFile(\n hostFilePath: string,\n): Promise<{ code: string }> {\n const cached = bundleCache.get(hostFilePath);\n if (cached) return cached;\n\n const inFlight = bundlesInFlight.get(hostFilePath);\n if (inFlight) return inFlight;\n\n const promise = doBundleHostFile(hostFilePath);\n bundlesInFlight.set(hostFilePath, promise);\n\n try {\n const result = await promise;\n bundleCache.set(hostFilePath, result);\n return result;\n } finally {\n bundlesInFlight.delete(hostFilePath);\n }\n}\n\nasync function doBundleHostFile(\n hostFilePath: string,\n): Promise<{ code: string }> {\n const rootDir = path.dirname(hostFilePath);\n\n const bundle = await rollup({\n input: hostFilePath,\n treeshake: false,\n plugins: [\n externalizeAllBareSpecifiersPlugin(),\n stripTypeScriptPlugin(),\n nodeResolve({\n rootDir,\n browser: false,\n exportConditions: [\"workerd\", \"worker\", \"edge-light\"],\n extensions: [\".mjs\", \".js\", \".json\", \".node\", ...TS_EXTENSIONS],\n }),\n shimNodeBuiltinsPlugin(),\n commonjs(commonjsInteropOptions),\n json(),\n replace({\n preventAssignment: true,\n values: { \"process.env.NODE_ENV\": JSON.stringify(\"development\") },\n }),\n ],\n onwarn: (warning, warn) => {\n if (warning.code === \"CIRCULAR_DEPENDENCY\") return;\n if (warning.code === \"THIS_IS_UNDEFINED\") return;\n if (warning.code === \"UNUSED_EXTERNAL_IMPORT\") return;\n if (warning.code === \"EMPTY_BUNDLE\") return;\n // Suppress warnings about named imports from shimmed Node.js builtins\n if (warning.code === \"MISSING_EXPORT\" && warning.exporter?.startsWith(NODE_BUILTIN_SHIM_PREFIX)) return;\n warn(warning);\n },\n });\n\n const { output } = await bundle.generate({\n format: \"es\",\n sourcemap: \"inline\",\n inlineDynamicImports: true,\n });\n await bundle.close();\n\n const code = output[0]!.code;\n return { code };\n}\n\n/**\n * Clear the bundle cache. Useful for testing.\n */\nexport function clearBundleCache(): void {\n bundleCache.clear();\n}\n"
|
|
5
|
+
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { asyncWrapProviders as hostAsyncWrapProviders } from \"node:async_hooks\";\nimport { builtinModules, createRequire } from \"node:module\";\nimport { rollup, type Plugin } from \"rollup\";\nimport * as nodeResolveModule from \"@rollup/plugin-node-resolve\";\nimport * as commonjsModule from \"@rollup/plugin-commonjs\";\nimport * as jsonModule from \"@rollup/plugin-json\";\nimport * as replaceModule from \"@rollup/plugin-replace\";\nimport { detectFormat, parseSpecifier, isBareSpecifier, resolveFilePath } from \"./resolve.cjs\";\nimport { processTypeScript, isTypeScriptFile } from \"./strip-types.cjs\";\nimport type { RollupCommonJSOptions } from \"@rollup/plugin-commonjs\";\nimport type { RollupJsonOptions } from \"@rollup/plugin-json\";\nimport type { RollupReplaceOptions } from \"@rollup/plugin-replace\";\n\n// Handle CJS default exports\nconst nodeResolve = ((nodeResolveModule as any).default ||\n nodeResolveModule) as (typeof nodeResolveModule)[\"nodeResolve\"];\nconst commonjs = ((commonjsModule as any).default || commonjsModule) as (\n options?: RollupCommonJSOptions\n) => Plugin;\nconst json = ((jsonModule as any).default || jsonModule) as (\n options?: RollupJsonOptions\n) => Plugin;\nconst replace = ((replaceModule as any).default || replaceModule) as (\n options?: RollupReplaceOptions\n) => Plugin;\n\nconst commonjsInteropOptions = {\n // External package imports are resolved by later loader calls as ESM bundles,\n // so CommonJS requires need ESM-aware interop instead of default-import assumptions.\n esmExternals: true,\n requireReturnsDefault: \"auto\",\n} satisfies RollupCommonJSOptions;\n\nconst PACKAGE_ENTRY_WRAPPER_PREFIX = \"\\0package-entry-wrapper:\";\nconst INVALID_FUNCTION_EXPORT_NAMES = new Set([\n \"arguments\",\n \"caller\",\n \"length\",\n \"name\",\n \"prototype\",\n]);\n\n/**\n * Set of Node.js built-in module names (e.g. \"fs\", \"path\", \"crypto\").\n */\nconst nodeBuiltins = new Set(builtinModules);\n\n/**\n * Check if a specifier refers to a Node.js built-in module.\n * Handles bare names (\"fs\"), subpaths (\"fs/promises\"), and node: prefix (\"node:fs\").\n */\nfunction isNodeBuiltin(source: string): boolean {\n const name = source.startsWith(\"node:\") ? source.slice(5) : source;\n const topLevel = name.split(\"/\")[0]!;\n return nodeBuiltins.has(topLevel);\n}\n\nconst NODE_BUILTIN_SHIM_PREFIX = \"\\0node-builtin-shim:\";\nconst BROWSER_EMPTY_MODULE_PREFIX = \"\\0browser-empty:\";\nconst HOST_ASYNC_WRAP_PROVIDERS_JSON = JSON.stringify(hostAsyncWrapProviders);\nconst BROWSER_MAPPING_EXTENSIONS = [\".tsx\", \".jsx\", \".ts\", \".mjs\", \".js\", \".cjs\", \".json\"];\n\nexport function getNodeBuiltinShimCode(source: string): string {\n if (source === \"ws\" || source === \"node:ws\") {\n return `\nconst WebSocketShim = globalThis.WebSocket;\n\nif (!WebSocketShim) {\n throw new Error(\"The isolate runtime does not provide a global WebSocket implementation.\");\n}\n\nexport { WebSocketShim as WebSocket };\nexport default WebSocketShim;\n`;\n }\n\n if (source === \"async_hooks\" || source === \"node:async_hooks\") {\n return `\nconst AsyncContextShim = globalThis.AsyncContext;\nconst asyncInternals = globalThis.__isolateAsyncContextInternals;\n\nif (\n !AsyncContextShim\n || !asyncInternals?.AsyncContextFrame\n || typeof asyncInternals.createResource !== \"function\"\n || typeof asyncInternals.runWithResource !== \"function\"\n || typeof asyncInternals.destroyResource !== \"function\"\n || typeof asyncInternals.enableHook !== \"function\"\n || typeof asyncInternals.disableHook !== \"function\"\n) {\n throw new Error(\n \"node:async_hooks requires AsyncContext support in the isolate engine.\"\n );\n}\n\nconst { AsyncContextFrame } = asyncInternals;\nconst NO_STORE = Symbol(\"AsyncLocalStorage.noStore\");\nconst asyncWrapProviders = Object.assign(\n Object.create(null),\n ${HOST_ASYNC_WRAP_PROVIDERS_JSON},\n);\n\nfunction validateHookCallback(name, value) {\n if (value !== undefined && typeof value !== \"function\") {\n throw new TypeError(\"hook.\" + name + \" must be a function\");\n }\n}\n\nclass AsyncHook {\n #callbacks;\n #enabled;\n\n constructor(callbacks) {\n this.#callbacks = callbacks;\n this.#enabled = false;\n }\n\n enable() {\n if (!this.#enabled) {\n this.#enabled = true;\n asyncInternals.enableHook(this, this.#callbacks);\n }\n return this;\n }\n\n disable() {\n if (this.#enabled) {\n this.#enabled = false;\n asyncInternals.disableHook(this);\n }\n return this;\n }\n}\n\nfunction createHook(callbacks) {\n const { init, before, after, destroy, promiseResolve } = callbacks;\n\n validateHookCallback(\"init\", init);\n validateHookCallback(\"before\", before);\n validateHookCallback(\"after\", after);\n validateHookCallback(\"destroy\", destroy);\n validateHookCallback(\"promiseResolve\", promiseResolve);\n\n return new AsyncHook({\n init,\n before,\n after,\n destroy,\n promiseResolve,\n });\n}\n\nfunction executionAsyncId() {\n return asyncInternals.executionAsyncId();\n}\n\nfunction triggerAsyncId() {\n return asyncInternals.triggerAsyncId();\n}\n\nfunction executionAsyncResource() {\n return asyncInternals.executionAsyncResource();\n}\n\nclass AsyncResource {\n #snapshot;\n #resourceState;\n\n constructor(type, options = {}) {\n const normalizedOptions =\n options && typeof options === \"object\" ? options : {};\n\n this.#snapshot = new AsyncContextShim.Snapshot();\n this.#resourceState = asyncInternals.createResource(\n String(type),\n this,\n {\n triggerAsyncId: normalizedOptions.triggerAsyncId,\n },\n );\n }\n\n runInAsyncScope(fn, thisArg, ...args) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"AsyncResource.runInAsyncScope requires a function\");\n }\n return this.#snapshot.run(\n () => asyncInternals.runWithResource(\n this.#resourceState,\n fn,\n thisArg,\n args,\n ),\n );\n }\n\n bind(fn, thisArg) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"AsyncResource.bind requires a function\");\n }\n const resource = this;\n return function bound(...args) {\n return resource.runInAsyncScope(\n fn,\n thisArg === undefined ? this : thisArg,\n ...args,\n );\n };\n }\n\n emitDestroy() {\n if (!asyncInternals.destroyResource(this.#resourceState)) {\n throw new Error(\"AsyncResource.emitDestroy() must only be called once\");\n }\n return this;\n }\n\n asyncId() {\n return this.#resourceState.asyncId;\n }\n\n triggerAsyncId() {\n return this.#resourceState.triggerAsyncId;\n }\n\n static bind(fn, type, thisArg) {\n return new AsyncResource(type).bind(fn, thisArg);\n }\n}\n\nclass AsyncLocalStorage {\n #variable;\n #defaultValue;\n #token;\n #disabled;\n\n constructor(options = {}) {\n const normalizedOptions =\n options && typeof options === \"object\" ? options : {};\n\n this.#defaultValue = normalizedOptions.defaultValue;\n this.#token = Symbol(\"AsyncLocalStorage.token\");\n this.#disabled = false;\n this.#variable = new AsyncContextShim.Variable({\n defaultValue: NO_STORE,\n name: normalizedOptions.name,\n });\n }\n\n get name() {\n return this.#variable.name;\n }\n\n disable() {\n this.#token = Symbol(\"AsyncLocalStorage.token\");\n this.#disabled = true;\n AsyncContextFrame.disable(this.#variable);\n }\n\n enterWith(store) {\n this.#disabled = false;\n AsyncContextFrame.set(\n new AsyncContextFrame(this.#variable, {\n token: this.#token,\n hasValue: true,\n store,\n }),\n );\n }\n\n run(store, callback, ...args) {\n if (typeof callback !== \"function\") {\n throw new TypeError(\"AsyncLocalStorage.run requires a function\");\n }\n this.#disabled = false;\n return this.#variable.run(\n {\n token: this.#token,\n hasValue: true,\n store,\n },\n callback,\n ...args,\n );\n }\n\n exit(callback, ...args) {\n if (typeof callback !== \"function\") {\n throw new TypeError(\"AsyncLocalStorage.exit requires a function\");\n }\n return this.#variable.run(\n {\n token: this.#token,\n hasValue: false,\n store: undefined,\n },\n callback,\n ...args,\n );\n }\n\n getStore() {\n const entry = this.#variable.get();\n if (entry === NO_STORE) {\n return this.#disabled ? undefined : this.#defaultValue;\n }\n if (!entry || entry.token !== this.#token) {\n return undefined;\n }\n if (!entry.hasValue) {\n return undefined;\n }\n return entry.store;\n }\n\n static bind(fn) {\n return AsyncResource.bind(fn, \"AsyncLocalStorage.bind\");\n }\n\n static snapshot() {\n const snapshot = new AsyncContextShim.Snapshot();\n return function runInAsyncScope(fn, ...args) {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"AsyncLocalStorage.snapshot requires a function\");\n }\n return snapshot.run(fn, ...args);\n };\n }\n}\n\nexport {\n AsyncLocalStorage,\n AsyncResource,\n asyncWrapProviders,\n createHook,\n executionAsyncId,\n executionAsyncResource,\n triggerAsyncId,\n};\nexport default {\n AsyncLocalStorage,\n AsyncResource,\n asyncWrapProviders,\n createHook,\n executionAsyncId,\n executionAsyncResource,\n triggerAsyncId,\n};\n`;\n }\n\n return \"export default {};\\n\";\n}\n\n/**\n * Rollup plugin that provides empty shims for Node.js built-in modules.\n * Place after nodeResolve — acts as a catch-all for builtins that the\n * package's browser field didn't map to false.\n */\nfunction shimNodeBuiltinsPlugin(): Plugin {\n return {\n name: \"shim-node-builtins\",\n resolveId(source) {\n if (isNodeBuiltin(source)) {\n return { id: `${NODE_BUILTIN_SHIM_PREFIX}${source}`, moduleSideEffects: false };\n }\n return null;\n },\n load(id) {\n if (id.startsWith(NODE_BUILTIN_SHIM_PREFIX)) {\n return getNodeBuiltinShimCode(id.slice(NODE_BUILTIN_SHIM_PREFIX.length));\n }\n return null;\n },\n };\n}\n\nfunction isValidEsmIdentifier(name: string): boolean {\n return /^[$A-Z_a-z][$\\w]*$/.test(name);\n}\n\nfunction resolvePackageImportPath(specifier: string, rootDir: string): string | null {\n const resolver = createRequire(path.join(rootDir, \"__isolate_module_loader__.js\"));\n\n let resolvedRequirePath: string;\n try {\n resolvedRequirePath = resolver.resolve(specifier);\n } catch {\n return null;\n }\n\n const { packageName, subpath } = parseSpecifier(specifier);\n const packageJsonPath = findPackageJsonPath(resolvedRequirePath, packageName);\n if (!packageJsonPath) {\n return resolvedRequirePath;\n }\n\n let packageJson: Record<string, unknown>;\n try {\n packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as Record<string, unknown>;\n } catch {\n return resolvedRequirePath;\n }\n\n const packageRoot = path.dirname(packageJsonPath);\n const exportPath = resolveImportEntryFromPackageJson(packageJson, subpath);\n\n if (exportPath) {\n return path.resolve(packageRoot, exportPath);\n }\n\n if (!subpath) {\n const moduleEntry = packageJson.module;\n if (typeof moduleEntry === \"string\") {\n return path.resolve(packageRoot, moduleEntry);\n }\n\n const browserEntry = packageJson.browser;\n if (typeof browserEntry === \"string\") {\n return path.resolve(packageRoot, browserEntry);\n }\n }\n\n return resolvedRequirePath;\n}\n\nfunction findPackageJsonPath(resolvedPath: string, packageName: string): string | null {\n let currentDir = path.dirname(resolvedPath);\n let matchedPackageJsonPath: string | null = null;\n\n while (true) {\n const packageJsonPath = path.join(currentDir, \"package.json\");\n\n if (fs.existsSync(packageJsonPath)) {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as { name?: string };\n if (packageJson.name === packageName) {\n // Keep walking upward: published packages often include nested\n // dist/cjs or dist/mjs package.json files with the same name, but the\n // real package root higher up contains the export map we need.\n matchedPackageJsonPath = packageJsonPath;\n }\n } catch {\n // Keep walking upward if a parent package.json is malformed.\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n return matchedPackageJsonPath;\n }\n currentDir = parentDir;\n }\n}\n\nfunction resolveImportEntryFromPackageJson(\n packageJson: Record<string, unknown>,\n subpath: string\n): string | null {\n const exportsField = packageJson.exports;\n if (exportsField === undefined) {\n return null;\n }\n\n const exportKey = subpath ? `.${subpath}` : \".\";\n\n if (isConditionalExportsObject(exportsField)) {\n if (exportKey !== \".\") {\n return null;\n }\n return pickImportTarget(exportsField);\n }\n\n if (typeof exportsField === \"object\" && exportsField !== null && !Array.isArray(exportsField)) {\n const exportsRecord = exportsField as Record<string, unknown>;\n const directTarget = exportsRecord[exportKey];\n if (directTarget !== undefined) {\n return pickImportTarget(directTarget);\n }\n\n for (const [pattern, target] of Object.entries(exportsRecord)) {\n if (!pattern.includes(\"*\")) {\n continue;\n }\n\n const starIndex = pattern.indexOf(\"*\");\n const prefix = pattern.slice(0, starIndex);\n const suffix = pattern.slice(starIndex + 1);\n\n if (!exportKey.startsWith(prefix) || !exportKey.endsWith(suffix)) {\n continue;\n }\n\n const wildcardMatch = exportKey.slice(\n prefix.length,\n suffix.length > 0 ? -suffix.length : undefined,\n );\n\n return pickImportTarget(target, wildcardMatch);\n }\n\n return null;\n }\n\n return exportKey === \".\" ? pickImportTarget(exportsField) : null;\n}\n\nfunction isConditionalExportsObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\"\n && value !== null\n && !Array.isArray(value)\n && Object.keys(value).every((key) => !key.startsWith(\".\"));\n}\n\nfunction pickImportTarget(value: unknown, wildcardMatch?: string): string | null {\n if (typeof value === \"string\") {\n return wildcardMatch === undefined ? value : value.replaceAll(\"*\", wildcardMatch);\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const target = pickImportTarget(item, wildcardMatch);\n if (target) {\n return target;\n }\n }\n return null;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n\n const record = value as Record<string, unknown>;\n\n for (const key of [\"workerd\", \"worker\", \"edge-light\", \"import\", \"module\", \"default\", \"browser\"]) {\n if (key in record) {\n const target = pickImportTarget(record[key], wildcardMatch);\n if (target) {\n return target;\n }\n }\n }\n\n for (const nestedValue of Object.values(record)) {\n const target = pickImportTarget(nestedValue, wildcardMatch);\n if (target) {\n return target;\n }\n }\n\n return null;\n}\n\nconst browserMappingsByPackageRoot = new Map<string, Record<string, string | false> | null>();\n\nfunction packageBrowserMappingsPlugin(): Plugin {\n return {\n name: \"package-browser-mappings\",\n resolveId(source, importer) {\n if (!importer || importer.startsWith(\"\\0\")) {\n return null;\n }\n\n const browserMappings = getBrowserMappingsForImporter(importer);\n if (!browserMappings) {\n return null;\n }\n\n const mappedTarget = resolveBrowserMapping(source, importer, browserMappings);\n if (mappedTarget === undefined) {\n return null;\n }\n\n if (mappedTarget === false) {\n return `${BROWSER_EMPTY_MODULE_PREFIX}${browserMappings.packageRoot}\\0${source}`;\n }\n\n if (isBareSpecifier(mappedTarget) || mappedTarget.startsWith(\"node:\")) {\n return this.resolve(mappedTarget, importer, { skipSelf: true }).then(\n (resolved) => resolved ?? { id: mappedTarget },\n );\n }\n\n return mappedTarget;\n },\n load(id) {\n if (id.startsWith(BROWSER_EMPTY_MODULE_PREFIX)) {\n return \"export default {};\\n\";\n }\n return null;\n },\n };\n}\n\nfunction getBrowserMappingsForImporter(importer: string): {\n packageRoot: string;\n mappings: Record<string, string | false>;\n} | null {\n const packageJsonPath = findNearestPackageJsonPath(importer);\n if (!packageJsonPath) {\n return null;\n }\n\n const packageRoot = path.dirname(packageJsonPath);\n let cachedMappings = browserMappingsByPackageRoot.get(packageRoot);\n if (cachedMappings === undefined) {\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\")) as { browser?: unknown };\n const browserField = packageJson.browser;\n cachedMappings = typeof browserField === \"object\" && browserField !== null && !Array.isArray(browserField)\n ? Object.fromEntries(\n Object.entries(browserField)\n .filter((entry): entry is [string, string | false] => typeof entry[1] === \"string\" || entry[1] === false),\n )\n : null;\n } catch {\n cachedMappings = null;\n }\n browserMappingsByPackageRoot.set(packageRoot, cachedMappings);\n }\n\n if (!cachedMappings) {\n return null;\n }\n\n return { packageRoot, mappings: cachedMappings };\n}\n\nfunction resolveBrowserMapping(\n source: string,\n importer: string,\n browserMappings: { packageRoot: string; mappings: Record<string, string | false> },\n): string | false | undefined {\n const keysToTry: string[] = [];\n\n if (isBareSpecifier(source) || source.startsWith(\"node:\")) {\n keysToTry.push(source);\n if (source.startsWith(\"node:\")) {\n keysToTry.push(source.slice(5));\n }\n } else {\n const importerDir = path.dirname(importer);\n const unresolvedTarget = source.startsWith(\"/\")\n ? source\n : path.resolve(importerDir, source);\n\n if (unresolvedTarget !== browserMappings.packageRoot\n && !unresolvedTarget.startsWith(browserMappings.packageRoot + path.sep)) {\n return undefined;\n }\n\n keysToTry.push(`./${toPosixPath(path.relative(browserMappings.packageRoot, unresolvedTarget))}`);\n\n const resolvedTarget = resolveFilePath(unresolvedTarget);\n if (resolvedTarget) {\n keysToTry.push(`./${toPosixPath(path.relative(browserMappings.packageRoot, resolvedTarget))}`);\n }\n }\n\n for (const key of keysToTry) {\n const mappedTarget = browserMappings.mappings[key];\n if (mappedTarget === undefined) {\n continue;\n }\n\n if (mappedTarget === false) {\n return false;\n }\n\n if (isBareSpecifier(mappedTarget) || mappedTarget.startsWith(\"node:\")) {\n return mappedTarget;\n }\n\n const absoluteTarget = mappedTarget.startsWith(\"/\")\n ? mappedTarget\n : path.resolve(browserMappings.packageRoot, mappedTarget);\n return resolveBrowserMappingTargetPath(absoluteTarget) ?? absoluteTarget;\n }\n\n return undefined;\n}\n\nfunction findNearestPackageJsonPath(filePath: string): string | null {\n let currentDir = path.dirname(filePath);\n\n while (true) {\n const packageJsonPath = path.join(currentDir, \"package.json\");\n if (fs.existsSync(packageJsonPath)) {\n return packageJsonPath;\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) {\n return null;\n }\n currentDir = parentDir;\n }\n}\n\nfunction toPosixPath(filePath: string): string {\n return filePath.split(path.sep).join(\"/\");\n}\n\nfunction resolveBrowserMappingTargetPath(basePath: string): string | null {\n const resolved = resolveFilePath(basePath);\n if (resolved) {\n return resolved;\n }\n\n if (path.extname(basePath) === \".browser\") {\n for (const extension of BROWSER_MAPPING_EXTENSIONS) {\n const candidate = `${basePath}${extension}`;\n try {\n if (fs.statSync(candidate).isFile()) {\n return candidate;\n }\n } catch {\n // Try the next extension.\n }\n }\n }\n\n return null;\n}\n\nfunction getCommonJsNamedExports(specifier: string, rootDir: string): string[] {\n const resolvedHostPath = resolvePackageImportPath(specifier, rootDir);\n if (!resolvedHostPath) {\n return [];\n }\n\n let code: string;\n try {\n code = fs.readFileSync(resolvedHostPath, \"utf-8\");\n } catch {\n return [];\n }\n\n if (detectFormat(resolvedHostPath, code) !== \"cjs\") {\n return [];\n }\n\n let moduleExports: unknown;\n try {\n moduleExports = createRequire(resolvedHostPath)(resolvedHostPath);\n } catch {\n return [];\n }\n\n if (moduleExports == null || (typeof moduleExports !== \"object\" && typeof moduleExports !== \"function\")) {\n return [];\n }\n\n const names = new Set([\n ...Object.keys(moduleExports),\n ...Object.getOwnPropertyNames(moduleExports),\n ]);\n\n names.delete(\"default\");\n names.delete(\"__esModule\");\n\n if (typeof moduleExports === \"function\") {\n for (const name of INVALID_FUNCTION_EXPORT_NAMES) {\n names.delete(name);\n }\n }\n\n return [...names].filter(isValidEsmIdentifier).sort();\n}\n\nfunction packageEntryWrapperPlugin(specifier: string, namedExports: string[]): Plugin {\n const wrapperId = `${PACKAGE_ENTRY_WRAPPER_PREFIX}${specifier}`;\n\n return {\n name: \"package-entry-wrapper\",\n resolveId(source) {\n if (source === wrapperId) {\n return wrapperId;\n }\n return null;\n },\n load(id) {\n if (id !== wrapperId) {\n return null;\n }\n\n const namedExportLines = namedExports.map(\n (name) => `export const ${name} = __packageDefault.${name};`\n );\n\n return [\n `import __packageDefault from ${JSON.stringify(specifier)};`,\n \"export default __packageDefault;\",\n ...namedExportLines,\n ].join(\"\\n\");\n },\n };\n}\n\n/**\n * Cache for bundled npm packages. Key includes specifier + resolution root.\n */\nconst bundleCache = new Map<string, { code: string }>();\n\n/**\n * In-flight bundle promises to avoid duplicate concurrent bundles.\n */\nconst bundlesInFlight = new Map<string, Promise<{ code: string }>>();\n\n/**\n * Create a Rollup plugin that externalizes all bare specifiers that don't\n * belong to the current package. Internal files of the package are inlined;\n * other npm packages remain as import statements.\n */\nfunction externalizeDepsPlugin(currentPackageName: string): Plugin {\n return {\n name: \"externalize-deps\",\n resolveId(source, importer) {\n // Don't externalize the entry point\n if (!importer) return null;\n\n // Don't externalize relative imports (internal to the package)\n if (source.startsWith(\".\") || source.startsWith(\"/\")) return null;\n\n // Keep package-private imports inside the current bundle so Rollup can\n // resolve them through the importing package's `imports` map.\n if (source.startsWith(\"#\")) return null;\n\n // Don't externalize Node.js builtins — let nodeResolve handle them\n // via the package's browser field (e.g. \"fs\": false → empty module)\n if (isNodeBuiltin(source)) return null;\n\n // Check if this is a different npm package\n const { packageName } = parseSpecifier(source);\n if (packageName !== currentPackageName) {\n return { id: source, external: true };\n }\n\n // Same package — let Rollup resolve it normally\n return null;\n },\n };\n}\n\n/**\n * Bundle a bare specifier (npm package) using Rollup.\n *\n * Each unique bare specifier gets its own bundle with:\n * - node-resolve with worker/server-safe export conditions\n * - commonjs conversion\n * - json support\n * - process.env.NODE_ENV replacement\n * - External deps (other npm packages) left as import statements\n *\n * Results are cached permanently (npm packages are static).\n */\nexport async function bundleSpecifier(\n specifier: string,\n rootDir: string\n): Promise<{ code: string }> {\n const cacheKey = `${specifier}\\0${rootDir}`;\n\n // Check cache\n const cached = bundleCache.get(cacheKey);\n if (cached) return cached;\n\n // Check in-flight\n const inFlight = bundlesInFlight.get(cacheKey);\n if (inFlight) return inFlight;\n\n const promise = doBundleSpecifier(specifier, rootDir);\n bundlesInFlight.set(cacheKey, promise);\n\n try {\n const result = await promise;\n bundleCache.set(cacheKey, result);\n return result;\n } finally {\n bundlesInFlight.delete(cacheKey);\n }\n}\n\nasync function doBundleSpecifier(\n specifier: string,\n rootDir: string\n): Promise<{ code: string }> {\n const { packageName } = parseSpecifier(specifier);\n const namedExports = getCommonJsNamedExports(specifier, rootDir);\n const input = namedExports.length > 0\n ? `${PACKAGE_ENTRY_WRAPPER_PREFIX}${specifier}`\n : specifier;\n\n const bundle = await rollup({\n input,\n // Disable tree-shaking: we're creating a virtual module that must faithfully\n // expose all package exports. We can't predict which ones user code will import.\n // Without this, exports like AWS SDK's ConverseStreamOutput (a namespace with\n // a visit() helper that nothing inside the bundle references) get dropped.\n treeshake: false,\n plugins: [\n packageEntryWrapperPlugin(specifier, namedExports),\n externalizeDepsPlugin(packageName),\n packageBrowserMappingsPlugin(),\n nodeResolve({\n rootDir,\n browser: false,\n exportConditions: [\"workerd\", \"worker\", \"edge-light\"],\n }),\n shimNodeBuiltinsPlugin(),\n commonjs(commonjsInteropOptions),\n json(),\n replace({\n preventAssignment: true,\n values: { \"process.env.NODE_ENV\": JSON.stringify(\"development\") },\n }),\n ],\n onwarn: (warning, warn) => {\n if (warning.code === \"CIRCULAR_DEPENDENCY\") return;\n if (warning.code === \"THIS_IS_UNDEFINED\") return;\n if (warning.code === \"UNUSED_EXTERNAL_IMPORT\") return;\n if (warning.code === \"EMPTY_BUNDLE\") return;\n // Suppress warnings about named imports from shimmed Node.js builtins\n if (warning.code === \"MISSING_EXPORT\" && warning.exporter?.startsWith(NODE_BUILTIN_SHIM_PREFIX)) return;\n warn(warning);\n },\n });\n\n const { output } = await bundle.generate({\n format: \"es\",\n sourcemap: \"inline\",\n inlineDynamicImports: true,\n });\n await bundle.close();\n\n const code = output[0]!.code;\n return { code };\n}\n\n/**\n * Create a Rollup plugin that externalizes ALL bare specifiers.\n * Used for module aliases where the host file's relative imports are bundled\n * but npm package dependencies are left as external imports.\n */\nfunction externalizeAllBareSpecifiersPlugin(): Plugin {\n return {\n name: \"externalize-all-bare-specifiers\",\n resolveId(source, importer) {\n if (!importer) return null;\n if (source.startsWith(\".\") || source.startsWith(\"/\")) return null;\n if (source.startsWith(\"#\")) return null;\n // Don't externalize Node.js builtins — let nodeResolve/shim handle them\n if (isNodeBuiltin(source)) return null;\n return { id: source, external: true };\n },\n };\n}\n\n/**\n * Create a Rollup transform plugin that strips TypeScript types.\n */\nfunction stripTypeScriptPlugin(): Plugin {\n return {\n name: \"strip-typescript\",\n transform(code, id) {\n if (isTypeScriptFile(id)) {\n return { code: processTypeScript(code, id), map: null };\n }\n return null;\n },\n };\n}\n\nconst TS_EXTENSIONS = [\".ts\", \".tsx\", \".mts\", \".cts\"];\n\n/**\n * Bundle a host file using Rollup, inlining its relative imports.\n *\n * - Uses the host file path as Rollup input\n * - Externalizes ALL bare specifiers (npm packages)\n * - Strips TypeScript via processTypeScript\n * - Shares the bundleCache/bundlesInFlight (no key collision since file paths start with `/`)\n *\n * Results are cached permanently.\n */\nexport async function bundleHostFile(\n hostFilePath: string,\n): Promise<{ code: string }> {\n const cached = bundleCache.get(hostFilePath);\n if (cached) return cached;\n\n const inFlight = bundlesInFlight.get(hostFilePath);\n if (inFlight) return inFlight;\n\n const promise = doBundleHostFile(hostFilePath);\n bundlesInFlight.set(hostFilePath, promise);\n\n try {\n const result = await promise;\n bundleCache.set(hostFilePath, result);\n return result;\n } finally {\n bundlesInFlight.delete(hostFilePath);\n }\n}\n\nasync function doBundleHostFile(\n hostFilePath: string,\n): Promise<{ code: string }> {\n const rootDir = path.dirname(hostFilePath);\n\n const bundle = await rollup({\n input: hostFilePath,\n treeshake: false,\n plugins: [\n externalizeAllBareSpecifiersPlugin(),\n stripTypeScriptPlugin(),\n nodeResolve({\n rootDir,\n browser: false,\n exportConditions: [\"workerd\", \"worker\", \"edge-light\"],\n extensions: [\".mjs\", \".js\", \".json\", \".node\", ...TS_EXTENSIONS],\n }),\n shimNodeBuiltinsPlugin(),\n commonjs(commonjsInteropOptions),\n json(),\n replace({\n preventAssignment: true,\n values: { \"process.env.NODE_ENV\": JSON.stringify(\"development\") },\n }),\n ],\n onwarn: (warning, warn) => {\n if (warning.code === \"CIRCULAR_DEPENDENCY\") return;\n if (warning.code === \"THIS_IS_UNDEFINED\") return;\n if (warning.code === \"UNUSED_EXTERNAL_IMPORT\") return;\n if (warning.code === \"EMPTY_BUNDLE\") return;\n // Suppress warnings about named imports from shimmed Node.js builtins\n if (warning.code === \"MISSING_EXPORT\" && warning.exporter?.startsWith(NODE_BUILTIN_SHIM_PREFIX)) return;\n warn(warning);\n },\n });\n\n const { output } = await bundle.generate({\n format: \"es\",\n sourcemap: \"inline\",\n inlineDynamicImports: true,\n });\n await bundle.close();\n\n const code = output[0]!.code;\n return { code };\n}\n\n/**\n * Clear the bundle cache. Useful for testing.\n */\nexport function clearBundleCache(): void {\n bundleCache.clear();\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAe,IAAf;AACiB,IAAjB;AAC6D,IAA7D;AAC8C,IAA9C;AACoC,IAApC;AACmC,IAAnC;AACgC,IAAhC;AAC4B,IAA5B;AAC+B,IAA/B;AAC+E,IAA/E;AACoD,IAApD;AAMA,IAAM,cAA0C,6BAC9C;AACF,IAAM,WAAoC,0BAAW;AAGrD,IAAM,OAA4B,sBAAW;AAG7C,IAAM,UAAkC,yBAAW;AAInD,IAAM,yBAAyB;AAAA,EAG7B,cAAc;AAAA,EACd,uBAAuB;AACzB;AAEA,IAAM,+BAA+B;AACrC,IAAM,gCAAgC,IAAI,IAAI;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKD,IAAM,eAAe,IAAI,IAAI,iCAAc;AAM3C,SAAS,aAAa,CAAC,QAAyB;AAAA,EAC9C,MAAM,OAAO,OAAO,WAAW,OAAO,IAAI,OAAO,MAAM,CAAC,IAAI;AAAA,EAC5D,MAAM,WAAW,KAAK,MAAM,GAAG,EAAE;AAAA,EACjC,OAAO,aAAa,IAAI,QAAQ;AAAA;AAGlC,IAAM,2BAA2B;AACjC,IAAM,8BAA8B;AACpC,IAAM,iCAAiC,KAAK,UAAU,0CAAsB;AAC5E,IAAM,6BAA6B,CAAC,QAAQ,QAAQ,OAAO,QAAQ,OAAO,QAAQ,OAAO;AAElF,SAAS,sBAAsB,CAAC,QAAwB;AAAA,EAC7D,IAAI,WAAW,QAAQ,WAAW,WAAW;AAAA,IAC3C,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUT;AAAA,EAEA,IAAI,WAAW,iBAAiB,WAAW,oBAAoB;AAAA,IAC7D,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0PF;AAAA,EAEA,OAAO;AAAA;AAAA;AAQT,SAAS,sBAAsB,GAAW;AAAA,EACxC,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ;AAAA,MAChB,IAAI,cAAc,MAAM,GAAG;AAAA,QACzB,OAAO,EAAE,IAAI,GAAG,2BAA2B,UAAU,mBAAmB,MAAM;AAAA,MAChF;AAAA,MACA,OAAO;AAAA;AAAA,IAET,IAAI,CAAC,IAAI;AAAA,MACP,IAAI,GAAG,WAAW,wBAAwB,GAAG;AAAA,QAC3C,OAAO,uBAAuB,GAAG,MAAM,yBAAyB,MAAM,CAAC;AAAA,MACzE;AAAA,MACA,OAAO;AAAA;AAAA,EAEX;AAAA;AAGF,SAAS,oBAAoB,CAAC,MAAuB;AAAA,EACnD,OAAO,qBAAqB,KAAK,IAAI;AAAA;AAGvC,SAAS,wBAAwB,CAAC,WAAmB,SAAgC;AAAA,EACnF,MAAM,WAAW,iCAAc,yBAAK,KAAK,SAAS,8BAA8B,CAAC;AAAA,EAEjF,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,sBAAsB,SAAS,QAAQ,SAAS;AAAA,IAChD,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAGT,QAAQ,aAAa,YAAY,8BAAe,SAAS;AAAA,EACzD,MAAM,kBAAkB,oBAAoB,qBAAqB,WAAW;AAAA,EAC5E,IAAI,CAAC,iBAAiB;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,cAAc,KAAK,MAAM,uBAAG,aAAa,iBAAiB,OAAO,CAAC;AAAA,IAClE,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAGT,MAAM,cAAc,yBAAK,QAAQ,eAAe;AAAA,EAChD,MAAM,aAAa,kCAAkC,aAAa,OAAO;AAAA,EAEzE,IAAI,YAAY;AAAA,IACd,OAAO,yBAAK,QAAQ,aAAa,UAAU;AAAA,EAC7C;AAAA,EAEA,IAAI,CAAC,SAAS;AAAA,IACZ,MAAM,cAAc,YAAY;AAAA,IAChC,IAAI,OAAO,gBAAgB,UAAU;AAAA,MACnC,OAAO,yBAAK,QAAQ,aAAa,WAAW;AAAA,IAC9C;AAAA,IAEA,MAAM,eAAe,YAAY;AAAA,IACjC,IAAI,OAAO,iBAAiB,UAAU;AAAA,MACpC,OAAO,yBAAK,QAAQ,aAAa,YAAY;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,mBAAmB,CAAC,cAAsB,aAAoC;AAAA,EACrF,IAAI,aAAa,yBAAK,QAAQ,YAAY;AAAA,EAC1C,IAAI,yBAAwC;AAAA,EAE5C,OAAO,MAAM;AAAA,IACX,MAAM,kBAAkB,yBAAK,KAAK,YAAY,cAAc;AAAA,IAE5D,IAAI,uBAAG,WAAW,eAAe,GAAG;AAAA,MAClC,IAAI;AAAA,QACF,MAAM,cAAc,KAAK,MAAM,uBAAG,aAAa,iBAAiB,OAAO,CAAC;AAAA,QACxE,IAAI,YAAY,SAAS,aAAa;AAAA,UAIpC,yBAAyB;AAAA,QAC3B;AAAA,QACA,MAAM;AAAA,IAGV;AAAA,IAEA,MAAM,YAAY,yBAAK,QAAQ,UAAU;AAAA,IACzC,IAAI,cAAc,YAAY;AAAA,MAC5B,OAAO;AAAA,IACT;AAAA,IACA,aAAa;AAAA,EACf;AAAA;AAGF,SAAS,iCAAiC,CACxC,aACA,SACe;AAAA,EACf,MAAM,eAAe,YAAY;AAAA,EACjC,IAAI,iBAAiB,WAAW;AAAA,IAC9B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,UAAU,IAAI,YAAY;AAAA,EAE5C,IAAI,2BAA2B,YAAY,GAAG;AAAA,IAC5C,IAAI,cAAc,KAAK;AAAA,MACrB,OAAO;AAAA,IACT;AAAA,IACA,OAAO,iBAAiB,YAAY;AAAA,EACtC;AAAA,EAEA,IAAI,OAAO,iBAAiB,YAAY,iBAAiB,QAAQ,CAAC,MAAM,QAAQ,YAAY,GAAG;AAAA,IAC7F,MAAM,gBAAgB;AAAA,IACtB,MAAM,eAAe,cAAc;AAAA,IACnC,IAAI,iBAAiB,WAAW;AAAA,MAC9B,OAAO,iBAAiB,YAAY;AAAA,IACtC;AAAA,IAEA,YAAY,SAAS,WAAW,OAAO,QAAQ,aAAa,GAAG;AAAA,MAC7D,IAAI,CAAC,QAAQ,SAAS,GAAG,GAAG;AAAA,QAC1B;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,QAAQ,QAAQ,GAAG;AAAA,MACrC,MAAM,SAAS,QAAQ,MAAM,GAAG,SAAS;AAAA,MACzC,MAAM,SAAS,QAAQ,MAAM,YAAY,CAAC;AAAA,MAE1C,IAAI,CAAC,UAAU,WAAW,MAAM,KAAK,CAAC,UAAU,SAAS,MAAM,GAAG;AAAA,QAChE;AAAA,MACF;AAAA,MAEA,MAAM,gBAAgB,UAAU,MAC9B,OAAO,QACP,OAAO,SAAS,IAAI,CAAC,OAAO,SAAS,SACvC;AAAA,MAEA,OAAO,iBAAiB,QAAQ,aAAa;AAAA,IAC/C;AAAA,IAEA,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,cAAc,MAAM,iBAAiB,YAAY,IAAI;AAAA;AAG9D,SAAS,0BAA0B,CAAC,OAAkD;AAAA,EACpF,OAAO,OAAO,UAAU,YACnB,UAAU,QACV,CAAC,MAAM,QAAQ,KAAK,KACpB,OAAO,KAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,GAAG,CAAC;AAAA;AAG7D,SAAS,gBAAgB,CAAC,OAAgB,eAAuC;AAAA,EAC/E,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO,kBAAkB,YAAY,QAAQ,MAAM,WAAW,KAAK,aAAa;AAAA,EAClF;AAAA,EAEA,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxB,WAAW,QAAQ,OAAO;AAAA,MACxB,MAAM,SAAS,iBAAiB,MAAM,aAAa;AAAA,MACnD,IAAI,QAAQ;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAAA,IAC/C,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS;AAAA,EAEf,WAAW,OAAO,CAAC,WAAW,UAAU,cAAc,UAAU,UAAU,WAAW,SAAS,GAAG;AAAA,IAC/F,IAAI,OAAO,QAAQ;AAAA,MACjB,MAAM,SAAS,iBAAiB,OAAO,MAAM,aAAa;AAAA,MAC1D,IAAI,QAAQ;AAAA,QACV,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW,eAAe,OAAO,OAAO,MAAM,GAAG;AAAA,IAC/C,MAAM,SAAS,iBAAiB,aAAa,aAAa;AAAA,IAC1D,IAAI,QAAQ;AAAA,MACV,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,IAAM,+BAA+B,IAAI;AAEzC,SAAS,4BAA4B,GAAW;AAAA,EAC9C,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,UAAU;AAAA,MAC1B,IAAI,CAAC,YAAY,SAAS,WAAW,MAAI,GAAG;AAAA,QAC1C,OAAO;AAAA,MACT;AAAA,MAEA,MAAM,kBAAkB,8BAA8B,QAAQ;AAAA,MAC9D,IAAI,CAAC,iBAAiB;AAAA,QACpB,OAAO;AAAA,MACT;AAAA,MAEA,MAAM,eAAe,sBAAsB,QAAQ,UAAU,eAAe;AAAA,MAC5E,IAAI,iBAAiB,WAAW;AAAA,QAC9B,OAAO;AAAA,MACT;AAAA,MAEA,IAAI,iBAAiB,OAAO;AAAA,QAC1B,OAAO,GAAG,8BAA8B,gBAAgB,kBAAgB;AAAA,MAC1E;AAAA,MAEA,IAAI,+BAAgB,YAAY,KAAK,aAAa,WAAW,OAAO,GAAG;AAAA,QACrE,OAAO,KAAK,QAAQ,cAAc,UAAU,EAAE,UAAU,KAAK,CAAC,EAAE,KAC9D,CAAC,aAAa,YAAY,EAAE,IAAI,aAAa,CAC/C;AAAA,MACF;AAAA,MAEA,OAAO;AAAA;AAAA,IAET,IAAI,CAAC,IAAI;AAAA,MACP,IAAI,GAAG,WAAW,2BAA2B,GAAG;AAAA,QAC9C,OAAO;AAAA;AAAA,MACT;AAAA,MACA,OAAO;AAAA;AAAA,EAEX;AAAA;AAGF,SAAS,6BAA6B,CAAC,UAG9B;AAAA,EACP,MAAM,kBAAkB,2BAA2B,QAAQ;AAAA,EAC3D,IAAI,CAAC,iBAAiB;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,yBAAK,QAAQ,eAAe;AAAA,EAChD,IAAI,iBAAiB,6BAA6B,IAAI,WAAW;AAAA,EACjE,IAAI,mBAAmB,WAAW;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,cAAc,KAAK,MAAM,uBAAG,aAAa,iBAAiB,OAAO,CAAC;AAAA,MACxE,MAAM,eAAe,YAAY;AAAA,MACjC,iBAAiB,OAAO,iBAAiB,YAAY,iBAAiB,QAAQ,CAAC,MAAM,QAAQ,YAAY,IACrG,OAAO,YACL,OAAO,QAAQ,YAAY,EACxB,OAAO,CAAC,UAA6C,OAAO,MAAM,OAAO,YAAY,MAAM,OAAO,KAAK,CAC5G,IACA;AAAA,MACJ,MAAM;AAAA,MACN,iBAAiB;AAAA;AAAA,IAEnB,6BAA6B,IAAI,aAAa,cAAc;AAAA,EAC9D;AAAA,EAEA,IAAI,CAAC,gBAAgB;AAAA,IACnB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,EAAE,aAAa,UAAU,eAAe;AAAA;AAGjD,SAAS,qBAAqB,CAC5B,QACA,UACA,iBAC4B;AAAA,EAC5B,MAAM,YAAsB,CAAC;AAAA,EAE7B,IAAI,+BAAgB,MAAM,KAAK,OAAO,WAAW,OAAO,GAAG;AAAA,IACzD,UAAU,KAAK,MAAM;AAAA,IACrB,IAAI,OAAO,WAAW,OAAO,GAAG;AAAA,MAC9B,UAAU,KAAK,OAAO,MAAM,CAAC,CAAC;AAAA,IAChC;AAAA,EACF,EAAO;AAAA,IACL,MAAM,cAAc,yBAAK,QAAQ,QAAQ;AAAA,IACzC,MAAM,mBAAmB,OAAO,WAAW,GAAG,IAC1C,SACA,yBAAK,QAAQ,aAAa,MAAM;AAAA,IAEpC,IAAI,qBAAqB,gBAAgB,eACpC,CAAC,iBAAiB,WAAW,gBAAgB,cAAc,yBAAK,GAAG,GAAG;AAAA,MACzE;AAAA,IACF;AAAA,IAEA,UAAU,KAAK,KAAK,YAAY,yBAAK,SAAS,gBAAgB,aAAa,gBAAgB,CAAC,GAAG;AAAA,IAE/F,MAAM,iBAAiB,+BAAgB,gBAAgB;AAAA,IACvD,IAAI,gBAAgB;AAAA,MAClB,UAAU,KAAK,KAAK,YAAY,yBAAK,SAAS,gBAAgB,aAAa,cAAc,CAAC,GAAG;AAAA,IAC/F;AAAA;AAAA,EAGF,WAAW,OAAO,WAAW;AAAA,IAC3B,MAAM,eAAe,gBAAgB,SAAS;AAAA,IAC9C,IAAI,iBAAiB,WAAW;AAAA,MAC9B;AAAA,IACF;AAAA,IAEA,IAAI,iBAAiB,OAAO;AAAA,MAC1B,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,+BAAgB,YAAY,KAAK,aAAa,WAAW,OAAO,GAAG;AAAA,MACrE,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,iBAAiB,aAAa,WAAW,GAAG,IAC9C,eACA,yBAAK,QAAQ,gBAAgB,aAAa,YAAY;AAAA,IAC1D,OAAO,gCAAgC,cAAc,KAAK;AAAA,EAC5D;AAAA,EAEA;AAAA;AAGF,SAAS,0BAA0B,CAAC,UAAiC;AAAA,EACnE,IAAI,aAAa,yBAAK,QAAQ,QAAQ;AAAA,EAEtC,OAAO,MAAM;AAAA,IACX,MAAM,kBAAkB,yBAAK,KAAK,YAAY,cAAc;AAAA,IAC5D,IAAI,uBAAG,WAAW,eAAe,GAAG;AAAA,MAClC,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,YAAY,yBAAK,QAAQ,UAAU;AAAA,IACzC,IAAI,cAAc,YAAY;AAAA,MAC5B,OAAO;AAAA,IACT;AAAA,IACA,aAAa;AAAA,EACf;AAAA;AAGF,SAAS,WAAW,CAAC,UAA0B;AAAA,EAC7C,OAAO,SAAS,MAAM,yBAAK,GAAG,EAAE,KAAK,GAAG;AAAA;AAG1C,SAAS,+BAA+B,CAAC,UAAiC;AAAA,EACxE,MAAM,WAAW,+BAAgB,QAAQ;AAAA,EACzC,IAAI,UAAU;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,yBAAK,QAAQ,QAAQ,MAAM,YAAY;AAAA,IACzC,WAAW,aAAa,4BAA4B;AAAA,MAClD,MAAM,YAAY,GAAG,WAAW;AAAA,MAChC,IAAI;AAAA,QACF,IAAI,uBAAG,SAAS,SAAS,EAAE,OAAO,GAAG;AAAA,UACnC,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,IAGV;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,uBAAuB,CAAC,WAAmB,SAA2B;AAAA,EAC7E,MAAM,mBAAmB,yBAAyB,WAAW,OAAO;AAAA,EACpE,IAAI,CAAC,kBAAkB;AAAA,IACrB,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,OAAO,uBAAG,aAAa,kBAAkB,OAAO;AAAA,IAChD,MAAM;AAAA,IACN,OAAO,CAAC;AAAA;AAAA,EAGV,IAAI,4BAAa,kBAAkB,IAAI,MAAM,OAAO;AAAA,IAClD,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,gBAAgB,iCAAc,gBAAgB,EAAE,gBAAgB;AAAA,IAChE,MAAM;AAAA,IACN,OAAO,CAAC;AAAA;AAAA,EAGV,IAAI,iBAAiB,QAAS,OAAO,kBAAkB,YAAY,OAAO,kBAAkB,YAAa;AAAA,IACvG,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,QAAQ,IAAI,IAAI;AAAA,IACpB,GAAG,OAAO,KAAK,aAAa;AAAA,IAC5B,GAAG,OAAO,oBAAoB,aAAa;AAAA,EAC7C,CAAC;AAAA,EAED,MAAM,OAAO,SAAS;AAAA,EACtB,MAAM,OAAO,YAAY;AAAA,EAEzB,IAAI,OAAO,kBAAkB,YAAY;AAAA,IACvC,WAAW,QAAQ,+BAA+B;AAAA,MAChD,MAAM,OAAO,IAAI;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,OAAO,CAAC,GAAG,KAAK,EAAE,OAAO,oBAAoB,EAAE,KAAK;AAAA;AAGtD,SAAS,yBAAyB,CAAC,WAAmB,cAAgC;AAAA,EACpF,MAAM,YAAY,GAAG,+BAA+B;AAAA,EAEpD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ;AAAA,MAChB,IAAI,WAAW,WAAW;AAAA,QACxB,OAAO;AAAA,MACT;AAAA,MACA,OAAO;AAAA;AAAA,IAET,IAAI,CAAC,IAAI;AAAA,MACP,IAAI,OAAO,WAAW;AAAA,QACpB,OAAO;AAAA,MACT;AAAA,MAEA,MAAM,mBAAmB,aAAa,IACpC,CAAC,SAAS,gBAAgB,2BAA2B,OACvD;AAAA,MAEA,OAAO;AAAA,QACL,gCAAgC,KAAK,UAAU,SAAS;AAAA,QACxD;AAAA,QACA,GAAG;AAAA,MACL,EAAE,KAAK;AAAA,CAAI;AAAA;AAAA,EAEf;AAAA;AAMF,IAAM,cAAc,IAAI;AAKxB,IAAM,kBAAkB,IAAI;AAO5B,SAAS,qBAAqB,CAAC,oBAAoC;AAAA,EACjE,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,UAAU;AAAA,MAE1B,IAAI,CAAC;AAAA,QAAU,OAAO;AAAA,MAGtB,IAAI,OAAO,WAAW,GAAG,KAAK,OAAO,WAAW,GAAG;AAAA,QAAG,OAAO;AAAA,MAI7D,IAAI,OAAO,WAAW,GAAG;AAAA,QAAG,OAAO;AAAA,MAInC,IAAI,cAAc,MAAM;AAAA,QAAG,OAAO;AAAA,MAGlC,QAAQ,gBAAgB,8BAAe,MAAM;AAAA,MAC7C,IAAI,gBAAgB,oBAAoB;AAAA,QACtC,OAAO,EAAE,IAAI,QAAQ,UAAU,KAAK;AAAA,MACtC;AAAA,MAGA,OAAO;AAAA;AAAA,EAEX;AAAA;AAeF,eAAsB,eAAe,CACnC,WACA,SAC2B;AAAA,EAC3B,MAAM,WAAW,GAAG,gBAAc;AAAA,EAGlC,MAAM,SAAS,YAAY,IAAI,QAAQ;AAAA,EACvC,IAAI;AAAA,IAAQ,OAAO;AAAA,EAGnB,MAAM,WAAW,gBAAgB,IAAI,QAAQ;AAAA,EAC7C,IAAI;AAAA,IAAU,OAAO;AAAA,EAErB,MAAM,UAAU,kBAAkB,WAAW,OAAO;AAAA,EACpD,gBAAgB,IAAI,UAAU,OAAO;AAAA,EAErC,IAAI;AAAA,IACF,MAAM,SAAS,MAAM;AAAA,IACrB,YAAY,IAAI,UAAU,MAAM;AAAA,IAChC,OAAO;AAAA,YACP;AAAA,IACA,gBAAgB,OAAO,QAAQ;AAAA;AAAA;AAInC,eAAe,iBAAiB,CAC9B,WACA,SAC2B;AAAA,EAC3B,QAAQ,gBAAgB,8BAAe,SAAS;AAAA,EAChD,MAAM,eAAe,wBAAwB,WAAW,OAAO;AAAA,EAC/D,MAAM,QAAQ,aAAa,SAAS,IAChC,GAAG,+BAA+B,cAClC;AAAA,EAEJ,MAAM,SAAS,MAAM,qBAAO;AAAA,IAC1B;AAAA,IAKA,WAAW;AAAA,IACX,SAAS;AAAA,MACP,0BAA0B,WAAW,YAAY;AAAA,MACjD,sBAAsB,WAAW;AAAA,MACjC,6BAA6B;AAAA,MAC7B,YAAY;AAAA,QACV;AAAA,QACA,SAAS;AAAA,QACT,kBAAkB,CAAC,WAAW,UAAU,YAAY;AAAA,MACtD,CAAC;AAAA,MACD,uBAAuB;AAAA,MACvB,SAAS,sBAAsB;AAAA,MAC/B,KAAK;AAAA,MACL,QAAQ;AAAA,QACN,mBAAmB;AAAA,QACnB,QAAQ,EAAE,wBAAwB,KAAK,UAAU,aAAa,EAAE;AAAA,MAClE,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,CAAC,SAAS,SAAS;AAAA,MACzB,IAAI,QAAQ,SAAS;AAAA,QAAuB;AAAA,MAC5C,IAAI,QAAQ,SAAS;AAAA,QAAqB;AAAA,MAC1C,IAAI,QAAQ,SAAS;AAAA,QAA0B;AAAA,MAC/C,IAAI,QAAQ,SAAS;AAAA,QAAgB;AAAA,MAErC,IAAI,QAAQ,SAAS,oBAAoB,QAAQ,UAAU,WAAW,wBAAwB;AAAA,QAAG;AAAA,MACjG,KAAK,OAAO;AAAA;AAAA,EAEhB,CAAC;AAAA,EAED,QAAQ,WAAW,MAAM,OAAO,SAAS;AAAA,IACvC,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB,CAAC;AAAA,EACD,MAAM,OAAO,MAAM;AAAA,EAEnB,MAAM,OAAO,OAAO,GAAI;AAAA,EACxB,OAAO,EAAE,KAAK;AAAA;AAQhB,SAAS,kCAAkC,GAAW;AAAA,EACpD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,QAAQ,UAAU;AAAA,MAC1B,IAAI,CAAC;AAAA,QAAU,OAAO;AAAA,MACtB,IAAI,OAAO,WAAW,GAAG,KAAK,OAAO,WAAW,GAAG;AAAA,QAAG,OAAO;AAAA,MAC7D,IAAI,OAAO,WAAW,GAAG;AAAA,QAAG,OAAO;AAAA,MAEnC,IAAI,cAAc,MAAM;AAAA,QAAG,OAAO;AAAA,MAClC,OAAO,EAAE,IAAI,QAAQ,UAAU,KAAK;AAAA;AAAA,EAExC;AAAA;AAMF,SAAS,qBAAqB,GAAW;AAAA,EACvC,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,MAAM,IAAI;AAAA,MAClB,IAAI,oCAAiB,EAAE,GAAG;AAAA,QACxB,OAAO,EAAE,MAAM,qCAAkB,MAAM,EAAE,GAAG,KAAK,KAAK;AAAA,MACxD;AAAA,MACA,OAAO;AAAA;AAAA,EAEX;AAAA;AAGF,IAAM,gBAAgB,CAAC,OAAO,QAAQ,QAAQ,MAAM;AAYpD,eAAsB,cAAc,CAClC,cAC2B;AAAA,EAC3B,MAAM,SAAS,YAAY,IAAI,YAAY;AAAA,EAC3C,IAAI;AAAA,IAAQ,OAAO;AAAA,EAEnB,MAAM,WAAW,gBAAgB,IAAI,YAAY;AAAA,EACjD,IAAI;AAAA,IAAU,OAAO;AAAA,EAErB,MAAM,UAAU,iBAAiB,YAAY;AAAA,EAC7C,gBAAgB,IAAI,cAAc,OAAO;AAAA,EAEzC,IAAI;AAAA,IACF,MAAM,SAAS,MAAM;AAAA,IACrB,YAAY,IAAI,cAAc,MAAM;AAAA,IACpC,OAAO;AAAA,YACP;AAAA,IACA,gBAAgB,OAAO,YAAY;AAAA;AAAA;AAIvC,eAAe,gBAAgB,CAC7B,cAC2B;AAAA,EAC3B,MAAM,UAAU,yBAAK,QAAQ,YAAY;AAAA,EAEzC,MAAM,SAAS,MAAM,qBAAO;AAAA,IAC1B,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA,MACP,mCAAmC;AAAA,MACnC,sBAAsB;AAAA,MACtB,YAAY;AAAA,QACV;AAAA,QACA,SAAS;AAAA,QACT,kBAAkB,CAAC,WAAW,UAAU,YAAY;AAAA,QACpD,YAAY,CAAC,QAAQ,OAAO,SAAS,SAAS,GAAG,aAAa;AAAA,MAChE,CAAC;AAAA,MACD,uBAAuB;AAAA,MACvB,SAAS,sBAAsB;AAAA,MAC/B,KAAK;AAAA,MACL,QAAQ;AAAA,QACN,mBAAmB;AAAA,QACnB,QAAQ,EAAE,wBAAwB,KAAK,UAAU,aAAa,EAAE;AAAA,MAClE,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,CAAC,SAAS,SAAS;AAAA,MACzB,IAAI,QAAQ,SAAS;AAAA,QAAuB;AAAA,MAC5C,IAAI,QAAQ,SAAS;AAAA,QAAqB;AAAA,MAC1C,IAAI,QAAQ,SAAS;AAAA,QAA0B;AAAA,MAC/C,IAAI,QAAQ,SAAS;AAAA,QAAgB;AAAA,MAErC,IAAI,QAAQ,SAAS,oBAAoB,QAAQ,UAAU,WAAW,wBAAwB;AAAA,QAAG;AAAA,MACjG,KAAK,OAAO;AAAA;AAAA,EAEhB,CAAC;AAAA,EAED,QAAQ,WAAW,MAAM,OAAO,SAAS;AAAA,IACvC,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB,CAAC;AAAA,EACD,MAAM,OAAO,MAAM;AAAA,EAEnB,MAAM,OAAO,OAAO,GAAI;AAAA,EACxB,OAAO,EAAE,KAAK;AAAA;AAMT,SAAS,gBAAgB,GAAS;AAAA,EACvC,YAAY,MAAM;AAAA;",
|
|
8
|
+
"debugId": "18A8EE3C3887536664756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -100,6 +100,7 @@ class ModuleResolverBuilder {
|
|
|
100
100
|
return this;
|
|
101
101
|
}
|
|
102
102
|
async resolve(specifier, importer, context) {
|
|
103
|
+
let nodeModulesError;
|
|
103
104
|
const explicit = this.virtualEntries.get(specifier);
|
|
104
105
|
if (explicit) {
|
|
105
106
|
const raw = typeof explicit.source === "function" ? await explicit.source() : await explicit.source;
|
|
@@ -140,6 +141,7 @@ class ModuleResolverBuilder {
|
|
|
140
141
|
try {
|
|
141
142
|
return await this.getNodeModulesLoader()(specifier, importer);
|
|
142
143
|
} catch (error) {
|
|
144
|
+
nodeModulesError = error;
|
|
143
145
|
if (!this.fallbackLoader) {
|
|
144
146
|
throw error;
|
|
145
147
|
}
|
|
@@ -151,6 +153,9 @@ class ModuleResolverBuilder {
|
|
|
151
153
|
return normalized;
|
|
152
154
|
}
|
|
153
155
|
}
|
|
156
|
+
if (nodeModulesError) {
|
|
157
|
+
throw nodeModulesError;
|
|
158
|
+
}
|
|
154
159
|
throw new Error(`Unable to resolve module: ${specifier}`);
|
|
155
160
|
}
|
|
156
161
|
getNodeModulesLoader() {
|
|
@@ -164,4 +169,4 @@ function createModuleResolver() {
|
|
|
164
169
|
return new ModuleResolverBuilder;
|
|
165
170
|
}
|
|
166
171
|
|
|
167
|
-
//# debugId=
|
|
172
|
+
//# debugId=F4C37D8B8A6E243564756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/modules/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { defaultModuleLoader } from \"../internal/module-loader/index.cjs\";\nimport { normalizeExplicitModuleResult } from \"../bridge/legacy-adapters.cjs\";\nimport type { HostCallContext, ModuleResolveResult, ModuleResolver, ModuleResolverFallback, ModuleResolverSourceLoader, ModuleSource } from \"../types.cjs\";\n\nclass ModuleResolverBuilder implements ModuleResolver {\n private readonly nodeModuleMappings: Array<{ from: string; to: string }> = [];\n private readonly virtualEntries = new Map<string, { source: ModuleResolveResult | (() => ModuleResolveResult); options?: Partial<ModuleSource> }>();\n private readonly virtualFiles = new Map<string, { filePath: string; options?: Partial<ModuleSource> }>();\n private readonly sourceTrees: Array<{ prefix: string; loader: ModuleResolverSourceLoader }> = [];\n private fallbackLoader?: ModuleResolverFallback;\n private nodeModulesLoader?: ReturnType<typeof defaultModuleLoader>;\n\n mountNodeModules(virtualMount: string, hostPath: string): ModuleResolver {\n this.nodeModuleMappings.push({ from: hostPath, to: virtualMount });\n this.nodeModulesLoader = undefined;\n return this;\n }\n\n virtual(specifier: string, source: ModuleResolveResult | (() => ModuleResolveResult), options?: Partial<ModuleSource>): ModuleResolver {\n this.virtualEntries.set(specifier, { source, options });\n return this;\n }\n\n virtualFile(specifier: string, filePath: string, options?: Partial<ModuleSource>): ModuleResolver {\n this.virtualFiles.set(specifier, { filePath, options });\n return this;\n }\n\n sourceTree(prefix: string, loader: ModuleResolverSourceLoader): ModuleResolver {\n this.sourceTrees.push({ prefix, loader });\n return this;\n }\n\n fallback(loader: ModuleResolverFallback): ModuleResolver {\n this.fallbackLoader = loader;\n return this;\n }\n\n async resolve(specifier: string, importer: { path: string; resolveDir: string }, context: HostCallContext): Promise<ModuleSource> {\n const explicit = this.virtualEntries.get(specifier);\n if (explicit) {\n const raw = typeof explicit.source === \"function\" ? await explicit.source() : await explicit.source;\n const normalized = await normalizeExplicitModuleResult(specifier, raw, importer.resolveDir);\n if (!normalized) {\n throw new Error(`Virtual module ${specifier} returned no source.`);\n }\n return {\n ...normalized,\n ...explicit.options,\n };\n }\n\n const virtualFile = this.virtualFiles.get(specifier);\n if (virtualFile) {\n const code = fs.readFileSync(virtualFile.filePath, \"utf-8\");\n const fallback = await normalizeExplicitModuleResult(\n specifier,\n {\n code,\n filename: virtualFile.options?.filename ?? path.basename(virtualFile.filePath),\n resolveDir: virtualFile.options?.resolveDir ?? path.posix.dirname(specifier.startsWith(\"/\") ? specifier : `/${specifier}`),\n static: virtualFile.options?.static,\n },\n importer.resolveDir,\n );\n if (!fallback) {\n throw new Error(`Virtual file module ${specifier} returned no source.`);\n }\n return fallback;\n }\n\n for (const sourceTree of this.sourceTrees) {\n if (!specifier.startsWith(sourceTree.prefix)) {\n continue;\n }\n const relativePath = specifier.slice(sourceTree.prefix.length);\n const normalized = await normalizeExplicitModuleResult(specifier, sourceTree.loader(relativePath, context), importer.resolveDir);\n if (normalized) {\n return normalized;\n }\n }\n\n if (this.nodeModuleMappings.length > 0) {\n try {\n return await this.getNodeModulesLoader()(specifier, importer);\n } catch (error) {\n if (!this.fallbackLoader) {\n throw error;\n }\n }\n }\n\n if (this.fallbackLoader) {\n const normalized = await normalizeExplicitModuleResult(specifier, this.fallbackLoader(specifier, importer, context), importer.resolveDir);\n if (normalized) {\n return normalized;\n }\n }\n\n throw new Error(`Unable to resolve module: ${specifier}`);\n }\n\n private getNodeModulesLoader(): ReturnType<typeof defaultModuleLoader> {\n if (!this.nodeModulesLoader) {\n this.nodeModulesLoader = defaultModuleLoader(...this.nodeModuleMappings);\n }\n return this.nodeModulesLoader;\n }\n}\n\nexport function createModuleResolver(): ModuleResolver {\n return new ModuleResolverBuilder();\n}\n"
|
|
5
|
+
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { defaultModuleLoader } from \"../internal/module-loader/index.cjs\";\nimport { normalizeExplicitModuleResult } from \"../bridge/legacy-adapters.cjs\";\nimport type { HostCallContext, ModuleResolveResult, ModuleResolver, ModuleResolverFallback, ModuleResolverSourceLoader, ModuleSource } from \"../types.cjs\";\n\nclass ModuleResolverBuilder implements ModuleResolver {\n private readonly nodeModuleMappings: Array<{ from: string; to: string }> = [];\n private readonly virtualEntries = new Map<string, { source: ModuleResolveResult | (() => ModuleResolveResult); options?: Partial<ModuleSource> }>();\n private readonly virtualFiles = new Map<string, { filePath: string; options?: Partial<ModuleSource> }>();\n private readonly sourceTrees: Array<{ prefix: string; loader: ModuleResolverSourceLoader }> = [];\n private fallbackLoader?: ModuleResolverFallback;\n private nodeModulesLoader?: ReturnType<typeof defaultModuleLoader>;\n\n mountNodeModules(virtualMount: string, hostPath: string): ModuleResolver {\n this.nodeModuleMappings.push({ from: hostPath, to: virtualMount });\n this.nodeModulesLoader = undefined;\n return this;\n }\n\n virtual(specifier: string, source: ModuleResolveResult | (() => ModuleResolveResult), options?: Partial<ModuleSource>): ModuleResolver {\n this.virtualEntries.set(specifier, { source, options });\n return this;\n }\n\n virtualFile(specifier: string, filePath: string, options?: Partial<ModuleSource>): ModuleResolver {\n this.virtualFiles.set(specifier, { filePath, options });\n return this;\n }\n\n sourceTree(prefix: string, loader: ModuleResolverSourceLoader): ModuleResolver {\n this.sourceTrees.push({ prefix, loader });\n return this;\n }\n\n fallback(loader: ModuleResolverFallback): ModuleResolver {\n this.fallbackLoader = loader;\n return this;\n }\n\n async resolve(specifier: string, importer: { path: string; resolveDir: string }, context: HostCallContext): Promise<ModuleSource> {\n let nodeModulesError: unknown;\n\n const explicit = this.virtualEntries.get(specifier);\n if (explicit) {\n const raw = typeof explicit.source === \"function\" ? await explicit.source() : await explicit.source;\n const normalized = await normalizeExplicitModuleResult(specifier, raw, importer.resolveDir);\n if (!normalized) {\n throw new Error(`Virtual module ${specifier} returned no source.`);\n }\n return {\n ...normalized,\n ...explicit.options,\n };\n }\n\n const virtualFile = this.virtualFiles.get(specifier);\n if (virtualFile) {\n const code = fs.readFileSync(virtualFile.filePath, \"utf-8\");\n const fallback = await normalizeExplicitModuleResult(\n specifier,\n {\n code,\n filename: virtualFile.options?.filename ?? path.basename(virtualFile.filePath),\n resolveDir: virtualFile.options?.resolveDir ?? path.posix.dirname(specifier.startsWith(\"/\") ? specifier : `/${specifier}`),\n static: virtualFile.options?.static,\n },\n importer.resolveDir,\n );\n if (!fallback) {\n throw new Error(`Virtual file module ${specifier} returned no source.`);\n }\n return fallback;\n }\n\n for (const sourceTree of this.sourceTrees) {\n if (!specifier.startsWith(sourceTree.prefix)) {\n continue;\n }\n const relativePath = specifier.slice(sourceTree.prefix.length);\n const normalized = await normalizeExplicitModuleResult(specifier, sourceTree.loader(relativePath, context), importer.resolveDir);\n if (normalized) {\n return normalized;\n }\n }\n\n if (this.nodeModuleMappings.length > 0) {\n try {\n return await this.getNodeModulesLoader()(specifier, importer);\n } catch (error) {\n nodeModulesError = error;\n if (!this.fallbackLoader) {\n throw error;\n }\n }\n }\n\n if (this.fallbackLoader) {\n const normalized = await normalizeExplicitModuleResult(specifier, this.fallbackLoader(specifier, importer, context), importer.resolveDir);\n if (normalized) {\n return normalized;\n }\n }\n\n if (nodeModulesError) {\n throw nodeModulesError;\n }\n\n throw new Error(`Unable to resolve module: ${specifier}`);\n }\n\n private getNodeModulesLoader(): ReturnType<typeof defaultModuleLoader> {\n if (!this.nodeModulesLoader) {\n this.nodeModulesLoader = defaultModuleLoader(...this.nodeModuleMappings);\n }\n return this.nodeModulesLoader;\n }\n}\n\nexport function createModuleResolver(): ModuleResolver {\n return new ModuleResolverBuilder();\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "F4C37D8B8A6E243564756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/cjs/package.json
CHANGED
|
@@ -177,6 +177,8 @@ var encodingCode = `
|
|
|
177
177
|
encoding = normalizeEncoding(encoding);
|
|
178
178
|
if (encoding === 'utf8') {
|
|
179
179
|
return new TextDecoder('utf-8').decode(this);
|
|
180
|
+
} else if (encoding === 'latin1') {
|
|
181
|
+
return bytesToLatin1(this);
|
|
180
182
|
} else if (encoding === 'base64') {
|
|
181
183
|
return bytesToBase64(this);
|
|
182
184
|
} else if (encoding === 'hex') {
|
|
@@ -288,6 +290,8 @@ var encodingCode = `
|
|
|
288
290
|
encoding = normalizeEncoding(encoding);
|
|
289
291
|
if (encoding === 'utf8') {
|
|
290
292
|
return new TextEncoder().encode(string).length;
|
|
293
|
+
} else if (encoding === 'latin1') {
|
|
294
|
+
return string.length;
|
|
291
295
|
} else if (encoding === 'base64') {
|
|
292
296
|
const padding = (string.match(/=+$/) || [''])[0].length;
|
|
293
297
|
return Math.floor((string.length * 3) / 4) - padding;
|
|
@@ -298,14 +302,15 @@ var encodingCode = `
|
|
|
298
302
|
}
|
|
299
303
|
|
|
300
304
|
static isEncoding(encoding) {
|
|
301
|
-
return ['utf8', '
|
|
305
|
+
return ['utf8', 'latin1', 'base64', 'hex'].includes(normalizeEncoding(encoding));
|
|
302
306
|
}
|
|
303
307
|
}
|
|
304
308
|
|
|
305
309
|
function normalizeEncoding(encoding) {
|
|
306
310
|
if (!encoding) return 'utf8';
|
|
307
|
-
const lower = String(encoding).toLowerCase().replace(
|
|
308
|
-
if (lower === 'utf8'
|
|
311
|
+
const lower = String(encoding).toLowerCase().replace(/-/g, '');
|
|
312
|
+
if (lower === 'utf8') return 'utf8';
|
|
313
|
+
if (lower === 'latin1' || lower === 'binary') return 'latin1';
|
|
309
314
|
if (lower === 'base64') return 'base64';
|
|
310
315
|
if (lower === 'hex') return 'hex';
|
|
311
316
|
return lower;
|
|
@@ -315,6 +320,8 @@ var encodingCode = `
|
|
|
315
320
|
encoding = normalizeEncoding(encoding);
|
|
316
321
|
if (encoding === 'utf8') {
|
|
317
322
|
return new TextEncoder().encode(str);
|
|
323
|
+
} else if (encoding === 'latin1') {
|
|
324
|
+
return latin1ToBytes(str);
|
|
318
325
|
} else if (encoding === 'base64') {
|
|
319
326
|
return base64ToBytes(str);
|
|
320
327
|
} else if (encoding === 'hex') {
|
|
@@ -340,6 +347,22 @@ var encodingCode = `
|
|
|
340
347
|
return btoa(binary);
|
|
341
348
|
}
|
|
342
349
|
|
|
350
|
+
function latin1ToBytes(str) {
|
|
351
|
+
const bytes = new Uint8Array(str.length);
|
|
352
|
+
for (let i = 0; i < str.length; i++) {
|
|
353
|
+
bytes[i] = str.charCodeAt(i) & 0xFF;
|
|
354
|
+
}
|
|
355
|
+
return bytes;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
function bytesToLatin1(bytes) {
|
|
359
|
+
let result = '';
|
|
360
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
361
|
+
result += String.fromCharCode(bytes[i]);
|
|
362
|
+
}
|
|
363
|
+
return result;
|
|
364
|
+
}
|
|
365
|
+
|
|
343
366
|
function hexToBytes(str) {
|
|
344
367
|
if (str.length % 2 !== 0) {
|
|
345
368
|
throw new TypeError('Invalid hex string');
|
|
@@ -376,4 +399,4 @@ export {
|
|
|
376
399
|
setupEncoding
|
|
377
400
|
};
|
|
378
401
|
|
|
379
|
-
//# debugId=
|
|
402
|
+
//# debugId=C9D73D528E7F3E3764756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/encoding/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type ivm from \"@ricsam/isolated-vm\";\n\nexport interface EncodingHandle {\n dispose(): void;\n}\n\nconst encodingCode = `\n(function() {\n // Define DOMException if not available\n if (typeof DOMException === 'undefined') {\n globalThis.DOMException = class DOMException extends Error {\n constructor(message, name) {\n super(message);\n this.name = name || 'DOMException';\n }\n };\n }\n\n const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n // Build reverse lookup table\n const base64Lookup = new Map();\n for (let i = 0; i < base64Chars.length; i++) {\n base64Lookup.set(base64Chars[i], i);\n }\n\n globalThis.btoa = function btoa(str) {\n if (str === undefined) {\n throw new TypeError(\"1 argument required, but only 0 present.\");\n }\n\n str = String(str);\n\n // Check for characters outside Latin-1 range\n for (let i = 0; i < str.length; i++) {\n if (str.charCodeAt(i) > 255) {\n throw new DOMException(\n \"The string to be encoded contains characters outside of the Latin1 range.\",\n \"InvalidCharacterError\"\n );\n }\n }\n\n if (str.length === 0) {\n return '';\n }\n\n let result = '';\n let i = 0;\n\n while (i < str.length) {\n const a = str.charCodeAt(i++);\n const bExists = i < str.length;\n const b = bExists ? str.charCodeAt(i++) : 0;\n const cExists = i < str.length;\n const c = cExists ? str.charCodeAt(i++) : 0;\n\n const triplet = (a << 16) | (b << 8) | c;\n\n result += base64Chars[(triplet >> 18) & 0x3F];\n result += base64Chars[(triplet >> 12) & 0x3F];\n result += bExists ? base64Chars[(triplet >> 6) & 0x3F] : '=';\n result += cExists ? base64Chars[triplet & 0x3F] : '=';\n }\n\n return result;\n };\n\n globalThis.atob = function atob(str) {\n if (str === undefined) {\n throw new TypeError(\"1 argument required, but only 0 present.\");\n }\n\n str = String(str);\n\n // Remove whitespace\n str = str.replace(/[\\\\t\\\\n\\\\f\\\\r ]/g, '');\n\n // Validate characters and length\n if (str.length === 0) {\n return '';\n }\n\n // Check for invalid characters (before padding normalization)\n for (let i = 0; i < str.length; i++) {\n const c = str[i];\n if (c !== '=' && !base64Lookup.has(c)) {\n throw new DOMException(\n \"The string to be decoded is not correctly encoded.\",\n \"InvalidCharacterError\"\n );\n }\n }\n\n // Validate padding position (must be at end)\n const paddingIndex = str.indexOf('=');\n if (paddingIndex !== -1) {\n for (let i = paddingIndex; i < str.length; i++) {\n if (str[i] !== '=') {\n throw new DOMException(\n \"The string to be decoded is not correctly encoded.\",\n \"InvalidCharacterError\"\n );\n }\n }\n const paddingLength = str.length - paddingIndex;\n if (paddingLength > 2) {\n throw new DOMException(\n \"The string to be decoded is not correctly encoded.\",\n \"InvalidCharacterError\"\n );\n }\n }\n\n // Length without padding must be valid (can't have remainder of 1)\n const strWithoutPadding = str.replace(/=/g, '');\n if (strWithoutPadding.length % 4 === 1) {\n throw new DOMException(\n \"The string to be decoded is not correctly encoded.\",\n \"InvalidCharacterError\"\n );\n }\n\n // Pad to multiple of 4 if needed (for inputs without explicit padding)\n while (str.length % 4 !== 0) {\n str += '=';\n }\n\n let result = '';\n let i = 0;\n\n while (i < str.length) {\n const a = base64Lookup.get(str[i++]) ?? 0;\n const b = base64Lookup.get(str[i++]) ?? 0;\n const c = base64Lookup.get(str[i++]) ?? 0;\n const d = base64Lookup.get(str[i++]) ?? 0;\n\n const triplet = (a << 18) | (b << 12) | (c << 6) | d;\n\n result += String.fromCharCode((triplet >> 16) & 0xFF);\n if (str[i - 2] !== '=') {\n result += String.fromCharCode((triplet >> 8) & 0xFF);\n }\n if (str[i - 1] !== '=') {\n result += String.fromCharCode(triplet & 0xFF);\n }\n }\n\n return result;\n };\n\n // ============================================\n // Buffer implementation\n // ============================================\n\n const BUFFER_SYMBOL = Symbol.for('__isBuffer');\n\n class Buffer extends Uint8Array {\n constructor(arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n super(arg);\n } else if (typeof arg === 'string') {\n const bytes = stringToBytes(arg, encodingOrOffset || 'utf8');\n super(bytes);\n } else if (arg instanceof ArrayBuffer) {\n if (typeof encodingOrOffset === 'number') {\n super(arg, encodingOrOffset, length);\n } else {\n super(arg);\n }\n } else if (ArrayBuffer.isView(arg)) {\n super(arg.buffer, arg.byteOffset, arg.byteLength);\n } else if (Array.isArray(arg)) {\n super(arg);\n } else {\n super(arg);\n }\n Object.defineProperty(this, BUFFER_SYMBOL, { value: true, writable: false });\n }\n\n toString(encoding = 'utf8') {\n encoding = normalizeEncoding(encoding);\n if (encoding === 'utf8') {\n return new TextDecoder('utf-8').decode(this);\n } else if (encoding === 'base64') {\n return bytesToBase64(this);\n } else if (encoding === 'hex') {\n return bytesToHex(this);\n }\n return new TextDecoder('utf-8').decode(this);\n }\n\n slice(start, end) {\n const sliced = super.slice(start, end);\n return Buffer.from(sliced);\n }\n\n subarray(start, end) {\n const sub = super.subarray(start, end);\n const buf = new Buffer(sub.length);\n buf.set(sub);\n return buf;\n }\n\n static from(value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return new Buffer(value, encodingOrOffset);\n }\n if (value instanceof ArrayBuffer) {\n if (typeof encodingOrOffset === 'number') {\n return new Buffer(value, encodingOrOffset, length);\n }\n return new Buffer(value);\n }\n if (ArrayBuffer.isView(value)) {\n return new Buffer(value);\n }\n if (Array.isArray(value)) {\n return new Buffer(value);\n }\n if (value && typeof value[Symbol.iterator] === 'function') {\n return new Buffer(Array.from(value));\n }\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object');\n }\n\n static alloc(size, fill, encoding) {\n if (typeof size !== 'number' || size < 0) {\n throw new RangeError('Invalid size');\n }\n const buf = new Buffer(size);\n if (fill !== undefined) {\n if (typeof fill === 'number') {\n buf.fill(fill);\n } else if (typeof fill === 'string') {\n const fillBytes = stringToBytes(fill, encoding || 'utf8');\n for (let i = 0; i < size; i++) {\n buf[i] = fillBytes[i % fillBytes.length];\n }\n } else if (Buffer.isBuffer(fill) || fill instanceof Uint8Array) {\n for (let i = 0; i < size; i++) {\n buf[i] = fill[i % fill.length];\n }\n }\n }\n return buf;\n }\n\n static allocUnsafe(size) {\n if (typeof size !== 'number' || size < 0) {\n throw new RangeError('Invalid size');\n }\n return new Buffer(size);\n }\n\n static concat(list, totalLength) {\n if (!Array.isArray(list)) {\n throw new TypeError('list argument must be an array');\n }\n if (list.length === 0) {\n return Buffer.alloc(0);\n }\n if (totalLength === undefined) {\n totalLength = 0;\n for (const buf of list) {\n totalLength += buf.length;\n }\n }\n const result = Buffer.alloc(totalLength);\n let offset = 0;\n for (const buf of list) {\n if (offset + buf.length > totalLength) {\n result.set(buf.subarray(0, totalLength - offset), offset);\n break;\n }\n result.set(buf, offset);\n offset += buf.length;\n }\n return result;\n }\n\n static isBuffer(obj) {\n return obj != null && obj[BUFFER_SYMBOL] === true;\n }\n\n static byteLength(string, encoding = 'utf8') {\n if (typeof string !== 'string') {\n if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {\n return string.byteLength;\n }\n throw new TypeError('First argument must be a string, Buffer, or ArrayBuffer');\n }\n encoding = normalizeEncoding(encoding);\n if (encoding === 'utf8') {\n return new TextEncoder().encode(string).length;\n } else if (encoding === 'base64') {\n const padding = (string.match(/=+$/) || [''])[0].length;\n return Math.floor((string.length * 3) / 4) - padding;\n } else if (encoding === 'hex') {\n return Math.floor(string.length / 2);\n }\n return new TextEncoder().encode(string).length;\n }\n\n static isEncoding(encoding) {\n return ['utf8', 'utf-8', 'base64', 'hex'].includes(normalizeEncoding(encoding));\n }\n }\n\n function normalizeEncoding(encoding) {\n if (!encoding) return 'utf8';\n const lower = String(encoding).toLowerCase().replace('-', '');\n if (lower === 'utf8' || lower === 'utf-8') return 'utf8';\n if (lower === 'base64') return 'base64';\n if (lower === 'hex') return 'hex';\n return lower;\n }\n\n function stringToBytes(str, encoding) {\n encoding = normalizeEncoding(encoding);\n if (encoding === 'utf8') {\n return new TextEncoder().encode(str);\n } else if (encoding === 'base64') {\n return base64ToBytes(str);\n } else if (encoding === 'hex') {\n return hexToBytes(str);\n }\n return new TextEncoder().encode(str);\n }\n\n function base64ToBytes(str) {\n const binary = atob(str);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n\n function bytesToBase64(bytes) {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n\n function hexToBytes(str) {\n if (str.length % 2 !== 0) {\n throw new TypeError('Invalid hex string');\n }\n const bytes = new Uint8Array(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n const byte = parseInt(str.substr(i, 2), 16);\n if (isNaN(byte)) {\n throw new TypeError('Invalid hex string');\n }\n bytes[i / 2] = byte;\n }\n return bytes;\n }\n\n function bytesToHex(bytes) {\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n }\n\n globalThis.Buffer = Buffer;\n})();\n`;\n\n/**\n * Setup encoding APIs in an isolated-vm context\n *\n * Injects:\n * - atob/btoa for Base64 encoding/decoding\n * - Buffer class for binary data handling (utf8, base64, hex)\n *\n * @example\n * const handle = await setupEncoding(context);\n * await context.eval(`\n * const encoded = btoa(\"hello\");\n * const decoded = atob(encoded);\n * const buf = Buffer.from(\"hello\");\n * const hex = buf.toString(\"hex\");\n * `);\n */\nexport async function setupEncoding(\n context: ivm.Context\n): Promise<EncodingHandle> {\n context.evalSync(encodingCode);\n return {\n dispose() {\n // No resources to cleanup for pure JS injection\n },\n };\n}\n"
|
|
5
|
+
"import type ivm from \"@ricsam/isolated-vm\";\n\nexport interface EncodingHandle {\n dispose(): void;\n}\n\nconst encodingCode = `\n(function() {\n // Define DOMException if not available\n if (typeof DOMException === 'undefined') {\n globalThis.DOMException = class DOMException extends Error {\n constructor(message, name) {\n super(message);\n this.name = name || 'DOMException';\n }\n };\n }\n\n const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n // Build reverse lookup table\n const base64Lookup = new Map();\n for (let i = 0; i < base64Chars.length; i++) {\n base64Lookup.set(base64Chars[i], i);\n }\n\n globalThis.btoa = function btoa(str) {\n if (str === undefined) {\n throw new TypeError(\"1 argument required, but only 0 present.\");\n }\n\n str = String(str);\n\n // Check for characters outside Latin-1 range\n for (let i = 0; i < str.length; i++) {\n if (str.charCodeAt(i) > 255) {\n throw new DOMException(\n \"The string to be encoded contains characters outside of the Latin1 range.\",\n \"InvalidCharacterError\"\n );\n }\n }\n\n if (str.length === 0) {\n return '';\n }\n\n let result = '';\n let i = 0;\n\n while (i < str.length) {\n const a = str.charCodeAt(i++);\n const bExists = i < str.length;\n const b = bExists ? str.charCodeAt(i++) : 0;\n const cExists = i < str.length;\n const c = cExists ? str.charCodeAt(i++) : 0;\n\n const triplet = (a << 16) | (b << 8) | c;\n\n result += base64Chars[(triplet >> 18) & 0x3F];\n result += base64Chars[(triplet >> 12) & 0x3F];\n result += bExists ? base64Chars[(triplet >> 6) & 0x3F] : '=';\n result += cExists ? base64Chars[triplet & 0x3F] : '=';\n }\n\n return result;\n };\n\n globalThis.atob = function atob(str) {\n if (str === undefined) {\n throw new TypeError(\"1 argument required, but only 0 present.\");\n }\n\n str = String(str);\n\n // Remove whitespace\n str = str.replace(/[\\\\t\\\\n\\\\f\\\\r ]/g, '');\n\n // Validate characters and length\n if (str.length === 0) {\n return '';\n }\n\n // Check for invalid characters (before padding normalization)\n for (let i = 0; i < str.length; i++) {\n const c = str[i];\n if (c !== '=' && !base64Lookup.has(c)) {\n throw new DOMException(\n \"The string to be decoded is not correctly encoded.\",\n \"InvalidCharacterError\"\n );\n }\n }\n\n // Validate padding position (must be at end)\n const paddingIndex = str.indexOf('=');\n if (paddingIndex !== -1) {\n for (let i = paddingIndex; i < str.length; i++) {\n if (str[i] !== '=') {\n throw new DOMException(\n \"The string to be decoded is not correctly encoded.\",\n \"InvalidCharacterError\"\n );\n }\n }\n const paddingLength = str.length - paddingIndex;\n if (paddingLength > 2) {\n throw new DOMException(\n \"The string to be decoded is not correctly encoded.\",\n \"InvalidCharacterError\"\n );\n }\n }\n\n // Length without padding must be valid (can't have remainder of 1)\n const strWithoutPadding = str.replace(/=/g, '');\n if (strWithoutPadding.length % 4 === 1) {\n throw new DOMException(\n \"The string to be decoded is not correctly encoded.\",\n \"InvalidCharacterError\"\n );\n }\n\n // Pad to multiple of 4 if needed (for inputs without explicit padding)\n while (str.length % 4 !== 0) {\n str += '=';\n }\n\n let result = '';\n let i = 0;\n\n while (i < str.length) {\n const a = base64Lookup.get(str[i++]) ?? 0;\n const b = base64Lookup.get(str[i++]) ?? 0;\n const c = base64Lookup.get(str[i++]) ?? 0;\n const d = base64Lookup.get(str[i++]) ?? 0;\n\n const triplet = (a << 18) | (b << 12) | (c << 6) | d;\n\n result += String.fromCharCode((triplet >> 16) & 0xFF);\n if (str[i - 2] !== '=') {\n result += String.fromCharCode((triplet >> 8) & 0xFF);\n }\n if (str[i - 1] !== '=') {\n result += String.fromCharCode(triplet & 0xFF);\n }\n }\n\n return result;\n };\n\n // ============================================\n // Buffer implementation\n // ============================================\n\n const BUFFER_SYMBOL = Symbol.for('__isBuffer');\n\n class Buffer extends Uint8Array {\n constructor(arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n super(arg);\n } else if (typeof arg === 'string') {\n const bytes = stringToBytes(arg, encodingOrOffset || 'utf8');\n super(bytes);\n } else if (arg instanceof ArrayBuffer) {\n if (typeof encodingOrOffset === 'number') {\n super(arg, encodingOrOffset, length);\n } else {\n super(arg);\n }\n } else if (ArrayBuffer.isView(arg)) {\n super(arg.buffer, arg.byteOffset, arg.byteLength);\n } else if (Array.isArray(arg)) {\n super(arg);\n } else {\n super(arg);\n }\n Object.defineProperty(this, BUFFER_SYMBOL, { value: true, writable: false });\n }\n\n toString(encoding = 'utf8') {\n encoding = normalizeEncoding(encoding);\n if (encoding === 'utf8') {\n return new TextDecoder('utf-8').decode(this);\n } else if (encoding === 'latin1') {\n return bytesToLatin1(this);\n } else if (encoding === 'base64') {\n return bytesToBase64(this);\n } else if (encoding === 'hex') {\n return bytesToHex(this);\n }\n return new TextDecoder('utf-8').decode(this);\n }\n\n slice(start, end) {\n const sliced = super.slice(start, end);\n return Buffer.from(sliced);\n }\n\n subarray(start, end) {\n const sub = super.subarray(start, end);\n const buf = new Buffer(sub.length);\n buf.set(sub);\n return buf;\n }\n\n static from(value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return new Buffer(value, encodingOrOffset);\n }\n if (value instanceof ArrayBuffer) {\n if (typeof encodingOrOffset === 'number') {\n return new Buffer(value, encodingOrOffset, length);\n }\n return new Buffer(value);\n }\n if (ArrayBuffer.isView(value)) {\n return new Buffer(value);\n }\n if (Array.isArray(value)) {\n return new Buffer(value);\n }\n if (value && typeof value[Symbol.iterator] === 'function') {\n return new Buffer(Array.from(value));\n }\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object');\n }\n\n static alloc(size, fill, encoding) {\n if (typeof size !== 'number' || size < 0) {\n throw new RangeError('Invalid size');\n }\n const buf = new Buffer(size);\n if (fill !== undefined) {\n if (typeof fill === 'number') {\n buf.fill(fill);\n } else if (typeof fill === 'string') {\n const fillBytes = stringToBytes(fill, encoding || 'utf8');\n for (let i = 0; i < size; i++) {\n buf[i] = fillBytes[i % fillBytes.length];\n }\n } else if (Buffer.isBuffer(fill) || fill instanceof Uint8Array) {\n for (let i = 0; i < size; i++) {\n buf[i] = fill[i % fill.length];\n }\n }\n }\n return buf;\n }\n\n static allocUnsafe(size) {\n if (typeof size !== 'number' || size < 0) {\n throw new RangeError('Invalid size');\n }\n return new Buffer(size);\n }\n\n static concat(list, totalLength) {\n if (!Array.isArray(list)) {\n throw new TypeError('list argument must be an array');\n }\n if (list.length === 0) {\n return Buffer.alloc(0);\n }\n if (totalLength === undefined) {\n totalLength = 0;\n for (const buf of list) {\n totalLength += buf.length;\n }\n }\n const result = Buffer.alloc(totalLength);\n let offset = 0;\n for (const buf of list) {\n if (offset + buf.length > totalLength) {\n result.set(buf.subarray(0, totalLength - offset), offset);\n break;\n }\n result.set(buf, offset);\n offset += buf.length;\n }\n return result;\n }\n\n static isBuffer(obj) {\n return obj != null && obj[BUFFER_SYMBOL] === true;\n }\n\n static byteLength(string, encoding = 'utf8') {\n if (typeof string !== 'string') {\n if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {\n return string.byteLength;\n }\n throw new TypeError('First argument must be a string, Buffer, or ArrayBuffer');\n }\n encoding = normalizeEncoding(encoding);\n if (encoding === 'utf8') {\n return new TextEncoder().encode(string).length;\n } else if (encoding === 'latin1') {\n return string.length;\n } else if (encoding === 'base64') {\n const padding = (string.match(/=+$/) || [''])[0].length;\n return Math.floor((string.length * 3) / 4) - padding;\n } else if (encoding === 'hex') {\n return Math.floor(string.length / 2);\n }\n return new TextEncoder().encode(string).length;\n }\n\n static isEncoding(encoding) {\n return ['utf8', 'latin1', 'base64', 'hex'].includes(normalizeEncoding(encoding));\n }\n }\n\n function normalizeEncoding(encoding) {\n if (!encoding) return 'utf8';\n const lower = String(encoding).toLowerCase().replace(/-/g, '');\n if (lower === 'utf8') return 'utf8';\n if (lower === 'latin1' || lower === 'binary') return 'latin1';\n if (lower === 'base64') return 'base64';\n if (lower === 'hex') return 'hex';\n return lower;\n }\n\n function stringToBytes(str, encoding) {\n encoding = normalizeEncoding(encoding);\n if (encoding === 'utf8') {\n return new TextEncoder().encode(str);\n } else if (encoding === 'latin1') {\n return latin1ToBytes(str);\n } else if (encoding === 'base64') {\n return base64ToBytes(str);\n } else if (encoding === 'hex') {\n return hexToBytes(str);\n }\n return new TextEncoder().encode(str);\n }\n\n function base64ToBytes(str) {\n const binary = atob(str);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n\n function bytesToBase64(bytes) {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n\n function latin1ToBytes(str) {\n const bytes = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i) & 0xFF;\n }\n return bytes;\n }\n\n function bytesToLatin1(bytes) {\n let result = '';\n for (let i = 0; i < bytes.length; i++) {\n result += String.fromCharCode(bytes[i]);\n }\n return result;\n }\n\n function hexToBytes(str) {\n if (str.length % 2 !== 0) {\n throw new TypeError('Invalid hex string');\n }\n const bytes = new Uint8Array(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n const byte = parseInt(str.substr(i, 2), 16);\n if (isNaN(byte)) {\n throw new TypeError('Invalid hex string');\n }\n bytes[i / 2] = byte;\n }\n return bytes;\n }\n\n function bytesToHex(bytes) {\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n }\n\n globalThis.Buffer = Buffer;\n})();\n`;\n\n/**\n * Setup encoding APIs in an isolated-vm context\n *\n * Injects:\n * - atob/btoa for Base64 encoding/decoding\n * - Buffer class for binary data handling (utf8, base64, hex)\n *\n * @example\n * const handle = await setupEncoding(context);\n * await context.eval(`\n * const encoded = btoa(\"hello\");\n * const decoded = atob(encoded);\n * const buf = Buffer.from(\"hello\");\n * const hex = buf.toString(\"hex\");\n * `);\n */\nexport async function setupEncoding(\n context: ivm.Context\n): Promise<EncodingHandle> {\n context.evalSync(encodingCode);\n return {\n dispose() {\n // No resources to cleanup for pure JS injection\n },\n };\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";AAMA,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";AAMA,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuZrB,eAAsB,aAAa,CACjC,SACyB;AAAA,EACzB,QAAQ,SAAS,YAAY;AAAA,EAC7B,OAAO;AAAA,IACL,OAAO,GAAG;AAAA,EAGZ;AAAA;",
|
|
8
|
+
"debugId": "C9D73D528E7F3E3764756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2631,12 +2631,7 @@ async function setupFetch(context, options) {
|
|
|
2631
2631
|
__dispatchClientWebSocketEvent("${socketId}", "message", { data: "${safeData}" });
|
|
2632
2632
|
`);
|
|
2633
2633
|
} else {
|
|
2634
|
-
const
|
|
2635
|
-
let binary = "";
|
|
2636
|
-
for (let i = 0;i < bytes.byteLength; i++) {
|
|
2637
|
-
binary += String.fromCharCode(bytes[i]);
|
|
2638
|
-
}
|
|
2639
|
-
const base64 = Buffer.from(binary, "binary").toString("base64");
|
|
2634
|
+
const base64 = Buffer.from(data).toString("base64");
|
|
2640
2635
|
context.evalSync(`
|
|
2641
2636
|
__dispatchClientWebSocketEvent("${socketId}", "message", { data: "__BINARY__${base64}" });
|
|
2642
2637
|
`);
|
|
@@ -2678,4 +2673,4 @@ export {
|
|
|
2678
2673
|
clearAllInstanceState
|
|
2679
2674
|
};
|
|
2680
2675
|
|
|
2681
|
-
//# debugId=
|
|
2676
|
+
//# debugId=02D0DA614C41911664756E2164756E21
|