@poe-platform/safe-js 0.1.743 → 0.1.744

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.
Files changed (101) hide show
  1. package/README.md +4 -3
  2. package/dist/safe-js/chunks/{chunk-F6CV74HU.js → chunk-3NFTBEZR.js} +2 -3
  3. package/dist/safe-js/chunks/{chunk-LMS5SSTN.js → chunk-5WP5IRMP.js} +437 -388
  4. package/dist/safe-js/chunks/{chunk-47JWFV2B.js → chunk-6UP3B5TB.js} +7 -8
  5. package/dist/safe-js/chunks/{chunk-24Z6PSCN.js → chunk-6ZVFR4HR.js} +1 -2
  6. package/dist/safe-js/chunks/{chunk-J3CUCOMP.js → chunk-AB6ERQE5.js} +14798 -14210
  7. package/dist/safe-js/chunks/{chunk-4YIDX44G.js → chunk-CQ52GEHY.js} +0 -1
  8. package/dist/safe-js/chunks/chunk-DHGJSEFX.js +0 -0
  9. package/dist/safe-js/chunks/{chunk-GVKXZW53.js → chunk-DIG26TEI.js} +0 -1
  10. package/dist/safe-js/chunks/{chunk-JCVARKWT.js → chunk-DIMBVKHT.js} +6 -7
  11. package/dist/safe-js/chunks/{chunk-UQPYTZOZ.js → chunk-JCHJGIQA.js} +0 -1
  12. package/dist/safe-js/chunks/{chunk-IRYOK5BR.js → chunk-L265M6OS.js} +2 -3
  13. package/dist/safe-js/chunks/{chunk-3ITVV2R6.js → chunk-L3MIVH3T.js} +1 -2
  14. package/dist/safe-js/chunks/{chunk-AUVGHYM5.js → chunk-LRINZRJA.js} +2 -3
  15. package/dist/safe-js/chunks/{chunk-UIUJHTWG.js → chunk-MKY3MQUB.js} +3 -4
  16. package/dist/safe-js/chunks/{chunk-YDVEVDVT.js → chunk-MLJ4BKDX.js} +102 -20
  17. package/dist/safe-js/chunks/{chunk-YUQFFRUF.js → chunk-MMN3IESA.js} +1 -2
  18. package/dist/safe-js/chunks/{chunk-WEGFNME4.js → chunk-O3S3JVWS.js} +1 -2
  19. package/dist/safe-js/chunks/{chunk-2GVBG23M.js → chunk-ONWFPHUI.js} +0 -1
  20. package/dist/safe-js/chunks/chunk-OQYVEDRN.js +66 -0
  21. package/dist/safe-js/chunks/{chunk-EMH7CXQM.js → chunk-POEMWNHD.js} +1 -2
  22. package/dist/safe-js/chunks/{chunk-G6WTEIJJ.js → chunk-X3YCE3ZH.js} +1 -2
  23. package/dist/safe-js/chunks/{chunk-WWETRQCF.js → chunk-YYF5R6ML.js} +3 -4
  24. package/dist/safe-js/chunks/{cli-runtime-3SOHLG5M.js → cli-runtime-BGB24HNE.js} +19 -20
  25. package/dist/safe-js/chunks/{dump-CSLHITIE.js → dump-M7CMVXW7.js} +5 -6
  26. package/dist/safe-js/chunks/harness-4CPQ7WKS.js +10 -0
  27. package/dist/safe-js/chunks/mcp-7SNWIP5H.js +11 -0
  28. package/dist/safe-js/chunks/migration-file-CPBVNMLD.js +14 -0
  29. package/dist/safe-js/chunks/restore-FLH6OC5F.js +13 -0
  30. package/dist/safe-js/chunks/run-KFAD7GTT.js +19 -0
  31. package/dist/safe-js/chunks/runtime-modules-D6NO4KJW.js +10 -0
  32. package/dist/safe-js/chunks/source-files-BSDM22Y2.js +9 -0
  33. package/dist/safe-js/cli.js +5 -6
  34. package/dist/safe-js/core.d.ts +1 -1
  35. package/dist/safe-js/core.js +14 -15
  36. package/dist/safe-js/extensions.d.ts +17 -0
  37. package/dist/safe-js/index.d.ts +2 -2
  38. package/dist/safe-js/index.js +22 -23
  39. package/dist/safe-js/interp/arguments.d.ts +2 -0
  40. package/dist/safe-js/interp/collection-properties.d.ts +2 -0
  41. package/dist/safe-js/interp/data-copy.d.ts +2 -0
  42. package/dist/safe-js/interp/host-bridge.d.ts +5 -0
  43. package/dist/safe-js/interp/host-capabilities.d.ts +5 -0
  44. package/dist/safe-js/interp/internal-symbols.d.ts +1 -0
  45. package/dist/safe-js/interp/interpreter.d.ts +3 -1
  46. package/dist/safe-js/interp/regex/compile-guard.d.ts +6 -4
  47. package/dist/safe-js/interp/template-cache.d.ts +5 -0
  48. package/dist/safe-js/interp/values.d.ts +11 -0
  49. package/dist/safe-js/modules/fs.d.ts +4 -3
  50. package/dist/safe-js/modules/fs.js +8 -9
  51. package/dist/safe-js/platform/context.d.ts +14 -0
  52. package/dist/safe-js/platform/node.d.ts +16 -0
  53. package/dist/safe-js/platform/types.d.ts +18 -0
  54. package/dist/safe-js/platform/workerd.d.ts +21 -0
  55. package/dist/safe-js/restore.d.ts +1 -1
  56. package/dist/safe-js/snapshot/validation.d.ts +2 -1
  57. package/package.json +5 -5
  58. package/dist/safe-js/chunks/chunk-24Z6PSCN.js.map +0 -7
  59. package/dist/safe-js/chunks/chunk-2GVBG23M.js.map +0 -7
  60. package/dist/safe-js/chunks/chunk-3ITVV2R6.js.map +0 -7
  61. package/dist/safe-js/chunks/chunk-47JWFV2B.js.map +0 -7
  62. package/dist/safe-js/chunks/chunk-4YIDX44G.js.map +0 -7
  63. package/dist/safe-js/chunks/chunk-AUVGHYM5.js.map +0 -7
  64. package/dist/safe-js/chunks/chunk-EMH7CXQM.js.map +0 -7
  65. package/dist/safe-js/chunks/chunk-F6CV74HU.js.map +0 -7
  66. package/dist/safe-js/chunks/chunk-G6WTEIJJ.js.map +0 -7
  67. package/dist/safe-js/chunks/chunk-GVKXZW53.js.map +0 -7
  68. package/dist/safe-js/chunks/chunk-IRYOK5BR.js.map +0 -7
  69. package/dist/safe-js/chunks/chunk-J3CUCOMP.js.map +0 -7
  70. package/dist/safe-js/chunks/chunk-JCVARKWT.js.map +0 -7
  71. package/dist/safe-js/chunks/chunk-LMS5SSTN.js.map +0 -7
  72. package/dist/safe-js/chunks/chunk-U7ZNMTSQ.js +0 -1
  73. package/dist/safe-js/chunks/chunk-U7ZNMTSQ.js.map +0 -7
  74. package/dist/safe-js/chunks/chunk-UIUJHTWG.js.map +0 -7
  75. package/dist/safe-js/chunks/chunk-UQPYTZOZ.js.map +0 -7
  76. package/dist/safe-js/chunks/chunk-V72WS373.js +0 -128
  77. package/dist/safe-js/chunks/chunk-V72WS373.js.map +0 -7
  78. package/dist/safe-js/chunks/chunk-WEGFNME4.js.map +0 -7
  79. package/dist/safe-js/chunks/chunk-WWETRQCF.js.map +0 -7
  80. package/dist/safe-js/chunks/chunk-YDVEVDVT.js.map +0 -7
  81. package/dist/safe-js/chunks/chunk-YUQFFRUF.js.map +0 -7
  82. package/dist/safe-js/chunks/cli-runtime-3SOHLG5M.js.map +0 -7
  83. package/dist/safe-js/chunks/dump-CSLHITIE.js.map +0 -7
  84. package/dist/safe-js/chunks/harness-QKPVLVOT.js +0 -11
  85. package/dist/safe-js/chunks/harness-QKPVLVOT.js.map +0 -7
  86. package/dist/safe-js/chunks/mcp-A4YKQCIS.js +0 -12
  87. package/dist/safe-js/chunks/mcp-A4YKQCIS.js.map +0 -7
  88. package/dist/safe-js/chunks/migration-file-QCZTVXEU.js +0 -15
  89. package/dist/safe-js/chunks/migration-file-QCZTVXEU.js.map +0 -7
  90. package/dist/safe-js/chunks/restore-22OGYS6N.js +0 -14
  91. package/dist/safe-js/chunks/restore-22OGYS6N.js.map +0 -7
  92. package/dist/safe-js/chunks/run-EMFOFJ22.js +0 -20
  93. package/dist/safe-js/chunks/run-EMFOFJ22.js.map +0 -7
  94. package/dist/safe-js/chunks/runtime-modules-QCVDLUVF.js +0 -11
  95. package/dist/safe-js/chunks/runtime-modules-QCVDLUVF.js.map +0 -7
  96. package/dist/safe-js/chunks/source-files-L3SGK63Z.js +0 -10
  97. package/dist/safe-js/chunks/source-files-L3SGK63Z.js.map +0 -7
  98. package/dist/safe-js/cli.js.map +0 -7
  99. package/dist/safe-js/core.js.map +0 -7
  100. package/dist/safe-js/index.js.map +0 -7
  101. package/dist/safe-js/modules/fs.js.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/modules/source-files.ts"],
