syncorejs 0.2.2 → 0.2.4
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/_vendor/cli/app.d.mts.map +1 -1
- package/dist/_vendor/cli/app.mjs +8 -5
- package/dist/_vendor/cli/app.mjs.map +1 -1
- package/dist/_vendor/cli/context.mjs.map +1 -1
- package/dist/_vendor/cli/dev-session.mjs.map +1 -1
- package/dist/_vendor/cli/doctor.mjs.map +1 -1
- package/dist/_vendor/cli/errors.mjs.map +1 -1
- package/dist/_vendor/cli/help.mjs.map +1 -1
- package/dist/_vendor/cli/index.mjs +9 -2
- package/dist/_vendor/cli/index.mjs.map +1 -1
- package/dist/_vendor/cli/messages.mjs.map +1 -1
- package/dist/_vendor/cli/preflight.mjs.map +1 -1
- package/dist/_vendor/cli/project.mjs +20 -20
- package/dist/_vendor/cli/project.mjs.map +1 -1
- package/dist/_vendor/cli/render.mjs.map +1 -1
- package/dist/_vendor/cli/targets.mjs.map +1 -1
- package/dist/_vendor/core/cli.d.mts +8 -2
- package/dist/_vendor/core/cli.d.mts.map +1 -1
- package/dist/_vendor/core/cli.mjs +510 -71
- package/dist/_vendor/core/cli.mjs.map +1 -1
- package/dist/_vendor/core/devtools-auth.mjs.map +1 -1
- package/dist/_vendor/core/index.d.mts +3 -3
- package/dist/_vendor/core/runtime/components.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/components.mjs.map +1 -1
- package/dist/_vendor/core/runtime/devtools.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/devtools.mjs +261 -23
- package/dist/_vendor/core/runtime/devtools.mjs.map +1 -1
- package/dist/_vendor/core/runtime/functions.d.mts +388 -6
- package/dist/_vendor/core/runtime/functions.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/functions.mjs +72 -1
- package/dist/_vendor/core/runtime/functions.mjs.map +1 -1
- package/dist/_vendor/core/runtime/id.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/id.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/engines/devtoolsEngine.mjs +12 -6
- package/dist/_vendor/core/runtime/internal/engines/devtoolsEngine.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/engines/executionEngine.mjs +123 -20
- package/dist/_vendor/core/runtime/internal/engines/executionEngine.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/engines/reactivityEngine.mjs +56 -8
- package/dist/_vendor/core/runtime/internal/engines/reactivityEngine.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/engines/schedulerEngine.mjs +49 -14
- package/dist/_vendor/core/runtime/internal/engines/schedulerEngine.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/engines/schemaEngine.mjs +4 -7
- package/dist/_vendor/core/runtime/internal/engines/schemaEngine.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/engines/shared.mjs +81 -2
- package/dist/_vendor/core/runtime/internal/engines/shared.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/engines/storageEngine.mjs +100 -13
- package/dist/_vendor/core/runtime/internal/engines/storageEngine.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/runtimeKernel.mjs +42 -7
- package/dist/_vendor/core/runtime/internal/runtimeKernel.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/runtimeStatus.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/systemMeta.mjs.map +1 -1
- package/dist/_vendor/core/runtime/internal/transactionCoordinator.mjs +4 -0
- package/dist/_vendor/core/runtime/internal/transactionCoordinator.mjs.map +1 -1
- package/dist/_vendor/core/runtime/runtime.d.mts +1100 -12
- package/dist/_vendor/core/runtime/runtime.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/runtime.mjs +63 -0
- package/dist/_vendor/core/runtime/runtime.mjs.map +1 -1
- package/dist/_vendor/core/transport.d.mts +2 -0
- package/dist/_vendor/core/transport.d.mts.map +1 -1
- package/dist/_vendor/core/transport.mjs +61 -27
- package/dist/_vendor/core/transport.mjs.map +1 -1
- package/dist/_vendor/devtools-protocol/index.d.ts +223 -4
- package/dist/_vendor/devtools-protocol/index.d.ts.map +1 -1
- package/dist/_vendor/devtools-protocol/index.js.map +1 -1
- package/dist/_vendor/next/config.d.ts +3 -4
- package/dist/_vendor/next/config.d.ts.map +1 -1
- package/dist/_vendor/next/config.js +37 -19
- package/dist/_vendor/next/config.js.map +1 -1
- package/dist/_vendor/next/index.d.ts +109 -29
- package/dist/_vendor/next/index.d.ts.map +1 -1
- package/dist/_vendor/next/index.js +86 -18
- package/dist/_vendor/next/index.js.map +1 -1
- package/dist/_vendor/platform-expo/index.d.ts +146 -27
- package/dist/_vendor/platform-expo/index.d.ts.map +1 -1
- package/dist/_vendor/platform-expo/index.js +81 -10
- package/dist/_vendor/platform-expo/index.js.map +1 -1
- package/dist/_vendor/platform-expo/react.js.map +1 -1
- package/dist/_vendor/platform-expo/web-sqljs-wasm.js +16 -0
- package/dist/_vendor/platform-expo/web-sqljs-wasm.js.map +1 -0
- package/dist/_vendor/platform-node/index.d.mts +174 -9
- package/dist/_vendor/platform-node/index.d.mts.map +1 -1
- package/dist/_vendor/platform-node/index.mjs +251 -95
- package/dist/_vendor/platform-node/index.mjs.map +1 -1
- package/dist/_vendor/platform-node/ipc-react.mjs +4 -0
- package/dist/_vendor/platform-node/ipc-react.mjs.map +1 -1
- package/dist/_vendor/platform-node/ipc.d.mts.map +1 -1
- package/dist/_vendor/platform-node/ipc.mjs.map +1 -1
- package/dist/_vendor/platform-web/external-change.d.ts +41 -0
- package/dist/_vendor/platform-web/external-change.d.ts.map +1 -1
- package/dist/_vendor/platform-web/external-change.js +30 -0
- package/dist/_vendor/platform-web/external-change.js.map +1 -1
- package/dist/_vendor/platform-web/index.d.ts +312 -37
- package/dist/_vendor/platform-web/index.d.ts.map +1 -1
- package/dist/_vendor/platform-web/index.js +247 -25
- package/dist/_vendor/platform-web/index.js.map +1 -1
- package/dist/_vendor/platform-web/indexeddb.d.ts +12 -0
- package/dist/_vendor/platform-web/indexeddb.d.ts.map +1 -1
- package/dist/_vendor/platform-web/indexeddb.js +10 -0
- package/dist/_vendor/platform-web/indexeddb.js.map +1 -1
- package/dist/_vendor/platform-web/opfs.d.ts +16 -1
- package/dist/_vendor/platform-web/opfs.d.ts.map +1 -1
- package/dist/_vendor/platform-web/opfs.js +41 -3
- package/dist/_vendor/platform-web/opfs.js.map +1 -1
- package/dist/_vendor/platform-web/persistence.d.ts +85 -1
- package/dist/_vendor/platform-web/persistence.d.ts.map +1 -1
- package/dist/_vendor/platform-web/persistence.js +15 -0
- package/dist/_vendor/platform-web/persistence.js.map +1 -1
- package/dist/_vendor/platform-web/react.d.ts +1 -2
- package/dist/_vendor/platform-web/react.d.ts.map +1 -1
- package/dist/_vendor/platform-web/react.js +11 -5
- package/dist/_vendor/platform-web/react.js.map +1 -1
- package/dist/_vendor/platform-web/sqljs.js +10 -1
- package/dist/_vendor/platform-web/sqljs.js.map +1 -1
- package/dist/_vendor/platform-web/web-sqljs-wasm.js +8 -0
- package/dist/_vendor/platform-web/web-sqljs-wasm.js.map +1 -0
- package/dist/_vendor/platform-web/worker.d.ts +60 -9
- package/dist/_vendor/platform-web/worker.d.ts.map +1 -1
- package/dist/_vendor/platform-web/worker.js +37 -4
- package/dist/_vendor/platform-web/worker.js.map +1 -1
- package/dist/_vendor/react/index.d.ts +197 -13
- package/dist/_vendor/react/index.d.ts.map +1 -1
- package/dist/_vendor/react/index.js +209 -17
- package/dist/_vendor/react/index.js.map +1 -1
- package/dist/_vendor/schema/definition.d.ts +129 -0
- package/dist/_vendor/schema/definition.d.ts.map +1 -1
- package/dist/_vendor/schema/definition.js +99 -0
- package/dist/_vendor/schema/definition.js.map +1 -1
- package/dist/_vendor/schema/planner.d.ts.map +1 -1
- package/dist/_vendor/schema/planner.js.map +1 -1
- package/dist/_vendor/schema/validators.d.ts +180 -4
- package/dist/_vendor/schema/validators.d.ts.map +1 -1
- package/dist/_vendor/schema/validators.js +35 -1
- package/dist/_vendor/schema/validators.js.map +1 -1
- package/dist/_vendor/svelte/index.d.ts +207 -7
- package/dist/_vendor/svelte/index.d.ts.map +1 -1
- package/dist/_vendor/svelte/index.js +201 -6
- package/dist/_vendor/svelte/index.js.map +1 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +24 -21
|
@@ -11,11 +11,13 @@ import { ensureSupportedSystemFormats } from "./systemMeta.mjs";
|
|
|
11
11
|
import { RuntimeStatusController } from "./runtimeStatus.mjs";
|
|
12
12
|
//#region src/runtime/internal/runtimeKernel.ts
|
|
13
13
|
var RuntimeKernel = class {
|
|
14
|
+
options;
|
|
14
15
|
runtimeId = generateId();
|
|
15
16
|
platform;
|
|
16
17
|
externalChangeSourceId = generateId();
|
|
17
18
|
driverDatabasePath;
|
|
18
19
|
capabilities;
|
|
20
|
+
runtimeCapabilities;
|
|
19
21
|
capabilityDescriptors;
|
|
20
22
|
devtoolsEngine;
|
|
21
23
|
schemaEngine;
|
|
@@ -33,6 +35,10 @@ var RuntimeKernel = class {
|
|
|
33
35
|
this.platform = options.platform ?? "node";
|
|
34
36
|
this.capabilityDescriptors = Object.freeze([...options.capabilityDescriptors ?? []]);
|
|
35
37
|
this.capabilities = Object.freeze({ ...options.capabilities ?? {} });
|
|
38
|
+
this.runtimeCapabilities = Object.freeze(options.runtimeCapabilities ?? { storage: {
|
|
39
|
+
available: true,
|
|
40
|
+
...options.storage.supportsRange ? { supportsRange: options.storage.supportsRange() !== false } : {}
|
|
41
|
+
} });
|
|
36
42
|
this.driverDatabasePath = inferDriverDatabasePath(options.driver);
|
|
37
43
|
this.devtoolsEngine = new DevtoolsEngine({
|
|
38
44
|
runtimeId: this.runtimeId,
|
|
@@ -56,7 +62,8 @@ var RuntimeKernel = class {
|
|
|
56
62
|
this.transactionCoordinator = new TransactionCoordinator(options.driver);
|
|
57
63
|
this.runtimeStatus = new RuntimeStatusController({
|
|
58
64
|
kind: "starting",
|
|
59
|
-
reason: "booting"
|
|
65
|
+
reason: "booting",
|
|
66
|
+
capabilities: this.runtimeCapabilities
|
|
60
67
|
});
|
|
61
68
|
this.schedulerEngine = new SchedulerEngine({
|
|
62
69
|
driver: options.driver,
|
|
@@ -64,8 +71,8 @@ var RuntimeKernel = class {
|
|
|
64
71
|
devtools: this.devtoolsEngine,
|
|
65
72
|
recurringJobs: options.scheduler?.recurringJobs ?? [],
|
|
66
73
|
pollIntervalMs: options.scheduler?.pollIntervalMs ?? 1e3,
|
|
67
|
-
runMutation: (reference, args) => this.executionEngine.runMutation(reference, args),
|
|
68
|
-
runAction: (reference, args) => this.executionEngine.runAction(reference, args)
|
|
74
|
+
runMutation: (reference, args, meta) => this.executionEngine.runMutation(reference, args, meta),
|
|
75
|
+
runAction: (reference, args, meta) => this.executionEngine.runAction(reference, args, meta)
|
|
69
76
|
});
|
|
70
77
|
this.reactivityEngine = new ReactivityEngine({
|
|
71
78
|
runtimeId: this.runtimeId,
|
|
@@ -73,7 +80,7 @@ var RuntimeKernel = class {
|
|
|
73
80
|
...options.externalChangeSignal ? { externalChangeSignal: options.externalChangeSignal } : {},
|
|
74
81
|
...options.externalChangeApplier ? { externalChangeApplier: options.externalChangeApplier } : {},
|
|
75
82
|
devtools: this.devtoolsEngine,
|
|
76
|
-
runQuery: (reference, args) => this.executionEngine.runQuery(reference, args),
|
|
83
|
+
runQuery: (reference, args, meta) => this.executionEngine.runQuery(reference, args, meta),
|
|
77
84
|
collectQueryDependencies: (functionName, args) => this.executionEngine.collectQueryDependencies(functionName, args)
|
|
78
85
|
});
|
|
79
86
|
this.executionEngine = new ExecutionEngine({
|
|
@@ -112,6 +119,28 @@ var RuntimeKernel = class {
|
|
|
112
119
|
if (resolvedScopes.size > 0) await this.reactivityEngine.refreshQueriesForScopes(resolvedScopes, reason);
|
|
113
120
|
await this.devtoolsEngine.forceRefresh(reason, { refreshQueriesForScopes: (requestedScopes, refreshReason) => this.reactivityEngine.refreshQueriesForScopes(requestedScopes, refreshReason) }, meta, resolvedScopes);
|
|
114
121
|
},
|
|
122
|
+
listStorageObjects: async (options) => {
|
|
123
|
+
await this.prepareForDirectAccess();
|
|
124
|
+
return this.storageEngine.listObjects(options);
|
|
125
|
+
},
|
|
126
|
+
getStorageObjectAccessInfo: async (id) => {
|
|
127
|
+
await this.prepareForDirectAccess();
|
|
128
|
+
return this.storageEngine.getObjectAccessInfo(id);
|
|
129
|
+
},
|
|
130
|
+
readStorageObjectRange: async (id, offset, length) => {
|
|
131
|
+
await this.prepareForDirectAccess();
|
|
132
|
+
return this.storageEngine.readObjectRange(id, offset, length);
|
|
133
|
+
},
|
|
134
|
+
deleteStorageObject: async (id, meta) => {
|
|
135
|
+
await this.prepareForDirectAccess();
|
|
136
|
+
const deleted = await this.storageEngine.deleteObject(id, meta);
|
|
137
|
+
if (deleted) this.devtoolsEngine.notifyScopes([
|
|
138
|
+
"runtime.summary",
|
|
139
|
+
"storage.objects",
|
|
140
|
+
`storage:${id}`
|
|
141
|
+
]);
|
|
142
|
+
return deleted;
|
|
143
|
+
},
|
|
115
144
|
cancelScheduledJob: async (id) => {
|
|
116
145
|
await this.prepareForDirectAccess();
|
|
117
146
|
return this.schedulerEngine.cancelScheduledJob(id);
|
|
@@ -127,7 +156,8 @@ var RuntimeKernel = class {
|
|
|
127
156
|
if (this.started) return;
|
|
128
157
|
this.runtimeStatus.setStatus({
|
|
129
158
|
kind: "starting",
|
|
130
|
-
reason: "booting"
|
|
159
|
+
reason: "booting",
|
|
160
|
+
capabilities: this.runtimeCapabilities
|
|
131
161
|
});
|
|
132
162
|
await this.prepareForDirectAccess();
|
|
133
163
|
try {
|
|
@@ -135,7 +165,10 @@ var RuntimeKernel = class {
|
|
|
135
165
|
this.reactivityEngine.start();
|
|
136
166
|
this.schedulerEngine.startPolling();
|
|
137
167
|
this.started = true;
|
|
138
|
-
this.runtimeStatus.setStatus({
|
|
168
|
+
this.runtimeStatus.setStatus({
|
|
169
|
+
kind: "ready",
|
|
170
|
+
capabilities: this.runtimeCapabilities
|
|
171
|
+
});
|
|
139
172
|
this.devtoolsEngine.emit({
|
|
140
173
|
type: "runtime.connected",
|
|
141
174
|
runtimeId: this.runtimeId,
|
|
@@ -150,6 +183,7 @@ var RuntimeKernel = class {
|
|
|
150
183
|
this.runtimeStatus.setStatus({
|
|
151
184
|
kind: "error",
|
|
152
185
|
reason: "runtime-unavailable",
|
|
186
|
+
capabilities: this.runtimeCapabilities,
|
|
153
187
|
...error instanceof Error ? { error } : {}
|
|
154
188
|
});
|
|
155
189
|
throw error;
|
|
@@ -184,7 +218,8 @@ var RuntimeKernel = class {
|
|
|
184
218
|
this.started = false;
|
|
185
219
|
this.runtimeStatus.setStatus({
|
|
186
220
|
kind: "unavailable",
|
|
187
|
-
reason: "disposed"
|
|
221
|
+
reason: "disposed",
|
|
222
|
+
capabilities: this.runtimeCapabilities
|
|
188
223
|
});
|
|
189
224
|
if (stopError) throw stopError;
|
|
190
225
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeKernel.mjs","names":[],"sources":["../../../src/runtime/internal/runtimeKernel.ts"],"sourcesContent":["import type {\n CapabilityDescriptor,\n DevtoolsLiveQueryScope,\n QueryCtx,\n SyncoreDataModel,\n SyncoreResolvedComponents,\n SyncoreCapabilities,\n SyncoreClient,\n SyncoreRuntime,\n SyncoreRuntimeAdmin,\n SyncoreRuntimeOptions,\n SyncoreWatch,\n UpdateScheduledJobOptions\n} from \"../runtime.js\";\nimport type { FunctionReference } from \"../functions.js\";\nimport type {\n SyncoreDevtoolsEvent,\n SyncoreDevtoolsEventOrigin\n} from \"@syncore/devtools-protocol\";\nimport { generateId } from \"../id.js\";\nimport { DevtoolsEngine } from \"./engines/devtoolsEngine.js\";\nimport { ExecutionEngine } from \"./engines/executionEngine.js\";\nimport { ReactivityEngine } from \"./engines/reactivityEngine.js\";\nimport { SchedulerEngine } from \"./engines/schedulerEngine.js\";\nimport { SchemaEngine } from \"./engines/schemaEngine.js\";\nimport { StorageEngine } from \"./engines/storageEngine.js\";\nimport { inferDriverDatabasePath } from \"./engines/shared.js\";\nimport { TransactionCoordinator } from \"./transactionCoordinator.js\";\nimport { ensureSupportedSystemFormats } from \"./systemMeta.js\";\nimport { RuntimeStatusController } from \"./runtimeStatus.js\";\n\ntype DevtoolsEventMeta = {\n origin?: SyncoreDevtoolsEventOrigin;\n};\n\nexport class RuntimeKernel<\n TSchema extends SyncoreDataModel\n> {\n readonly runtimeId = generateId();\n readonly platform: string;\n readonly externalChangeSourceId = generateId();\n readonly driverDatabasePath: string | undefined;\n readonly capabilities: Readonly<SyncoreCapabilities>;\n readonly capabilityDescriptors: ReadonlyArray<CapabilityDescriptor>;\n readonly devtoolsEngine: DevtoolsEngine;\n readonly schemaEngine: SchemaEngine<TSchema>;\n readonly storageEngine: StorageEngine;\n readonly schedulerEngine: SchedulerEngine;\n readonly reactivityEngine: ReactivityEngine;\n readonly executionEngine: ExecutionEngine<TSchema>;\n readonly transactionCoordinator: TransactionCoordinator;\n readonly runtimeStatus: RuntimeStatusController;\n readonly admin: SyncoreRuntimeAdmin<TSchema>;\n private prepared = false;\n private started = false;\n\n constructor(\n private readonly options: SyncoreRuntimeOptions<TSchema>,\n runtime: SyncoreRuntime<TSchema>\n ) {\n this.platform = options.platform ?? \"node\";\n this.capabilityDescriptors = Object.freeze([\n ...(options.capabilityDescriptors ?? [])\n ]);\n this.capabilities = Object.freeze({\n ...(options.capabilities ?? {})\n });\n this.driverDatabasePath = inferDriverDatabasePath(\n options.driver as { filename?: string; databasePath?: string }\n );\n this.devtoolsEngine = new DevtoolsEngine({\n runtimeId: this.runtimeId,\n platform: this.platform,\n ...(options.devtools ? { sink: options.devtools } : {}),\n getActiveQueryInfos: () => this.reactivityEngine.getActiveQueryInfos(),\n getSchemaTables: () => this.schemaEngine.getSchemaTablesForDevtools()\n });\n this.schemaEngine = new SchemaEngine({\n schema: options.schema,\n driver: options.driver,\n runtimeId: this.runtimeId,\n devtools: this.devtoolsEngine\n });\n this.storageEngine = new StorageEngine({\n driver: options.driver,\n storage: options.storage,\n runtimeId: this.runtimeId,\n devtools: this.devtoolsEngine\n });\n this.transactionCoordinator = new TransactionCoordinator(options.driver);\n this.runtimeStatus = new RuntimeStatusController({\n kind: \"starting\",\n reason: \"booting\"\n });\n this.schedulerEngine = new SchedulerEngine({\n driver: options.driver,\n runtimeId: this.runtimeId,\n devtools: this.devtoolsEngine,\n recurringJobs: options.scheduler?.recurringJobs ?? [],\n pollIntervalMs: options.scheduler?.pollIntervalMs ?? 1000,\n runMutation: (reference, args) =>\n this.executionEngine.runMutation(reference, args),\n runAction: (reference, args) => this.executionEngine.runAction(reference, args)\n });\n this.reactivityEngine = new ReactivityEngine({\n runtimeId: this.runtimeId,\n externalChangeSourceId: this.externalChangeSourceId,\n ...(options.externalChangeSignal\n ? { externalChangeSignal: options.externalChangeSignal }\n : {}),\n ...(options.externalChangeApplier\n ? { externalChangeApplier: options.externalChangeApplier }\n : {}),\n devtools: this.devtoolsEngine,\n runQuery: (reference, args) => this.executionEngine.runQuery(reference, args),\n collectQueryDependencies: (functionName, args) =>\n this.executionEngine.collectQueryDependencies(functionName, args)\n });\n this.executionEngine = new ExecutionEngine({\n runtimeId: this.runtimeId,\n functions: options.functions,\n driver: options.driver,\n capabilities: this.capabilities,\n capabilityDescriptors: this.capabilityDescriptors,\n schema: this.schemaEngine,\n storage: this.storageEngine,\n scheduler: this.schedulerEngine,\n reactivity: this.reactivityEngine,\n devtools: this.devtoolsEngine,\n transactionCoordinator: this.transactionCoordinator,\n runtimeStatus: this.runtimeStatus\n });\n this.admin = {\n prepareForDirectAccess: () => this.prepareForDirectAccess(),\n createClient: () => this.createClient(),\n runQuery: (reference, args, meta) =>\n this.executionEngine.runQuery(reference, args, meta),\n runMutation: (reference, args, meta) =>\n this.executionEngine.runMutation(reference, args, meta),\n runAction: (reference, args, meta) =>\n this.executionEngine.runAction(reference, args, meta),\n runDevtoolsMutation: async (callback, meta) => {\n await this.prepareForDirectAccess();\n return this.executionEngine.runDevtoolsMutation(callback, meta);\n },\n getRuntimeSummary: () => this.devtoolsEngine.getRuntimeSummary(),\n getActiveQueryInfos: () => this.reactivityEngine.getActiveQueryInfos(),\n getRuntimeId: () => this.runtimeId,\n getDriverDatabasePath: () => this.driverDatabasePath,\n subscribeToDevtoolsEvents: (listener) =>\n this.devtoolsEngine.subscribeEvents(listener),\n subscribeToDevtoolsInvalidations: (listener) =>\n this.devtoolsEngine.subscribeInvalidations(listener),\n notifyDevtoolsScopes: (scopes) => this.devtoolsEngine.notifyScopes(scopes),\n forceRefreshDevtools: async (reason, scopes, meta) => {\n const resolvedScopes = new Set(scopes ?? []);\n if (resolvedScopes.size > 0) {\n await this.reactivityEngine.refreshQueriesForScopes(\n resolvedScopes,\n reason\n );\n }\n await this.devtoolsEngine.forceRefresh(\n reason,\n {\n refreshQueriesForScopes: (requestedScopes, refreshReason) =>\n this.reactivityEngine.refreshQueriesForScopes(\n requestedScopes,\n refreshReason\n )\n },\n meta,\n resolvedScopes\n );\n },\n cancelScheduledJob: async (id) => {\n await this.prepareForDirectAccess();\n return this.schedulerEngine.cancelScheduledJob(id);\n },\n updateScheduledJob: async (update: UpdateScheduledJobOptions) => {\n await this.prepareForDirectAccess();\n return this.schedulerEngine.updateScheduledJob(update);\n }\n };\n options.devtools?.attachRuntime?.(runtime);\n }\n\n async start(): Promise<void> {\n if (this.started) {\n return;\n }\n this.runtimeStatus.setStatus({\n kind: \"starting\",\n reason: \"booting\"\n });\n await this.prepareForDirectAccess();\n try {\n await this.runComponentHooks(\"onStart\");\n this.reactivityEngine.start();\n this.schedulerEngine.startPolling();\n this.started = true;\n this.runtimeStatus.setStatus({\n kind: \"ready\"\n });\n this.devtoolsEngine.emit({\n type: \"runtime.connected\",\n runtimeId: this.runtimeId,\n platform: this.platform,\n timestamp: Date.now()\n });\n } catch (error) {\n this.schedulerEngine.stopPolling();\n this.reactivityEngine.stop();\n await this.options.driver.close?.().catch(() => undefined);\n this.started = false;\n this.runtimeStatus.setStatus({\n kind: \"error\",\n reason: \"runtime-unavailable\",\n ...(error instanceof Error ? { error } : {})\n });\n throw error;\n }\n }\n\n async prepareForDirectAccess(): Promise<void> {\n if (this.prepared) {\n return;\n }\n await ensureSupportedSystemFormats(this.options.driver);\n await this.schemaEngine.prepare();\n await this.storageEngine.prepare();\n await this.schedulerEngine.prepare();\n await this.storageEngine.reconcile();\n await this.schemaEngine.applySchema();\n await this.schedulerEngine.syncRecurringJobs();\n this.prepared = true;\n }\n\n async stop(): Promise<void> {\n this.schedulerEngine.stopPolling();\n let stopError: unknown;\n if (this.started) {\n try {\n await this.runComponentHooks(\"onStop\");\n } catch (error) {\n stopError = error;\n }\n }\n this.reactivityEngine.stop();\n await this.options.driver.close?.();\n if (this.started) {\n this.devtoolsEngine.emit({\n type: \"runtime.disconnected\",\n runtimeId: this.runtimeId,\n timestamp: Date.now()\n });\n }\n this.started = false;\n this.runtimeStatus.setStatus({\n kind: \"unavailable\",\n reason: \"disposed\"\n });\n if (stopError) {\n throw stopError;\n }\n }\n\n createClient(): SyncoreClient {\n return this.executionEngine.createClient();\n }\n\n watchQuery<TArgs, TResult>(\n reference: FunctionReference<\"query\", TArgs, TResult>,\n args: Record<string, unknown> = {}\n ): SyncoreWatch<TResult> {\n return this.executionEngine.watchQuery(reference, args);\n }\n\n private async runComponentHooks(\n hook: \"onStart\" | \"onStop\"\n ): Promise<void> {\n for (const component of this.options.components ?? []) {\n await this.runComponentHookTree(component, hook);\n }\n }\n\n private async runComponentHookTree(\n component: SyncoreResolvedComponents[number],\n hook: \"onStart\" | \"onStop\"\n ): Promise<void> {\n const handler = component[hook];\n if (handler) {\n await handler({\n runtimeId: this.runtimeId,\n platform: this.platform,\n componentPath: component.path,\n componentName: component.name,\n version: component.version,\n config: component.config,\n capabilities: component.grantedCapabilities,\n emitDevtools: (event: SyncoreDevtoolsEvent) => {\n this.devtoolsEngine.emit(event);\n }\n });\n }\n for (const child of component.children) {\n await this.runComponentHookTree(child, hook);\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtimeKernel.mjs","names":[],"sources":["../../../src/runtime/internal/runtimeKernel.ts"],"sourcesContent":["import type {\n CapabilityDescriptor,\n DevtoolsLiveQueryScope,\n QueryCtx,\n SyncoreDataModel,\n SyncoreResolvedComponents,\n SyncoreCapabilities,\n SyncoreClient,\n SyncoreRuntimeCapabilities,\n SyncoreRuntime,\n SyncoreRuntimeAdmin,\n SyncoreRuntimeOptions,\n SyncoreWatch,\n UpdateScheduledJobOptions\n} from \"../runtime.js\";\nimport type { FunctionReference } from \"../functions.js\";\nimport type {\n SyncoreDevtoolsEvent,\n SyncoreDevtoolsEventOrigin\n} from \"@syncore/devtools-protocol\";\nimport { generateId } from \"../id.js\";\nimport { DevtoolsEngine } from \"./engines/devtoolsEngine.js\";\nimport { ExecutionEngine } from \"./engines/executionEngine.js\";\nimport { ReactivityEngine } from \"./engines/reactivityEngine.js\";\nimport { SchedulerEngine } from \"./engines/schedulerEngine.js\";\nimport { SchemaEngine } from \"./engines/schemaEngine.js\";\nimport { StorageEngine } from \"./engines/storageEngine.js\";\nimport { inferDriverDatabasePath } from \"./engines/shared.js\";\nimport { TransactionCoordinator } from \"./transactionCoordinator.js\";\nimport { ensureSupportedSystemFormats } from \"./systemMeta.js\";\nimport { RuntimeStatusController } from \"./runtimeStatus.js\";\n\ntype DevtoolsEventMeta = {\n origin?: SyncoreDevtoolsEventOrigin;\n executionId?: string;\n parentExecutionId?: string;\n schedulerJobId?: string;\n schedulerRun?: boolean;\n};\n\nexport class RuntimeKernel<TSchema extends SyncoreDataModel> {\n readonly runtimeId = generateId();\n readonly platform: string;\n readonly externalChangeSourceId = generateId();\n readonly driverDatabasePath: string | undefined;\n readonly capabilities: Readonly<SyncoreCapabilities>;\n readonly runtimeCapabilities: Readonly<SyncoreRuntimeCapabilities>;\n readonly capabilityDescriptors: ReadonlyArray<CapabilityDescriptor>;\n readonly devtoolsEngine: DevtoolsEngine;\n readonly schemaEngine: SchemaEngine<TSchema>;\n readonly storageEngine: StorageEngine;\n readonly schedulerEngine: SchedulerEngine;\n readonly reactivityEngine: ReactivityEngine;\n readonly executionEngine: ExecutionEngine<TSchema>;\n readonly transactionCoordinator: TransactionCoordinator;\n readonly runtimeStatus: RuntimeStatusController;\n readonly admin: SyncoreRuntimeAdmin<TSchema>;\n private prepared = false;\n private started = false;\n\n constructor(\n private readonly options: SyncoreRuntimeOptions<TSchema>,\n runtime: SyncoreRuntime<TSchema>\n ) {\n this.platform = options.platform ?? \"node\";\n this.capabilityDescriptors = Object.freeze([\n ...(options.capabilityDescriptors ?? [])\n ]);\n this.capabilities = Object.freeze({\n ...(options.capabilities ?? {})\n });\n this.runtimeCapabilities = Object.freeze(\n options.runtimeCapabilities ?? {\n storage: {\n available: true,\n ...(options.storage.supportsRange\n ? { supportsRange: options.storage.supportsRange() !== false }\n : {})\n }\n }\n );\n this.driverDatabasePath = inferDriverDatabasePath(\n options.driver as { filename?: string; databasePath?: string }\n );\n this.devtoolsEngine = new DevtoolsEngine({\n runtimeId: this.runtimeId,\n platform: this.platform,\n ...(options.devtools ? { sink: options.devtools } : {}),\n getActiveQueryInfos: () => this.reactivityEngine.getActiveQueryInfos(),\n getSchemaTables: () => this.schemaEngine.getSchemaTablesForDevtools()\n });\n this.schemaEngine = new SchemaEngine({\n schema: options.schema,\n driver: options.driver,\n runtimeId: this.runtimeId,\n devtools: this.devtoolsEngine\n });\n this.storageEngine = new StorageEngine({\n driver: options.driver,\n storage: options.storage,\n runtimeId: this.runtimeId,\n devtools: this.devtoolsEngine\n });\n this.transactionCoordinator = new TransactionCoordinator(options.driver);\n this.runtimeStatus = new RuntimeStatusController({\n kind: \"starting\",\n reason: \"booting\",\n capabilities: this.runtimeCapabilities\n });\n this.schedulerEngine = new SchedulerEngine({\n driver: options.driver,\n runtimeId: this.runtimeId,\n devtools: this.devtoolsEngine,\n recurringJobs: options.scheduler?.recurringJobs ?? [],\n pollIntervalMs: options.scheduler?.pollIntervalMs ?? 1000,\n runMutation: (reference, args, meta) =>\n this.executionEngine.runMutation(reference, args, meta),\n runAction: (reference, args, meta) =>\n this.executionEngine.runAction(reference, args, meta)\n });\n this.reactivityEngine = new ReactivityEngine({\n runtimeId: this.runtimeId,\n externalChangeSourceId: this.externalChangeSourceId,\n ...(options.externalChangeSignal\n ? { externalChangeSignal: options.externalChangeSignal }\n : {}),\n ...(options.externalChangeApplier\n ? { externalChangeApplier: options.externalChangeApplier }\n : {}),\n devtools: this.devtoolsEngine,\n runQuery: (reference, args, meta) =>\n this.executionEngine.runQuery(reference, args, meta),\n collectQueryDependencies: (functionName, args) =>\n this.executionEngine.collectQueryDependencies(functionName, args)\n });\n this.executionEngine = new ExecutionEngine({\n runtimeId: this.runtimeId,\n functions: options.functions,\n driver: options.driver,\n capabilities: this.capabilities,\n capabilityDescriptors: this.capabilityDescriptors,\n schema: this.schemaEngine,\n storage: this.storageEngine,\n scheduler: this.schedulerEngine,\n reactivity: this.reactivityEngine,\n devtools: this.devtoolsEngine,\n transactionCoordinator: this.transactionCoordinator,\n runtimeStatus: this.runtimeStatus\n });\n this.admin = {\n prepareForDirectAccess: () => this.prepareForDirectAccess(),\n createClient: () => this.createClient(),\n runQuery: (reference, args, meta) =>\n this.executionEngine.runQuery(reference, args, meta),\n runMutation: (reference, args, meta) =>\n this.executionEngine.runMutation(reference, args, meta),\n runAction: (reference, args, meta) =>\n this.executionEngine.runAction(reference, args, meta),\n runDevtoolsMutation: async (callback, meta) => {\n await this.prepareForDirectAccess();\n return this.executionEngine.runDevtoolsMutation(callback, meta);\n },\n getRuntimeSummary: () => this.devtoolsEngine.getRuntimeSummary(),\n getActiveQueryInfos: () => this.reactivityEngine.getActiveQueryInfos(),\n getRuntimeId: () => this.runtimeId,\n getDriverDatabasePath: () => this.driverDatabasePath,\n subscribeToDevtoolsEvents: (listener) =>\n this.devtoolsEngine.subscribeEvents(listener),\n subscribeToDevtoolsInvalidations: (listener) =>\n this.devtoolsEngine.subscribeInvalidations(listener),\n notifyDevtoolsScopes: (scopes) =>\n this.devtoolsEngine.notifyScopes(scopes),\n forceRefreshDevtools: async (reason, scopes, meta) => {\n const resolvedScopes = new Set(scopes ?? []);\n if (resolvedScopes.size > 0) {\n await this.reactivityEngine.refreshQueriesForScopes(\n resolvedScopes,\n reason\n );\n }\n await this.devtoolsEngine.forceRefresh(\n reason,\n {\n refreshQueriesForScopes: (requestedScopes, refreshReason) =>\n this.reactivityEngine.refreshQueriesForScopes(\n requestedScopes,\n refreshReason\n )\n },\n meta,\n resolvedScopes\n );\n },\n listStorageObjects: async (options) => {\n await this.prepareForDirectAccess();\n return this.storageEngine.listObjects(options);\n },\n getStorageObjectAccessInfo: async (id) => {\n await this.prepareForDirectAccess();\n return this.storageEngine.getObjectAccessInfo(id);\n },\n readStorageObjectRange: async (id, offset, length) => {\n await this.prepareForDirectAccess();\n return this.storageEngine.readObjectRange(id, offset, length);\n },\n deleteStorageObject: async (id, meta) => {\n await this.prepareForDirectAccess();\n const deleted = await this.storageEngine.deleteObject(id, meta);\n if (deleted) {\n this.devtoolsEngine.notifyScopes([\n \"runtime.summary\",\n \"storage.objects\",\n `storage:${id}`\n ]);\n }\n return deleted;\n },\n cancelScheduledJob: async (id) => {\n await this.prepareForDirectAccess();\n return this.schedulerEngine.cancelScheduledJob(id);\n },\n updateScheduledJob: async (update: UpdateScheduledJobOptions) => {\n await this.prepareForDirectAccess();\n return this.schedulerEngine.updateScheduledJob(update);\n }\n };\n options.devtools?.attachRuntime?.(runtime);\n }\n\n async start(): Promise<void> {\n if (this.started) {\n return;\n }\n this.runtimeStatus.setStatus({\n kind: \"starting\",\n reason: \"booting\",\n capabilities: this.runtimeCapabilities\n });\n await this.prepareForDirectAccess();\n try {\n await this.runComponentHooks(\"onStart\");\n this.reactivityEngine.start();\n this.schedulerEngine.startPolling();\n this.started = true;\n this.runtimeStatus.setStatus({\n kind: \"ready\",\n capabilities: this.runtimeCapabilities\n });\n this.devtoolsEngine.emit({\n type: \"runtime.connected\",\n runtimeId: this.runtimeId,\n platform: this.platform,\n timestamp: Date.now()\n });\n } catch (error) {\n this.schedulerEngine.stopPolling();\n this.reactivityEngine.stop();\n await this.options.driver.close?.().catch(() => undefined);\n this.started = false;\n this.runtimeStatus.setStatus({\n kind: \"error\",\n reason: \"runtime-unavailable\",\n capabilities: this.runtimeCapabilities,\n ...(error instanceof Error ? { error } : {})\n });\n throw error;\n }\n }\n\n async prepareForDirectAccess(): Promise<void> {\n if (this.prepared) {\n return;\n }\n await ensureSupportedSystemFormats(this.options.driver);\n await this.schemaEngine.prepare();\n await this.storageEngine.prepare();\n await this.schedulerEngine.prepare();\n await this.storageEngine.reconcile();\n await this.schemaEngine.applySchema();\n await this.schedulerEngine.syncRecurringJobs();\n this.prepared = true;\n }\n\n async stop(): Promise<void> {\n this.schedulerEngine.stopPolling();\n let stopError: unknown;\n if (this.started) {\n try {\n await this.runComponentHooks(\"onStop\");\n } catch (error) {\n stopError = error;\n }\n }\n this.reactivityEngine.stop();\n await this.options.driver.close?.();\n if (this.started) {\n this.devtoolsEngine.emit({\n type: \"runtime.disconnected\",\n runtimeId: this.runtimeId,\n timestamp: Date.now()\n });\n }\n this.started = false;\n this.runtimeStatus.setStatus({\n kind: \"unavailable\",\n reason: \"disposed\",\n capabilities: this.runtimeCapabilities\n });\n if (stopError) {\n throw stopError;\n }\n }\n\n createClient(): SyncoreClient {\n return this.executionEngine.createClient();\n }\n\n watchQuery<TArgs, TResult>(\n reference: FunctionReference<\"query\", TArgs, TResult>,\n args: Record<string, unknown> = {}\n ): SyncoreWatch<TResult> {\n return this.executionEngine.watchQuery(reference, args);\n }\n\n private async runComponentHooks(hook: \"onStart\" | \"onStop\"): Promise<void> {\n for (const component of this.options.components ?? []) {\n await this.runComponentHookTree(component, hook);\n }\n }\n\n private async runComponentHookTree(\n component: SyncoreResolvedComponents[number],\n hook: \"onStart\" | \"onStop\"\n ): Promise<void> {\n const handler = component[hook];\n if (handler) {\n await handler({\n runtimeId: this.runtimeId,\n platform: this.platform,\n componentPath: component.path,\n componentName: component.name,\n version: component.version,\n config: component.config,\n capabilities: component.grantedCapabilities,\n emitDevtools: (event: SyncoreDevtoolsEvent) => {\n this.devtoolsEngine.emit(event);\n }\n });\n }\n for (const child of component.children) {\n await this.runComponentHookTree(child, hook);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;AAwCA,IAAa,gBAAb,MAA6D;CAqBxC;CApBnB,YAAqB,WAAW;CAChC;CACA,yBAAkC,WAAW;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,WAAmB;CACnB,UAAkB;CAElB,YACE,SACA,SACA;EAFiB,KAAA,UAAA;EAGjB,KAAK,WAAW,QAAQ,YAAY;EACpC,KAAK,wBAAwB,OAAO,OAAO,CACzC,GAAI,QAAQ,yBAAyB,CAAC,CACxC,CAAC;EACD,KAAK,eAAe,OAAO,OAAO,EAChC,GAAI,QAAQ,gBAAgB,CAAC,EAC/B,CAAC;EACD,KAAK,sBAAsB,OAAO,OAChC,QAAQ,uBAAuB,EAC7B,SAAS;GACP,WAAW;GACX,GAAI,QAAQ,QAAQ,gBAChB,EAAE,eAAe,QAAQ,QAAQ,cAAc,MAAM,MAAM,IAC3D,CAAC;EACP,EACF,CACF;EACA,KAAK,qBAAqB,wBACxB,QAAQ,MACV;EACA,KAAK,iBAAiB,IAAI,eAAe;GACvC,WAAW,KAAK;GAChB,UAAU,KAAK;GACf,GAAI,QAAQ,WAAW,EAAE,MAAM,QAAQ,SAAS,IAAI,CAAC;GACrD,2BAA2B,KAAK,iBAAiB,oBAAoB;GACrE,uBAAuB,KAAK,aAAa,2BAA2B;EACtE,CAAC;EACD,KAAK,eAAe,IAAI,aAAa;GACnC,QAAQ,QAAQ;GAChB,QAAQ,QAAQ;GAChB,WAAW,KAAK;GAChB,UAAU,KAAK;EACjB,CAAC;EACD,KAAK,gBAAgB,IAAI,cAAc;GACrC,QAAQ,QAAQ;GAChB,SAAS,QAAQ;GACjB,WAAW,KAAK;GAChB,UAAU,KAAK;EACjB,CAAC;EACD,KAAK,yBAAyB,IAAI,uBAAuB,QAAQ,MAAM;EACvE,KAAK,gBAAgB,IAAI,wBAAwB;GAC/C,MAAM;GACN,QAAQ;GACR,cAAc,KAAK;EACrB,CAAC;EACD,KAAK,kBAAkB,IAAI,gBAAgB;GACzC,QAAQ,QAAQ;GAChB,WAAW,KAAK;GAChB,UAAU,KAAK;GACf,eAAe,QAAQ,WAAW,iBAAiB,CAAC;GACpD,gBAAgB,QAAQ,WAAW,kBAAkB;GACrD,cAAc,WAAW,MAAM,SAC7B,KAAK,gBAAgB,YAAY,WAAW,MAAM,IAAI;GACxD,YAAY,WAAW,MAAM,SAC3B,KAAK,gBAAgB,UAAU,WAAW,MAAM,IAAI;EACxD,CAAC;EACD,KAAK,mBAAmB,IAAI,iBAAiB;GAC3C,WAAW,KAAK;GAChB,wBAAwB,KAAK;GAC7B,GAAI,QAAQ,uBACR,EAAE,sBAAsB,QAAQ,qBAAqB,IACrD,CAAC;GACL,GAAI,QAAQ,wBACR,EAAE,uBAAuB,QAAQ,sBAAsB,IACvD,CAAC;GACL,UAAU,KAAK;GACf,WAAW,WAAW,MAAM,SAC1B,KAAK,gBAAgB,SAAS,WAAW,MAAM,IAAI;GACrD,2BAA2B,cAAc,SACvC,KAAK,gBAAgB,yBAAyB,cAAc,IAAI;EACpE,CAAC;EACD,KAAK,kBAAkB,IAAI,gBAAgB;GACzC,WAAW,KAAK;GAChB,WAAW,QAAQ;GACnB,QAAQ,QAAQ;GAChB,cAAc,KAAK;GACnB,uBAAuB,KAAK;GAC5B,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,WAAW,KAAK;GAChB,YAAY,KAAK;GACjB,UAAU,KAAK;GACf,wBAAwB,KAAK;GAC7B,eAAe,KAAK;EACtB,CAAC;EACD,KAAK,QAAQ;GACX,8BAA8B,KAAK,uBAAuB;GAC1D,oBAAoB,KAAK,aAAa;GACtC,WAAW,WAAW,MAAM,SAC1B,KAAK,gBAAgB,SAAS,WAAW,MAAM,IAAI;GACrD,cAAc,WAAW,MAAM,SAC7B,KAAK,gBAAgB,YAAY,WAAW,MAAM,IAAI;GACxD,YAAY,WAAW,MAAM,SAC3B,KAAK,gBAAgB,UAAU,WAAW,MAAM,IAAI;GACtD,qBAAqB,OAAO,UAAU,SAAS;IAC7C,MAAM,KAAK,uBAAuB;IAClC,OAAO,KAAK,gBAAgB,oBAAoB,UAAU,IAAI;GAChE;GACA,yBAAyB,KAAK,eAAe,kBAAkB;GAC/D,2BAA2B,KAAK,iBAAiB,oBAAoB;GACrE,oBAAoB,KAAK;GACzB,6BAA6B,KAAK;GAClC,4BAA4B,aAC1B,KAAK,eAAe,gBAAgB,QAAQ;GAC9C,mCAAmC,aACjC,KAAK,eAAe,uBAAuB,QAAQ;GACrD,uBAAuB,WACrB,KAAK,eAAe,aAAa,MAAM;GACzC,sBAAsB,OAAO,QAAQ,QAAQ,SAAS;IACpD,MAAM,iBAAiB,IAAI,IAAI,UAAU,CAAC,CAAC;IAC3C,IAAI,eAAe,OAAO,GACxB,MAAM,KAAK,iBAAiB,wBAC1B,gBACA,MACF;IAEF,MAAM,KAAK,eAAe,aACxB,QACA,EACE,0BAA0B,iBAAiB,kBACzC,KAAK,iBAAiB,wBACpB,iBACA,aACF,EACJ,GACA,MACA,cACF;GACF;GACA,oBAAoB,OAAO,YAAY;IACrC,MAAM,KAAK,uBAAuB;IAClC,OAAO,KAAK,cAAc,YAAY,OAAO;GAC/C;GACA,4BAA4B,OAAO,OAAO;IACxC,MAAM,KAAK,uBAAuB;IAClC,OAAO,KAAK,cAAc,oBAAoB,EAAE;GAClD;GACA,wBAAwB,OAAO,IAAI,QAAQ,WAAW;IACpD,MAAM,KAAK,uBAAuB;IAClC,OAAO,KAAK,cAAc,gBAAgB,IAAI,QAAQ,MAAM;GAC9D;GACA,qBAAqB,OAAO,IAAI,SAAS;IACvC,MAAM,KAAK,uBAAuB;IAClC,MAAM,UAAU,MAAM,KAAK,cAAc,aAAa,IAAI,IAAI;IAC9D,IAAI,SACF,KAAK,eAAe,aAAa;KAC/B;KACA;KACA,WAAW;IACb,CAAC;IAEH,OAAO;GACT;GACA,oBAAoB,OAAO,OAAO;IAChC,MAAM,KAAK,uBAAuB;IAClC,OAAO,KAAK,gBAAgB,mBAAmB,EAAE;GACnD;GACA,oBAAoB,OAAO,WAAsC;IAC/D,MAAM,KAAK,uBAAuB;IAClC,OAAO,KAAK,gBAAgB,mBAAmB,MAAM;GACvD;EACF;EACA,QAAQ,UAAU,gBAAgB,OAAO;CAC3C;CAEA,MAAM,QAAuB;EAC3B,IAAI,KAAK,SACP;EAEF,KAAK,cAAc,UAAU;GAC3B,MAAM;GACN,QAAQ;GACR,cAAc,KAAK;EACrB,CAAC;EACD,MAAM,KAAK,uBAAuB;EAClC,IAAI;GACF,MAAM,KAAK,kBAAkB,SAAS;GACtC,KAAK,iBAAiB,MAAM;GAC5B,KAAK,gBAAgB,aAAa;GAClC,KAAK,UAAU;GACf,KAAK,cAAc,UAAU;IAC3B,MAAM;IACN,cAAc,KAAK;GACrB,CAAC;GACD,KAAK,eAAe,KAAK;IACvB,MAAM;IACN,WAAW,KAAK;IAChB,UAAU,KAAK;IACf,WAAW,KAAK,IAAI;GACtB,CAAC;EACH,SAAS,OAAO;GACd,KAAK,gBAAgB,YAAY;GACjC,KAAK,iBAAiB,KAAK;GAC3B,MAAM,KAAK,QAAQ,OAAO,QAAQ,EAAE,YAAY,KAAA,CAAS;GACzD,KAAK,UAAU;GACf,KAAK,cAAc,UAAU;IAC3B,MAAM;IACN,QAAQ;IACR,cAAc,KAAK;IACnB,GAAI,iBAAiB,QAAQ,EAAE,MAAM,IAAI,CAAC;GAC5C,CAAC;GACD,MAAM;EACR;CACF;CAEA,MAAM,yBAAwC;EAC5C,IAAI,KAAK,UACP;EAEF,MAAM,6BAA6B,KAAK,QAAQ,MAAM;EACtD,MAAM,KAAK,aAAa,QAAQ;EAChC,MAAM,KAAK,cAAc,QAAQ;EACjC,MAAM,KAAK,gBAAgB,QAAQ;EACnC,MAAM,KAAK,cAAc,UAAU;EACnC,MAAM,KAAK,aAAa,YAAY;EACpC,MAAM,KAAK,gBAAgB,kBAAkB;EAC7C,KAAK,WAAW;CAClB;CAEA,MAAM,OAAsB;EAC1B,KAAK,gBAAgB,YAAY;EACjC,IAAI;EACJ,IAAI,KAAK,SACP,IAAI;GACF,MAAM,KAAK,kBAAkB,QAAQ;EACvC,SAAS,OAAO;GACd,YAAY;EACd;EAEF,KAAK,iBAAiB,KAAK;EAC3B,MAAM,KAAK,QAAQ,OAAO,QAAQ;EAClC,IAAI,KAAK,SACP,KAAK,eAAe,KAAK;GACvB,MAAM;GACN,WAAW,KAAK;GAChB,WAAW,KAAK,IAAI;EACtB,CAAC;EAEH,KAAK,UAAU;EACf,KAAK,cAAc,UAAU;GAC3B,MAAM;GACN,QAAQ;GACR,cAAc,KAAK;EACrB,CAAC;EACD,IAAI,WACF,MAAM;CAEV;CAEA,eAA8B;EAC5B,OAAO,KAAK,gBAAgB,aAAa;CAC3C;CAEA,WACE,WACA,OAAgC,CAAC,GACV;EACvB,OAAO,KAAK,gBAAgB,WAAW,WAAW,IAAI;CACxD;CAEA,MAAc,kBAAkB,MAA2C;EACzE,KAAK,MAAM,aAAa,KAAK,QAAQ,cAAc,CAAC,GAClD,MAAM,KAAK,qBAAqB,WAAW,IAAI;CAEnD;CAEA,MAAc,qBACZ,WACA,MACe;EACf,MAAM,UAAU,UAAU;EAC1B,IAAI,SACF,MAAM,QAAQ;GACZ,WAAW,KAAK;GAChB,UAAU,KAAK;GACf,eAAe,UAAU;GACzB,eAAe,UAAU;GACzB,SAAS,UAAU;GACnB,QAAQ,UAAU;GAClB,cAAc,UAAU;GACxB,eAAe,UAAgC;IAC7C,KAAK,eAAe,KAAK,KAAK;GAChC;EACF,CAAC;EAEH,KAAK,MAAM,SAAS,UAAU,UAC5B,MAAM,KAAK,qBAAqB,OAAO,IAAI;CAE/C;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeStatus.mjs","names":[],"sources":["../../../src/runtime/internal/runtimeStatus.ts"],"sourcesContent":["import type {\n SyncoreRuntimeStatus,\n SyncoreWatch\n} from \"../runtime.js\";\n\nexport class RuntimeStatusController {\n private status: SyncoreRuntimeStatus;\n private readonly listeners = new Set<() => void>();\n\n constructor(initialStatus: SyncoreRuntimeStatus) {\n this.status = initialStatus;\n }\n\n getStatus(): SyncoreRuntimeStatus {\n return this.status;\n }\n\n setStatus(nextStatus: SyncoreRuntimeStatus): void {\n this.status = nextStatus;\n for (const listener of this.listeners) {\n listener();\n }\n }\n\n watch(): SyncoreWatch<SyncoreRuntimeStatus> {\n return {\n onUpdate: (callback) => {\n this.listeners.add(callback);\n queueMicrotask(callback);\n return () => {\n this.listeners.delete(callback);\n };\n },\n localQueryResult: () => this.status,\n localQueryError: () => undefined\n };\n }\n}\n"],"mappings":";AAKA,IAAa,0BAAb,MAAqC;CACnC;CACA,4BAA6B,IAAI,
|
|
1
|
+
{"version":3,"file":"runtimeStatus.mjs","names":[],"sources":["../../../src/runtime/internal/runtimeStatus.ts"],"sourcesContent":["import type {\n SyncoreRuntimeStatus,\n SyncoreWatch\n} from \"../runtime.js\";\n\nexport class RuntimeStatusController {\n private status: SyncoreRuntimeStatus;\n private readonly listeners = new Set<() => void>();\n\n constructor(initialStatus: SyncoreRuntimeStatus) {\n this.status = initialStatus;\n }\n\n getStatus(): SyncoreRuntimeStatus {\n return this.status;\n }\n\n setStatus(nextStatus: SyncoreRuntimeStatus): void {\n this.status = nextStatus;\n for (const listener of this.listeners) {\n listener();\n }\n }\n\n watch(): SyncoreWatch<SyncoreRuntimeStatus> {\n return {\n onUpdate: (callback) => {\n this.listeners.add(callback);\n queueMicrotask(callback);\n return () => {\n this.listeners.delete(callback);\n };\n },\n localQueryResult: () => this.status,\n localQueryError: () => undefined\n };\n }\n}\n"],"mappings":";AAKA,IAAa,0BAAb,MAAqC;CACnC;CACA,4BAA6B,IAAI,IAAgB;CAEjD,YAAY,eAAqC;EAC/C,KAAK,SAAS;CAChB;CAEA,YAAkC;EAChC,OAAO,KAAK;CACd;CAEA,UAAU,YAAwC;EAChD,KAAK,SAAS;EACd,KAAK,MAAM,YAAY,KAAK,WAC1B,SAAS;CAEb;CAEA,QAA4C;EAC1C,OAAO;GACL,WAAW,aAAa;IACtB,KAAK,UAAU,IAAI,QAAQ;IAC3B,eAAe,QAAQ;IACvB,aAAa;KACX,KAAK,UAAU,OAAO,QAAQ;IAChC;GACF;GACA,wBAAwB,KAAK;GAC7B,uBAAuB,KAAA;EACzB;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"systemMeta.mjs","names":[],"sources":["../../../src/runtime/internal/systemMeta.ts"],"sourcesContent":["import type { SyncoreSqlDriver } from \"../runtime.js\";\n\nexport interface SystemFormatRegistry {\n schema_state_format_version: number;\n storage_format_version: number;\n scheduler_format_version: number;\n runtime_meta_version: number;\n}\n\nexport const CURRENT_SYSTEM_FORMATS: SystemFormatRegistry = {\n schema_state_format_version: 1,\n storage_format_version: 1,\n scheduler_format_version: 1,\n runtime_meta_version: 1\n};\n\nconst META_TABLE_NAME = \"_syncore_system_meta\";\n\nexport async function ensureSystemMetaTable(\n driver: SyncoreSqlDriver\n): Promise<void> {\n await driver.exec(`\n CREATE TABLE IF NOT EXISTS \"${META_TABLE_NAME}\" (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `);\n}\n\nexport async function loadSystemFormats(\n driver: SyncoreSqlDriver\n): Promise<SystemFormatRegistry> {\n await ensureSystemMetaTable(driver);\n const rows = await driver.all<{ key: string; value: string }>(\n `SELECT key, value FROM \"${META_TABLE_NAME}\"`\n );\n const loaded = { ...CURRENT_SYSTEM_FORMATS };\n\n for (const row of rows) {\n if (!isSystemFormatKey(row.key)) {\n continue;\n }\n const parsed = Number.parseInt(row.value, 10);\n if (Number.isNaN(parsed)) {\n throw new Error(`Invalid Syncore system format value for \"${row.key}\".`);\n }\n loaded[row.key] = parsed;\n }\n\n return loaded;\n}\n\nexport async function ensureSupportedSystemFormats(\n driver: SyncoreSqlDriver\n): Promise<SystemFormatRegistry> {\n const loaded = await loadSystemFormats(driver);\n\n for (const key of systemFormatKeys()) {\n if (loaded[key] > CURRENT_SYSTEM_FORMATS[key]) {\n throw new Error(\n `Syncore system format \"${key}\" version ${loaded[key]} is newer than this runtime supports (${CURRENT_SYSTEM_FORMATS[key]}).`\n );\n }\n }\n\n const now = Date.now();\n for (const key of systemFormatKeys()) {\n if (loaded[key] === CURRENT_SYSTEM_FORMATS[key]) {\n await driver.run(\n `INSERT OR REPLACE INTO \"${META_TABLE_NAME}\" (key, value, updated_at) VALUES (?, ?, ?)`,\n [key, String(loaded[key]), now]\n );\n continue;\n }\n await driver.run(\n `INSERT OR REPLACE INTO \"${META_TABLE_NAME}\" (key, value, updated_at) VALUES (?, ?, ?)`,\n [key, String(CURRENT_SYSTEM_FORMATS[key]), now]\n );\n loaded[key] = CURRENT_SYSTEM_FORMATS[key];\n }\n\n return loaded;\n}\n\nfunction systemFormatKeys(): Array<keyof SystemFormatRegistry> {\n return Object.keys(CURRENT_SYSTEM_FORMATS) as Array<keyof SystemFormatRegistry>;\n}\n\nfunction isSystemFormatKey(value: string): value is keyof SystemFormatRegistry {\n return systemFormatKeys().includes(value as keyof SystemFormatRegistry);\n}\n"],"mappings":";AASA,MAAa,yBAA+C;CAC1D,6BAA6B;CAC7B,wBAAwB;CACxB,0BAA0B;CAC1B,sBAAsB;
|
|
1
|
+
{"version":3,"file":"systemMeta.mjs","names":[],"sources":["../../../src/runtime/internal/systemMeta.ts"],"sourcesContent":["import type { SyncoreSqlDriver } from \"../runtime.js\";\n\nexport interface SystemFormatRegistry {\n schema_state_format_version: number;\n storage_format_version: number;\n scheduler_format_version: number;\n runtime_meta_version: number;\n}\n\nexport const CURRENT_SYSTEM_FORMATS: SystemFormatRegistry = {\n schema_state_format_version: 1,\n storage_format_version: 1,\n scheduler_format_version: 1,\n runtime_meta_version: 1\n};\n\nconst META_TABLE_NAME = \"_syncore_system_meta\";\n\nexport async function ensureSystemMetaTable(\n driver: SyncoreSqlDriver\n): Promise<void> {\n await driver.exec(`\n CREATE TABLE IF NOT EXISTS \"${META_TABLE_NAME}\" (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `);\n}\n\nexport async function loadSystemFormats(\n driver: SyncoreSqlDriver\n): Promise<SystemFormatRegistry> {\n await ensureSystemMetaTable(driver);\n const rows = await driver.all<{ key: string; value: string }>(\n `SELECT key, value FROM \"${META_TABLE_NAME}\"`\n );\n const loaded = { ...CURRENT_SYSTEM_FORMATS };\n\n for (const row of rows) {\n if (!isSystemFormatKey(row.key)) {\n continue;\n }\n const parsed = Number.parseInt(row.value, 10);\n if (Number.isNaN(parsed)) {\n throw new Error(`Invalid Syncore system format value for \"${row.key}\".`);\n }\n loaded[row.key] = parsed;\n }\n\n return loaded;\n}\n\nexport async function ensureSupportedSystemFormats(\n driver: SyncoreSqlDriver\n): Promise<SystemFormatRegistry> {\n const loaded = await loadSystemFormats(driver);\n\n for (const key of systemFormatKeys()) {\n if (loaded[key] > CURRENT_SYSTEM_FORMATS[key]) {\n throw new Error(\n `Syncore system format \"${key}\" version ${loaded[key]} is newer than this runtime supports (${CURRENT_SYSTEM_FORMATS[key]}).`\n );\n }\n }\n\n const now = Date.now();\n for (const key of systemFormatKeys()) {\n if (loaded[key] === CURRENT_SYSTEM_FORMATS[key]) {\n await driver.run(\n `INSERT OR REPLACE INTO \"${META_TABLE_NAME}\" (key, value, updated_at) VALUES (?, ?, ?)`,\n [key, String(loaded[key]), now]\n );\n continue;\n }\n await driver.run(\n `INSERT OR REPLACE INTO \"${META_TABLE_NAME}\" (key, value, updated_at) VALUES (?, ?, ?)`,\n [key, String(CURRENT_SYSTEM_FORMATS[key]), now]\n );\n loaded[key] = CURRENT_SYSTEM_FORMATS[key];\n }\n\n return loaded;\n}\n\nfunction systemFormatKeys(): Array<keyof SystemFormatRegistry> {\n return Object.keys(CURRENT_SYSTEM_FORMATS) as Array<keyof SystemFormatRegistry>;\n}\n\nfunction isSystemFormatKey(value: string): value is keyof SystemFormatRegistry {\n return systemFormatKeys().includes(value as keyof SystemFormatRegistry);\n}\n"],"mappings":";AASA,MAAa,yBAA+C;CAC1D,6BAA6B;CAC7B,wBAAwB;CACxB,0BAA0B;CAC1B,sBAAsB;AACxB;AAEA,MAAM,kBAAkB;AAExB,eAAsB,sBACpB,QACe;CACf,MAAM,OAAO,KAAK;kCACc,gBAAgB;;;;;GAK/C;AACH;AAEA,eAAsB,kBACpB,QAC+B;CAC/B,MAAM,sBAAsB,MAAM;CAClC,MAAM,OAAO,MAAM,OAAO,IACxB,2BAA2B,gBAAgB,EAC7C;CACA,MAAM,SAAS,EAAE,GAAG,uBAAuB;CAE3C,KAAK,MAAM,OAAO,MAAM;EACtB,IAAI,CAAC,kBAAkB,IAAI,GAAG,GAC5B;EAEF,MAAM,SAAS,OAAO,SAAS,IAAI,OAAO,EAAE;EAC5C,IAAI,OAAO,MAAM,MAAM,GACrB,MAAM,IAAI,MAAM,4CAA4C,IAAI,IAAI,GAAG;EAEzE,OAAO,IAAI,OAAO;CACpB;CAEA,OAAO;AACT;AAEA,eAAsB,6BACpB,QAC+B;CAC/B,MAAM,SAAS,MAAM,kBAAkB,MAAM;CAE7C,KAAK,MAAM,OAAO,iBAAiB,GACjC,IAAI,OAAO,OAAO,uBAAuB,MACvC,MAAM,IAAI,MACR,0BAA0B,IAAI,YAAY,OAAO,KAAK,wCAAwC,uBAAuB,KAAK,GAC5H;CAIJ,MAAM,MAAM,KAAK,IAAI;CACrB,KAAK,MAAM,OAAO,iBAAiB,GAAG;EACpC,IAAI,OAAO,SAAS,uBAAuB,MAAM;GAC/C,MAAM,OAAO,IACX,2BAA2B,gBAAgB,8CAC3C;IAAC;IAAK,OAAO,OAAO,IAAI;IAAG;GAAG,CAChC;GACA;EACF;EACA,MAAM,OAAO,IACX,2BAA2B,gBAAgB,8CAC3C;GAAC;GAAK,OAAO,uBAAuB,IAAI;GAAG;EAAG,CAChD;EACA,OAAO,OAAO,uBAAuB;CACvC;CAEA,OAAO;AACT;AAEA,SAAS,mBAAsD;CAC7D,OAAO,OAAO,KAAK,sBAAsB;AAC3C;AAEA,SAAS,kBAAkB,OAAoD;CAC7E,OAAO,iBAAiB,EAAE,SAAS,KAAmC;AACxE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
//#region src/runtime/internal/transactionCoordinator.ts
|
|
2
2
|
var TransactionCoordinator = class {
|
|
3
|
+
driver;
|
|
3
4
|
constructor(driver) {
|
|
4
5
|
this.driver = driver;
|
|
5
6
|
}
|
|
@@ -8,6 +9,7 @@ var TransactionCoordinator = class {
|
|
|
8
9
|
return {
|
|
9
10
|
result: await this.driver.withTransaction(async () => execute(state)),
|
|
10
11
|
changedTables: state.changedTables,
|
|
12
|
+
documentChanges: state.documentChanges,
|
|
11
13
|
storageChanges: state.storageChanges,
|
|
12
14
|
scheduledJobs: [],
|
|
13
15
|
devtoolsEvents: [],
|
|
@@ -17,6 +19,7 @@ var TransactionCoordinator = class {
|
|
|
17
19
|
createState() {
|
|
18
20
|
return {
|
|
19
21
|
changedTables: /* @__PURE__ */ new Set(),
|
|
22
|
+
documentChanges: [],
|
|
20
23
|
storageChanges: []
|
|
21
24
|
};
|
|
22
25
|
}
|
|
@@ -25,6 +28,7 @@ function createEmptyExecutionResult(result, state) {
|
|
|
25
28
|
return {
|
|
26
29
|
result,
|
|
27
30
|
changedTables: state?.changedTables ?? /* @__PURE__ */ new Set(),
|
|
31
|
+
documentChanges: state?.documentChanges ?? [],
|
|
28
32
|
storageChanges: state?.storageChanges ?? [],
|
|
29
33
|
scheduledJobs: [],
|
|
30
34
|
devtoolsEvents: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionCoordinator.mjs","names":[],"sources":["../../../src/runtime/internal/transactionCoordinator.ts"],"sourcesContent":["import type {\n ExecutionResult,\n JsonObject,\n SyncoreSqlDriver\n} from \"../runtime.js\";\nimport type { SyncoreExternalChangeReason } from \"../runtime.js\";\n\nexport interface TransactionState {\n changedTables: Set<string>;\n storageChanges: Array<{\n storageId: string;\n reason: Extract<SyncoreExternalChangeReason, \"storage-put\" | \"storage-delete\">;\n }>;\n}\n\nexport class TransactionCoordinator {\n constructor(private readonly driver: SyncoreSqlDriver) {}\n\n async runInTransaction<TResult>(\n execute: (state: TransactionState) => Promise<TResult>\n ): Promise<ExecutionResult<TResult>> {\n const state = this.createState();\n const result = await this.driver.withTransaction(async () => execute(state));\n return {\n result,\n changedTables: state.changedTables,\n storageChanges: state.storageChanges,\n scheduledJobs: [],\n devtoolsEvents: [],\n externalChangeRequests: []\n };\n }\n\n createState(): TransactionState {\n return {\n changedTables: new Set<string>(),\n storageChanges: []\n };\n }\n}\n\nexport function createEmptyExecutionResult<TResult>(\n result: TResult,\n state?: Partial<TransactionState>\n): ExecutionResult<TResult> {\n return {\n result,\n changedTables: state?.changedTables ?? new Set<string>(),\n storageChanges: state?.storageChanges ?? [],\n scheduledJobs: [],\n devtoolsEvents: [],\n externalChangeRequests: []\n };\n}\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"transactionCoordinator.mjs","names":[],"sources":["../../../src/runtime/internal/transactionCoordinator.ts"],"sourcesContent":["import type { DocumentChangePreview } from \"@syncore/devtools-protocol\";\nimport type {\n ExecutionResult,\n JsonObject,\n SyncoreSqlDriver\n} from \"../runtime.js\";\nimport type { SyncoreExternalChangeReason } from \"../runtime.js\";\n\nexport interface TransactionState {\n changedTables: Set<string>;\n documentChanges: DocumentChangePreview[];\n storageChanges: Array<{\n storageId: string;\n reason: Extract<SyncoreExternalChangeReason, \"storage-put\" | \"storage-delete\">;\n }>;\n}\n\nexport class TransactionCoordinator {\n constructor(private readonly driver: SyncoreSqlDriver) {}\n\n async runInTransaction<TResult>(\n execute: (state: TransactionState) => Promise<TResult>\n ): Promise<ExecutionResult<TResult>> {\n const state = this.createState();\n const result = await this.driver.withTransaction(async () => execute(state));\n return {\n result,\n changedTables: state.changedTables,\n documentChanges: state.documentChanges,\n storageChanges: state.storageChanges,\n scheduledJobs: [],\n devtoolsEvents: [],\n externalChangeRequests: []\n };\n }\n\n createState(): TransactionState {\n return {\n changedTables: new Set<string>(),\n documentChanges: [],\n storageChanges: []\n };\n }\n}\n\nexport function createEmptyExecutionResult<TResult>(\n result: TResult,\n state?: Partial<TransactionState>\n): ExecutionResult<TResult> {\n return {\n result,\n changedTables: state?.changedTables ?? new Set<string>(),\n documentChanges: state?.documentChanges ?? [],\n storageChanges: state?.storageChanges ?? [],\n scheduledJobs: [],\n devtoolsEvents: [],\n externalChangeRequests: []\n };\n}\n"],"mappings":";AAiBA,IAAa,yBAAb,MAAoC;CACL;CAA7B,YAAY,QAA2C;EAA1B,KAAA,SAAA;CAA2B;CAExD,MAAM,iBACJ,SACmC;EACnC,MAAM,QAAQ,KAAK,YAAY;EAE/B,OAAO;GACL,QAAA,MAFmB,KAAK,OAAO,gBAAgB,YAAY,QAAQ,KAAK,CAAC;GAGzE,eAAe,MAAM;GACrB,iBAAiB,MAAM;GACvB,gBAAgB,MAAM;GACtB,eAAe,CAAC;GAChB,gBAAgB,CAAC;GACjB,wBAAwB,CAAC;EAC3B;CACF;CAEA,cAAgC;EAC9B,OAAO;GACL,+BAAe,IAAI,IAAY;GAC/B,iBAAiB,CAAC;GAClB,gBAAgB,CAAC;EACnB;CACF;AACF;AAEA,SAAgB,2BACd,QACA,OAC0B;CAC1B,OAAO;EACL;EACA,eAAe,OAAO,iCAAiB,IAAI,IAAY;EACvD,iBAAiB,OAAO,mBAAmB,CAAC;EAC5C,gBAAgB,OAAO,kBAAkB,CAAC;EAC1C,eAAe,CAAC;EAChB,gBAAgB,CAAC;EACjB,wBAAwB,CAAC;CAC3B;AACF"}
|