@agentshouse/mdruntime 0.1.0-alpha.34 → 0.1.0-alpha.36

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/host.d.ts CHANGED
@@ -7,6 +7,7 @@ export type MdRuntimeHost = {
7
7
  replaceDeploymentFacts(value: unknown): void;
8
8
  attach(port: RuntimePort, app: string, release?: string): () => void;
9
9
  endAuthorization(): Promise<void>;
10
+ stop(): Promise<void>;
10
11
  };
11
12
  export declare function serveMdRuntime(options: MdRuntimeHostOptions): MdRuntimeHost;
12
13
  export type { RuntimePort } from './wire.js';
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAML,KAAK,WAAW,EAIjB,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,aAAa,GAAG;IAC1B,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IACrE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC,CAAC;AAmFF,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAoH3E;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAML,KAAK,WAAW,EAIjB,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,aAAa,GAAG;IAC1B,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IACrE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAmFF,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAwH3E;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
package/dist/host.js CHANGED
@@ -71,18 +71,19 @@ function answered(md, app, writtenBy, member, input, deploymentFacts) {
71
71
  }
72
72
  export function serveMdRuntime(options) {
73
73
  let deploymentFacts = structuredClone(options.deploymentFacts);
74
- const stopping = new AbortController();
75
- const stop = ()=>{
76
- stopping.abort();
74
+ const closing = new AbortController();
75
+ const close = ()=>{
76
+ closing.abort();
77
77
  };
78
- options.signal?.addEventListener('abort', stop, {
78
+ options.signal?.addEventListener('abort', close, {
79
79
  once: true
80
80
  });
81
- if (options.signal?.aborted === true) stop();
82
- const { md, watch } = composeRuntime({
81
+ if (options.signal?.aborted === true) close();
82
+ const runtime = composeRuntime({
83
83
  ...options,
84
- signal: stopping.signal
84
+ signal: closing.signal
85
85
  });
86
+ const { md, watch } = runtime;
86
87
  const attachments = new Map();
87
88
  let authorized = true;
88
89
  const factsObservers = new Set();
@@ -195,9 +196,12 @@ export function serveMdRuntime(options) {
195
196
  });
196
197
  detach();
197
198
  }
198
- stop();
199
+ close();
199
200
  await removeRuntimeStore();
200
201
  await options.shell.dropGeneration();
202
+ },
203
+ stop () {
204
+ return runtime.stop();
201
205
  }
202
206
  };
203
207
  }
package/dist/host.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/host.ts"],"sourcesContent":["import type { WrittenBy } from './change.js';\nimport {\n composeRuntime,\n type HistoryQuery,\n type MdRuntime,\n type MdRuntimeOptions,\n type SavedRoomDraft,\n} from './connection.js';\nimport type { ChatDraft, ConversationOptions } from './conversation.js';\nimport type { DocumentQuery } from './query.js';\nimport type { SearchRequest } from './search.js';\nimport { removeRuntimeStore } from './store.js';\nimport {\n AUTHORIZATION_ENDED,\n carried,\n envelope,\n PROTOCOL_MISMATCH,\n request,\n type RuntimePort,\n type WireAnswer,\n type WireMember,\n type WireRequest,\n} from './wire.js';\n\nexport type MdRuntimeHostOptions = MdRuntimeOptions & { deploymentFacts?: unknown };\n\nexport type MdRuntimeHost = {\n replaceDeploymentFacts(value: unknown): void;\n attach(port: RuntimePort, app: string, release?: string): () => void;\n endAuthorization(): Promise<void>;\n};\n\nfunction answered(\n md: MdRuntime,\n app: string,\n writtenBy: WrittenBy | undefined,\n member: WireMember,\n input: readonly unknown[],\n deploymentFacts: unknown,\n): unknown {\n switch (member) {\n case 'rooms':\n return md.rooms();\n case 'slots':\n return md.slots();\n case 'query':\n return md.query(input[0] as DocumentQuery);\n case 'search':\n return md.search(input[0] as SearchRequest);\n case 'types':\n return md.types(input[0] as string);\n case 'syncStatus':\n return md.syncStatus();\n case 'save':\n return md.save(input[0] as string, input[1] as readonly SavedRoomDraft[], writtenBy);\n case 'outcome':\n return md.outcome(input[0] as string);\n case 'history':\n return md.history(input[0] as string, input[1] as string, input[2] as HistoryQuery);\n case 'call':\n return md.call(input[0] as string, input[1]);\n case 'log':\n return md.log();\n case 'storageLoss':\n return md.storageLoss();\n case 'deploymentFacts':\n return structuredClone(deploymentFacts);\n case 'persistence':\n return md.persistence();\n case 'reauthorize':\n return md.reauthorize();\n case 'roomDraft.list':\n return md.roomDraft.list();\n case 'roomDraft.read':\n return md.roomDraft.read(input[0] as string, input[1] as string);\n case 'roomDraft.write':\n return md.roomDraft.write(\n input[0] as string,\n input[1] as string,\n input[2] as string | null,\n input[3],\n );\n case 'roomDraft.discard':\n return md.roomDraft.discard(input[0] as string, input[1] as string, input[2] as string);\n case 'presentation.read':\n return md.presentation.read(app);\n case 'presentation.write':\n return md.presentation.write(app, input[0]);\n case 'conversation.list':\n return md.conversation.list();\n case 'conversation.read':\n return md.conversation.read(input[0] as string, input[1] as ConversationOptions | undefined);\n case 'conversation.create':\n return md.conversation.create(input[0]);\n case 'conversation.send':\n return md.conversation.send(input[0] as string);\n case 'conversation.answer':\n return md.conversation.answer(input[0] as string, input[1]);\n case 'conversation.interrupt':\n return md.conversation.interrupt(input[0] as string);\n case 'conversation.kill':\n return md.conversation.kill(input[0] as string);\n case 'conversation.cancel':\n return md.conversation.cancel(input[0] as string, input[1] as string);\n case 'conversation.delete':\n return md.conversation.delete(input[0] as string);\n case 'chatDraft.write':\n return md.chatDraft.write(input[0] as string, input[1] as ChatDraft);\n case 'chatDraft.discard':\n return md.chatDraft.discard(input[0] as string);\n }\n}\n\nexport function serveMdRuntime(options: MdRuntimeHostOptions): MdRuntimeHost {\n let deploymentFacts = structuredClone(options.deploymentFacts);\n const stopping = new AbortController();\n const stop = () => {\n stopping.abort();\n };\n options.signal?.addEventListener('abort', stop, { once: true });\n if (options.signal?.aborted === true) stop();\n const { md, watch } = composeRuntime({ ...options, signal: stopping.signal });\n const attachments = new Map<() => void, (message: WireAnswer) => void>();\n let authorized = true;\n const factsObservers = new Set<(value: unknown) => void>();\n const watchFacts = (deliver: (value: unknown) => void) => {\n factsObservers.add(deliver);\n deliver(structuredClone(deploymentFacts));\n return () => {\n factsObservers.delete(deliver);\n };\n };\n\n function attach(port: RuntimePort, app: string, release?: string): () => void {\n if (!authorized) throw new Error(AUTHORIZATION_ENDED);\n const writtenBy = release === undefined ? undefined : { app, release };\n const subscriptions = new Map<number, () => void>();\n let serving = true;\n const send = (message: WireAnswer) => {\n port.postMessage(envelope(message));\n };\n const detach = () => {\n if (!serving) return;\n serving = false;\n for (const end of subscriptions.values()) end();\n subscriptions.clear();\n attachments.delete(detach);\n };\n const serve = async (message: WireRequest) => {\n if (message.kind === 'hello') return;\n if (message.kind === 'stop') {\n subscriptions.get(message.id)?.();\n subscriptions.delete(message.id);\n return;\n }\n try {\n if (message.kind !== 'observe' || message.topic !== 'room-drafts') await md.loaded();\n if (message.kind === 'observe') {\n const { id, topic } = message;\n let resolved = false;\n const deliver = (value: unknown) => {\n if (!serving) return;\n send(resolved ? { kind: 'event', id, value } : { kind: 'result', id, value });\n resolved = true;\n };\n subscriptions.set(\n id,\n topic === 'deployment-facts'\n ? watchFacts(deliver)\n : watch(topic, topic === 'presentation' ? [app] : message.input, deliver),\n );\n return;\n }\n const value = await answered(\n md,\n app,\n writtenBy,\n message.member,\n message.input,\n deploymentFacts,\n );\n if (serving) send({ kind: 'result', id: message.id, value });\n } catch (error) {\n if (serving) {\n send({\n kind: 'failure',\n id: message.id,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n };\n port.addEventListener('message', (event) => {\n if (!serving) return;\n const wire = carried(event.data);\n if (wire === null) return;\n if (!wire.matching) {\n send({ kind: 'refusal', refusal: PROTOCOL_MISMATCH });\n detach();\n return;\n }\n const message = request(wire.message);\n if (message === null) return;\n void serve(message);\n });\n port.addEventListener('close', detach);\n port.start();\n attachments.set(detach, send);\n return detach;\n }\n\n return {\n attach,\n replaceDeploymentFacts(value) {\n if (!authorized) throw new Error(AUTHORIZATION_ENDED);\n deploymentFacts = structuredClone(value);\n for (const deliver of factsObservers) deliver(structuredClone(deploymentFacts));\n },\n async endAuthorization() {\n authorized = false;\n for (const [detach, send] of [...attachments]) {\n send({ kind: 'ended' });\n detach();\n }\n stop();\n await removeRuntimeStore();\n await options.shell.dropGeneration();\n },\n };\n}\n\nexport type { RuntimePort } from './wire.js';\n"],"names":["composeRuntime","removeRuntimeStore","AUTHORIZATION_ENDED","carried","envelope","PROTOCOL_MISMATCH","request","answered","md","app","writtenBy","member","input","deploymentFacts","rooms","slots","query","search","types","syncStatus","save","outcome","history","call","log","storageLoss","structuredClone","persistence","reauthorize","roomDraft","list","read","write","discard","presentation","conversation","create","send","answer","interrupt","kill","cancel","delete","chatDraft","serveMdRuntime","options","stopping","AbortController","stop","abort","signal","addEventListener","once","aborted","watch","attachments","Map","authorized","factsObservers","Set","watchFacts","deliver","add","attach","port","release","Error","undefined","subscriptions","serving","message","postMessage","detach","end","values","clear","serve","kind","get","id","topic","loaded","resolved","value","set","error","String","event","wire","data","matching","refusal","start","replaceDeploymentFacts","endAuthorization","shell","dropGeneration"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/host.ts"],"sourcesContent":["import type { WrittenBy } from './change.js';\nimport {\n composeRuntime,\n type HistoryQuery,\n type MdRuntime,\n type MdRuntimeOptions,\n type SavedRoomDraft,\n} from './connection.js';\nimport type { ChatDraft, ConversationOptions } from './conversation.js';\nimport type { DocumentQuery } from './query.js';\nimport type { SearchRequest } from './search.js';\nimport { removeRuntimeStore } from './store.js';\nimport {\n AUTHORIZATION_ENDED,\n carried,\n envelope,\n PROTOCOL_MISMATCH,\n request,\n type RuntimePort,\n type WireAnswer,\n type WireMember,\n type WireRequest,\n} from './wire.js';\n\nexport type MdRuntimeHostOptions = MdRuntimeOptions & { deploymentFacts?: unknown };\n\nexport type MdRuntimeHost = {\n replaceDeploymentFacts(value: unknown): void;\n attach(port: RuntimePort, app: string, release?: string): () => void;\n endAuthorization(): Promise<void>;\n stop(): Promise<void>;\n};\n\nfunction answered(\n md: MdRuntime,\n app: string,\n writtenBy: WrittenBy | undefined,\n member: WireMember,\n input: readonly unknown[],\n deploymentFacts: unknown,\n): unknown {\n switch (member) {\n case 'rooms':\n return md.rooms();\n case 'slots':\n return md.slots();\n case 'query':\n return md.query(input[0] as DocumentQuery);\n case 'search':\n return md.search(input[0] as SearchRequest);\n case 'types':\n return md.types(input[0] as string);\n case 'syncStatus':\n return md.syncStatus();\n case 'save':\n return md.save(input[0] as string, input[1] as readonly SavedRoomDraft[], writtenBy);\n case 'outcome':\n return md.outcome(input[0] as string);\n case 'history':\n return md.history(input[0] as string, input[1] as string, input[2] as HistoryQuery);\n case 'call':\n return md.call(input[0] as string, input[1]);\n case 'log':\n return md.log();\n case 'storageLoss':\n return md.storageLoss();\n case 'deploymentFacts':\n return structuredClone(deploymentFacts);\n case 'persistence':\n return md.persistence();\n case 'reauthorize':\n return md.reauthorize();\n case 'roomDraft.list':\n return md.roomDraft.list();\n case 'roomDraft.read':\n return md.roomDraft.read(input[0] as string, input[1] as string);\n case 'roomDraft.write':\n return md.roomDraft.write(\n input[0] as string,\n input[1] as string,\n input[2] as string | null,\n input[3],\n );\n case 'roomDraft.discard':\n return md.roomDraft.discard(input[0] as string, input[1] as string, input[2] as string);\n case 'presentation.read':\n return md.presentation.read(app);\n case 'presentation.write':\n return md.presentation.write(app, input[0]);\n case 'conversation.list':\n return md.conversation.list();\n case 'conversation.read':\n return md.conversation.read(input[0] as string, input[1] as ConversationOptions | undefined);\n case 'conversation.create':\n return md.conversation.create(input[0]);\n case 'conversation.send':\n return md.conversation.send(input[0] as string);\n case 'conversation.answer':\n return md.conversation.answer(input[0] as string, input[1]);\n case 'conversation.interrupt':\n return md.conversation.interrupt(input[0] as string);\n case 'conversation.kill':\n return md.conversation.kill(input[0] as string);\n case 'conversation.cancel':\n return md.conversation.cancel(input[0] as string, input[1] as string);\n case 'conversation.delete':\n return md.conversation.delete(input[0] as string);\n case 'chatDraft.write':\n return md.chatDraft.write(input[0] as string, input[1] as ChatDraft);\n case 'chatDraft.discard':\n return md.chatDraft.discard(input[0] as string);\n }\n}\n\nexport function serveMdRuntime(options: MdRuntimeHostOptions): MdRuntimeHost {\n let deploymentFacts = structuredClone(options.deploymentFacts);\n const closing = new AbortController();\n const close = () => {\n closing.abort();\n };\n options.signal?.addEventListener('abort', close, { once: true });\n if (options.signal?.aborted === true) close();\n const runtime = composeRuntime({ ...options, signal: closing.signal });\n const { md, watch } = runtime;\n const attachments = new Map<() => void, (message: WireAnswer) => void>();\n let authorized = true;\n const factsObservers = new Set<(value: unknown) => void>();\n const watchFacts = (deliver: (value: unknown) => void) => {\n factsObservers.add(deliver);\n deliver(structuredClone(deploymentFacts));\n return () => {\n factsObservers.delete(deliver);\n };\n };\n\n function attach(port: RuntimePort, app: string, release?: string): () => void {\n if (!authorized) throw new Error(AUTHORIZATION_ENDED);\n const writtenBy = release === undefined ? undefined : { app, release };\n const subscriptions = new Map<number, () => void>();\n let serving = true;\n const send = (message: WireAnswer) => {\n port.postMessage(envelope(message));\n };\n const detach = () => {\n if (!serving) return;\n serving = false;\n for (const end of subscriptions.values()) end();\n subscriptions.clear();\n attachments.delete(detach);\n };\n const serve = async (message: WireRequest) => {\n if (message.kind === 'hello') return;\n if (message.kind === 'stop') {\n subscriptions.get(message.id)?.();\n subscriptions.delete(message.id);\n return;\n }\n try {\n if (message.kind !== 'observe' || message.topic !== 'room-drafts') await md.loaded();\n if (message.kind === 'observe') {\n const { id, topic } = message;\n let resolved = false;\n const deliver = (value: unknown) => {\n if (!serving) return;\n send(resolved ? { kind: 'event', id, value } : { kind: 'result', id, value });\n resolved = true;\n };\n subscriptions.set(\n id,\n topic === 'deployment-facts'\n ? watchFacts(deliver)\n : watch(topic, topic === 'presentation' ? [app] : message.input, deliver),\n );\n return;\n }\n const value = await answered(\n md,\n app,\n writtenBy,\n message.member,\n message.input,\n deploymentFacts,\n );\n if (serving) send({ kind: 'result', id: message.id, value });\n } catch (error) {\n if (serving) {\n send({\n kind: 'failure',\n id: message.id,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n };\n port.addEventListener('message', (event) => {\n if (!serving) return;\n const wire = carried(event.data);\n if (wire === null) return;\n if (!wire.matching) {\n send({ kind: 'refusal', refusal: PROTOCOL_MISMATCH });\n detach();\n return;\n }\n const message = request(wire.message);\n if (message === null) return;\n void serve(message);\n });\n port.addEventListener('close', detach);\n port.start();\n attachments.set(detach, send);\n return detach;\n }\n\n return {\n attach,\n replaceDeploymentFacts(value) {\n if (!authorized) throw new Error(AUTHORIZATION_ENDED);\n deploymentFacts = structuredClone(value);\n for (const deliver of factsObservers) deliver(structuredClone(deploymentFacts));\n },\n async endAuthorization() {\n authorized = false;\n for (const [detach, send] of [...attachments]) {\n send({ kind: 'ended' });\n detach();\n }\n close();\n await removeRuntimeStore();\n await options.shell.dropGeneration();\n },\n stop() {\n return runtime.stop();\n },\n };\n}\n\nexport type { RuntimePort } from './wire.js';\n"],"names":["composeRuntime","removeRuntimeStore","AUTHORIZATION_ENDED","carried","envelope","PROTOCOL_MISMATCH","request","answered","md","app","writtenBy","member","input","deploymentFacts","rooms","slots","query","search","types","syncStatus","save","outcome","history","call","log","storageLoss","structuredClone","persistence","reauthorize","roomDraft","list","read","write","discard","presentation","conversation","create","send","answer","interrupt","kill","cancel","delete","chatDraft","serveMdRuntime","options","closing","AbortController","close","abort","signal","addEventListener","once","aborted","runtime","watch","attachments","Map","authorized","factsObservers","Set","watchFacts","deliver","add","attach","port","release","Error","undefined","subscriptions","serving","message","postMessage","detach","end","values","clear","serve","kind","get","id","topic","loaded","resolved","value","set","error","String","event","wire","data","matching","refusal","start","replaceDeploymentFacts","endAuthorization","shell","dropGeneration","stop"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC;IACnD,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAwK9C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAOxF;AAqMD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CA8FxD"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC;IACnD,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAwK9C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAOxF;AA2MD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CA8FxD"}
package/dist/save.js CHANGED
@@ -385,6 +385,9 @@ function exceeded(limits, changes, resulting) {
385
385
  if (limit.name === 'change-batch-operations' && changes.length > value) {
386
386
  return refuse('provider-limit', undefined, limit.name);
387
387
  }
388
+ if (limit.name === 'change-documents' && new Set(changes.map((change)=>change.path)).size > value) {
389
+ return refuse('provider-limit', undefined, limit.name);
390
+ }
388
391
  if (limit.name === 'document-size') {
389
392
  const large = written.find((path)=>(resulting.documents[path] ?? '').length > value);
390
393
  if (large !== undefined) return refuse('provider-limit', large, limit.name);
package/dist/save.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/save.ts"],"sourcesContent":["import { definitionOf, type ModelState } from './model.js';\nimport {\n apply,\n links,\n parse,\n retarget,\n serialize,\n target,\n type Document,\n type FieldSpec,\n} from '@agentshouse/mdmodel';\nimport type { ProviderLimit } from './adapter.js';\nimport {\n immutable,\n type Change,\n type ChangeBatch,\n type Precondition,\n type WrittenBy,\n} from './change.js';\nimport {\n governing,\n parseCollection,\n validateCollection,\n type Collection,\n type Composition,\n} from './collection.js';\nimport { changeBatchIdentity } from './identity.js';\nimport { overlay, type Layer } from './overlay.js';\nimport { covered, normalize, relative } from './paths.js';\nimport type { VisibleLayer } from './replica.js';\nimport type { ChangedPart } from './room-draft.js';\n\nexport type SaveRefusal = {\n rule: string;\n file?: string;\n location?: string;\n referrers?: readonly string[];\n parts?: readonly ChangedPart[];\n};\n\nexport type Rewriting = 'runtime' | 'provider';\n\nexport type SaveInput = {\n composition: Composition;\n rewriting: Rewriting;\n baseRoomVersion: string;\n operations: import('./adapter.js').OperationScopes;\n providerOwnedPaths: readonly string[];\n providerLimits: readonly ProviderLimit[];\n visible: VisibleLayer;\n changes: readonly Change[];\n bases: readonly Precondition[];\n writtenBy?: WrittenBy;\n};\n\nexport type BatchResult =\n | { kind: 'batch'; batch: ChangeBatch }\n | { kind: 'refused'; refusal: SaveRefusal };\n\ntype Expansion =\n | { kind: 'changes'; changes: readonly Change[] }\n | { kind: 'refused'; refusal: SaveRefusal };\n\nfunction refuse(rule: string, file?: string, location?: string): BatchResult {\n return {\n kind: 'refused',\n refusal: {\n rule,\n ...(file === undefined ? {} : { file }),\n ...(location === undefined ? {} : { location }),\n },\n };\n}\n\nfunction referenceField(spec: FieldSpec): boolean {\n return spec.kind === 'reference' || (spec.kind === 'list' && spec.of.kind === 'reference');\n}\n\nfunction repointed(\n value: unknown,\n from: string,\n to: string,\n moves: ReadonlyMap<string, string>,\n): unknown {\n if (Array.isArray(value)) {\n const next = value.map((item) => repointed(item, from, to, moves) ?? item);\n return next.some((item, index) => item !== value[index]) ? next : undefined;\n }\n if (typeof value !== 'string') return undefined;\n const named = target(from, value);\n if (named === null) return undefined;\n const destination = moves.get(named) ?? named;\n return target(to, value) === destination ? undefined : retarget(value, relative(to, destination));\n}\n\nfunction edited(document: Document, path: string, changes: readonly Change[]): Document {\n let next = document;\n for (const change of changes) {\n if (change.path !== path) continue;\n if (change.kind !== 'section' && change.kind !== 'preamble') continue;\n const applied = apply(\n next,\n change.kind === 'preamble'\n ? { kind: 'preamble', value: change.value, prior: next.preamble }\n : {\n kind: 'section',\n name: change.name,\n value: change.value,\n prior: next.sections[change.name],\n },\n );\n if (applied.outcome === 'applied') next = applied.document;\n }\n return next;\n}\n\nfunction bodies(path: string, before: Document, after: Document): readonly Change[] {\n const changes: Change[] = [];\n if (after.preamble !== before.preamble) {\n changes.push({ kind: 'preamble', path, value: after.preamble });\n }\n for (const [name, value] of Object.entries(after.sections)) {\n if (before.sections[name] === value) continue;\n changes.push({ kind: 'section', path, name, value });\n }\n return changes;\n}\n\nfunction relinks(\n path: string,\n moved: string,\n before: Document,\n moves: ReadonlyMap<string, string>,\n): Expansion {\n let after = before;\n for (const link of links(before, path)) {\n const destination = moves.get(link.target) ?? link.target;\n if (destination === link.target && moved === path) continue;\n const to = relative(moved, destination);\n if (to === relative(path, link.target)) continue;\n const applied = apply(after, { kind: 'link', href: link.href, to });\n if (applied.outcome === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: applied.refusal.rule,\n file: path,\n ...(applied.refusal.location === undefined ? {} : { location: applied.refusal.location }),\n },\n };\n }\n after = applied.document;\n }\n if (after === before) return { kind: 'changes', changes: [] };\n if (before.type === undefined) {\n return { kind: 'changes', changes: [{ kind: 'replace', path, content: serialize(after) }] };\n }\n return { kind: 'changes', changes: bodies(path, before, after) };\n}\n\nfunction subsumed(merged: Change[], path: string) {\n for (let index = merged.length - 1; index >= 0; index -= 1) {\n const item = merged[index];\n if (item.path !== path) continue;\n if (item.kind === 'section' || item.kind === 'preamble') merged.splice(index, 1);\n }\n}\n\nfunction rewrites(changes: readonly Change[], visible: VisibleLayer): Expansion {\n const moves = new Map<string, string>();\n const settled = new Set<string>();\n for (const change of changes) {\n if (change.kind === 'move') moves.set(change.path, change.to);\n if (change.kind === 'remove' || change.kind === 'replace' || change.kind === 'create') {\n settled.add(change.path);\n }\n if (change.kind === 'field') settled.add(`${change.path} ${change.name}`);\n }\n if (moves.size === 0) return { kind: 'changes', changes };\n const merged = [...changes];\n const added: Change[] = [];\n for (const [path, document] of Object.entries(visible.collection.documents)) {\n if (settled.has(path)) continue;\n const moved = moves.get(path) ?? path;\n const definition = definitionOf(governing(visible.collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec) || settled.has(`${path} ${name}`)) continue;\n const value = repointed(document.fields[name], path, moved, moves);\n if (value === undefined) continue;\n added.push({ kind: 'field', path, name, value });\n }\n const relinked = relinks(path, moved, edited(document, path, merged), moves);\n if (relinked.kind === 'refused') return relinked;\n for (const change of relinked.changes) {\n if (change.kind === 'replace') {\n subsumed(merged, path);\n added.push(change);\n continue;\n }\n const index = merged.findIndex(\n (item) =>\n item.kind === change.kind &&\n item.path === path &&\n (change.kind !== 'section' || (item.kind === 'section' && item.name === change.name)),\n );\n if (index === -1) added.push(change);\n else merged[index] = change;\n }\n }\n return { kind: 'changes', changes: [...added, ...merged] };\n}\n\nfunction anticipated(\n changes: readonly Change[],\n preconditions: readonly Precondition[],\n rewritten: readonly Change[],\n visible: VisibleLayer,\n) {\n const derived = rewritten.filter((change) => !changes.includes(change));\n return {\n changes: rewritten,\n preconditions: [...preconditionsOf(derived, visible, []), ...preconditions],\n };\n}\n\nexport function providerRewritten(batch: ChangeBatch, visible: VisibleLayer): ChangeBatch {\n const rewritten = rewrites(batch.changes, visible);\n if (rewritten.kind === 'refused') return batch;\n return {\n ...batch,\n ...anticipated(batch.changes, batch.preconditions, rewritten.changes, visible),\n };\n}\n\nfunction targets(value: unknown, from: string): readonly string[] {\n const values = Array.isArray(value) ? value : [value];\n const resolved: string[] = [];\n for (const item of values) {\n if (typeof item !== 'string') continue;\n const named = target(from, item);\n if (named !== null) resolved.push(named);\n }\n return resolved;\n}\n\nfunction incoming(collection: Collection, removed: ReadonlySet<string>): BatchResult | null {\n const found = new Map<string, Set<string>>();\n const note = (target: string, file: string) => {\n if (!removed.has(target)) return;\n const referrers = found.get(target) ?? new Set<string>();\n referrers.add(file);\n found.set(target, referrers);\n };\n for (const [path, document] of Object.entries(collection.documents)) {\n const definition = definitionOf(governing(collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec)) continue;\n for (const named of targets(document.fields[name], path)) note(named, path);\n }\n for (const link of links(document, path)) note(link.target, path);\n }\n const [first] = [...found.keys()].sort();\n if (first === undefined) return null;\n const every = new Set<string>();\n for (const referrers of found.values()) for (const file of referrers) every.add(file);\n return {\n kind: 'refused',\n refusal: { rule: 'referenced-missing-file', file: first, referrers: [...every].sort() },\n };\n}\n\nfunction affected(change: Change): readonly string[] {\n return change.kind === 'move' ? [change.path, change.to] : [change.path];\n}\n\nfunction guard(changes: readonly Change[], input: SaveInput): BatchResult | null {\n const existing = new Set([\n ...Object.keys(input.visible.documents),\n ...input.visible.binaryTargets,\n ]);\n for (const change of changes) {\n for (const path of affected(change)) {\n const normalized = normalize(path);\n if (normalized === null || normalized === '') return refuse('room-root', path);\n if (covered(input.providerOwnedPaths, normalized)) {\n return refuse('provider-owned-path', normalized);\n }\n const operation = change.kind === 'remove' ? 'delete' : 'write';\n if (!covered(input.operations[operation], normalized))\n return refuse(`${operation}-grant`, normalized);\n }\n if (change.kind === 'create') {\n if (existing.has(change.path)) return refuse('path-collision', change.path);\n existing.add(change.path);\n continue;\n }\n if (change.kind === 'move') {\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (existing.has(change.to)) return refuse('path-collision', change.to);\n if (unrevisionedDocument(input.visible, change.path)) {\n return refuse('unknown-revision', change.path);\n }\n existing.delete(change.path);\n existing.add(change.to);\n continue;\n }\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (change.kind === 'remove') {\n if (unrevisionedDocument(input.visible, change.path)) {\n return refuse('unknown-revision', change.path);\n }\n existing.delete(change.path);\n continue;\n }\n if (change.kind === 'replace') {\n if (input.visible.revisions[change.path] === undefined) {\n return refuse('unknown-revision', change.path);\n }\n continue;\n }\n if (input.visible.collection.documents[change.path] === undefined) {\n return refuse('path-absent', change.path);\n }\n }\n return null;\n}\n\nfunction unrevisionedDocument(visible: VisibleLayer, path: string): boolean {\n return visible.revisions[path] === undefined && !visible.binaryTargets.includes(path);\n}\n\nfunction existence(visible: VisibleLayer, path: string): Precondition {\n const revision = visible.revisions[path];\n return revision === undefined ? { kind: 'present', path } : { kind: 'revision', path, revision };\n}\n\nfunction sameTarget(precondition: Precondition, change: Change): boolean {\n if (precondition.kind !== change.kind || precondition.path !== change.path) return false;\n return (\n (precondition.kind !== 'field' && precondition.kind !== 'section') ||\n ((change.kind === 'field' || change.kind === 'section') && precondition.name === change.name)\n );\n}\n\nfunction preconditionsOf(\n changes: readonly Change[],\n visible: VisibleLayer,\n bases: readonly Precondition[],\n): readonly Precondition[] {\n const preconditions: Precondition[] = [];\n const seen = new Set<string>();\n const add = (precondition: Precondition) => {\n const part =\n precondition.kind === 'field' || precondition.kind === 'section' ? precondition.name : '';\n const identity = `${precondition.kind} ${precondition.path} ${part}`;\n if (seen.has(identity)) return;\n seen.add(identity);\n preconditions.push(precondition);\n };\n for (const change of changes) {\n if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {\n const based = bases.find((base) => sameTarget(base, change));\n if (based !== undefined) {\n add(based);\n continue;\n }\n const document = visible.collection.documents[change.path];\n if (change.kind === 'field') {\n add({\n kind: 'field',\n path: change.path,\n name: change.name,\n value: document.fields[change.name],\n });\n } else if (change.kind === 'section') {\n add({\n kind: 'section',\n path: change.path,\n name: change.name,\n value: document.sections[change.name],\n });\n } else add({ kind: 'preamble', path: change.path, value: document.preamble });\n continue;\n }\n if (change.kind === 'create') {\n add({ kind: 'absent', path: change.path });\n continue;\n }\n add(existence(visible, change.path));\n if (change.kind === 'move') add({ kind: 'absent', path: change.to });\n }\n return preconditions;\n}\n\nfunction depth(path: string) {\n return path.split('/').length;\n}\n\nfunction exceeded(\n limits: readonly ProviderLimit[],\n changes: readonly Change[],\n resulting: Layer,\n): BatchResult | null {\n const written = changes.map((change) => (change.kind === 'move' ? change.to : change.path));\n const created = changes\n .filter((change) => change.kind === 'create' || change.kind === 'move')\n .map((change) => (change.kind === 'move' ? change.to : change.path));\n for (const limit of limits) {\n const value = limit.value;\n if (typeof value !== 'number') continue;\n if (limit.name === 'change-batch-operations' && changes.length > value) {\n return refuse('provider-limit', undefined, limit.name);\n }\n if (limit.name === 'document-size') {\n const large = written.find((path) => (resulting.documents[path] ?? '').length > value);\n if (large !== undefined) return refuse('provider-limit', large, limit.name);\n }\n if (limit.name === 'path-length') {\n const long = created.find((path) => path.length > value);\n if (long !== undefined) return refuse('provider-limit', long, limit.name);\n }\n if (limit.name === 'path-depth') {\n const deep = created.find((path) => depth(path) > value);\n if (deep !== undefined) return refuse('provider-limit', deep, limit.name);\n }\n }\n return null;\n}\n\nexport function buildBatch(input: SaveInput): BatchResult {\n const structural = input.changes.find(\n (change) => change.kind === 'move' || change.kind === 'remove',\n );\n if (\n structural !== undefined &&\n Object.entries(input.visible.collection.documents).some(\n ([path, document]) =>\n document.type !== undefined &&\n document.type !== 'any' &&\n governing(input.composition, path).status === 'unavailable',\n )\n )\n return refuse('model-unavailable', structural.path);\n if (input.changes.length === 0) return refuse('no-change');\n const rewritten = rewrites(input.changes, input.visible);\n if (rewritten.kind === 'refused') return rewritten;\n const changes = input.rewriting === 'provider' ? input.changes : rewritten.changes;\n const refusal = guard(changes, input);\n if (refusal !== null) return refusal;\n const preconditions = preconditionsOf(changes, input.visible, input.bases);\n const predicted =\n input.rewriting === 'provider'\n ? anticipated(changes, preconditions, rewritten.changes, input.visible)\n : { changes, preconditions };\n const resulting = overlay(input.visible, [\n { id: '', baseRoomVersion: input.baseRoomVersion, ...predicted },\n ]);\n const removed = new Set(\n changes.filter((change) => change.kind === 'remove').map((change) => change.path),\n );\n if (removed.size > 0) {\n const referenced = incoming(parseCollection(resulting.documents, input.composition), removed);\n if (referenced !== null) return referenced;\n }\n const typed = (content: string | undefined) => {\n if (content === undefined) return false;\n const parsed = parse(content);\n return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';\n };\n const typedPaths = [...new Set(predicted.changes.flatMap(affected))].filter(\n (path) => typed(input.visible.documents[path]) || typed(resulting.documents[path]),\n );\n const needsModel = typedPaths.length > 0;\n const withoutModel = typedPaths.find(\n (path) => governing(input.composition, path).status === 'unavailable',\n );\n if (withoutModel !== undefined) return refuse('model-unavailable', withoutModel);\n const validationText = needsModel\n ? resulting.documents\n : Object.fromEntries(\n Object.entries(resulting.documents).filter(([path]) =>\n predicted.changes.some((change) => affected(change).includes(path)),\n ),\n );\n const verdict = validateCollection(validationText, resulting.binaryTargets, input.composition);\n if (verdict.verdict === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: verdict.rule,\n file: verdict.file,\n ...(verdict.location === undefined ? {} : { location: verdict.location }),\n ...(verdict.referrers === undefined ? {} : { referrers: verdict.referrers }),\n },\n };\n }\n const limited = exceeded(input.providerLimits, changes, resulting);\n if (limited !== null) return limited;\n const validated = typedPaths\n .map((path) => governing(input.composition, path))\n .find(\n (model): model is Extract<ModelState, { status: 'current' | 'cached' }> =>\n model.status !== 'unavailable',\n );\n return {\n kind: 'batch',\n batch: immutable({\n id: changeBatchIdentity(),\n baseRoomVersion: input.baseRoomVersion,\n changes,\n preconditions,\n ...(input.writtenBy === undefined ? {} : { writtenBy: input.writtenBy }),\n ...(validated === undefined\n ? {}\n : {\n validation: {\n identity: validated.snapshot.identity,\n version: validated.snapshot.version,\n source: validated.status,\n },\n }),\n }),\n };\n}\n"],"names":["definitionOf","apply","links","parse","retarget","serialize","target","immutable","governing","parseCollection","validateCollection","changeBatchIdentity","overlay","covered","normalize","relative","refuse","rule","file","location","kind","refusal","undefined","referenceField","spec","of","repointed","value","from","to","moves","Array","isArray","next","map","item","some","index","named","destination","get","edited","document","path","changes","change","applied","prior","preamble","name","sections","outcome","bodies","before","after","push","Object","entries","relinks","moved","link","href","type","content","subsumed","merged","length","splice","rewrites","visible","Map","settled","Set","set","add","size","added","collection","documents","has","definition","composition","fields","relinked","findIndex","anticipated","preconditions","rewritten","derived","filter","includes","preconditionsOf","providerRewritten","batch","targets","values","resolved","incoming","removed","found","note","referrers","first","keys","sort","every","affected","guard","input","existing","binaryTargets","normalized","providerOwnedPaths","operation","operations","unrevisionedDocument","delete","revisions","existence","revision","sameTarget","precondition","bases","seen","part","identity","based","find","base","depth","split","exceeded","limits","resulting","written","created","limit","large","long","deep","buildBatch","structural","status","rewriting","predicted","id","baseRoomVersion","referenced","typed","parsed","ok","typedPaths","flatMap","needsModel","withoutModel","validationText","fromEntries","verdict","limited","providerLimits","validated","model","writtenBy","validation","snapshot","version","source"],"mappings":"AAAA,SAASA,YAAY,QAAyB,aAAa;AAC3D,SACEC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,QAAQ,EACRC,SAAS,EACTC,MAAM,QAGD,uBAAuB;AAE9B,SACEC,SAAS,QAKJ,cAAc;AACrB,SACEC,SAAS,EACTC,eAAe,EACfC,kBAAkB,QAGb,kBAAkB;AACzB,SAASC,mBAAmB,QAAQ,gBAAgB;AACpD,SAASC,OAAO,QAAoB,eAAe;AACnD,SAASC,OAAO,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,aAAa;AAmC1D,SAASC,OAAOC,IAAY,EAAEC,IAAa,EAAEC,QAAiB;IAC5D,OAAO;QACLC,MAAM;QACNC,SAAS;YACPJ;YACA,GAAIC,SAASI,YAAY,CAAC,IAAI;gBAAEJ;YAAK,CAAC;YACtC,GAAIC,aAAaG,YAAY,CAAC,IAAI;gBAAEH;YAAS,CAAC;QAChD;IACF;AACF;AAEA,SAASI,eAAeC,IAAe;IACrC,OAAOA,KAAKJ,IAAI,KAAK,eAAgBI,KAAKJ,IAAI,KAAK,UAAUI,KAAKC,EAAE,CAACL,IAAI,KAAK;AAChF;AAEA,SAASM,UACPC,KAAc,EACdC,IAAY,EACZC,EAAU,EACVC,KAAkC;IAElC,IAAIC,MAAMC,OAAO,CAACL,QAAQ;QACxB,MAAMM,OAAON,MAAMO,GAAG,CAAC,CAACC,OAAST,UAAUS,MAAMP,MAAMC,IAAIC,UAAUK;QACrE,OAAOF,KAAKG,IAAI,CAAC,CAACD,MAAME,QAAUF,SAASR,KAAK,CAACU,MAAM,IAAIJ,OAAOX;IACpE;IACA,IAAI,OAAOK,UAAU,UAAU,OAAOL;IACtC,MAAMgB,QAAQhC,OAAOsB,MAAMD;IAC3B,IAAIW,UAAU,MAAM,OAAOhB;IAC3B,MAAMiB,cAAcT,MAAMU,GAAG,CAACF,UAAUA;IACxC,OAAOhC,OAAOuB,IAAIF,WAAWY,cAAcjB,YAAYlB,SAASuB,OAAOZ,SAASc,IAAIU;AACtF;AAEA,SAASE,OAAOC,QAAkB,EAAEC,IAAY,EAAEC,OAA0B;IAC1E,IAAIX,OAAOS;IACX,KAAK,MAAMG,UAAUD,QAAS;QAC5B,IAAIC,OAAOF,IAAI,KAAKA,MAAM;QAC1B,IAAIE,OAAOzB,IAAI,KAAK,aAAayB,OAAOzB,IAAI,KAAK,YAAY;QAC7D,MAAM0B,UAAU7C,MACdgC,MACAY,OAAOzB,IAAI,KAAK,aACZ;YAAEA,MAAM;YAAYO,OAAOkB,OAAOlB,KAAK;YAAEoB,OAAOd,KAAKe,QAAQ;QAAC,IAC9D;YACE5B,MAAM;YACN6B,MAAMJ,OAAOI,IAAI;YACjBtB,OAAOkB,OAAOlB,KAAK;YACnBoB,OAAOd,KAAKiB,QAAQ,CAACL,OAAOI,IAAI,CAAC;QACnC;QAEN,IAAIH,QAAQK,OAAO,KAAK,WAAWlB,OAAOa,QAAQJ,QAAQ;IAC5D;IACA,OAAOT;AACT;AAEA,SAASmB,OAAOT,IAAY,EAAEU,MAAgB,EAAEC,KAAe;IAC7D,MAAMV,UAAoB,EAAE;IAC5B,IAAIU,MAAMN,QAAQ,KAAKK,OAAOL,QAAQ,EAAE;QACtCJ,QAAQW,IAAI,CAAC;YAAEnC,MAAM;YAAYuB;YAAMhB,OAAO2B,MAAMN,QAAQ;QAAC;IAC/D;IACA,KAAK,MAAM,CAACC,MAAMtB,MAAM,IAAI6B,OAAOC,OAAO,CAACH,MAAMJ,QAAQ,EAAG;QAC1D,IAAIG,OAAOH,QAAQ,CAACD,KAAK,KAAKtB,OAAO;QACrCiB,QAAQW,IAAI,CAAC;YAAEnC,MAAM;YAAWuB;YAAMM;YAAMtB;QAAM;IACpD;IACA,OAAOiB;AACT;AAEA,SAASc,QACPf,IAAY,EACZgB,KAAa,EACbN,MAAgB,EAChBvB,KAAkC;IAElC,IAAIwB,QAAQD;IACZ,KAAK,MAAMO,QAAQ1D,MAAMmD,QAAQV,MAAO;QACtC,MAAMJ,cAAcT,MAAMU,GAAG,CAACoB,KAAKtD,MAAM,KAAKsD,KAAKtD,MAAM;QACzD,IAAIiC,gBAAgBqB,KAAKtD,MAAM,IAAIqD,UAAUhB,MAAM;QACnD,MAAMd,KAAKd,SAAS4C,OAAOpB;QAC3B,IAAIV,OAAOd,SAAS4B,MAAMiB,KAAKtD,MAAM,GAAG;QACxC,MAAMwC,UAAU7C,MAAMqD,OAAO;YAAElC,MAAM;YAAQyC,MAAMD,KAAKC,IAAI;YAAEhC;QAAG;QACjE,IAAIiB,QAAQK,OAAO,KAAK,UAAU;YAChC,OAAO;gBACL/B,MAAM;gBACNC,SAAS;oBACPJ,MAAM6B,QAAQzB,OAAO,CAACJ,IAAI;oBAC1BC,MAAMyB;oBACN,GAAIG,QAAQzB,OAAO,CAACF,QAAQ,KAAKG,YAAY,CAAC,IAAI;wBAAEH,UAAU2B,QAAQzB,OAAO,CAACF,QAAQ;oBAAC,CAAC;gBAC1F;YACF;QACF;QACAmC,QAAQR,QAAQJ,QAAQ;IAC1B;IACA,IAAIY,UAAUD,QAAQ,OAAO;QAAEjC,MAAM;QAAWwB,SAAS,EAAE;IAAC;IAC5D,IAAIS,OAAOS,IAAI,KAAKxC,WAAW;QAC7B,OAAO;YAAEF,MAAM;YAAWwB,SAAS;gBAAC;oBAAExB,MAAM;oBAAWuB;oBAAMoB,SAAS1D,UAAUiD;gBAAO;aAAE;QAAC;IAC5F;IACA,OAAO;QAAElC,MAAM;QAAWwB,SAASQ,OAAOT,MAAMU,QAAQC;IAAO;AACjE;AAEA,SAASU,SAASC,MAAgB,EAAEtB,IAAY;IAC9C,IAAK,IAAIN,QAAQ4B,OAAOC,MAAM,GAAG,GAAG7B,SAAS,GAAGA,SAAS,EAAG;QAC1D,MAAMF,OAAO8B,MAAM,CAAC5B,MAAM;QAC1B,IAAIF,KAAKQ,IAAI,KAAKA,MAAM;QACxB,IAAIR,KAAKf,IAAI,KAAK,aAAae,KAAKf,IAAI,KAAK,YAAY6C,OAAOE,MAAM,CAAC9B,OAAO;IAChF;AACF;AAEA,SAAS+B,SAASxB,OAA0B,EAAEyB,OAAqB;IACjE,MAAMvC,QAAQ,IAAIwC;IAClB,MAAMC,UAAU,IAAIC;IACpB,KAAK,MAAM3B,UAAUD,QAAS;QAC5B,IAAIC,OAAOzB,IAAI,KAAK,QAAQU,MAAM2C,GAAG,CAAC5B,OAAOF,IAAI,EAAEE,OAAOhB,EAAE;QAC5D,IAAIgB,OAAOzB,IAAI,KAAK,YAAYyB,OAAOzB,IAAI,KAAK,aAAayB,OAAOzB,IAAI,KAAK,UAAU;YACrFmD,QAAQG,GAAG,CAAC7B,OAAOF,IAAI;QACzB;QACA,IAAIE,OAAOzB,IAAI,KAAK,SAASmD,QAAQG,GAAG,CAAC,GAAG7B,OAAOF,IAAI,CAAC,CAAC,EAAEE,OAAOI,IAAI,EAAE;IAC1E;IACA,IAAInB,MAAM6C,IAAI,KAAK,GAAG,OAAO;QAAEvD,MAAM;QAAWwB;IAAQ;IACxD,MAAMqB,SAAS;WAAIrB;KAAQ;IAC3B,MAAMgC,QAAkB,EAAE;IAC1B,KAAK,MAAM,CAACjC,MAAMD,SAAS,IAAIc,OAAOC,OAAO,CAACY,QAAQQ,UAAU,CAACC,SAAS,EAAG;QAC3E,IAAIP,QAAQQ,GAAG,CAACpC,OAAO;QACvB,MAAMgB,QAAQ7B,MAAMU,GAAG,CAACG,SAASA;QACjC,MAAMqC,aAAahF,aAAaQ,UAAU6D,QAAQQ,UAAU,CAACI,WAAW,EAAEtC,OAAOD,SAASoB,IAAI;QAC9F,KAAK,MAAM,CAACb,MAAMzB,KAAK,IAAIgC,OAAOC,OAAO,CAACuB,YAAYE,UAAU,CAAC,GAAI;YACnE,IAAI,CAAC3D,eAAeC,SAAS+C,QAAQQ,GAAG,CAAC,GAAGpC,KAAK,CAAC,EAAEM,MAAM,GAAG;YAC7D,MAAMtB,QAAQD,UAAUgB,SAASwC,MAAM,CAACjC,KAAK,EAAEN,MAAMgB,OAAO7B;YAC5D,IAAIH,UAAUL,WAAW;YACzBsD,MAAMrB,IAAI,CAAC;gBAAEnC,MAAM;gBAASuB;gBAAMM;gBAAMtB;YAAM;QAChD;QACA,MAAMwD,WAAWzB,QAAQf,MAAMgB,OAAOlB,OAAOC,UAAUC,MAAMsB,SAASnC;QACtE,IAAIqD,SAAS/D,IAAI,KAAK,WAAW,OAAO+D;QACxC,KAAK,MAAMtC,UAAUsC,SAASvC,OAAO,CAAE;YACrC,IAAIC,OAAOzB,IAAI,KAAK,WAAW;gBAC7B4C,SAASC,QAAQtB;gBACjBiC,MAAMrB,IAAI,CAACV;gBACX;YACF;YACA,MAAMR,QAAQ4B,OAAOmB,SAAS,CAC5B,CAACjD,OACCA,KAAKf,IAAI,KAAKyB,OAAOzB,IAAI,IACzBe,KAAKQ,IAAI,KAAKA,QACbE,CAAAA,OAAOzB,IAAI,KAAK,aAAce,KAAKf,IAAI,KAAK,aAAae,KAAKc,IAAI,KAAKJ,OAAOI,IAAI;YAEvF,IAAIZ,UAAU,CAAC,GAAGuC,MAAMrB,IAAI,CAACV;iBACxBoB,MAAM,CAAC5B,MAAM,GAAGQ;QACvB;IACF;IACA,OAAO;QAAEzB,MAAM;QAAWwB,SAAS;eAAIgC;eAAUX;SAAO;IAAC;AAC3D;AAEA,SAASoB,YACPzC,OAA0B,EAC1B0C,aAAsC,EACtCC,SAA4B,EAC5BlB,OAAqB;IAErB,MAAMmB,UAAUD,UAAUE,MAAM,CAAC,CAAC5C,SAAW,CAACD,QAAQ8C,QAAQ,CAAC7C;IAC/D,OAAO;QACLD,SAAS2C;QACTD,eAAe;eAAIK,gBAAgBH,SAASnB,SAAS,EAAE;eAAMiB;SAAc;IAC7E;AACF;AAEA,OAAO,SAASM,kBAAkBC,KAAkB,EAAExB,OAAqB;IACzE,MAAMkB,YAAYnB,SAASyB,MAAMjD,OAAO,EAAEyB;IAC1C,IAAIkB,UAAUnE,IAAI,KAAK,WAAW,OAAOyE;IACzC,OAAO;QACL,GAAGA,KAAK;QACR,GAAGR,YAAYQ,MAAMjD,OAAO,EAAEiD,MAAMP,aAAa,EAAEC,UAAU3C,OAAO,EAAEyB,QAAQ;IAChF;AACF;AAEA,SAASyB,QAAQnE,KAAc,EAAEC,IAAY;IAC3C,MAAMmE,SAAShE,MAAMC,OAAO,CAACL,SAASA,QAAQ;QAACA;KAAM;IACrD,MAAMqE,WAAqB,EAAE;IAC7B,KAAK,MAAM7D,QAAQ4D,OAAQ;QACzB,IAAI,OAAO5D,SAAS,UAAU;QAC9B,MAAMG,QAAQhC,OAAOsB,MAAMO;QAC3B,IAAIG,UAAU,MAAM0D,SAASzC,IAAI,CAACjB;IACpC;IACA,OAAO0D;AACT;AAEA,SAASC,SAASpB,UAAsB,EAAEqB,OAA4B;IACpE,MAAMC,QAAQ,IAAI7B;IAClB,MAAM8B,OAAO,CAAC9F,QAAgBY;QAC5B,IAAI,CAACgF,QAAQnB,GAAG,CAACzE,SAAS;QAC1B,MAAM+F,YAAYF,MAAM3D,GAAG,CAAClC,WAAW,IAAIkE;QAC3C6B,UAAU3B,GAAG,CAACxD;QACdiF,MAAM1B,GAAG,CAACnE,QAAQ+F;IACpB;IACA,KAAK,MAAM,CAAC1D,MAAMD,SAAS,IAAIc,OAAOC,OAAO,CAACoB,WAAWC,SAAS,EAAG;QACnE,MAAME,aAAahF,aAAaQ,UAAUqE,WAAWI,WAAW,EAAEtC,OAAOD,SAASoB,IAAI;QACtF,KAAK,MAAM,CAACb,MAAMzB,KAAK,IAAIgC,OAAOC,OAAO,CAACuB,YAAYE,UAAU,CAAC,GAAI;YACnE,IAAI,CAAC3D,eAAeC,OAAO;YAC3B,KAAK,MAAMc,SAASwD,QAAQpD,SAASwC,MAAM,CAACjC,KAAK,EAAEN,MAAOyD,KAAK9D,OAAOK;QACxE;QACA,KAAK,MAAMiB,QAAQ1D,MAAMwC,UAAUC,MAAOyD,KAAKxC,KAAKtD,MAAM,EAAEqC;IAC9D;IACA,MAAM,CAAC2D,MAAM,GAAG;WAAIH,MAAMI,IAAI;KAAG,CAACC,IAAI;IACtC,IAAIF,UAAUhF,WAAW,OAAO;IAChC,MAAMmF,QAAQ,IAAIjC;IAClB,KAAK,MAAM6B,aAAaF,MAAMJ,MAAM,GAAI,KAAK,MAAM7E,QAAQmF,UAAWI,MAAM/B,GAAG,CAACxD;IAChF,OAAO;QACLE,MAAM;QACNC,SAAS;YAAEJ,MAAM;YAA2BC,MAAMoF;YAAOD,WAAW;mBAAII;aAAM,CAACD,IAAI;QAAG;IACxF;AACF;AAEA,SAASE,SAAS7D,MAAc;IAC9B,OAAOA,OAAOzB,IAAI,KAAK,SAAS;QAACyB,OAAOF,IAAI;QAAEE,OAAOhB,EAAE;KAAC,GAAG;QAACgB,OAAOF,IAAI;KAAC;AAC1E;AAEA,SAASgE,MAAM/D,OAA0B,EAAEgE,KAAgB;IACzD,MAAMC,WAAW,IAAIrC,IAAI;WACpBhB,OAAO+C,IAAI,CAACK,MAAMvC,OAAO,CAACS,SAAS;WACnC8B,MAAMvC,OAAO,CAACyC,aAAa;KAC/B;IACD,KAAK,MAAMjE,UAAUD,QAAS;QAC5B,KAAK,MAAMD,QAAQ+D,SAAS7D,QAAS;YACnC,MAAMkE,aAAajG,UAAU6B;YAC7B,IAAIoE,eAAe,QAAQA,eAAe,IAAI,OAAO/F,OAAO,aAAa2B;YACzE,IAAI9B,QAAQ+F,MAAMI,kBAAkB,EAAED,aAAa;gBACjD,OAAO/F,OAAO,uBAAuB+F;YACvC;YACA,MAAME,YAAYpE,OAAOzB,IAAI,KAAK,WAAW,WAAW;YACxD,IAAI,CAACP,QAAQ+F,MAAMM,UAAU,CAACD,UAAU,EAAEF,aACxC,OAAO/F,OAAO,GAAGiG,UAAU,MAAM,CAAC,EAAEF;QACxC;QACA,IAAIlE,OAAOzB,IAAI,KAAK,UAAU;YAC5B,IAAIyF,SAAS9B,GAAG,CAAClC,OAAOF,IAAI,GAAG,OAAO3B,OAAO,kBAAkB6B,OAAOF,IAAI;YAC1EkE,SAASnC,GAAG,CAAC7B,OAAOF,IAAI;YACxB;QACF;QACA,IAAIE,OAAOzB,IAAI,KAAK,QAAQ;YAC1B,IAAI,CAACyF,SAAS9B,GAAG,CAAClC,OAAOF,IAAI,GAAG,OAAO3B,OAAO,eAAe6B,OAAOF,IAAI;YACxE,IAAIkE,SAAS9B,GAAG,CAAClC,OAAOhB,EAAE,GAAG,OAAOb,OAAO,kBAAkB6B,OAAOhB,EAAE;YACtE,IAAIsF,qBAAqBP,MAAMvC,OAAO,EAAExB,OAAOF,IAAI,GAAG;gBACpD,OAAO3B,OAAO,oBAAoB6B,OAAOF,IAAI;YAC/C;YACAkE,SAASO,MAAM,CAACvE,OAAOF,IAAI;YAC3BkE,SAASnC,GAAG,CAAC7B,OAAOhB,EAAE;YACtB;QACF;QACA,IAAI,CAACgF,SAAS9B,GAAG,CAAClC,OAAOF,IAAI,GAAG,OAAO3B,OAAO,eAAe6B,OAAOF,IAAI;QACxE,IAAIE,OAAOzB,IAAI,KAAK,UAAU;YAC5B,IAAI+F,qBAAqBP,MAAMvC,OAAO,EAAExB,OAAOF,IAAI,GAAG;gBACpD,OAAO3B,OAAO,oBAAoB6B,OAAOF,IAAI;YAC/C;YACAkE,SAASO,MAAM,CAACvE,OAAOF,IAAI;YAC3B;QACF;QACA,IAAIE,OAAOzB,IAAI,KAAK,WAAW;YAC7B,IAAIwF,MAAMvC,OAAO,CAACgD,SAAS,CAACxE,OAAOF,IAAI,CAAC,KAAKrB,WAAW;gBACtD,OAAON,OAAO,oBAAoB6B,OAAOF,IAAI;YAC/C;YACA;QACF;QACA,IAAIiE,MAAMvC,OAAO,CAACQ,UAAU,CAACC,SAAS,CAACjC,OAAOF,IAAI,CAAC,KAAKrB,WAAW;YACjE,OAAON,OAAO,eAAe6B,OAAOF,IAAI;QAC1C;IACF;IACA,OAAO;AACT;AAEA,SAASwE,qBAAqB9C,OAAqB,EAAE1B,IAAY;IAC/D,OAAO0B,QAAQgD,SAAS,CAAC1E,KAAK,KAAKrB,aAAa,CAAC+C,QAAQyC,aAAa,CAACpB,QAAQ,CAAC/C;AAClF;AAEA,SAAS2E,UAAUjD,OAAqB,EAAE1B,IAAY;IACpD,MAAM4E,WAAWlD,QAAQgD,SAAS,CAAC1E,KAAK;IACxC,OAAO4E,aAAajG,YAAY;QAAEF,MAAM;QAAWuB;IAAK,IAAI;QAAEvB,MAAM;QAAYuB;QAAM4E;IAAS;AACjG;AAEA,SAASC,WAAWC,YAA0B,EAAE5E,MAAc;IAC5D,IAAI4E,aAAarG,IAAI,KAAKyB,OAAOzB,IAAI,IAAIqG,aAAa9E,IAAI,KAAKE,OAAOF,IAAI,EAAE,OAAO;IACnF,OACE,AAAC8E,aAAarG,IAAI,KAAK,WAAWqG,aAAarG,IAAI,KAAK,aACvD,AAACyB,CAAAA,OAAOzB,IAAI,KAAK,WAAWyB,OAAOzB,IAAI,KAAK,SAAQ,KAAMqG,aAAaxE,IAAI,KAAKJ,OAAOI,IAAI;AAEhG;AAEA,SAAS0C,gBACP/C,OAA0B,EAC1ByB,OAAqB,EACrBqD,KAA8B;IAE9B,MAAMpC,gBAAgC,EAAE;IACxC,MAAMqC,OAAO,IAAInD;IACjB,MAAME,MAAM,CAAC+C;QACX,MAAMG,OACJH,aAAarG,IAAI,KAAK,WAAWqG,aAAarG,IAAI,KAAK,YAAYqG,aAAaxE,IAAI,GAAG;QACzF,MAAM4E,WAAW,GAAGJ,aAAarG,IAAI,CAAC,CAAC,EAAEqG,aAAa9E,IAAI,CAAC,CAAC,EAAEiF,MAAM;QACpE,IAAID,KAAK5C,GAAG,CAAC8C,WAAW;QACxBF,KAAKjD,GAAG,CAACmD;QACTvC,cAAc/B,IAAI,CAACkE;IACrB;IACA,KAAK,MAAM5E,UAAUD,QAAS;QAC5B,IAAIC,OAAOzB,IAAI,KAAK,WAAWyB,OAAOzB,IAAI,KAAK,aAAayB,OAAOzB,IAAI,KAAK,YAAY;YACtF,MAAM0G,QAAQJ,MAAMK,IAAI,CAAC,CAACC,OAASR,WAAWQ,MAAMnF;YACpD,IAAIiF,UAAUxG,WAAW;gBACvBoD,IAAIoD;gBACJ;YACF;YACA,MAAMpF,WAAW2B,QAAQQ,UAAU,CAACC,SAAS,CAACjC,OAAOF,IAAI,CAAC;YAC1D,IAAIE,OAAOzB,IAAI,KAAK,SAAS;gBAC3BsD,IAAI;oBACFtD,MAAM;oBACNuB,MAAME,OAAOF,IAAI;oBACjBM,MAAMJ,OAAOI,IAAI;oBACjBtB,OAAOe,SAASwC,MAAM,CAACrC,OAAOI,IAAI,CAAC;gBACrC;YACF,OAAO,IAAIJ,OAAOzB,IAAI,KAAK,WAAW;gBACpCsD,IAAI;oBACFtD,MAAM;oBACNuB,MAAME,OAAOF,IAAI;oBACjBM,MAAMJ,OAAOI,IAAI;oBACjBtB,OAAOe,SAASQ,QAAQ,CAACL,OAAOI,IAAI,CAAC;gBACvC;YACF,OAAOyB,IAAI;gBAAEtD,MAAM;gBAAYuB,MAAME,OAAOF,IAAI;gBAAEhB,OAAOe,SAASM,QAAQ;YAAC;YAC3E;QACF;QACA,IAAIH,OAAOzB,IAAI,KAAK,UAAU;YAC5BsD,IAAI;gBAAEtD,MAAM;gBAAUuB,MAAME,OAAOF,IAAI;YAAC;YACxC;QACF;QACA+B,IAAI4C,UAAUjD,SAASxB,OAAOF,IAAI;QAClC,IAAIE,OAAOzB,IAAI,KAAK,QAAQsD,IAAI;YAAEtD,MAAM;YAAUuB,MAAME,OAAOhB,EAAE;QAAC;IACpE;IACA,OAAOyD;AACT;AAEA,SAAS2C,MAAMtF,IAAY;IACzB,OAAOA,KAAKuF,KAAK,CAAC,KAAKhE,MAAM;AAC/B;AAEA,SAASiE,SACPC,MAAgC,EAChCxF,OAA0B,EAC1ByF,SAAgB;IAEhB,MAAMC,UAAU1F,QAAQV,GAAG,CAAC,CAACW,SAAYA,OAAOzB,IAAI,KAAK,SAASyB,OAAOhB,EAAE,GAAGgB,OAAOF,IAAI;IACzF,MAAM4F,UAAU3F,QACb6C,MAAM,CAAC,CAAC5C,SAAWA,OAAOzB,IAAI,KAAK,YAAYyB,OAAOzB,IAAI,KAAK,QAC/Dc,GAAG,CAAC,CAACW,SAAYA,OAAOzB,IAAI,KAAK,SAASyB,OAAOhB,EAAE,GAAGgB,OAAOF,IAAI;IACpE,KAAK,MAAM6F,SAASJ,OAAQ;QAC1B,MAAMzG,QAAQ6G,MAAM7G,KAAK;QACzB,IAAI,OAAOA,UAAU,UAAU;QAC/B,IAAI6G,MAAMvF,IAAI,KAAK,6BAA6BL,QAAQsB,MAAM,GAAGvC,OAAO;YACtE,OAAOX,OAAO,kBAAkBM,WAAWkH,MAAMvF,IAAI;QACvD;QACA,IAAIuF,MAAMvF,IAAI,KAAK,iBAAiB;YAClC,MAAMwF,QAAQH,QAAQP,IAAI,CAAC,CAACpF,OAAS,AAAC0F,CAAAA,UAAUvD,SAAS,CAACnC,KAAK,IAAI,EAAC,EAAGuB,MAAM,GAAGvC;YAChF,IAAI8G,UAAUnH,WAAW,OAAON,OAAO,kBAAkByH,OAAOD,MAAMvF,IAAI;QAC5E;QACA,IAAIuF,MAAMvF,IAAI,KAAK,eAAe;YAChC,MAAMyF,OAAOH,QAAQR,IAAI,CAAC,CAACpF,OAASA,KAAKuB,MAAM,GAAGvC;YAClD,IAAI+G,SAASpH,WAAW,OAAON,OAAO,kBAAkB0H,MAAMF,MAAMvF,IAAI;QAC1E;QACA,IAAIuF,MAAMvF,IAAI,KAAK,cAAc;YAC/B,MAAM0F,OAAOJ,QAAQR,IAAI,CAAC,CAACpF,OAASsF,MAAMtF,QAAQhB;YAClD,IAAIgH,SAASrH,WAAW,OAAON,OAAO,kBAAkB2H,MAAMH,MAAMvF,IAAI;QAC1E;IACF;IACA,OAAO;AACT;AAEA,OAAO,SAAS2F,WAAWhC,KAAgB;IACzC,MAAMiC,aAAajC,MAAMhE,OAAO,CAACmF,IAAI,CACnC,CAAClF,SAAWA,OAAOzB,IAAI,KAAK,UAAUyB,OAAOzB,IAAI,KAAK;IAExD,IACEyH,eAAevH,aACfkC,OAAOC,OAAO,CAACmD,MAAMvC,OAAO,CAACQ,UAAU,CAACC,SAAS,EAAE1C,IAAI,CACrD,CAAC,CAACO,MAAMD,SAAS,GACfA,SAASoB,IAAI,KAAKxC,aAClBoB,SAASoB,IAAI,KAAK,SAClBtD,UAAUoG,MAAM3B,WAAW,EAAEtC,MAAMmG,MAAM,KAAK,gBAGlD,OAAO9H,OAAO,qBAAqB6H,WAAWlG,IAAI;IACpD,IAAIiE,MAAMhE,OAAO,CAACsB,MAAM,KAAK,GAAG,OAAOlD,OAAO;IAC9C,MAAMuE,YAAYnB,SAASwC,MAAMhE,OAAO,EAAEgE,MAAMvC,OAAO;IACvD,IAAIkB,UAAUnE,IAAI,KAAK,WAAW,OAAOmE;IACzC,MAAM3C,UAAUgE,MAAMmC,SAAS,KAAK,aAAanC,MAAMhE,OAAO,GAAG2C,UAAU3C,OAAO;IAClF,MAAMvB,UAAUsF,MAAM/D,SAASgE;IAC/B,IAAIvF,YAAY,MAAM,OAAOA;IAC7B,MAAMiE,gBAAgBK,gBAAgB/C,SAASgE,MAAMvC,OAAO,EAAEuC,MAAMc,KAAK;IACzE,MAAMsB,YACJpC,MAAMmC,SAAS,KAAK,aAChB1D,YAAYzC,SAAS0C,eAAeC,UAAU3C,OAAO,EAAEgE,MAAMvC,OAAO,IACpE;QAAEzB;QAAS0C;IAAc;IAC/B,MAAM+C,YAAYzH,QAAQgG,MAAMvC,OAAO,EAAE;QACvC;YAAE4E,IAAI;YAAIC,iBAAiBtC,MAAMsC,eAAe;YAAE,GAAGF,SAAS;QAAC;KAChE;IACD,MAAM9C,UAAU,IAAI1B,IAClB5B,QAAQ6C,MAAM,CAAC,CAAC5C,SAAWA,OAAOzB,IAAI,KAAK,UAAUc,GAAG,CAAC,CAACW,SAAWA,OAAOF,IAAI;IAElF,IAAIuD,QAAQvB,IAAI,GAAG,GAAG;QACpB,MAAMwE,aAAalD,SAASxF,gBAAgB4H,UAAUvD,SAAS,EAAE8B,MAAM3B,WAAW,GAAGiB;QACrF,IAAIiD,eAAe,MAAM,OAAOA;IAClC;IACA,MAAMC,QAAQ,CAACrF;QACb,IAAIA,YAAYzC,WAAW,OAAO;QAClC,MAAM+H,SAASlJ,MAAM4D;QACrB,OAAOsF,OAAOC,EAAE,IAAID,OAAO3G,QAAQ,CAACoB,IAAI,KAAKxC,aAAa+H,OAAO3G,QAAQ,CAACoB,IAAI,KAAK;IACrF;IACA,MAAMyF,aAAa;WAAI,IAAI/E,IAAIwE,UAAUpG,OAAO,CAAC4G,OAAO,CAAC9C;KAAW,CAACjB,MAAM,CACzE,CAAC9C,OAASyG,MAAMxC,MAAMvC,OAAO,CAACS,SAAS,CAACnC,KAAK,KAAKyG,MAAMf,UAAUvD,SAAS,CAACnC,KAAK;IAEnF,MAAM8G,aAAaF,WAAWrF,MAAM,GAAG;IACvC,MAAMwF,eAAeH,WAAWxB,IAAI,CAClC,CAACpF,OAASnC,UAAUoG,MAAM3B,WAAW,EAAEtC,MAAMmG,MAAM,KAAK;IAE1D,IAAIY,iBAAiBpI,WAAW,OAAON,OAAO,qBAAqB0I;IACnE,MAAMC,iBAAiBF,aACnBpB,UAAUvD,SAAS,GACnBtB,OAAOoG,WAAW,CAChBpG,OAAOC,OAAO,CAAC4E,UAAUvD,SAAS,EAAEW,MAAM,CAAC,CAAC,CAAC9C,KAAK,GAChDqG,UAAUpG,OAAO,CAACR,IAAI,CAAC,CAACS,SAAW6D,SAAS7D,QAAQ6C,QAAQ,CAAC/C;IAGrE,MAAMkH,UAAUnJ,mBAAmBiJ,gBAAgBtB,UAAUvB,aAAa,EAAEF,MAAM3B,WAAW;IAC7F,IAAI4E,QAAQA,OAAO,KAAK,UAAU;QAChC,OAAO;YACLzI,MAAM;YACNC,SAAS;gBACPJ,MAAM4I,QAAQ5I,IAAI;gBAClBC,MAAM2I,QAAQ3I,IAAI;gBAClB,GAAI2I,QAAQ1I,QAAQ,KAAKG,YAAY,CAAC,IAAI;oBAAEH,UAAU0I,QAAQ1I,QAAQ;gBAAC,CAAC;gBACxE,GAAI0I,QAAQxD,SAAS,KAAK/E,YAAY,CAAC,IAAI;oBAAE+E,WAAWwD,QAAQxD,SAAS;gBAAC,CAAC;YAC7E;QACF;IACF;IACA,MAAMyD,UAAU3B,SAASvB,MAAMmD,cAAc,EAAEnH,SAASyF;IACxD,IAAIyB,YAAY,MAAM,OAAOA;IAC7B,MAAME,YAAYT,WACfrH,GAAG,CAAC,CAACS,OAASnC,UAAUoG,MAAM3B,WAAW,EAAEtC,OAC3CoF,IAAI,CACH,CAACkC,QACCA,MAAMnB,MAAM,KAAK;IAEvB,OAAO;QACL1H,MAAM;QACNyE,OAAOtF,UAAU;YACf0I,IAAItI;YACJuI,iBAAiBtC,MAAMsC,eAAe;YACtCtG;YACA0C;YACA,GAAIsB,MAAMsD,SAAS,KAAK5I,YAAY,CAAC,IAAI;gBAAE4I,WAAWtD,MAAMsD,SAAS;YAAC,CAAC;YACvE,GAAIF,cAAc1I,YACd,CAAC,IACD;gBACE6I,YAAY;oBACVtC,UAAUmC,UAAUI,QAAQ,CAACvC,QAAQ;oBACrCwC,SAASL,UAAUI,QAAQ,CAACC,OAAO;oBACnCC,QAAQN,UAAUlB,MAAM;gBAC1B;YACF,CAAC;QACP;IACF;AACF"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/save.ts"],"sourcesContent":["import { definitionOf, type ModelState } from './model.js';\nimport {\n apply,\n links,\n parse,\n retarget,\n serialize,\n target,\n type Document,\n type FieldSpec,\n} from '@agentshouse/mdmodel';\nimport type { ProviderLimit } from './adapter.js';\nimport {\n immutable,\n type Change,\n type ChangeBatch,\n type Precondition,\n type WrittenBy,\n} from './change.js';\nimport {\n governing,\n parseCollection,\n validateCollection,\n type Collection,\n type Composition,\n} from './collection.js';\nimport { changeBatchIdentity } from './identity.js';\nimport { overlay, type Layer } from './overlay.js';\nimport { covered, normalize, relative } from './paths.js';\nimport type { VisibleLayer } from './replica.js';\nimport type { ChangedPart } from './room-draft.js';\n\nexport type SaveRefusal = {\n rule: string;\n file?: string;\n location?: string;\n referrers?: readonly string[];\n parts?: readonly ChangedPart[];\n};\n\nexport type Rewriting = 'runtime' | 'provider';\n\nexport type SaveInput = {\n composition: Composition;\n rewriting: Rewriting;\n baseRoomVersion: string;\n operations: import('./adapter.js').OperationScopes;\n providerOwnedPaths: readonly string[];\n providerLimits: readonly ProviderLimit[];\n visible: VisibleLayer;\n changes: readonly Change[];\n bases: readonly Precondition[];\n writtenBy?: WrittenBy;\n};\n\nexport type BatchResult =\n | { kind: 'batch'; batch: ChangeBatch }\n | { kind: 'refused'; refusal: SaveRefusal };\n\ntype Expansion =\n | { kind: 'changes'; changes: readonly Change[] }\n | { kind: 'refused'; refusal: SaveRefusal };\n\nfunction refuse(rule: string, file?: string, location?: string): BatchResult {\n return {\n kind: 'refused',\n refusal: {\n rule,\n ...(file === undefined ? {} : { file }),\n ...(location === undefined ? {} : { location }),\n },\n };\n}\n\nfunction referenceField(spec: FieldSpec): boolean {\n return spec.kind === 'reference' || (spec.kind === 'list' && spec.of.kind === 'reference');\n}\n\nfunction repointed(\n value: unknown,\n from: string,\n to: string,\n moves: ReadonlyMap<string, string>,\n): unknown {\n if (Array.isArray(value)) {\n const next = value.map((item) => repointed(item, from, to, moves) ?? item);\n return next.some((item, index) => item !== value[index]) ? next : undefined;\n }\n if (typeof value !== 'string') return undefined;\n const named = target(from, value);\n if (named === null) return undefined;\n const destination = moves.get(named) ?? named;\n return target(to, value) === destination ? undefined : retarget(value, relative(to, destination));\n}\n\nfunction edited(document: Document, path: string, changes: readonly Change[]): Document {\n let next = document;\n for (const change of changes) {\n if (change.path !== path) continue;\n if (change.kind !== 'section' && change.kind !== 'preamble') continue;\n const applied = apply(\n next,\n change.kind === 'preamble'\n ? { kind: 'preamble', value: change.value, prior: next.preamble }\n : {\n kind: 'section',\n name: change.name,\n value: change.value,\n prior: next.sections[change.name],\n },\n );\n if (applied.outcome === 'applied') next = applied.document;\n }\n return next;\n}\n\nfunction bodies(path: string, before: Document, after: Document): readonly Change[] {\n const changes: Change[] = [];\n if (after.preamble !== before.preamble) {\n changes.push({ kind: 'preamble', path, value: after.preamble });\n }\n for (const [name, value] of Object.entries(after.sections)) {\n if (before.sections[name] === value) continue;\n changes.push({ kind: 'section', path, name, value });\n }\n return changes;\n}\n\nfunction relinks(\n path: string,\n moved: string,\n before: Document,\n moves: ReadonlyMap<string, string>,\n): Expansion {\n let after = before;\n for (const link of links(before, path)) {\n const destination = moves.get(link.target) ?? link.target;\n if (destination === link.target && moved === path) continue;\n const to = relative(moved, destination);\n if (to === relative(path, link.target)) continue;\n const applied = apply(after, { kind: 'link', href: link.href, to });\n if (applied.outcome === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: applied.refusal.rule,\n file: path,\n ...(applied.refusal.location === undefined ? {} : { location: applied.refusal.location }),\n },\n };\n }\n after = applied.document;\n }\n if (after === before) return { kind: 'changes', changes: [] };\n if (before.type === undefined) {\n return { kind: 'changes', changes: [{ kind: 'replace', path, content: serialize(after) }] };\n }\n return { kind: 'changes', changes: bodies(path, before, after) };\n}\n\nfunction subsumed(merged: Change[], path: string) {\n for (let index = merged.length - 1; index >= 0; index -= 1) {\n const item = merged[index];\n if (item.path !== path) continue;\n if (item.kind === 'section' || item.kind === 'preamble') merged.splice(index, 1);\n }\n}\n\nfunction rewrites(changes: readonly Change[], visible: VisibleLayer): Expansion {\n const moves = new Map<string, string>();\n const settled = new Set<string>();\n for (const change of changes) {\n if (change.kind === 'move') moves.set(change.path, change.to);\n if (change.kind === 'remove' || change.kind === 'replace' || change.kind === 'create') {\n settled.add(change.path);\n }\n if (change.kind === 'field') settled.add(`${change.path} ${change.name}`);\n }\n if (moves.size === 0) return { kind: 'changes', changes };\n const merged = [...changes];\n const added: Change[] = [];\n for (const [path, document] of Object.entries(visible.collection.documents)) {\n if (settled.has(path)) continue;\n const moved = moves.get(path) ?? path;\n const definition = definitionOf(governing(visible.collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec) || settled.has(`${path} ${name}`)) continue;\n const value = repointed(document.fields[name], path, moved, moves);\n if (value === undefined) continue;\n added.push({ kind: 'field', path, name, value });\n }\n const relinked = relinks(path, moved, edited(document, path, merged), moves);\n if (relinked.kind === 'refused') return relinked;\n for (const change of relinked.changes) {\n if (change.kind === 'replace') {\n subsumed(merged, path);\n added.push(change);\n continue;\n }\n const index = merged.findIndex(\n (item) =>\n item.kind === change.kind &&\n item.path === path &&\n (change.kind !== 'section' || (item.kind === 'section' && item.name === change.name)),\n );\n if (index === -1) added.push(change);\n else merged[index] = change;\n }\n }\n return { kind: 'changes', changes: [...added, ...merged] };\n}\n\nfunction anticipated(\n changes: readonly Change[],\n preconditions: readonly Precondition[],\n rewritten: readonly Change[],\n visible: VisibleLayer,\n) {\n const derived = rewritten.filter((change) => !changes.includes(change));\n return {\n changes: rewritten,\n preconditions: [...preconditionsOf(derived, visible, []), ...preconditions],\n };\n}\n\nexport function providerRewritten(batch: ChangeBatch, visible: VisibleLayer): ChangeBatch {\n const rewritten = rewrites(batch.changes, visible);\n if (rewritten.kind === 'refused') return batch;\n return {\n ...batch,\n ...anticipated(batch.changes, batch.preconditions, rewritten.changes, visible),\n };\n}\n\nfunction targets(value: unknown, from: string): readonly string[] {\n const values = Array.isArray(value) ? value : [value];\n const resolved: string[] = [];\n for (const item of values) {\n if (typeof item !== 'string') continue;\n const named = target(from, item);\n if (named !== null) resolved.push(named);\n }\n return resolved;\n}\n\nfunction incoming(collection: Collection, removed: ReadonlySet<string>): BatchResult | null {\n const found = new Map<string, Set<string>>();\n const note = (target: string, file: string) => {\n if (!removed.has(target)) return;\n const referrers = found.get(target) ?? new Set<string>();\n referrers.add(file);\n found.set(target, referrers);\n };\n for (const [path, document] of Object.entries(collection.documents)) {\n const definition = definitionOf(governing(collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec)) continue;\n for (const named of targets(document.fields[name], path)) note(named, path);\n }\n for (const link of links(document, path)) note(link.target, path);\n }\n const [first] = [...found.keys()].sort();\n if (first === undefined) return null;\n const every = new Set<string>();\n for (const referrers of found.values()) for (const file of referrers) every.add(file);\n return {\n kind: 'refused',\n refusal: { rule: 'referenced-missing-file', file: first, referrers: [...every].sort() },\n };\n}\n\nfunction affected(change: Change): readonly string[] {\n return change.kind === 'move' ? [change.path, change.to] : [change.path];\n}\n\nfunction guard(changes: readonly Change[], input: SaveInput): BatchResult | null {\n const existing = new Set([\n ...Object.keys(input.visible.documents),\n ...input.visible.binaryTargets,\n ]);\n for (const change of changes) {\n for (const path of affected(change)) {\n const normalized = normalize(path);\n if (normalized === null || normalized === '') return refuse('room-root', path);\n if (covered(input.providerOwnedPaths, normalized)) {\n return refuse('provider-owned-path', normalized);\n }\n const operation = change.kind === 'remove' ? 'delete' : 'write';\n if (!covered(input.operations[operation], normalized))\n return refuse(`${operation}-grant`, normalized);\n }\n if (change.kind === 'create') {\n if (existing.has(change.path)) return refuse('path-collision', change.path);\n existing.add(change.path);\n continue;\n }\n if (change.kind === 'move') {\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (existing.has(change.to)) return refuse('path-collision', change.to);\n if (unrevisionedDocument(input.visible, change.path)) {\n return refuse('unknown-revision', change.path);\n }\n existing.delete(change.path);\n existing.add(change.to);\n continue;\n }\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (change.kind === 'remove') {\n if (unrevisionedDocument(input.visible, change.path)) {\n return refuse('unknown-revision', change.path);\n }\n existing.delete(change.path);\n continue;\n }\n if (change.kind === 'replace') {\n if (input.visible.revisions[change.path] === undefined) {\n return refuse('unknown-revision', change.path);\n }\n continue;\n }\n if (input.visible.collection.documents[change.path] === undefined) {\n return refuse('path-absent', change.path);\n }\n }\n return null;\n}\n\nfunction unrevisionedDocument(visible: VisibleLayer, path: string): boolean {\n return visible.revisions[path] === undefined && !visible.binaryTargets.includes(path);\n}\n\nfunction existence(visible: VisibleLayer, path: string): Precondition {\n const revision = visible.revisions[path];\n return revision === undefined ? { kind: 'present', path } : { kind: 'revision', path, revision };\n}\n\nfunction sameTarget(precondition: Precondition, change: Change): boolean {\n if (precondition.kind !== change.kind || precondition.path !== change.path) return false;\n return (\n (precondition.kind !== 'field' && precondition.kind !== 'section') ||\n ((change.kind === 'field' || change.kind === 'section') && precondition.name === change.name)\n );\n}\n\nfunction preconditionsOf(\n changes: readonly Change[],\n visible: VisibleLayer,\n bases: readonly Precondition[],\n): readonly Precondition[] {\n const preconditions: Precondition[] = [];\n const seen = new Set<string>();\n const add = (precondition: Precondition) => {\n const part =\n precondition.kind === 'field' || precondition.kind === 'section' ? precondition.name : '';\n const identity = `${precondition.kind} ${precondition.path} ${part}`;\n if (seen.has(identity)) return;\n seen.add(identity);\n preconditions.push(precondition);\n };\n for (const change of changes) {\n if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {\n const based = bases.find((base) => sameTarget(base, change));\n if (based !== undefined) {\n add(based);\n continue;\n }\n const document = visible.collection.documents[change.path];\n if (change.kind === 'field') {\n add({\n kind: 'field',\n path: change.path,\n name: change.name,\n value: document.fields[change.name],\n });\n } else if (change.kind === 'section') {\n add({\n kind: 'section',\n path: change.path,\n name: change.name,\n value: document.sections[change.name],\n });\n } else add({ kind: 'preamble', path: change.path, value: document.preamble });\n continue;\n }\n if (change.kind === 'create') {\n add({ kind: 'absent', path: change.path });\n continue;\n }\n add(existence(visible, change.path));\n if (change.kind === 'move') add({ kind: 'absent', path: change.to });\n }\n return preconditions;\n}\n\nfunction depth(path: string) {\n return path.split('/').length;\n}\n\nfunction exceeded(\n limits: readonly ProviderLimit[],\n changes: readonly Change[],\n resulting: Layer,\n): BatchResult | null {\n const written = changes.map((change) => (change.kind === 'move' ? change.to : change.path));\n const created = changes\n .filter((change) => change.kind === 'create' || change.kind === 'move')\n .map((change) => (change.kind === 'move' ? change.to : change.path));\n for (const limit of limits) {\n const value = limit.value;\n if (typeof value !== 'number') continue;\n if (limit.name === 'change-batch-operations' && changes.length > value) {\n return refuse('provider-limit', undefined, limit.name);\n }\n if (\n limit.name === 'change-documents' &&\n new Set(changes.map((change) => change.path)).size > value\n ) {\n return refuse('provider-limit', undefined, limit.name);\n }\n if (limit.name === 'document-size') {\n const large = written.find((path) => (resulting.documents[path] ?? '').length > value);\n if (large !== undefined) return refuse('provider-limit', large, limit.name);\n }\n if (limit.name === 'path-length') {\n const long = created.find((path) => path.length > value);\n if (long !== undefined) return refuse('provider-limit', long, limit.name);\n }\n if (limit.name === 'path-depth') {\n const deep = created.find((path) => depth(path) > value);\n if (deep !== undefined) return refuse('provider-limit', deep, limit.name);\n }\n }\n return null;\n}\n\nexport function buildBatch(input: SaveInput): BatchResult {\n const structural = input.changes.find(\n (change) => change.kind === 'move' || change.kind === 'remove',\n );\n if (\n structural !== undefined &&\n Object.entries(input.visible.collection.documents).some(\n ([path, document]) =>\n document.type !== undefined &&\n document.type !== 'any' &&\n governing(input.composition, path).status === 'unavailable',\n )\n )\n return refuse('model-unavailable', structural.path);\n if (input.changes.length === 0) return refuse('no-change');\n const rewritten = rewrites(input.changes, input.visible);\n if (rewritten.kind === 'refused') return rewritten;\n const changes = input.rewriting === 'provider' ? input.changes : rewritten.changes;\n const refusal = guard(changes, input);\n if (refusal !== null) return refusal;\n const preconditions = preconditionsOf(changes, input.visible, input.bases);\n const predicted =\n input.rewriting === 'provider'\n ? anticipated(changes, preconditions, rewritten.changes, input.visible)\n : { changes, preconditions };\n const resulting = overlay(input.visible, [\n { id: '', baseRoomVersion: input.baseRoomVersion, ...predicted },\n ]);\n const removed = new Set(\n changes.filter((change) => change.kind === 'remove').map((change) => change.path),\n );\n if (removed.size > 0) {\n const referenced = incoming(parseCollection(resulting.documents, input.composition), removed);\n if (referenced !== null) return referenced;\n }\n const typed = (content: string | undefined) => {\n if (content === undefined) return false;\n const parsed = parse(content);\n return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';\n };\n const typedPaths = [...new Set(predicted.changes.flatMap(affected))].filter(\n (path) => typed(input.visible.documents[path]) || typed(resulting.documents[path]),\n );\n const needsModel = typedPaths.length > 0;\n const withoutModel = typedPaths.find(\n (path) => governing(input.composition, path).status === 'unavailable',\n );\n if (withoutModel !== undefined) return refuse('model-unavailable', withoutModel);\n const validationText = needsModel\n ? resulting.documents\n : Object.fromEntries(\n Object.entries(resulting.documents).filter(([path]) =>\n predicted.changes.some((change) => affected(change).includes(path)),\n ),\n );\n const verdict = validateCollection(validationText, resulting.binaryTargets, input.composition);\n if (verdict.verdict === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: verdict.rule,\n file: verdict.file,\n ...(verdict.location === undefined ? {} : { location: verdict.location }),\n ...(verdict.referrers === undefined ? {} : { referrers: verdict.referrers }),\n },\n };\n }\n const limited = exceeded(input.providerLimits, changes, resulting);\n if (limited !== null) return limited;\n const validated = typedPaths\n .map((path) => governing(input.composition, path))\n .find(\n (model): model is Extract<ModelState, { status: 'current' | 'cached' }> =>\n model.status !== 'unavailable',\n );\n return {\n kind: 'batch',\n batch: immutable({\n id: changeBatchIdentity(),\n baseRoomVersion: input.baseRoomVersion,\n changes,\n preconditions,\n ...(input.writtenBy === undefined ? {} : { writtenBy: input.writtenBy }),\n ...(validated === undefined\n ? {}\n : {\n validation: {\n identity: validated.snapshot.identity,\n version: validated.snapshot.version,\n source: validated.status,\n },\n }),\n }),\n };\n}\n"],"names":["definitionOf","apply","links","parse","retarget","serialize","target","immutable","governing","parseCollection","validateCollection","changeBatchIdentity","overlay","covered","normalize","relative","refuse","rule","file","location","kind","refusal","undefined","referenceField","spec","of","repointed","value","from","to","moves","Array","isArray","next","map","item","some","index","named","destination","get","edited","document","path","changes","change","applied","prior","preamble","name","sections","outcome","bodies","before","after","push","Object","entries","relinks","moved","link","href","type","content","subsumed","merged","length","splice","rewrites","visible","Map","settled","Set","set","add","size","added","collection","documents","has","definition","composition","fields","relinked","findIndex","anticipated","preconditions","rewritten","derived","filter","includes","preconditionsOf","providerRewritten","batch","targets","values","resolved","incoming","removed","found","note","referrers","first","keys","sort","every","affected","guard","input","existing","binaryTargets","normalized","providerOwnedPaths","operation","operations","unrevisionedDocument","delete","revisions","existence","revision","sameTarget","precondition","bases","seen","part","identity","based","find","base","depth","split","exceeded","limits","resulting","written","created","limit","large","long","deep","buildBatch","structural","status","rewriting","predicted","id","baseRoomVersion","referenced","typed","parsed","ok","typedPaths","flatMap","needsModel","withoutModel","validationText","fromEntries","verdict","limited","providerLimits","validated","model","writtenBy","validation","snapshot","version","source"],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -25,6 +25,7 @@ export type PendingState = {
25
25
  readonly drafts: readonly SavedDraft[];