4
- "sourcesContent": ["import {hostFs, fsConstants as constants} from \"#safe-js-platform\";\nimport {resolvePath, type FileSystem, type FileStat} from \"@poe-code/safe-fs/core\";\n\nimport path from \"./paths.js\";\nimport type {SourceResolver} from \"./source-graph.js\";\n\n/** Explicit filesystem grant. No package lookup, extension search, or URL loading. */\nexport async function createRootedSourceResolver(root: string, adapter?: FileSystem): Promise<SourceResolver & {\n entryId(filename?: string): Promise<string>;\n}> {\n const realpath = (filename: string) => adapter ? adapter.realpath(filename) : hostFs.realpath(filename);\n const stat = async (filename: string) => adapter ? sourceStat(await adapter.stat(filename)) : await hostFs.stat(filename);\n const granted = adapter ? resolvePath(\"/\", root) : path.resolve(root);\n const directory = await realpath(granted);\n if (!(await stat(directory)).isDirectory()) throw new TypeError(\"Source module root must be a directory.\");\n const contains = (filename: string) => {\n const relative = path.relative(directory,filename);\n return relative !== \"..\" && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);\n };\n const resolver: SourceResolver = async (specifier,referrer,{signal}) => {\n signal?.throwIfAborted();\n if ((!specifier.startsWith(\"./\") && !specifier.startsWith(\"../\")) || !path.isAbsolute(referrer)) return undefined;\n const relative = path.relative(granted,referrer);\n const canonicalReferrer = relative !== \"..\" && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative)\n ? path.resolve(directory,relative) : referrer;\n if (!contains(canonicalReferrer)) return undefined;\n const candidate = path.resolve(path.dirname(canonicalReferrer),specifier);\n if (!contains(candidate)) return undefined;\n try {\n const id = await realpath(candidate);\n signal?.throwIfAborted();\n if (!contains(id)) return undefined;\n const expected = await stat(id);\n signal?.throwIfAborted();\n if (!expected.isFile()) return undefined;\n const handle = adapter\n ? await openSourceFile(adapter, id, signal)\n : await hostFs.open(id,constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n try {\n signal?.throwIfAborted();\n const actual = await handle.stat();\n signal?.throwIfAborted();\n // Read the checked inode, never reopen its pathname. These checks deny\n // observed replacements; Node's path APIs do not provide atomic ancestor\n // confinement against an adversary repeatedly swapping directories.\n if (!actual.isFile() || (\"identity\" in actual && \"identity\" in expected\n ? !sameSourceIdentity(actual.identity, expected.identity)\n : actual.dev !== expected.dev || actual.ino !== expected.ino)) return undefined;\n const currentId = await realpath(id);\n signal?.throwIfAborted();\n if (currentId !== id) return undefined;\n const source = await handle.readFile({encoding:\"utf8\",signal});\n signal?.throwIfAborted();\n return {id,source};\n } finally {await handle.close();}\n } catch (error) {\n signal?.throwIfAborted();\n if (error !== null && typeof error === \"object\" && \"code\" in error &&\n [\"ENOENT\",\"ENOTDIR\",\"ELOOP\"].includes(String(error.code))) return undefined;\n throw error;\n }\n };\n return Object.assign(resolver, {async entryId(filename?: string): Promise<string> {\n if (filename === undefined) return path.join(directory,\"<entry>\");\n const supplied = path.resolve(granted,filename);\n const relative = path.relative(granted,supplied);\n const candidate = relative !== \"..\" && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative)\n ? path.resolve(directory,relative) : supplied;\n if (!contains(candidate)) throw new TypeError(\"Source entry must be inside its granted root.\");\n try {\n const id = await realpath(candidate);\n if (!contains(id)) throw new TypeError(\"Source entry must be inside its granted root.\");\n return id;\n } catch (error) {\n if (error !== null && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") return candidate;\n throw error;\n }\n }});\n}\n\nfunction sourceStat(value: FileStat) {\n return {identity: value, dev: value.dev, ino: value.ino,\n isFile: () => value.type === \"file\", isDirectory: () => value.type === \"directory\"};\n}\n\nfunction sameSourceIdentity(actual: FileStat, expected: FileStat): boolean {\n if (expected.identityScope !== undefined && expected.opaqueIdentity !== undefined) {\n return actual.identityScope === expected.identityScope && actual.opaqueIdentity === expected.opaqueIdentity &&\n (expected.opaqueVersion === undefined || actual.opaqueVersion === expected.opaqueVersion);\n }\n return expected.dev !== undefined && expected.ino !== undefined && actual.dev === expected.dev && actual.ino === expected.ino;\n}\n\nasync function openSourceFile(adapter: FileSystem, id: string, signal?: AbortSignal) {\n if (!adapter.openReadFile) throw new TypeError(\"Source filesystem must support retained reads.\");\n const handle = await adapter.openReadFile(id, signal ? {signal} : {});\n return {\n stat: async () => sourceStat(await handle.stat(signal ? {signal} : {})),\n close: handle.close.bind(handle),\n async readFile(_options: {encoding: \"utf8\"; signal?: AbortSignal}) {\n const decoder = new TextDecoder(\"utf-8\", {ignoreBOM: true});\n const chunks: string[] = [];\n let position = 0;\n for (;;) {\n signal?.throwIfAborted();\n const chunk = await handle.read(position, 64 * 1024, signal ? {signal} : {});\n if (chunk.byteLength === 0) break;\n chunks.push(decoder.decode(chunk, {stream: true}));\n position += chunk.byteLength;\n }\n chunks.push(decoder.decode());\n return chunks.join(\"\");\n }\n };\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/output-stream.ts"],
4
- "sourcesContent": ["import { hasOwnErrorCode } from \"./error-codes.js\";\n\nexport type OutputStream = {\n off?(event: \"error\", listener: (error: unknown) => void): void;\n on?(event: \"error\", listener: (error: unknown) => void): void;\n write(chunk: string): void;\n};\n\nexport type BrokenPipeState = {\n closed: boolean;\n};\n\nexport function createBrokenPipeState(): BrokenPipeState {\n return { closed: false };\n}\n\nexport function createSafeOutputStream(\n stream: OutputStream,\n brokenPipe: BrokenPipeState\n): OutputStream {\n return {\n write(chunk) {\n if (brokenPipe.closed) {\n return;\n }\n\n try {\n stream.write(chunk);\n } catch (error) {\n if (isBrokenPipeError(error)) {\n brokenPipe.closed = true;\n return;\n }\n\n throw error;\n }\n }\n };\n}\n\nexport async function withBrokenPipeGuard<TResult>(\n streams: readonly OutputStream[],\n brokenPipe: BrokenPipeState,\n callback: () => Promise<TResult>\n): Promise<TResult> {\n const removeListeners = streams.map((stream) => addBrokenPipeListener(stream, brokenPipe));\n\n try {\n return await callback();\n } finally {\n for (const removeListener of removeListeners) {\n removeListener();\n }\n }\n}\n\nexport function addBrokenPipeListener(\n stream: OutputStream,\n brokenPipe: BrokenPipeState\n): () => void {\n const onError = (error: unknown) => {\n if (isBrokenPipeError(error)) {\n brokenPipe.closed = true;\n return;\n }\n\n throw error;\n };\n\n stream.on?.(\"error\", onError);\n return () => {\n stream.off?.(\"error\", onError);\n };\n}\n\nfunction isBrokenPipeError(error: unknown): boolean {\n return hasOwnErrorCode(error, \"EPIPE\");\n}\n"],
5
- "mappings": ";;;;;AAYO,SAAS,wBAAyC;AACvD,SAAO,EAAE,QAAQ,MAAM;AACzB;AAEO,SAAS,uBACd,QACA,YACc;AACd,SAAO;AAAA,IACL,MAAM,OAAO;AACX,UAAI,WAAW,QAAQ;AACrB;AAAA,MACF;AAEA,UAAI;AACF,eAAO,MAAM,KAAK;AAAA,MACpB,SAAS,OAAO;AACd,YAAI,kBAAkB,KAAK,GAAG;AAC5B,qBAAW,SAAS;AACpB;AAAA,QACF;AAEA,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,oBACpB,SACA,YACA,UACkB;AAClB,QAAM,kBAAkB,QAAQ,IAAI,CAAC,WAAW,sBAAsB,QAAQ,UAAU,CAAC;AAEzF,MAAI;AACF,WAAO,MAAM,SAAS;AAAA,EACxB,UAAE;AACA,eAAW,kBAAkB,iBAAiB;AAC5C,qBAAe;AAAA,IACjB;AAAA,EACF;AACF;AAEO,SAAS,sBACd,QACA,YACY;AACZ,QAAM,UAAU,CAAC,UAAmB;AAClC,QAAI,kBAAkB,KAAK,GAAG;AAC5B,iBAAW,SAAS;AACpB;AAAA,IACF;AAEA,UAAM;AAAA,EACR;AAEA,SAAO,KAAK,SAAS,OAAO;AAC5B,SAAO,MAAM;AACX,WAAO,MAAM,SAAS,OAAO;AAAA,EAC/B;AACF;AAEA,SAAS,kBAAkB,OAAyB;AAClD,SAAO,gBAAgB,OAAO,OAAO;AACvC;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/modules/fs-codec.ts"],
4
- "sourcesContent": ["import type { FsBridgeCodec } from \"@poe-code/safe-fs/core\";\n\nconst encodings = new Set([\"ascii\", \"utf8\", \"utf-8\", \"utf16le\", \"utf-16le\", \"ucs2\", \"ucs-2\", \"base64\", \"base64url\", \"latin1\", \"binary\", \"hex\"]);\nconst utf8 = new TextEncoder();\nexport const fsCodec: FsBridgeCodec = {\n isEncoding: encoding => encodings.has(encoding.toLowerCase()),\n encode(text, encoding) {\n const name = encoding.toLowerCase();\n if (name === \"utf8\" || name === \"utf-8\") return utf8.encode(text);\n if (name === \"hex\") {\n const bytes: number[] = [];\n const digits = \"0123456789abcdef\";\n for (let i = 0; i + 1 < text.length; i += 2) {\n const high = digits.indexOf(text[i]!.toLowerCase());\n const low = digits.indexOf(text[i + 1]!.toLowerCase());\n if (high < 0 || low < 0) break;\n bytes.push(high * 16 + low);\n }\n return Uint8Array.from(bytes);\n }\n if (name === \"base64\" || name === \"base64url\") {\n const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n const bytes: number[] = [];\n let bits = 0, count = 0;\n for (const char of text) {\n if (char === \"=\") break;\n const digit = alphabet.indexOf(char === \"-\" ? \"+\" : char === \"_\" ? \"/\" : char);\n if (digit < 0) continue;\n bits = (bits << 6) | digit; count += 6;\n if (count >= 8) { count -= 8; bytes.push((bits >>> count) & 255); }\n }\n return Uint8Array.from(bytes);\n }\n if ([\"utf16le\", \"utf-16le\", \"ucs2\", \"ucs-2\"].includes(name)) {\n const bytes = new Uint8Array(text.length * 2);\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i); bytes[i * 2] = code & 255; bytes[i * 2 + 1] = code >>> 8;\n }\n return bytes;\n }\n if ([\"ascii\", \"latin1\", \"binary\"].includes(name)) return Uint8Array.from(text.split(\"\"), char => char.charCodeAt(0) & 255);\n throw new TypeError(\"Invalid encoding\");\n },\n decode(bytes, encoding) {\n const name = encoding.toLowerCase();\n if (name === \"utf8\" || name === \"utf-8\") return new TextDecoder(\"utf-8\", { ignoreBOM: true }).decode(bytes);\n if (name === \"hex\") return Array.from(bytes, byte => byte.toString(16).padStart(2, \"0\")).join(\"\");\n if (name === \"base64\" || name === \"base64url\") {\n const alphabet = name === \"base64\" ? \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\" : \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n let result = \"\";\n for (let i = 0; i < bytes.length; i += 3) {\n const a = bytes[i]!, b = bytes[i + 1], c = bytes[i + 2];\n result += alphabet[a >>> 2]! + alphabet[((a & 3) << 4) | ((b ?? 0) >>> 4)]!;\n result += b === undefined ? (name === \"base64\" ? \"==\" : \"\") : alphabet[((b & 15) << 2) | ((c ?? 0) >>> 6)]! + (c === undefined ? (name === \"base64\" ? \"=\" : \"\") : alphabet[c & 63]!);\n }\n return result;\n }\n let result = \"\";\n if ([\"utf16le\", \"utf-16le\", \"ucs2\", \"ucs-2\"].includes(name)) {\n for (let i = 0; i + 1 < bytes.length; i += 2) result += String.fromCharCode(bytes[i]! | bytes[i + 1]! << 8);\n } else if ([\"ascii\", \"latin1\", \"binary\"].includes(name)) {\n for (const byte of bytes) result += String.fromCharCode(name === \"ascii\" ? byte & 127 : byte);\n } else throw new TypeError(\"Invalid encoding\");\n return result;\n }\n};\n"],
5
- "mappings": "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",
6
- "names": ["result"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/snapshot/dump.ts"],
4
- "sourcesContent": ["import type { HostCallbackContext } from \"../interp/host-callback-context.js\";\n\nimport type { RunResult, RunSnapshot } from \"../run.js\";\nimport { serializeSafeJSSnapshot } from \"./dump-format.js\";\nimport { SandboxError } from \"../interp/budget.js\";\nimport { SnapshotNotReadyError } from \"./not-ready.js\";\n\nconst RUN_DUMP_CONTROLLER = Symbol(\"SafeJS.run-dump-controller\");\n\nexport type DumpOptions = {\n mode?: \"capture\" | \"replay\";\n onFailure?: \"throw\" | \"checkpoint\";\n};\n\ntype DumpController = {\n fail(error: unknown): void;\n finalize(snapshot: RunSnapshot): void;\n onYield(createSnapshot: () => RunSnapshot): void;\n requestCurrentSnapshot(options?: DumpOptions): Promise<string>;\n requestSnapshot(options?: DumpOptions): Promise<string>;\n};\n\nexport type RunLifecycle = {\n hostCallbackContext: HostCallbackContext;\n hostCallbackDepth: number;\n};\n\ntype DumpableRunResult = Promise<RunResult> & {\n [RUN_DUMP_CONTROLLER]?: DumpController;\n};\n\nexport function attachDumpController(\n result: Promise<RunResult>,\n controller: DumpController\n): Promise<RunResult> {\n Object.defineProperty(result, RUN_DUMP_CONTROLLER, {\n configurable: false,\n enumerable: false,\n value: controller,\n writable: false\n });\n\n return result;\n}\n\nexport function createDumpController(lifecycle?: RunLifecycle, pause?: {\n isPaused(): boolean;\n snapshot(): RunSnapshot | undefined;\n}): DumpController {\n let finished = false;\n let failed:\n | {\n error: unknown;\n }\n | undefined;\n let finalSnapshot: RunSnapshot | undefined;\n let latestSnapshot: RunSnapshot | undefined;\n let latestSnapshotFactory: (() => RunSnapshot) | undefined;\n let pendingRequest:\n | {\n promise: Promise<string>;\n reject: (error: unknown) => void;\n resolve: (snapshot: string) => void;\n }\n | undefined;\n\n return {\n fail(error) {\n finished = true;\n failed = {\n error\n };\n\n if (pendingRequest === undefined) {\n return;\n }\n\n pendingRequest.reject(error);\n pendingRequest = undefined;\n },\n finalize(snapshot) {\n finished = true;\n finalSnapshot = snapshot;\n latestSnapshot = snapshot;\n latestSnapshotFactory = undefined;\n\n if (pendingRequest !== undefined) {\n settlePendingSnapshot(snapshot);\n }\n },\n onYield(createSnapshot) {\n latestSnapshot = undefined;\n latestSnapshotFactory = createSnapshot;\n\n if (pendingRequest === undefined) {\n return;\n }\n\n settlePendingSnapshot(createSnapshot());\n },\n requestCurrentSnapshot(options = {}) {\n assertDumpAllowed(options);\n if (failed !== undefined) {\n return Promise.reject(failed.error);\n }\n const paused = pausedSnapshot();\n if (paused !== undefined) return paused;\n\n if (latestSnapshot !== undefined || latestSnapshotFactory !== undefined) {\n try {\n return Promise.resolve(serializeRunSnapshot(latestSnapshot ?? latestSnapshotFactory!()));\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n return this.requestSnapshot(options);\n },\n requestSnapshot(options = {}) {\n assertDumpAllowed(options);\n const paused = pausedSnapshot();\n if (paused !== undefined) return paused;\n if (failed !== undefined) {\n if (\n (options.onFailure === \"checkpoint\" ||\n (options.onFailure === undefined && isDataBudgetError(failed.error))) &&\n finalSnapshot !== undefined\n ) {\n try {\n return Promise.resolve(serializeRunSnapshot(finalSnapshot));\n } catch (error) {\n return Promise.reject(error);\n }\n }\n return Promise.reject(failed.error);\n }\n\n if (finished) {\n if (finalSnapshot === undefined) {\n throw new Error(\"Run completed without producing a snapshot.\");\n }\n\n try {\n const serializedSnapshot = serializeRunSnapshot(finalSnapshot);\n return Promise.resolve(serializedSnapshot);\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n if (\n options.mode === \"replay\" &&\n (latestSnapshot !== undefined || latestSnapshotFactory !== undefined)\n ) {\n return this.requestCurrentSnapshot(options);\n }\n\n if (pendingRequest !== undefined) {\n return pendingRequest.promise;\n }\n\n let resolveSnapshot: (snapshot: string) => void = () => undefined;\n let rejectSnapshot: (error: unknown) => void = () => undefined;\n const promise = new Promise<string>((resolve, reject) => {\n resolveSnapshot = resolve;\n rejectSnapshot = reject;\n });\n\n pendingRequest = {\n promise,\n reject: rejectSnapshot,\n resolve: resolveSnapshot\n };\n\n return promise;\n }\n };\n\n function pausedSnapshot(): Promise<string> | undefined {\n if (pause?.isPaused() !== true) return;\n try {\n const snapshot = pause.snapshot();\n if (snapshot === undefined) throw new Error(\"Execution paused before snapshot initialization.\");\n return Promise.resolve(serializeRunSnapshot(snapshot));\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n function assertDumpAllowed(options: DumpOptions): void {\n if (\n (lifecycle?.hostCallbackDepth ?? 0) > 0 &&\n ((options.mode !== \"replay\" && pause?.isPaused() !== true) || lifecycle?.hostCallbackContext.getStore() === true)\n ) {\n throw new SandboxError(\"reentry\");\n }\n }\n\n function settlePendingSnapshot(snapshot: RunSnapshot): void {\n try {\n settlePendingRequest(serializeRunSnapshot(snapshot));\n } catch (error) {\n if (!finished && error instanceof SnapshotNotReadyError) return;\n pendingRequest?.reject(error);\n pendingRequest = undefined;\n }\n }\n\n function settlePendingRequest(snapshot: string): void {\n if (pendingRequest === undefined) {\n return;\n }\n\n pendingRequest.resolve(snapshot);\n pendingRequest = undefined;\n }\n}\n\nfunction isDataBudgetError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === \"budgetExceeded\" &&\n \"budget\" in error &&\n error.budget === \"dataSize\"\n );\n}\n\nexport function dump(\n result: Pick<RunResult, \"snapshot\"> | PromiseLike<RunResult>,\n options: DumpOptions = {}\n): Promise<string> {\n const controller = readDumpController(result);\n\n if (controller !== undefined) {\n return controller.requestSnapshot(options);\n }\n\n if (hasSnapshot(result)) {\n try {\n return Promise.resolve(serializeRunSnapshot(result.snapshot));\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n return Promise.resolve(result).then((resolved) => {\n if (!hasSnapshot(resolved)) {\n throw new Error(\"Run completed without producing a snapshot.\");\n }\n\n return serializeRunSnapshot(resolved.snapshot);\n });\n}\n\nexport function dumpCurrent(\n result: Pick<RunResult, \"snapshot\"> | PromiseLike<RunResult>\n): Promise<string> {\n const controller = readDumpController(result);\n\n if (controller !== undefined) {\n return controller.requestCurrentSnapshot();\n }\n\n return dump(result);\n}\n\nexport function serializeRunSnapshot(snapshot: RunSnapshot): string {\n return serializeSafeJSSnapshot(snapshot);\n}\n\nfunction hasSnapshot(value: unknown): value is Pick<RunResult, \"snapshot\"> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Object.prototype.hasOwnProperty.call(value, \"snapshot\")\n );\n}\n\nfunction readDumpController(value: unknown): DumpController | undefined {\n if (typeof value !== \"object\" || value === null) {\n return undefined;\n }\n\n return (value as DumpableRunResult)[RUN_DUMP_CONTROLLER];\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }