@poe-platform/safe-js 0.1.743 → 0.1.745
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/README.md +4 -3
- package/dist/safe-js/chunks/{chunk-F6CV74HU.js → chunk-3NFTBEZR.js} +2 -3
- package/dist/safe-js/chunks/{chunk-LMS5SSTN.js → chunk-5WP5IRMP.js} +437 -388
- package/dist/safe-js/chunks/{chunk-47JWFV2B.js → chunk-6UP3B5TB.js} +7 -8
- package/dist/safe-js/chunks/{chunk-24Z6PSCN.js → chunk-6ZVFR4HR.js} +1 -2
- package/dist/safe-js/chunks/{chunk-J3CUCOMP.js → chunk-AB6ERQE5.js} +14798 -14210
- package/dist/safe-js/chunks/{chunk-4YIDX44G.js → chunk-CQ52GEHY.js} +0 -1
- package/dist/safe-js/chunks/chunk-DHGJSEFX.js +0 -0
- package/dist/safe-js/chunks/{chunk-GVKXZW53.js → chunk-DIG26TEI.js} +0 -1
- package/dist/safe-js/chunks/{chunk-JCVARKWT.js → chunk-DIMBVKHT.js} +6 -7
- package/dist/safe-js/chunks/{chunk-UQPYTZOZ.js → chunk-JCHJGIQA.js} +0 -1
- package/dist/safe-js/chunks/{chunk-IRYOK5BR.js → chunk-L265M6OS.js} +2 -3
- package/dist/safe-js/chunks/{chunk-3ITVV2R6.js → chunk-L3MIVH3T.js} +1 -2
- package/dist/safe-js/chunks/{chunk-AUVGHYM5.js → chunk-LRINZRJA.js} +2 -3
- package/dist/safe-js/chunks/{chunk-UIUJHTWG.js → chunk-MKY3MQUB.js} +3 -4
- package/dist/safe-js/chunks/{chunk-YDVEVDVT.js → chunk-MLJ4BKDX.js} +102 -20
- package/dist/safe-js/chunks/{chunk-YUQFFRUF.js → chunk-MMN3IESA.js} +1 -2
- package/dist/safe-js/chunks/{chunk-WEGFNME4.js → chunk-O3S3JVWS.js} +1 -2
- package/dist/safe-js/chunks/{chunk-2GVBG23M.js → chunk-ONWFPHUI.js} +0 -1
- package/dist/safe-js/chunks/chunk-OQYVEDRN.js +66 -0
- package/dist/safe-js/chunks/{chunk-EMH7CXQM.js → chunk-POEMWNHD.js} +1 -2
- package/dist/safe-js/chunks/{chunk-G6WTEIJJ.js → chunk-X3YCE3ZH.js} +1 -2
- package/dist/safe-js/chunks/{chunk-WWETRQCF.js → chunk-YYF5R6ML.js} +3 -4
- package/dist/safe-js/chunks/{cli-runtime-3SOHLG5M.js → cli-runtime-BGB24HNE.js} +19 -20
- package/dist/safe-js/chunks/{dump-CSLHITIE.js → dump-M7CMVXW7.js} +5 -6
- package/dist/safe-js/chunks/harness-4CPQ7WKS.js +10 -0
- package/dist/safe-js/chunks/mcp-7SNWIP5H.js +11 -0
- package/dist/safe-js/chunks/migration-file-CPBVNMLD.js +14 -0
- package/dist/safe-js/chunks/restore-FLH6OC5F.js +13 -0
- package/dist/safe-js/chunks/run-KFAD7GTT.js +19 -0
- package/dist/safe-js/chunks/runtime-modules-D6NO4KJW.js +10 -0
- package/dist/safe-js/chunks/source-files-BSDM22Y2.js +9 -0
- package/dist/safe-js/cli.js +5 -6
- package/dist/safe-js/core.d.ts +1 -1
- package/dist/safe-js/core.js +14 -15
- package/dist/safe-js/extensions.d.ts +17 -0
- package/dist/safe-js/index.d.ts +2 -2
- package/dist/safe-js/index.js +22 -23
- package/dist/safe-js/interp/arguments.d.ts +2 -0
- package/dist/safe-js/interp/collection-properties.d.ts +2 -0
- package/dist/safe-js/interp/data-copy.d.ts +2 -0
- package/dist/safe-js/interp/host-bridge.d.ts +5 -0
- package/dist/safe-js/interp/host-capabilities.d.ts +5 -0
- package/dist/safe-js/interp/internal-symbols.d.ts +1 -0
- package/dist/safe-js/interp/interpreter.d.ts +3 -1
- package/dist/safe-js/interp/regex/compile-guard.d.ts +6 -4
- package/dist/safe-js/interp/template-cache.d.ts +5 -0
- package/dist/safe-js/interp/values.d.ts +11 -0
- package/dist/safe-js/modules/fs.d.ts +4 -3
- package/dist/safe-js/modules/fs.js +8 -9
- package/dist/safe-js/platform/context.d.ts +14 -0
- package/dist/safe-js/platform/node.d.ts +16 -0
- package/dist/safe-js/platform/types.d.ts +18 -0
- package/dist/safe-js/platform/workerd.d.ts +21 -0
- package/dist/safe-js/restore.d.ts +1 -1
- package/dist/safe-js/snapshot/validation.d.ts +2 -1
- package/package.json +5 -5
- package/dist/safe-js/chunks/chunk-24Z6PSCN.js.map +0 -7
- package/dist/safe-js/chunks/chunk-2GVBG23M.js.map +0 -7
- package/dist/safe-js/chunks/chunk-3ITVV2R6.js.map +0 -7
- package/dist/safe-js/chunks/chunk-47JWFV2B.js.map +0 -7
- package/dist/safe-js/chunks/chunk-4YIDX44G.js.map +0 -7
- package/dist/safe-js/chunks/chunk-AUVGHYM5.js.map +0 -7
- package/dist/safe-js/chunks/chunk-EMH7CXQM.js.map +0 -7
- package/dist/safe-js/chunks/chunk-F6CV74HU.js.map +0 -7
- package/dist/safe-js/chunks/chunk-G6WTEIJJ.js.map +0 -7
- package/dist/safe-js/chunks/chunk-GVKXZW53.js.map +0 -7
- package/dist/safe-js/chunks/chunk-IRYOK5BR.js.map +0 -7
- package/dist/safe-js/chunks/chunk-J3CUCOMP.js.map +0 -7
- package/dist/safe-js/chunks/chunk-JCVARKWT.js.map +0 -7
- package/dist/safe-js/chunks/chunk-LMS5SSTN.js.map +0 -7
- package/dist/safe-js/chunks/chunk-U7ZNMTSQ.js +0 -1
- package/dist/safe-js/chunks/chunk-U7ZNMTSQ.js.map +0 -7
- package/dist/safe-js/chunks/chunk-UIUJHTWG.js.map +0 -7
- package/dist/safe-js/chunks/chunk-UQPYTZOZ.js.map +0 -7
- package/dist/safe-js/chunks/chunk-V72WS373.js +0 -128
- package/dist/safe-js/chunks/chunk-V72WS373.js.map +0 -7
- package/dist/safe-js/chunks/chunk-WEGFNME4.js.map +0 -7
- package/dist/safe-js/chunks/chunk-WWETRQCF.js.map +0 -7
- package/dist/safe-js/chunks/chunk-YDVEVDVT.js.map +0 -7
- package/dist/safe-js/chunks/chunk-YUQFFRUF.js.map +0 -7
- package/dist/safe-js/chunks/cli-runtime-3SOHLG5M.js.map +0 -7
- package/dist/safe-js/chunks/dump-CSLHITIE.js.map +0 -7
- package/dist/safe-js/chunks/harness-QKPVLVOT.js +0 -11
- package/dist/safe-js/chunks/harness-QKPVLVOT.js.map +0 -7
- package/dist/safe-js/chunks/mcp-A4YKQCIS.js +0 -12
- package/dist/safe-js/chunks/mcp-A4YKQCIS.js.map +0 -7
- package/dist/safe-js/chunks/migration-file-QCZTVXEU.js +0 -15
- package/dist/safe-js/chunks/migration-file-QCZTVXEU.js.map +0 -7
- package/dist/safe-js/chunks/restore-22OGYS6N.js +0 -14
- package/dist/safe-js/chunks/restore-22OGYS6N.js.map +0 -7
- package/dist/safe-js/chunks/run-EMFOFJ22.js +0 -20
- package/dist/safe-js/chunks/run-EMFOFJ22.js.map +0 -7
- package/dist/safe-js/chunks/runtime-modules-QCVDLUVF.js +0 -11
- package/dist/safe-js/chunks/runtime-modules-QCVDLUVF.js.map +0 -7
- package/dist/safe-js/chunks/source-files-L3SGK63Z.js +0 -10
- package/dist/safe-js/chunks/source-files-L3SGK63Z.js.map +0 -7
- package/dist/safe-js/cli.js.map +0 -7
- package/dist/safe-js/core.js.map +0 -7
- package/dist/safe-js/index.js.map +0 -7
- package/dist/safe-js/modules/fs.js.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/migration-file.ts", "../../src/migrate.ts"],
|
|
4
|
-
"sourcesContent": ["import { hostFs, hostCwd } from \"#safe-js-platform\";\nimport {createFsBridge, type FileSystem} from \"@poe-code/safe-fs/core\";\nimport {fsCodec} from \"./modules/fs-codec.js\";\nimport path from \"./modules/paths.js\";\nimport { hasOwnErrorCode } from \"./error-codes.js\";\n\nimport {\n inspectSnapshotMigration,\n migrateSnapshot,\n type SnapshotMigrationOptions\n} from \"./migrate.js\";\nimport type { SafeJSSnapshot } from \"./restore.js\";\nimport { serializeSafeJSSnapshot } from \"./snapshot/dump-format.js\";\n\nexport type SnapshotMigrationFileOptions = {\n adapter?: FileSystem;\n snapshotPath: string;\n sourcePath: string;\n targetSourcePath?: string;\n planPath?: string;\n outputPath?: string;\n inspect?: boolean;\n dryRun?: boolean;\n cwd?: string;\n};\n\nexport async function migrateSnapshotFile(options: SnapshotMigrationFileOptions) {\n const adapter = options.adapter;\n const io = adapter ? createFsBridge(adapter, {codec: fsCodec}) : hostFs;\n const readFile = io.readFile.bind(io);\n const cwd = options.cwd ?? hostCwd();\n const resolvePath = (value: string | undefined, label: string) => {\n if (typeof value !== \"string\" || value.trim().length === 0)\n throw new TypeError(`Migration requires ${label}.`);\n return path.resolve(cwd, value);\n };\n const snapshotPath = resolvePath(options.snapshotPath, \"a snapshot path\");\n const sourcePath = resolvePath(options.sourcePath, \"--from <original.ajs>\");\n if (\n options.inspect &&\n [options.targetSourcePath, options.planPath, options.outputPath].some(\n (value) => value !== undefined\n )\n )\n throw new TypeError(\"Migration --inspect cannot be combined with --to, --plan, or --output.\");\n const outputPath = options.inspect\n ? undefined\n : resolvePath(options.outputPath, \"--output <new-checkpoint.json>\");\n const targetSourcePath = options.inspect\n ? undefined\n : resolvePath(options.targetSourcePath, \"--to <continuation.ajs>\");\n const planPath = options.inspect\n ? undefined\n : resolvePath(options.planPath, \"--plan <migration.json>\");\n for (const filepath of [sourcePath, targetSourcePath]) {\n if (filepath !== undefined && ![\".ajs\", \".safejs\"].includes(path.extname(filepath)))\n throw new TypeError(\n \"Migration source paths must name executable .ajs or .safejs files, not harness Markdown.\"\n );\n }\n const snapshot: SafeJSSnapshot = JSON.parse(await readFile(snapshotPath, \"utf8\"));\n const source = await readFile(sourcePath, \"utf8\");\n const inspection = inspectSnapshotMigration(snapshot, { source });\n if (options.inspect) return { inspection };\n const plan: unknown = JSON.parse(await readFile(planPath!, \"utf8\"));\n if (\n plan === null ||\n typeof plan !== \"object\" ||\n !Object.hasOwn(plan, \"state\") ||\n !Object.hasOwn(plan, \"reconciliation\")\n )\n throw new TypeError(\"Migration plan requires explicit state and reconciliation fields.\");\n const targetSource = await readFile(targetSourcePath!, \"utf8\");\n const migrated = migrateSnapshot(snapshot, {\n source,\n targetSource,\n state: (plan as SnapshotMigrationOptions).state,\n reconciliation: (plan as SnapshotMigrationOptions).reconciliation\n });\n const contents = serializeSafeJSSnapshot(migrated);\n if (!options.dryRun) {\n const temporaryPath = path.join(\n path.dirname(outputPath!),\n `.safejs-migration-${globalThis.crypto.randomUUID()}.tmp`\n );\n let created = false;\n try {\n if (adapter) {\n if (!adapter.open || !adapter.link || !adapter.unlink)\n throw new TypeError(\"Migration filesystem must support retained writes, hard links and unlink.\");\n const handle = await adapter.open(temporaryPath, {access: \"write\", creation: \"exclusive\", mode: 0o600});\n created = true;\n try {\n const bytes = new TextEncoder().encode(contents);\n let position = 0;\n while (position < bytes.byteLength) {\n const written = await handle.write(bytes.subarray(position), position);\n if (!Number.isSafeInteger(written) || written <= 0 || written > bytes.byteLength - position)\n throw new Error(\"Migration filesystem returned an invalid write count.\");\n position += written;\n }\n await handle.sync(false);\n } finally {await handle.close();}\n } else {\n const handle = await hostFs.open(temporaryPath, \"wx\", 0o600);\n created = true;\n try {\n await handle.writeFile(contents, \"utf8\");\n await handle.sync();\n } finally {\n await handle.close();\n }\n }\n try {\n if (adapter) await adapter.link!(temporaryPath, outputPath!);\n else await hostFs.link(temporaryPath, outputPath!);\n } catch (error) {\n if (hasOwnErrorCode(error, \"EEXIST\"))\n throw Object.assign(\n new Error(\n `Migration output already exists: ${JSON.stringify(outputPath)}. Choose a new output path; existing files are never overwritten.`,\n { cause: error }\n ),\n { code: \"EEXIST\" }\n );\n throw error;\n }\n } finally {\n if (created) {\n if (adapter) await adapter.unlink!(temporaryPath);\n else await hostFs.unlink(temporaryPath);\n }\n }\n }\n return { inspection, outputPath, dryRun: options.dryRun === true };\n}\n", "import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex } from \"@noble/hashes/utils.js\";\n\nimport { assertSnapshotInactive } from \"./interp/running-state.js\";\nimport { deepCopyToSandbox } from \"./interp/values.js\";\nimport { hashSource } from \"./parse/hash.js\";\nimport { parseModule } from \"./parse/parser.js\";\nimport type { SafeJSSnapshot } from \"./restore.js\";\nimport { DUMP_FORMAT_VERSION, EXECUTION_SEMANTICS } from \"./snapshot/dump-format.js\";\nimport {\n validateMigrationJournal,\n validateMigrationReconciliation,\n validateMigrationSemantics,\n validateSnapshotMigration,\n type SnapshotMigration,\n type SnapshotMigrationReconciliation\n} from \"./snapshot/migration.js\";\nimport { encodeReplayData } from \"./snapshot/replay-data.js\";\nimport { validateDumpEnvelope, validateSnapshotData } from \"./snapshot/validation.js\";\n\nexport type {\n SnapshotMigration,\n SnapshotMigrationReconciliation,\n SnapshotMigrationResolution\n} from \"./snapshot/migration.js\";\n\nexport type SnapshotMigrationOptions = {\n source: string;\n targetSource: string;\n state: unknown;\n reconciliation: SnapshotMigrationReconciliation;\n};\n\nexport function inspectSnapshotMigration(snapshot: SafeJSSnapshot, options: { source: string }) {\n assertSnapshotInactive(snapshot);\n validateSnapshotData(snapshot);\n validateDumpEnvelope(snapshot);\n validateMigrationSemantics(snapshot.executionSemantics);\n const sourceHash = hashSource(\n options.source,\n undefined,\n snapshot.executionSemantics === \"jobs-v8\" || snapshot.executionSemantics === EXECUTION_SEMANTICS\n );\n if (snapshot.sourceHash !== sourceHash)\n throw new TypeError(\n `Migration requires the original executable source (checkpoint hash ${snapshot.sourceHash}, supplied ${sourceHash}). Preserve the checkpoint; do not replace its hash.`\n );\n validateSnapshotMigration(snapshot.migration, sourceHash);\n const replay = validateMigrationJournal(sourceHash, snapshot.replay, snapshot.hostCalls);\n return {\n checkpointDigest: bytesToHex(sha256(new TextEncoder().encode(canonicalData(snapshot)))),\n sourceHash,\n executionSemantics: snapshot.executionSemantics,\n calls: replay.calls,\n unresolvedCalls: replay.calls.filter(\n (call) => ![\"settled\", \"consumed\"].includes(call.lifecycle)\n )\n };\n}\n\nexport function migrateSnapshot(\n snapshot: SafeJSSnapshot,\n options: SnapshotMigrationOptions\n): SafeJSSnapshot & { migration: SnapshotMigration } {\n if (!Object.hasOwn(options, \"state\"))\n throw new TypeError(\"Migration requires explicit application state.\");\n const inspection = inspectSnapshotMigration(snapshot, { source: options.source });\n parseModule(options.targetSource);\n const targetSourceHash = hashSource(options.targetSource);\n validateMigrationReconciliation(\n options.reconciliation,\n inspection.checkpointDigest,\n inspection.calls\n );\n const state = encodeReplayData(deepCopyToSandbox(options.state));\n const previous = snapshot.migration as SnapshotMigration | undefined;\n const migration: SnapshotMigration = {\n version: 1,\n state,\n history: [\n ...structuredClone(previous?.history ?? []),\n {\n sourceHash: inspection.sourceHash,\n targetSourceHash,\n executionSemantics: inspection.executionSemantics,\n replay: { version: 1, calls: inspection.calls },\n reconciliation: structuredClone(options.reconciliation)\n }\n ]\n };\n validateSnapshotMigration(migration, targetSourceHash);\n return {\n version: DUMP_FORMAT_VERSION,\n executionSemantics: EXECUTION_SEMANTICS,\n sourceHash: targetSourceHash,\n bindings: {},\n replay: { version: 1, calls: [] },\n migration\n };\n}\n\nfunction canonicalData(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(canonicalData).join(\",\")}]`;\n if (value !== null && typeof value === \"object\")\n return `{${Object.keys(value)\n .sort()\n .map(\n (key) => `${JSON.stringify(key)}:${canonicalData((value as Record<string, unknown>)[key])}`\n )\n .join(\",\")}}`;\n return JSON.stringify(value);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/parse/hash.ts", "../../src/snapshot/migration.ts"],
|
|
4
|
-
"sourcesContent": ["import { parse, parseModule, type FunctionNode, type Module, type ParseResult } from \"./parser.js\";\nimport { SandboxError, type CompileOwner } from \"../interp/budget.js\";\nimport { functionSources, type FunctionSource } from \"./function-source.js\";\n\nconst FNV_OFFSET_BASIS = 0x811c9dc5;\nconst FNV_PRIME = 0x01000193;\n\nconst IGNORED_KEYS = new Set([\"nodeId\", \"raw\", \"span\"]);\n\nexport function hashSource(\n source: string,\n owner?: CompileOwner,\n includeFunctionSource = true\n): string {\n try {\n return hashParsedAst(parse(source, \"<input>\", owner), includeFunctionSource);\n } catch (error) {\n if (error instanceof SandboxError) throw error;\n return hashParsedAst(parseModule(source, \"<input>\", owner), includeFunctionSource);\n }\n}\n\nexport function hashParsedAst(ast: Module | ParseResult, includeFunctionSource = true): string {\n let hash = FNV_OFFSET_BASIS;\n\n visit(ast);\n\n return hash.toString(16).padStart(8, \"0\");\n\n function visit(\n value: unknown,\n includeTemplateRaw = false,\n enclosingSource?: FunctionSource,\n identifierName = false\n ): void {\n if (value === null) {\n write(\"null\");\n return;\n }\n\n if (value === undefined) {\n write(\"undefined\");\n return;\n }\n\n if (Array.isArray(value)) {\n write(\"[\");\n for (const entry of value) {\n visit(entry, includeTemplateRaw, enclosingSource);\n write(\",\");\n }\n write(\"]\");\n return;\n }\n\n switch (typeof value) {\n case \"boolean\":\n write(value ? \"true\" : \"false\");\n return;\n case \"number\":\n write(Object.is(value, -0) ? \"-0\" : String(value));\n return;\n case \"string\":\n write(JSON.stringify(value));\n return;\n case \"object\": {\n const record = value as Record<string, unknown>;\n // Keep persisted hashes stable across the undefined literal-to-identifier\n // parser repair. Property/import names already used Identifier nodes.\n if (record.type === \"Identifier\" && record.name === \"undefined\" && !identifierName) {\n visit({ type: \"UndefinedLiteral\", value: undefined });\n return;\n }\n const source = includeFunctionSource\n ? functionSources.get(value as FunctionNode)\n : undefined;\n if (\n source !== undefined &&\n !(\n enclosingSource !== undefined &&\n source.text === enclosingSource.text &&\n source.start >= enclosingSource.start &&\n source.end <= enclosingSource.end\n )\n ) {\n write(\"function-source:\");\n write(String(source.end - source.start));\n write(\":\");\n write(source.text, source.start, source.end);\n }\n const keys = Object.keys(value)\n .filter((key) => shouldHashKey(record, key, includeTemplateRaw))\n .sort();\n\n write(\"{\");\n for (const key of keys) {\n write(JSON.stringify(key));\n write(\":\");\n visit(\n record[key],\n shouldIncludeTemplateRaw(record, key, includeTemplateRaw),\n source ?? enclosingSource,\n (key === \"property\" && record.type === \"MemberExpression\" && !record.computed) ||\n (key === \"key\" && !record.computed) ||\n ((key === \"imported\" || key === \"local\") && record.type === \"ImportSpecifier\") ||\n (key === \"exported\" && record.type === \"ExportSpecifier\")\n );\n write(\",\");\n }\n write(\"}\");\n return;\n }\n default:\n throw new TypeError(`Unsupported AST value type: ${typeof value}`);\n }\n }\n\n function write(chunk: string, start = 0, end = chunk.length): void {\n for (let index = start; index < end; index += 1) {\n hash ^= chunk.charCodeAt(index);\n hash = Math.imul(hash, FNV_PRIME) >>> 0;\n }\n }\n}\n\nfunction shouldHashKey(\n record: Record<string, unknown>,\n key: string,\n includeTemplateRaw: boolean\n): boolean {\n if (key !== \"raw\") {\n return !IGNORED_KEYS.has(key);\n }\n\n return includeTemplateRaw || record.type === \"RegexLiteral\";\n}\n\nfunction shouldIncludeTemplateRaw(\n record: Record<string, unknown>,\n key: string,\n includeTemplateRaw: boolean\n): boolean {\n if (record.type === \"TaggedTemplateExpression\" && key === \"quasi\") {\n return true;\n }\n\n if (includeTemplateRaw && record.type === \"TemplateLiteral\" && key === \"quasis\") {\n return true;\n }\n\n if (includeTemplateRaw && record.type === \"TemplateElement\" && key === \"value\") {\n return true;\n }\n\n return false;\n}\n", "import { HostCallJournal, type HostCallRecord, type HostCallReplay } from \"../interp/host-call.js\";\nimport { decodeReplayData, type ReplayData } from \"./replay-data.js\";\nimport { validateSnapshotData } from \"./validation.js\";\nimport type { CompileOwner } from \"../interp/budget.js\";\nimport { CompileScope } from \"../interp/regex/compile-guard.js\";\n\nexport type SnapshotMigrationResolution =\n | { callId: string; disposition: \"not-performed\" }\n | { callId: string; disposition: \"fulfilled\"; value: unknown }\n | { callId: string; disposition: \"rejected\"; reason: unknown };\n\nexport type SnapshotMigrationReconciliation = {\n checkpointDigest: string;\n quiescent: boolean;\n calls: SnapshotMigrationResolution[];\n};\n\nexport type SnapshotMigration = {\n version: 1;\n state: ReplayData;\n history: Array<{\n sourceHash: string;\n targetSourceHash: string;\n executionSemantics: string;\n replay: HostCallReplay;\n reconciliation: SnapshotMigrationReconciliation;\n }>;\n};\n\nexport function validateMigrationSemantics(value: unknown): asserts value is string {\n if (\n ![\"jobs-v1\", \"jobs-v2\", \"jobs-v3\", \"jobs-v4\", \"jobs-v5\", \"jobs-v6\", \"jobs-v7\", \"jobs-v8\", \"jobs-v9\"].includes(\n value as string\n )\n )\n throw new TypeError(\n \"Migration requires a supported execution-semantics marker (jobs-v1 through jobs-v9).\"\n );\n}\n\nexport function validateMigrationJournal(\n sourceHash: string,\n replay: unknown,\n hostCalls: unknown = [],\n owner?: CompileOwner\n): HostCallReplay {\n if (replay === undefined)\n throw new TypeError(\"Migration requires a complete host replay journal.\");\n if (!Array.isArray(hostCalls)) throw new TypeError(\"Invalid migration hostCalls.\");\n const journal = new HostCallJournal(\n sourceHash,\n hostCalls as HostCallRecord[],\n undefined,\n replay,\n owner?.budget,\n owner\n );\n try {\n const restored = journal.snapshotReplay();\n for (const call of restored.calls) {\n if ([\"created\", \"running\"].includes(call.lifecycle) && call.outcome !== undefined)\n throw new TypeError(\"Unresolved migration calls cannot contain a recorded outcome.\");\n for (const callback of call.callbacks ?? []) {\n if (!call.functions?.includes(callback.id))\n throw new TypeError(\"Migration callback has no registered source function.\");\n }\n }\n return restored;\n } finally {\n journal.dispose();\n }\n}\n\nexport function validateMigrationReconciliation(\n value: unknown,\n checkpointDigest: string,\n calls: HostCallReplay[\"calls\"]\n): asserts value is SnapshotMigrationReconciliation {\n validateSnapshotData(value);\n const receipt = value as SnapshotMigrationReconciliation;\n if (\n receipt === null ||\n typeof receipt !== \"object\" ||\n receipt.checkpointDigest !== checkpointDigest ||\n !isCheckpointDigest(receipt.checkpointDigest)\n )\n throw new TypeError(\"Migration reconciliation must identify this exact checkpoint digest.\");\n if (receipt.quiescent !== true)\n throw new TypeError(\n \"Migration requires explicit host confirmation that execution, operations, and callbacks are quiescent.\"\n );\n if (!Array.isArray(receipt.calls))\n throw new TypeError(\"Migration reconciliation calls must be an array.\");\n const pending = new Map(\n calls\n .filter((call) => ![\"settled\", \"consumed\"].includes(call.lifecycle))\n .map((call) => [call.id, call])\n );\n for (const resolution of receipt.calls) {\n if (resolution === null || typeof resolution !== \"object\" || !pending.has(resolution.callId))\n throw new TypeError(\"Migration contains an unknown or duplicate call resolution.\");\n if (\n ![\"not-performed\", \"fulfilled\", \"rejected\"].includes(resolution.disposition) ||\n (resolution.disposition === \"fulfilled\" && !Object.hasOwn(resolution, \"value\")) ||\n (resolution.disposition === \"rejected\" && !Object.hasOwn(resolution, \"reason\"))\n )\n throw new TypeError(\n \"Migration call resolution requires a reconciled outcome or confirmed non-performance.\"\n );\n pending.delete(resolution.callId);\n }\n if (pending.size > 0)\n throw new TypeError(\n `Migration requires external reconciliation for: ${[...pending.keys()].join(\", \")}`\n );\n}\n\nexport function validateSnapshotMigration(\n value: unknown,\n sourceHash: string,\n owner?: CompileOwner\n): SnapshotMigration | undefined {\n if (value === undefined) return undefined;\n validateSnapshotData(value);\n const migration = value as SnapshotMigration;\n if (\n migration === null ||\n typeof migration !== \"object\" ||\n migration.version !== 1 ||\n !Array.isArray(migration.history) ||\n migration.history.length === 0\n )\n throw new TypeError(\"Invalid snapshot migration history.\");\n const compilation = new CompileScope(owner);\n try {\n decodeReplayData(migration.state, {}, compilation);\n } finally {\n compilation.dispose();\n }\n let previousTarget: string | undefined;\n for (const entry of migration.history) {\n if (\n entry === null ||\n typeof entry !== \"object\" ||\n typeof entry.sourceHash !== \"string\" ||\n entry.sourceHash.length === 0 ||\n typeof entry.targetSourceHash !== \"string\" ||\n entry.targetSourceHash.length === 0 ||\n (previousTarget !== undefined && previousTarget !== entry.sourceHash)\n )\n throw new TypeError(\"Invalid snapshot migration ancestry.\");\n validateMigrationSemantics(entry.executionSemantics);\n const replay = validateMigrationJournal(entry.sourceHash, entry.replay, [], owner);\n validateMigrationReconciliation(\n entry.reconciliation,\n entry.reconciliation?.checkpointDigest,\n replay.calls\n );\n previousTarget = entry.targetSourceHash;\n }\n if (previousTarget !== sourceHash)\n throw new TypeError(\"Migration ancestry does not match the target source.\");\n return migration;\n}\n\nfunction isCheckpointDigest(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n value.length === 64 &&\n [...value].every((character) => \"0123456789abcdef\".includes(character))\n );\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|