26
26
  readonly submission: Submission;
27
27
  readonly lost: boolean;
28
+ readonly upload?: unknown;
28
29
  };
29
30
  export type OutcomeRecord = {
30
31
  locator: string;
@@ -88,6 +89,7 @@ export type RuntimeStore = {
88
89
  queues(): Promise<readonly QueueRecord[]>;
89
90
  outcomes(): Promise<readonly OutcomeRecord[]>;
90
91
  submit(locator: string, id: string, submission: Submission, lost: boolean): Promise<void>;
92
+ keepUpload(locator: string, id: string, upload: unknown): Promise<void>;
91
93
  roomDrafts(): Promise<readonly RoomDraftRecord[]>;
92
94
  presentation(): Promise<readonly PresentationRecord[]>;
93
95
  present(record: PresentationRecord): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/store.js CHANGED
@@ -45,6 +45,22 @@ function updateDeclaration(database, update) {
45
45
  };
46
46
  return completed(transaction);
47
47
  }
48
+ function amendPending(database, locator, id, amendment) {
49
+ const transaction = database.transaction(PENDING_CHANGES, 'readwrite');
50
+ const pending = transaction.objectStore(PENDING_CHANGES);
51
+ const request = pending.get([
52
+ locator,
53
+ id
54
+ ]);
55
+ request.onsuccess = ()=>{
56
+ const record = request.result;
57
+ if (record !== undefined) pending.put({
58
+ ...record,
59
+ ...amendment
60
+ });
61
+ };
62
+ return completed(transaction);
63
+ }
48
64
  function roomRecord(record, queue) {
49
65
  const { documents, binaryTargets, revisions, ...room } = record;
50
66
  return {
@@ -311,13 +327,14 @@ export async function openRuntimeStore() {
311
327
  pending: room.order.map((id)=>{
312
328
  const record = byId.get(`${room.locator}\0${id}`);
313
329
  if (record === undefined) throw new Error(`Missing Pending Change ${room.locator}/${id}`);
314
- const { batch, drafts, submission, lost } = record;
330
+ const { batch, drafts, submission, lost, upload } = record;
315
331
  return {
316
332
  batch,
317
333
  state: {
318
334
  drafts,
319
335
  submission,
320
- lost
336
+ lost,
337
+ upload
321
338
  }
322
339
  };
323
340
  })
@@ -327,22 +344,16 @@ export async function openRuntimeStore() {
327
344
  const transaction = database.transaction(OUTCOMES, 'readonly');
328
345
  return settled(transaction.objectStore(OUTCOMES).getAll());
329
346
  },
330
- async submit (locator, id, submission, lost) {
331
- const transaction = database.transaction(PENDING_CHANGES, 'readwrite');
332
- const pending = transaction.objectStore(PENDING_CHANGES);
333
- const request = pending.get([
334
- locator,
335
- id
336
- ]);
337
- request.onsuccess = ()=>{
338
- const record = request.result;
339
- if (record !== undefined) pending.put({
340
- ...record,
341
- submission,
342
- lost
343
- });
344
- };
345
- await completed(transaction);
347
+ submit (locator, id, submission, lost) {
348
+ return amendPending(database, locator, id, {
349
+ submission,
350
+ lost
351
+ });
352
+ },
353
+ keepUpload (locator, id, upload) {
354
+ return amendPending(database, locator, id, {
355
+ upload
356
+ });
346
357
  },
347
358
  async roomDrafts () {
348
359
  const transaction = database.transaction(ROOM_DRAFTS, 'readonly');