syncorejs 0.1.0 → 0.2.0
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/{core/src/cli.d.ts → _vendor/cli/app.d.mts} +4 -2
- package/dist/_vendor/cli/app.d.mts.map +1 -0
- package/dist/_vendor/cli/app.mjs +997 -0
- package/dist/_vendor/cli/app.mjs.map +1 -0
- package/dist/_vendor/cli/context.mjs +180 -0
- package/dist/_vendor/cli/context.mjs.map +1 -0
- package/dist/_vendor/cli/dev-session.mjs +49 -0
- package/dist/_vendor/cli/dev-session.mjs.map +1 -0
- package/dist/_vendor/cli/doctor.mjs +80 -0
- package/dist/_vendor/cli/doctor.mjs.map +1 -0
- package/dist/_vendor/cli/errors.mjs +22 -0
- package/dist/_vendor/cli/errors.mjs.map +1 -0
- package/dist/_vendor/cli/help.mjs +26 -0
- package/dist/_vendor/cli/help.mjs.map +1 -0
- package/dist/_vendor/cli/index.d.mts +2 -0
- package/dist/_vendor/cli/index.mjs +23 -0
- package/dist/_vendor/cli/index.mjs.map +1 -0
- package/dist/_vendor/cli/messages.mjs +32 -0
- package/dist/_vendor/cli/messages.mjs.map +1 -0
- package/dist/_vendor/cli/preflight.mjs +35 -0
- package/dist/_vendor/cli/preflight.mjs.map +1 -0
- package/dist/_vendor/cli/project.mjs +583 -0
- package/dist/_vendor/cli/project.mjs.map +1 -0
- package/dist/_vendor/cli/render.mjs +133 -0
- package/dist/_vendor/cli/render.mjs.map +1 -0
- package/dist/_vendor/cli/targets.mjs +87 -0
- package/dist/_vendor/cli/targets.mjs.map +1 -0
- package/dist/_vendor/core/cli.d.mts +59 -1
- package/dist/_vendor/core/cli.d.mts.map +1 -1
- package/dist/_vendor/core/cli.mjs +528 -75
- package/dist/_vendor/core/cli.mjs.map +1 -1
- package/dist/_vendor/core/index.d.mts +12 -4
- package/dist/_vendor/core/index.d.mts.map +1 -0
- package/dist/_vendor/core/index.mjs +4 -3
- package/dist/_vendor/core/index.mjs.map +1 -1
- package/dist/_vendor/core/runtime/devtools.d.mts +32 -6
- package/dist/_vendor/core/runtime/devtools.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/devtools.mjs +397 -182
- package/dist/_vendor/core/runtime/devtools.mjs.map +1 -1
- package/dist/_vendor/core/runtime/functions.mjs.map +1 -1
- package/dist/_vendor/core/runtime/runtime.d.mts +89 -7
- package/dist/_vendor/core/runtime/runtime.d.mts.map +1 -1
- package/dist/_vendor/core/runtime/runtime.mjs +303 -32
- package/dist/_vendor/core/runtime/runtime.mjs.map +1 -1
- package/dist/_vendor/devtools-protocol/index.d.ts +189 -82
- package/dist/_vendor/devtools-protocol/index.d.ts.map +1 -1
- package/dist/_vendor/devtools-protocol/index.js +39 -0
- package/dist/_vendor/devtools-protocol/index.js.map +1 -0
- package/dist/_vendor/next/config.d.ts.map +1 -1
- package/dist/_vendor/next/config.js +2 -5
- package/dist/_vendor/next/config.js.map +1 -1
- package/dist/_vendor/platform-expo/index.d.ts +15 -5
- package/dist/_vendor/platform-expo/index.d.ts.map +1 -1
- package/dist/_vendor/platform-expo/index.js +33 -3
- package/dist/_vendor/platform-expo/index.js.map +1 -1
- package/dist/_vendor/platform-expo/react.js.map +1 -1
- package/dist/_vendor/platform-node/index.d.mts +10 -5
- package/dist/_vendor/platform-node/index.d.mts.map +1 -1
- package/dist/_vendor/platform-node/index.mjs +145 -35
- package/dist/_vendor/platform-node/index.mjs.map +1 -1
- package/dist/_vendor/platform-node/ipc-react.mjs.map +1 -1
- package/dist/_vendor/platform-web/external-change.d.ts +39 -0
- package/dist/_vendor/platform-web/external-change.d.ts.map +1 -0
- package/dist/_vendor/platform-web/external-change.js +61 -0
- package/dist/_vendor/platform-web/external-change.js.map +1 -0
- package/dist/_vendor/platform-web/index.d.ts +27 -5
- package/dist/_vendor/platform-web/index.d.ts.map +1 -1
- package/dist/_vendor/platform-web/index.js +310 -44
- package/dist/_vendor/platform-web/index.js.map +1 -1
- package/dist/_vendor/platform-web/indexeddb.js.map +1 -1
- package/dist/_vendor/platform-web/opfs.js.map +1 -1
- package/dist/_vendor/platform-web/persistence.js.map +1 -1
- package/dist/_vendor/platform-web/react.js.map +1 -1
- package/dist/_vendor/platform-web/sqljs.js +22 -2
- package/dist/_vendor/platform-web/sqljs.js.map +1 -1
- package/dist/_vendor/schema/definition.js.map +1 -1
- package/dist/_vendor/schema/planner.js.map +1 -1
- package/dist/_vendor/schema/validators.js.map +1 -1
- package/dist/browser-react.d.ts +1 -1
- package/dist/browser-react.js +1 -1
- package/dist/browser.d.ts +6 -7
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +4 -5
- package/dist/browser.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +12 -3
- package/dist/cli.js.map +1 -1
- package/dist/expo-react.d.ts +1 -1
- package/dist/expo-react.js +1 -1
- package/dist/expo.d.ts +1 -2
- package/dist/expo.js +1 -2
- package/dist/index.d.ts +3 -7
- package/dist/index.js +3 -8
- package/dist/next-config.d.ts +1 -2
- package/dist/next-config.js +1 -2
- package/dist/next.d.ts +1 -3
- package/dist/next.js +1 -3
- package/dist/node-ipc-react.d.ts +1 -1
- package/dist/node-ipc-react.js +1 -1
- package/dist/node-ipc.d.ts +1 -2
- package/dist/node-ipc.js +1 -2
- package/dist/node.d.ts +1 -4
- package/dist/node.js +1 -3
- package/dist/react.d.ts +1 -2
- package/dist/react.js +1 -2
- package/dist/svelte.d.ts +1 -2
- package/dist/svelte.js +1 -2
- package/package.json +6 -3
- package/dist/core/src/cli.d.ts.map +0 -1
- package/dist/core/src/cli.js +0 -1196
- package/dist/core/src/cli.js.map +0 -1
- package/dist/core/src/index.js +0 -7
- package/dist/core/src/runtime/devtools.d.ts +0 -7
- package/dist/core/src/runtime/devtools.d.ts.map +0 -1
- package/dist/core/src/runtime/devtools.js +0 -300
- package/dist/core/src/runtime/devtools.js.map +0 -1
- package/dist/core/src/runtime/functions.d.ts +0 -123
- package/dist/core/src/runtime/functions.d.ts.map +0 -1
- package/dist/core/src/runtime/functions.js +0 -71
- package/dist/core/src/runtime/functions.js.map +0 -1
- package/dist/core/src/runtime/id.d.ts +0 -13
- package/dist/core/src/runtime/id.d.ts.map +0 -1
- package/dist/core/src/runtime/id.js +0 -28
- package/dist/core/src/runtime/id.js.map +0 -1
- package/dist/core/src/runtime/runtime.d.ts +0 -371
- package/dist/core/src/runtime/runtime.d.ts.map +0 -1
- package/dist/core/src/runtime/runtime.js +0 -1143
- package/dist/core/src/runtime/runtime.js.map +0 -1
- package/dist/devtools-protocol/src/index.d.ts +0 -201
- package/dist/devtools-protocol/src/index.d.ts.map +0 -1
- package/dist/next/src/config.d.ts +0 -17
- package/dist/next/src/config.d.ts.map +0 -1
- package/dist/next/src/config.js +0 -73
- package/dist/next/src/config.js.map +0 -1
- package/dist/next/src/index.d.ts +0 -80
- package/dist/next/src/index.d.ts.map +0 -1
- package/dist/next/src/index.js +0 -82
- package/dist/next/src/index.js.map +0 -1
- package/dist/platform-expo/src/index.d.ts +0 -96
- package/dist/platform-expo/src/index.d.ts.map +0 -1
- package/dist/platform-expo/src/index.js +0 -198
- package/dist/platform-expo/src/index.js.map +0 -1
- package/dist/platform-expo/src/react.d.ts +0 -26
- package/dist/platform-expo/src/react.d.ts.map +0 -1
- package/dist/platform-expo/src/react.js +0 -30
- package/dist/platform-expo/src/react.js.map +0 -1
- package/dist/platform-node/src/index.d.ts +0 -145
- package/dist/platform-node/src/index.d.ts.map +0 -1
- package/dist/platform-node/src/index.js +0 -407
- package/dist/platform-node/src/index.js.map +0 -1
- package/dist/platform-node/src/ipc-react.d.ts +0 -25
- package/dist/platform-node/src/ipc-react.d.ts.map +0 -1
- package/dist/platform-node/src/ipc-react.js +0 -21
- package/dist/platform-node/src/ipc-react.js.map +0 -1
- package/dist/platform-node/src/ipc.d.ts +0 -76
- package/dist/platform-node/src/ipc.d.ts.map +0 -1
- package/dist/platform-node/src/ipc.js +0 -344
- package/dist/platform-node/src/ipc.js.map +0 -1
- package/dist/platform-web/src/index.d.ts +0 -106
- package/dist/platform-web/src/index.d.ts.map +0 -1
- package/dist/platform-web/src/index.js +0 -311
- package/dist/platform-web/src/index.js.map +0 -1
- package/dist/platform-web/src/indexeddb.js +0 -125
- package/dist/platform-web/src/indexeddb.js.map +0 -1
- package/dist/platform-web/src/opfs.js +0 -146
- package/dist/platform-web/src/opfs.js.map +0 -1
- package/dist/platform-web/src/persistence.d.ts +0 -20
- package/dist/platform-web/src/persistence.d.ts.map +0 -1
- package/dist/platform-web/src/persistence.js +0 -23
- package/dist/platform-web/src/persistence.js.map +0 -1
- package/dist/platform-web/src/react.d.ts +0 -35
- package/dist/platform-web/src/react.d.ts.map +0 -1
- package/dist/platform-web/src/react.js +0 -42
- package/dist/platform-web/src/react.js.map +0 -1
- package/dist/platform-web/src/sqljs.js +0 -133
- package/dist/platform-web/src/sqljs.js.map +0 -1
- package/dist/platform-web/src/worker.d.ts +0 -79
- package/dist/platform-web/src/worker.d.ts.map +0 -1
- package/dist/platform-web/src/worker.js +0 -308
- package/dist/platform-web/src/worker.js.map +0 -1
- package/dist/react/src/index.d.ts +0 -59
- package/dist/react/src/index.d.ts.map +0 -1
- package/dist/react/src/index.js +0 -151
- package/dist/react/src/index.js.map +0 -1
- package/dist/schema/src/definition.d.ts +0 -98
- package/dist/schema/src/definition.d.ts.map +0 -1
- package/dist/schema/src/definition.js +0 -84
- package/dist/schema/src/definition.js.map +0 -1
- package/dist/schema/src/planner.d.ts +0 -42
- package/dist/schema/src/planner.d.ts.map +0 -1
- package/dist/schema/src/planner.js +0 -131
- package/dist/schema/src/planner.js.map +0 -1
- package/dist/schema/src/validators.d.ts +0 -194
- package/dist/schema/src/validators.d.ts.map +0 -1
- package/dist/schema/src/validators.js +0 -158
- package/dist/schema/src/validators.js.map +0 -1
- package/dist/svelte/src/index.d.ts +0 -44
- package/dist/svelte/src/index.d.ts.map +0 -1
- package/dist/svelte/src/index.js +0 -75
- package/dist/svelte/src/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.mjs","names":[],"sources":["../../src/runtime/devtools.ts"],"sourcesContent":["import type {\n DataFilter,\n SchedulerJob,\n SyncoreRequestPayload,\n SyncoreResponsePayload\n} from \"@syncore/devtools-protocol\";\nimport { describeValidator } from \"@syncore/schema\";\nimport type { TableDefinition, Validator } from \"@syncore/schema\";\nimport type {\n AnySyncoreSchema,\n SyncoreRuntimeOptions,\n SyncoreSqlDriver\n} from \"./runtime.js\";\nimport { createFunctionReference } from \"./runtime.js\";\nimport type { SyncoreRuntime } from \"./runtime.js\";\n\nexport interface DevtoolsRequestHandlerDeps {\n driver: SyncoreSqlDriver;\n schema: AnySyncoreSchema;\n functions: SyncoreRuntimeOptions<AnySyncoreSchema>[\"functions\"];\n runtime: SyncoreRuntime<AnySyncoreSchema>;\n}\n\nexport type DevtoolsRequestHandler = (\n payload: SyncoreRequestPayload\n) => Promise<SyncoreResponsePayload>;\n\nexport function createDevtoolsRequestHandler(\n deps: DevtoolsRequestHandlerDeps\n): DevtoolsRequestHandler {\n const { driver, schema, functions, runtime } = deps;\n\n return async (payload): Promise<SyncoreResponsePayload> => {\n switch (payload.kind) {\n case \"fn.list\": {\n const defs = Object.entries(functions)\n .filter(\n (entry): entry is [string, NonNullable<(typeof entry)[1]>] =>\n entry[1] !== undefined\n )\n .map(([name, fn]) => {\n const def: {\n name: string;\n type: \"query\" | \"mutation\" | \"action\";\n file: string;\n args?: Record<string, unknown>;\n } = {\n name,\n type: fn.kind,\n file: inferFileFromFunctionName(name)\n };\n const argsDesc = describeValidator(fn.argsValidator);\n if (argsDesc.kind === \"object\") {\n def.args = argsDesc.shape as Record<string, unknown>;\n }\n return def;\n });\n return { kind: \"fn.list.result\", functions: defs };\n }\n\n case \"fn.run\": {\n const start = performance.now();\n try {\n let result: unknown;\n switch (payload.functionType) {\n case \"query\": {\n const ref = createFunctionReference(\n \"query\",\n payload.functionName\n );\n result = await runtime.runQuery(ref, payload.args);\n break;\n }\n case \"mutation\": {\n const ref = createFunctionReference(\n \"mutation\",\n payload.functionName\n );\n result = await runtime.runMutation(ref, payload.args);\n break;\n }\n case \"action\": {\n const ref = createFunctionReference(\n \"action\",\n payload.functionName\n );\n result = await runtime.runAction(ref, payload.args);\n break;\n }\n }\n return {\n kind: \"fn.run.result\",\n result,\n durationMs: performance.now() - start\n };\n } catch (err) {\n return {\n kind: \"fn.run.result\",\n error: err instanceof Error ? err.message : String(err),\n durationMs: performance.now() - start\n };\n }\n }\n\n case \"schema.get\": {\n const tableNames = schema.tableNames();\n const tables = await Promise.all(\n tableNames.map(async (name) => {\n const table = schema.getTable(name) as TableDefinition<\n Validator<unknown>\n >;\n const validatorDesc = describeValidator(table.validator);\n const fields =\n validatorDesc.kind === \"object\"\n ? Object.entries(validatorDesc.shape).map(\n ([fieldName, fieldDesc]) => {\n const desc = fieldDesc as {\n kind: string;\n inner?: { kind: string };\n };\n const optional = desc.kind === \"optional\";\n const innerKind = optional\n ? (desc.inner?.kind ?? \"any\")\n : desc.kind;\n return {\n name: fieldName,\n type: innerKind,\n optional\n };\n }\n )\n : [];\n\n fields.unshift(\n { name: \"_id\", type: \"string\", optional: false },\n { name: \"_creationTime\", type: \"number\", optional: false }\n );\n\n let documentCount = 0;\n try {\n const countRow = await driver.get<{ count: number }>(\n `SELECT COUNT(*) as count FROM \"${name}\"`\n );\n if (countRow) {\n documentCount = countRow.count;\n }\n } catch {\n /* table may not exist yet */\n }\n\n return {\n name,\n fields,\n indexes: table.indexes.map(\n (idx: { name: string; fields: string[] }) => ({\n name: idx.name,\n fields: idx.fields,\n unique: false\n })\n ),\n documentCount\n };\n })\n );\n return { kind: \"schema.result\", tables };\n }\n\n case \"data.query\": {\n try {\n let sql = `SELECT _id, _creationTime, _json FROM \"${payload.table}\"`;\n const params: unknown[] = [];\n\n if (payload.filters && payload.filters.length > 0) {\n const conditions = payload.filters.map((filter) => {\n const op = filterOperatorToSql(filter.operator);\n params.push(normalizeFilterValue(filter));\n return `json_extract(_json, '$.${filter.field}') ${op} ?`;\n });\n sql += ` WHERE ${conditions.join(\" AND \")}`;\n }\n\n sql += \" ORDER BY _creationTime DESC\";\n if (payload.limit) {\n sql += ` LIMIT ${payload.limit}`;\n }\n\n const rawRows = await driver.all<{\n _id: string;\n _creationTime: number;\n _json: string;\n }>(sql, params);\n\n const rows = rawRows.map((row) => ({\n _id: row._id,\n _creationTime: row._creationTime,\n ...(JSON.parse(row._json) as Record<string, unknown>)\n }));\n\n const countRow = await driver.get<{ count: number }>(\n `SELECT COUNT(*) as count FROM \"${payload.table}\"`\n );\n\n return {\n kind: \"data.result\",\n rows,\n totalCount: countRow?.count ?? 0\n };\n } catch (err) {\n return {\n kind: \"error\",\n message: err instanceof Error ? err.message : String(err)\n };\n }\n }\n\n case \"data.insert\": {\n try {\n const id = generateId();\n const now = Date.now();\n await driver.run(\n `INSERT INTO \"${payload.table}\" (_id, _creationTime, _json) VALUES (?, ?, ?)`,\n [id, now, JSON.stringify(payload.document)]\n );\n return { kind: \"data.mutate.result\", success: true, id };\n } catch (err) {\n return {\n kind: \"data.mutate.result\",\n success: false,\n error: err instanceof Error ? err.message : String(err)\n };\n }\n }\n\n case \"data.patch\": {\n try {\n const existing = await driver.get<{ _json: string }>(\n `SELECT _json FROM \"${payload.table}\" WHERE _id = ?`,\n [payload.id]\n );\n if (!existing) {\n return {\n kind: \"data.mutate.result\",\n success: false,\n error: `Document ${payload.id} not found`\n };\n }\n const doc = {\n ...(JSON.parse(existing._json) as Record<string, unknown>),\n ...payload.fields\n };\n await driver.run(\n `UPDATE \"${payload.table}\" SET _json = ? WHERE _id = ?`,\n [JSON.stringify(doc), payload.id]\n );\n return { kind: \"data.mutate.result\", success: true, id: payload.id };\n } catch (err) {\n return {\n kind: \"data.mutate.result\",\n success: false,\n error: err instanceof Error ? err.message : String(err)\n };\n }\n }\n\n case \"data.delete\": {\n try {\n await driver.run(`DELETE FROM \"${payload.table}\" WHERE _id = ?`, [\n payload.id\n ]);\n return { kind: \"data.mutate.result\", success: true };\n } catch (err) {\n return {\n kind: \"data.mutate.result\",\n success: false,\n error: err instanceof Error ? err.message : String(err)\n };\n }\n }\n\n case \"sql.execute\": {\n try {\n const trimmed = payload.query.trim().toUpperCase();\n if (\n trimmed.startsWith(\"SELECT\") ||\n trimmed.startsWith(\"PRAGMA\") ||\n trimmed.startsWith(\"EXPLAIN\")\n ) {\n const rows = await driver.all<Record<string, unknown>>(\n payload.query\n );\n const columns = rows.length > 0 ? Object.keys(rows[0]!) : [];\n return {\n kind: \"sql.result\",\n columns,\n rows: rows.map((row) => columns.map((col) => row[col])),\n rowsAffected: 0\n };\n }\n\n const result = await driver.run(payload.query);\n return {\n kind: \"sql.result\",\n columns: [],\n rows: [],\n rowsAffected: result.changes\n };\n } catch (err) {\n return {\n kind: \"sql.result\",\n columns: [],\n rows: [],\n rowsAffected: 0,\n error: err instanceof Error ? err.message : String(err)\n };\n }\n }\n\n case \"scheduler.list\": {\n try {\n const rows = await driver.all<{\n id: string;\n function_name: string;\n args_json: string;\n status: string;\n run_at: number;\n created_at: number;\n updated_at: number;\n schedule_json: string | null;\n }>(\n `SELECT * FROM \"_scheduled_functions\" ORDER BY run_at DESC LIMIT 200`\n );\n\n const jobs: SchedulerJob[] = rows.map((row) => {\n const job: SchedulerJob = {\n id: row.id,\n functionName: row.function_name,\n args: JSON.parse(row.args_json) as Record<string, unknown>,\n scheduledAt: row.created_at,\n runAt: row.run_at,\n status: mapJobStatus(row.status)\n };\n if (row.schedule_json) {\n try {\n const schedule = JSON.parse(row.schedule_json) as {\n cron?: string;\n };\n if (schedule.cron) {\n job.cronSchedule = schedule.cron;\n }\n } catch {\n /* ignore parse errors */\n }\n }\n if (row.status === \"completed\" || row.status === \"failed\") {\n job.completedAt = row.updated_at;\n }\n return job;\n });\n\n return { kind: \"scheduler.list.result\", jobs };\n } catch {\n return { kind: \"scheduler.list.result\", jobs: [] };\n }\n }\n\n case \"scheduler.cancel\": {\n try {\n await driver.run(\n `UPDATE \"_scheduled_functions\" SET status = 'cancelled', updated_at = ? WHERE id = ? AND status = 'scheduled'`,\n [Date.now(), payload.jobId]\n );\n return { kind: \"scheduler.cancel.result\", success: true };\n } catch (err) {\n return {\n kind: \"scheduler.cancel.result\",\n success: false,\n error: err instanceof Error ? err.message : String(err)\n };\n }\n }\n\n default:\n return {\n kind: \"error\",\n message: `Unknown request kind: ${(payload as { kind: string }).kind}`\n };\n }\n };\n}\n\nfunction inferFileFromFunctionName(name: string): string {\n const parts = name.split(\":\");\n if (parts.length > 1) {\n return parts[0]! + \".ts\";\n }\n return \"unknown\";\n}\n\nfunction normalizeFilterValue(filter: DataFilter): unknown {\n switch (filter.operator) {\n case \"contains\":\n return `%${String(filter.value)}%`;\n case \"startsWith\":\n return `${String(filter.value)}%`;\n default:\n return filter.value;\n }\n}\n\nfunction filterOperatorToSql(op: string): string {\n switch (op) {\n case \"eq\":\n return \"=\";\n case \"neq\":\n return \"!=\";\n case \"gt\":\n return \">\";\n case \"gte\":\n return \">=\";\n case \"lt\":\n return \"<\";\n case \"lte\":\n return \"<=\";\n case \"contains\":\n return \"LIKE\";\n case \"startsWith\":\n return \"LIKE\";\n default:\n return \"=\";\n }\n}\n\nfunction mapJobStatus(\n status: string\n): \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\" {\n switch (status) {\n case \"scheduled\":\n return \"pending\";\n case \"completed\":\n return \"completed\";\n case \"failed\":\n return \"failed\";\n case \"cancelled\":\n case \"skipped\":\n return \"cancelled\";\n default:\n return \"pending\";\n }\n}\n\nfunction generateId(): string {\n const chars = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n let id = \"\";\n for (let i = 0; i < 24; i++) {\n id += chars[Math.floor(Math.random() * chars.length)];\n }\n return id;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"devtools.mjs","names":[],"sources":["../../src/runtime/devtools.ts"],"sourcesContent":["import type {\n SchedulerMisfirePolicy,\n SchedulerJob,\n SchedulerRecurringSchedule,\n SyncoreDevtoolsCommandPayload,\n SyncoreDevtoolsCommandResultPayload,\n SyncoreDevtoolsSubscriptionPayload,\n SyncoreDevtoolsSubscriptionResultPayload,\n TableSchema\n} from \"@syncore/devtools-protocol\";\nimport { describeValidator } from \"@syncore/schema\";\nimport type { TableDefinition, Validator } from \"@syncore/schema\";\nimport type {\n AnySyncoreSchema,\n DevtoolsLiveQueryScope,\n SyncoreRuntimeOptions,\n SyncoreSqlDriver\n} from \"./runtime.js\";\nimport { createFunctionReference } from \"./runtime.js\";\nimport type { SyncoreRuntime } from \"./runtime.js\";\n\nexport interface DevtoolsCommandHandlerDeps {\n driver: SyncoreSqlDriver;\n schema: AnySyncoreSchema;\n functions: SyncoreRuntimeOptions<AnySyncoreSchema>[\"functions\"];\n runtime: SyncoreRuntime<AnySyncoreSchema>;\n sql?: DevtoolsSqlSupport;\n}\n\nexport type DevtoolsSqlMode = \"read\" | \"write\" | \"ddl\";\n\nexport interface DevtoolsSqlAnalysis {\n mode: DevtoolsSqlMode;\n readTables: string[];\n writeTables: string[];\n schemaChanged: boolean;\n observedScopes: DevtoolsLiveQueryScope[];\n}\n\nexport interface DevtoolsSqlReadResult {\n columns: string[];\n rows: unknown[][];\n observedTables: string[];\n}\n\nexport interface DevtoolsSqlSupport {\n analyzeSqlStatement(query: string): DevtoolsSqlAnalysis;\n ensureSqlMode(\n analysis: DevtoolsSqlAnalysis,\n expected: DevtoolsSqlMode | \"watch\"\n ): void;\n runReadonlyQuery(databasePath: string, query: string): DevtoolsSqlReadResult;\n}\n\nexport type DevtoolsCommandHandler = (\n payload: SyncoreDevtoolsCommandPayload\n) => Promise<SyncoreDevtoolsCommandResultPayload>;\n\nexport type DevtoolsSubscriptionListener = (\n payload: SyncoreDevtoolsSubscriptionResultPayload\n) => void;\n\nexport interface DevtoolsSubscriptionHost {\n subscribe(\n subscriptionId: string,\n payload: SyncoreDevtoolsSubscriptionPayload,\n listener: DevtoolsSubscriptionListener\n ): Promise<void>;\n unsubscribe(subscriptionId: string): void;\n dispose(): void;\n}\n\ntype DevtoolsInvalidationScope = DevtoolsLiveQueryScope;\n\ninterface SubscriptionRecord {\n payload: SyncoreDevtoolsSubscriptionPayload;\n listener: DevtoolsSubscriptionListener;\n unsubscribeRuntime: () => void;\n scopes: Set<DevtoolsInvalidationScope>;\n}\n\nexport function createDevtoolsCommandHandler(\n deps: DevtoolsCommandHandlerDeps\n): DevtoolsCommandHandler {\n const { driver, runtime, sql } = deps;\n\n return async (payload): Promise<SyncoreDevtoolsCommandResultPayload> => {\n await runtime.prepareForDirectAccess();\n switch (payload.kind) {\n case \"fn.run\": {\n const start = performance.now();\n try {\n let result: unknown;\n switch (payload.functionType) {\n case \"query\":\n result = await runtime.runQuery(\n createFunctionReference(\"query\", payload.functionName),\n payload.args,\n { origin: \"dashboard\" }\n );\n break;\n case \"mutation\":\n result = await runtime.runMutation(\n createFunctionReference(\"mutation\", payload.functionName),\n payload.args,\n { origin: \"dashboard\" }\n );\n break;\n case \"action\":\n result = await runtime.runAction(\n createFunctionReference(\"action\", payload.functionName),\n payload.args,\n { origin: \"dashboard\" }\n );\n break;\n }\n return {\n kind: \"fn.run.result\",\n result,\n durationMs: performance.now() - start\n };\n } catch (error) {\n return {\n kind: \"fn.run.result\",\n error: error instanceof Error ? error.message : String(error),\n durationMs: performance.now() - start\n };\n }\n }\n\n case \"data.insert\": {\n try {\n const id = await runDevtoolsMutation(runtime, async (ctx) =>\n ctx.db.insert(payload.table as never, payload.document as never)\n , { origin: \"dashboard\" });\n return { kind: \"data.mutate.result\", success: true, id };\n } catch (error) {\n return {\n kind: \"data.mutate.result\",\n success: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n case \"data.patch\": {\n try {\n await runDevtoolsMutation(runtime, async (ctx) => {\n await ctx.db.patch(\n payload.table as never,\n payload.id,\n payload.fields as never\n );\n return null;\n }, { origin: \"dashboard\" });\n return {\n kind: \"data.mutate.result\",\n success: true,\n id: payload.id\n };\n } catch (error) {\n return {\n kind: \"data.mutate.result\",\n success: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n case \"data.delete\": {\n try {\n await runDevtoolsMutation(runtime, async (ctx) => {\n await ctx.db.delete(payload.table as never, payload.id);\n return null;\n }, { origin: \"dashboard\" });\n return { kind: \"data.mutate.result\", success: true };\n } catch (error) {\n return {\n kind: \"data.mutate.result\",\n success: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n case \"sql.read\": {\n try {\n const sqlSupport = requireDevtoolsSqlSupport(sql);\n const databasePath = runtime.getDriverDatabasePath();\n if (!databasePath) {\n throw new Error(\"SQL Read requires a file-backed database path.\");\n }\n const { columns, rows } = sqlSupport.runReadonlyQuery(\n databasePath,\n payload.query\n );\n return {\n kind: \"sql.read.result\",\n columns,\n rows\n };\n } catch (error) {\n return {\n kind: \"sql.read.result\",\n columns: [],\n rows: [],\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n case \"sql.write\": {\n try {\n const sqlSupport = requireDevtoolsSqlSupport(sql);\n const analysis = sqlSupport.analyzeSqlStatement(payload.query);\n if (analysis.mode === \"read\") {\n throw new Error(\n \"Use SQL Read or SQL Live for read-only statements.\"\n );\n }\n const result = await driver.run(payload.query);\n runtime.notifyDevtoolsScopes(analysis.observedScopes);\n await runtime.forceRefreshDevtools(\n \"SQL write executed from devtools dashboard.\",\n { origin: \"dashboard\" }\n );\n return {\n kind: \"sql.write.result\",\n rowsAffected: result.changes,\n invalidationScopes: [...analysis.observedScopes]\n };\n } catch (error) {\n return {\n kind: \"sql.write.result\",\n rowsAffected: 0,\n invalidationScopes: [],\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n case \"scheduler.cancel\": {\n try {\n const cancelled = await runtime.cancelScheduledJob(payload.jobId);\n return {\n kind: \"scheduler.cancel.result\",\n success: true,\n cancelled\n };\n } catch (error) {\n return {\n kind: \"scheduler.cancel.result\",\n success: false,\n cancelled: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n case \"scheduler.update\": {\n try {\n const updated = await runtime.updateScheduledJob({\n id: payload.jobId,\n schedule: payload.schedule,\n args: payload.args,\n misfirePolicy: payload.misfirePolicy,\n ...(payload.runAt !== undefined ? { runAt: payload.runAt } : {})\n });\n const jobs = updated ? await listSchedulerJobs(driver) : [];\n const updatedJob = jobs.find((job) => job.id === payload.jobId);\n return {\n kind: \"scheduler.update.result\",\n success: true,\n updated,\n ...(updated && updatedJob ? { job: updatedJob } : {})\n };\n } catch (error) {\n return {\n kind: \"scheduler.update.result\",\n success: false,\n updated: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n default:\n return {\n kind: \"error\",\n message: `Unknown devtools command: ${(payload as { kind: string }).kind}`\n };\n }\n };\n}\n\nexport function createDevtoolsSubscriptionHost(\n deps: DevtoolsCommandHandlerDeps\n): DevtoolsSubscriptionHost {\n const { driver, schema, functions, runtime } = deps;\n const subscriptions = new Map<string, SubscriptionRecord>();\n\n const emit = async (\n payload: SyncoreDevtoolsSubscriptionPayload,\n listener: DevtoolsSubscriptionListener\n ) => {\n listener(\n await resolveSubscriptionPayload(payload, {\n driver,\n schema,\n functions,\n runtime,\n ...(deps.sql ? { sql: deps.sql } : {})\n })\n );\n };\n\n const handleInvalidation = async (scopes: Set<DevtoolsInvalidationScope>) => {\n for (const record of subscriptions.values()) {\n if (!intersects(scopes, record.scopes)) {\n continue;\n }\n await emit(record.payload, record.listener);\n }\n };\n\n return {\n async subscribe(subscriptionId, payload, listener) {\n if (payload.kind === \"fn.watch\") {\n const definition = functions[payload.functionName];\n if (!definition || definition.kind !== \"query\") {\n listener({\n kind: \"fn.watch.result\",\n error: `Unknown query function: ${payload.functionName}`\n });\n return;\n }\n const client = runtime.createClient();\n const watch = client.watchQuery(\n createFunctionReference(\"query\", payload.functionName),\n payload.args\n );\n const emitWatchResult = () => {\n const error = watch.localQueryError();\n listener({\n kind: \"fn.watch.result\",\n ...(error\n ? {\n error: error.message\n }\n : {\n result: watch.localQueryResult()\n })\n });\n };\n const unsubscribeUpdates = watch.onUpdate(emitWatchResult);\n subscriptions.set(subscriptionId, {\n payload,\n listener,\n unsubscribeRuntime: () => {\n unsubscribeUpdates();\n watch.dispose?.();\n },\n scopes: new Set<DevtoolsInvalidationScope>([\"all\"])\n });\n emitWatchResult();\n return;\n }\n\n const unsubscribeRuntime = runtime.subscribeToDevtoolsInvalidations(\n (scopes) => {\n void handleInvalidation(scopes);\n }\n );\n const unsubscribeEvents = runtime.subscribeToDevtoolsEvents((event) => {\n if (event.type === \"runtime.disconnected\") {\n void emit(payload, listener);\n }\n });\n subscriptions.set(subscriptionId, {\n payload,\n listener,\n unsubscribeRuntime: () => {\n unsubscribeRuntime();\n unsubscribeEvents();\n },\n scopes: scopesForSubscription(payload, deps.sql)\n });\n await emit(payload, listener);\n },\n unsubscribe(subscriptionId) {\n const record = subscriptions.get(subscriptionId);\n if (!record) {\n return;\n }\n record.unsubscribeRuntime();\n subscriptions.delete(subscriptionId);\n },\n dispose() {\n for (const [subscriptionId, record] of subscriptions) {\n record.unsubscribeRuntime();\n subscriptions.delete(subscriptionId);\n }\n }\n };\n}\n\nasync function resolveSubscriptionPayload(\n payload: SyncoreDevtoolsSubscriptionPayload,\n deps: DevtoolsCommandHandlerDeps\n): Promise<SyncoreDevtoolsSubscriptionResultPayload> {\n const { driver, schema, functions, runtime } = deps;\n await runtime.prepareForDirectAccess();\n\n switch (payload.kind) {\n case \"runtime.summary\":\n return {\n kind: \"runtime.summary.result\",\n summary: runtime.getRuntimeSummary()\n };\n case \"runtime.activeQueries\":\n return {\n kind: \"runtime.activeQueries.result\",\n activeQueries: runtime.getActiveQueryInfos()\n };\n case \"fn.watch\":\n throw new Error(\"Function watches are pushed incrementally and have no snapshot payload.\");\n case \"schema.tables\": {\n const tables = await getSchemaTables(driver, schema);\n console.debug(\"[devtools] schema.tables\", {\n runtimeId: runtime.getRuntimeId(),\n tables: tables.map((table) => ({\n name: table.name,\n documentCount: table.documentCount\n }))\n });\n return {\n kind: \"schema.tables.result\",\n tables\n };\n }\n case \"data.table\": {\n const result = await queryTable(\n driver,\n payload.table,\n payload.filters,\n payload.limit\n );\n console.debug(\"[devtools] data.table\", {\n runtimeId: runtime.getRuntimeId(),\n table: payload.table,\n filters: payload.filters ?? [],\n limit: payload.limit,\n totalCount: result.totalCount,\n rowCount: result.rows.length,\n firstRow: result.rows[0] ?? null\n });\n return {\n kind: \"data.table.result\",\n rows: result.rows,\n totalCount: result.totalCount,\n ...(result.cursor ? { cursor: result.cursor } : {})\n };\n }\n case \"scheduler.jobs\":\n return {\n kind: \"scheduler.jobs.result\",\n jobs: await listSchedulerJobs(driver)\n };\n case \"functions.catalog\":\n return {\n kind: \"functions.catalog.result\",\n functions: listFunctions(functions)\n };\n case \"sql.watch\": {\n const sqlSupport = requireDevtoolsSqlSupport(deps.sql);\n const databasePath = runtime.getDriverDatabasePath();\n if (!databasePath) {\n throw new Error(\"SQL Live requires a file-backed database path.\");\n }\n const { columns, rows, observedTables } = sqlSupport.runReadonlyQuery(\n databasePath,\n payload.query\n );\n return {\n kind: \"sql.watch.result\",\n columns,\n rows,\n observedTables\n };\n }\n }\n}\n\nasync function queryTable(\n driver: SyncoreSqlDriver,\n table: string,\n filters?: Array<{\n field: string;\n operator: string;\n value: unknown;\n }>,\n limit?: number\n): Promise<{\n rows: Record<string, unknown>[];\n totalCount: number;\n cursor?: string;\n}> {\n let sql = `SELECT _id, _creationTime, _json FROM \"${table}\"`;\n const params: unknown[] = [];\n\n if (filters && filters.length > 0) {\n sql += ` WHERE ${filters\n .map((filter) => {\n params.push(normalizeFilterValue(filter));\n return `json_extract(_json, '$.${filter.field}') ${filterOperatorToSql(filter.operator)} ?`;\n })\n .join(\" AND \")}`;\n }\n\n sql += \" ORDER BY _creationTime DESC\";\n if (limit) {\n sql += ` LIMIT ${limit}`;\n }\n\n const rawRows = await driver.all<{\n _id: string;\n _creationTime: number;\n _json: string;\n }>(sql, params);\n const rows = rawRows.map((row) => ({\n _id: row._id,\n _creationTime: row._creationTime,\n ...(JSON.parse(row._json) as Record<string, unknown>)\n }));\n const countRow = await driver.get<{ count: number }>(\n `SELECT COUNT(*) as count FROM \"${table}\"`\n );\n\n return {\n rows,\n totalCount: countRow?.count ?? 0\n };\n}\n\nasync function getSchemaTables(\n driver: SyncoreSqlDriver,\n schema: AnySyncoreSchema\n): Promise<TableSchema[]> {\n return Promise.all(\n schema.tableNames().map(async (name) => {\n const table = schema.getTable(name) as TableDefinition<\n Validator<unknown>\n >;\n const validatorDesc = describeValidator(table.validator);\n const fields =\n validatorDesc.kind === \"object\"\n ? Object.entries(validatorDesc.shape).map(\n ([fieldName, fieldDesc]) => {\n const desc = fieldDesc as {\n kind: string;\n inner?: { kind: string };\n };\n const optional = desc.kind === \"optional\";\n return {\n name: fieldName,\n type: optional ? (desc.inner?.kind ?? \"any\") : desc.kind,\n optional\n };\n }\n )\n : [];\n\n fields.unshift(\n { name: \"_id\", type: \"string\", optional: false },\n { name: \"_creationTime\", type: \"number\", optional: false }\n );\n\n let documentCount = 0;\n try {\n const countRow = await driver.get<{ count: number }>(\n `SELECT COUNT(*) as count FROM \"${name}\"`\n );\n documentCount = countRow?.count ?? 0;\n } catch {\n documentCount = 0;\n }\n\n return {\n name,\n fields,\n indexes: table.indexes.map((index) => ({\n name: index.name,\n fields: index.fields,\n unique: false\n })),\n documentCount\n };\n })\n );\n}\n\nasync function listSchedulerJobs(\n driver: SyncoreSqlDriver\n): Promise<SchedulerJob[]> {\n try {\n const rows = await driver.all<{\n id: string;\n function_name: string;\n args_json: string;\n status: string;\n run_at: number;\n created_at: number;\n updated_at: number;\n recurring_name: string | null;\n schedule_json: string | null;\n timezone: string | null;\n misfire_policy: string;\n last_run_at: number | null;\n window_ms: number | null;\n }>(`SELECT * FROM \"_scheduled_functions\" ORDER BY run_at DESC LIMIT 200`);\n\n return rows.map((row) => {\n const schedule = safeReadSchedule(row.schedule_json);\n const scheduleLabel = schedule ? formatScheduleLabel(schedule) : undefined;\n return {\n id: row.id,\n functionName: row.function_name,\n args: JSON.parse(row.args_json) as Record<string, unknown>,\n scheduledAt: row.created_at,\n runAt: row.run_at,\n status: mapJobStatus(row.status),\n ...(row.status === \"completed\" || row.status === \"failed\"\n ? { completedAt: row.updated_at }\n : {}),\n ...(row.recurring_name ? { recurringName: row.recurring_name } : {}),\n ...(schedule ? { schedule } : {}),\n ...(scheduleLabel ? { scheduleLabel, cronSchedule: scheduleLabel } : {}),\n ...(row.timezone ? { timezone: row.timezone } : {}),\n ...(row.last_run_at !== null ? { lastRunAt: row.last_run_at } : {}),\n ...(row.updated_at ? { updatedAt: row.updated_at } : {}),\n misfirePolicy: readMisfirePolicy(row.misfire_policy, row.window_ms)\n };\n });\n } catch {\n return [];\n }\n}\n\nfunction listFunctions(\n functions: SyncoreRuntimeOptions<AnySyncoreSchema>[\"functions\"]\n) {\n return Object.entries(functions)\n .filter(\n (entry): entry is [string, NonNullable<(typeof entry)[1]>] =>\n entry[1] !== undefined\n )\n .map(([name, fn]) => {\n const descriptor: {\n name: string;\n type: \"query\" | \"mutation\" | \"action\";\n file: string;\n args?: Record<string, unknown>;\n } = {\n name,\n type: fn.kind,\n file: inferFileFromFunctionName(name)\n };\n const argsDesc = describeValidator(fn.argsValidator);\n if (argsDesc.kind === \"object\") {\n descriptor.args = argsDesc.shape as Record<string, unknown>;\n }\n return descriptor;\n });\n}\n\nfunction inferFileFromFunctionName(name: string): string {\n const parts = name.split(\":\");\n if (parts.length > 1) {\n return `${parts[0]}.ts`;\n }\n return \"unknown\";\n}\n\nfunction normalizeFilterValue(filter: {\n operator: string;\n value: unknown;\n}): unknown {\n switch (filter.operator) {\n case \"contains\":\n return `%${String(filter.value)}%`;\n case \"startsWith\":\n return `${String(filter.value)}%`;\n default:\n return filter.value;\n }\n}\n\nfunction filterOperatorToSql(operator: string): string {\n switch (operator) {\n case \"eq\":\n return \"=\";\n case \"neq\":\n return \"!=\";\n case \"gt\":\n return \">\";\n case \"gte\":\n return \">=\";\n case \"lt\":\n return \"<\";\n case \"lte\":\n return \"<=\";\n case \"contains\":\n case \"startsWith\":\n return \"LIKE\";\n default:\n return \"=\";\n }\n}\n\nfunction mapJobStatus(\n status: string\n): \"pending\" | \"running\" | \"completed\" | \"failed\" | \"cancelled\" {\n switch (status) {\n case \"scheduled\":\n return \"pending\";\n case \"completed\":\n return \"completed\";\n case \"failed\":\n return \"failed\";\n case \"cancelled\":\n case \"skipped\":\n return \"cancelled\";\n default:\n return \"pending\";\n }\n}\n\nfunction safeReadSchedule(\n scheduleJson: string | null\n): SchedulerRecurringSchedule | undefined {\n if (!scheduleJson) {\n return undefined;\n }\n try {\n return JSON.parse(scheduleJson) as SchedulerRecurringSchedule;\n } catch {\n return undefined;\n }\n}\n\nfunction formatScheduleLabel(schedule: SchedulerRecurringSchedule): string {\n switch (schedule.type) {\n case \"interval\": {\n const parts: string[] = [];\n if (schedule.hours) {\n parts.push(`${schedule.hours}h`);\n }\n if (schedule.minutes) {\n parts.push(`${schedule.minutes}m`);\n }\n if (schedule.seconds) {\n parts.push(`${schedule.seconds}s`);\n }\n return parts.length > 0 ? `Every ${parts.join(\" \")}` : \"Recurring\";\n }\n case \"daily\":\n return `Daily ${padNumber(schedule.hour)}:${padNumber(schedule.minute)}${schedule.timezone ? ` ${schedule.timezone}` : \"\"}`;\n case \"weekly\":\n return `Weekly ${capitalize(schedule.dayOfWeek)} ${padNumber(schedule.hour)}:${padNumber(schedule.minute)}${schedule.timezone ? ` ${schedule.timezone}` : \"\"}`;\n }\n}\n\nfunction readMisfirePolicy(\n type: string,\n windowMs: number | null\n): SchedulerMisfirePolicy {\n if (type === \"windowed\") {\n return {\n type,\n windowMs: windowMs ?? 0\n };\n }\n if (type === \"skip\" || type === \"run_once_if_missed\") {\n return { type };\n }\n return { type: \"catch_up\" };\n}\n\nfunction padNumber(value: number): string {\n return String(value).padStart(2, \"0\");\n}\n\nfunction capitalize(value: string): string {\n return value.slice(0, 1).toUpperCase() + value.slice(1);\n}\n\nasync function runDevtoolsMutation<TResult>(\n runtime: SyncoreRuntime<AnySyncoreSchema>,\n callback: (ctx: {\n db: {\n insert(\n tableName: string,\n value: Record<string, unknown>\n ): Promise<string>;\n patch(\n tableName: string,\n id: string,\n value: Record<string, unknown>\n ): Promise<void>;\n delete(tableName: string, id: string): Promise<void>;\n };\n }) => Promise<TResult>,\n meta?: { origin?: \"dashboard\" }\n ): Promise<TResult> {\n return runtime.runDevtoolsMutation(callback as never, meta);\n }\n\nfunction scopesForSubscription(\n payload: SyncoreDevtoolsSubscriptionPayload,\n sql?: DevtoolsSqlSupport\n): Set<DevtoolsInvalidationScope> {\n switch (payload.kind) {\n case \"runtime.summary\":\n return new Set([\"runtime.summary\"]);\n case \"runtime.activeQueries\":\n return new Set([\"runtime.activeQueries\"]);\n case \"fn.watch\":\n return new Set([\"all\"]);\n case \"schema.tables\":\n return new Set([\"schema.tables\"]);\n case \"data.table\":\n return new Set<DevtoolsInvalidationScope>([`table:${payload.table}`]);\n case \"scheduler.jobs\":\n return new Set([\"scheduler.jobs\"]);\n case \"functions.catalog\":\n return new Set([\"all\"]);\n case \"sql.watch\": {\n try {\n const sqlSupport = requireDevtoolsSqlSupport(sql);\n const analysis = sqlSupport.analyzeSqlStatement(payload.query);\n sqlSupport.ensureSqlMode(analysis, \"watch\");\n return new Set<DevtoolsInvalidationScope>(analysis.observedScopes);\n } catch {\n return new Set<DevtoolsInvalidationScope>([\"all\"]);\n }\n }\n }\n}\n\nfunction intersects(\n a: Set<DevtoolsInvalidationScope>,\n b: Set<DevtoolsInvalidationScope>\n): boolean {\n if (a.has(\"all\") || b.has(\"all\")) {\n return true;\n }\n for (const value of a) {\n if (b.has(value)) {\n return true;\n }\n }\n return false;\n}\n\nfunction requireDevtoolsSqlSupport(\n sql?: DevtoolsSqlSupport\n): DevtoolsSqlSupport {\n if (!sql) {\n throw new Error(\"SQL devtools are only available in Node-hosted runtimes.\");\n }\n return sql;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.mjs","names":[],"sources":["../../src/runtime/functions.ts"],"sourcesContent":["import {\r\n ensureObjectValidator,\r\n type Infer,\r\n type Validator,\r\n type ValidatorMap\r\n} from \"@syncore/schema\";\r\n\r\nexport type SyncoreFunctionKind = \"query\" | \"mutation\" | \"action\";\r\nexport type EmptyArgs = Record<never, never>;\r\n\r\n/**\r\n * A typed reference to a Syncore function.\r\n *\r\n * Most app code gets these references from the generated `api` object.\r\n */\r\nexport interface FunctionReference<\r\n TKind extends SyncoreFunctionKind = SyncoreFunctionKind,\r\n TArgs = EmptyArgs,\r\n TResult = unknown\r\n> {\r\n kind: TKind;\r\n name: string;\r\n readonly __args?: TArgs;\r\n readonly __result?: TResult;\r\n}\r\n\r\nexport interface SyncoreFunctionDefinition<\r\n TKind extends SyncoreFunctionKind,\r\n TContext,\r\n TArgs,\r\n TResult\r\n> {\r\n kind: TKind;\r\n argsValidator: Validator<TArgs>;\r\n returnsValidator?: Validator<TResult>;\r\n handler: (ctx: TContext, args: TArgs) => Promise<TResult> | TResult;\r\n}\r\n\r\nexport type FunctionArgs<TReference> =\r\n TReference extends FunctionReference<\r\n SyncoreFunctionKind,\r\n infer TArgs,\r\n unknown\r\n >\r\n ? TArgs\r\n : never;\r\n\r\nexport type FunctionResult<TReference> =\r\n TReference extends FunctionReference<\r\n SyncoreFunctionKind,\r\n unknown,\r\n infer TResult\r\n >\r\n ? TResult\r\n : never;\r\n\r\nexport type FunctionKindFromDefinition<TDefinition> = TDefinition extends {\r\n kind: infer TKind;\r\n}\r\n ? Extract<TKind, SyncoreFunctionKind>\r\n : never;\r\n\r\nexport type FunctionArgsFromDefinition<TDefinition> = TDefinition extends {\r\n argsValidator: Validator<infer TArgs>;\r\n}\r\n ? TArgs\r\n : never;\r\n\r\nexport type FunctionResultFromDefinition<TDefinition> = TDefinition extends {\r\n returnsValidator?: Validator<infer TResult>;\r\n}\r\n ? TResult\r\n : never;\r\n\r\nexport type FunctionReferenceFor<TDefinition> =\r\n FunctionKindFromDefinition<TDefinition> extends never\r\n ? never\r\n : FunctionReference<\r\n FunctionKindFromDefinition<TDefinition>,\r\n FunctionArgsFromDefinition<TDefinition>,\r\n FunctionResultFromDefinition<TDefinition>\r\n >;\r\n\r\nexport interface FunctionConfig<TContext, TArgs, TResult> {\r\n args: Validator<TArgs> | ValidatorMap;\r\n returns?: Validator<TResult>;\r\n handler: (ctx: TContext, args: TArgs) => Promise<TResult> | TResult;\r\n}\r\n\r\nexport type InferArgs<TArgs extends Validator<unknown> | ValidatorMap> =\r\n TArgs extends Validator<unknown>\r\n ? Infer<TArgs>\r\n : TArgs extends ValidatorMap\r\n ? {\r\n [TKey in keyof TArgs]: Infer<TArgs[TKey]>;\r\n }\r\n : never;\r\n\r\nfunction createFunctionDefinition<\r\n TKind extends SyncoreFunctionKind,\r\n TContext,\r\n TArgsShape extends Validator<unknown> | ValidatorMap,\r\n TResult\r\n>(\r\n kind: TKind,\r\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\r\n args: TArgsShape;\r\n }\r\n): SyncoreFunctionDefinition<TKind, TContext, InferArgs<TArgsShape>, TResult> {\r\n return {\r\n kind,\r\n argsValidator: ensureObjectValidator(config.args) as Validator<\r\n InferArgs<TArgsShape>\r\n >,\r\n ...(config.returns ? { returnsValidator: config.returns } : {}),\r\n handler: config.handler\r\n };\r\n}\r\n\r\n/**\r\n * Define a Syncore query.\r\n *\r\n * Queries can read local Syncore state and are available to clients.\r\n */\r\nexport function query<\r\n TContext = unknown,\r\n TValidator extends Validator<unknown> = Validator<unknown>,\r\n TResult = unknown\r\n>(\r\n config: FunctionConfig<TContext, Infer<TValidator>, TResult> & {\r\n args: TValidator;\r\n }\r\n): SyncoreFunctionDefinition<\"query\", TContext, Infer<TValidator>, TResult>;\r\nexport function query<\r\n TContext = unknown,\r\n TArgsShape extends ValidatorMap = ValidatorMap,\r\n TResult = unknown\r\n>(\r\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\r\n args: TArgsShape;\r\n }\r\n): SyncoreFunctionDefinition<\"query\", TContext, InferArgs<TArgsShape>, TResult>;\r\nexport function query<\r\n TContext = unknown,\r\n TArgsShape extends Validator<unknown> | ValidatorMap = ValidatorMap,\r\n TResult = unknown\r\n>(\r\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\r\n args: TArgsShape;\r\n }\r\n): SyncoreFunctionDefinition<\r\n \"query\",\r\n TContext,\r\n InferArgs<TArgsShape>,\r\n TResult\r\n> {\r\n return createFunctionDefinition(\"query\", config);\r\n}\r\n\r\n/**\r\n * Define a Syncore mutation.\r\n *\r\n * Mutations can modify local Syncore state and are available to clients.\r\n */\r\nexport function mutation<\r\n TContext = unknown,\r\n TValidator extends Validator<unknown> = Validator<unknown>,\r\n TResult = unknown\r\n>(\r\n config: FunctionConfig<TContext, Infer<TValidator>, TResult> & {\r\n args: TValidator;\r\n }\r\n): SyncoreFunctionDefinition<\"mutation\", TContext, Infer<TValidator>, TResult>;\r\nexport function mutation<\r\n TContext = unknown,\r\n TArgsShape extends ValidatorMap = ValidatorMap,\r\n TResult = unknown\r\n>(\r\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\r\n args: TArgsShape;\r\n }\r\n): SyncoreFunctionDefinition<\r\n \"mutation\",\r\n TContext,\r\n InferArgs<TArgsShape>,\r\n TResult\r\n>;\r\nexport function mutation<\r\n TContext = unknown,\r\n TArgsShape extends Validator<unknown> | ValidatorMap = ValidatorMap,\r\n TResult = unknown\r\n>(\r\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\r\n args: TArgsShape;\r\n }\r\n): SyncoreFunctionDefinition<\r\n \"mutation\",\r\n TContext,\r\n InferArgs<TArgsShape>,\r\n TResult\r\n> {\r\n return createFunctionDefinition(\"mutation\", config);\r\n}\r\n\r\n/**\r\n * Define a Syncore action.\r\n *\r\n * Actions can run arbitrary JavaScript and may call other Syncore functions.\r\n */\r\nexport function action<\r\n TContext = unknown,\r\n TValidator extends Validator<unknown> = Validator<unknown>,\r\n TResult = unknown\r\n>(\r\n config: FunctionConfig<TContext, Infer<TValidator>, TResult> & {\r\n args: TValidator;\r\n }\r\n): SyncoreFunctionDefinition<\"action\", TContext, Infer<TValidator>, TResult>;\r\nexport function action<\r\n TContext = unknown,\r\n TArgsShape extends ValidatorMap = ValidatorMap,\r\n TResult = unknown\r\n>(\r\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\r\n args: TArgsShape;\r\n }\r\n): SyncoreFunctionDefinition<\r\n \"action\",\r\n TContext,\r\n InferArgs<TArgsShape>,\r\n TResult\r\n>;\r\nexport function action<\r\n TContext = unknown,\r\n TArgsShape extends Validator<unknown> | ValidatorMap = ValidatorMap,\r\n TResult = unknown\r\n>(\r\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\r\n args: TArgsShape;\r\n }\r\n): SyncoreFunctionDefinition<\r\n \"action\",\r\n TContext,\r\n InferArgs<TArgsShape>,\r\n TResult\r\n> {\r\n return createFunctionDefinition(\"action\", config);\r\n}\r\n\r\nexport interface RecurringIntervalSchedule {\r\n type: \"interval\";\r\n seconds?: number;\r\n minutes?: number;\r\n hours?: number;\r\n}\r\n\r\nexport interface RecurringDailySchedule {\r\n type: \"daily\";\r\n hour: number;\r\n minute: number;\r\n timezone?: string;\r\n}\r\n\r\nexport interface RecurringWeeklySchedule {\r\n type: \"weekly\";\r\n dayOfWeek:\r\n | \"sunday\"\r\n | \"monday\"\r\n | \"tuesday\"\r\n | \"wednesday\"\r\n | \"thursday\"\r\n | \"friday\"\r\n | \"saturday\";\r\n hour: number;\r\n minute: number;\r\n timezone?: string;\r\n}\r\n\r\nexport type RecurringSchedule =\r\n | RecurringIntervalSchedule\r\n | RecurringDailySchedule\r\n | RecurringWeeklySchedule;\r\n\r\nexport type MisfirePolicy =\r\n | { type: \"catch_up\" }\r\n | { type: \"skip\" }\r\n | { type: \"run_once_if_missed\" }\r\n | { type: \"windowed\"; windowMs: number };\r\n\r\nexport interface RecurringJobDefinition {\r\n name: string;\r\n schedule: RecurringSchedule;\r\n function: FunctionReference<\"mutation\" | \"action\">;\r\n args: Record<string, unknown>;\r\n misfirePolicy: MisfirePolicy;\r\n}\r\n\r\nexport class CronJobs {\r\n readonly jobs: RecurringJobDefinition[] = [];\r\n\r\n interval(\r\n name: string,\r\n schedule: Omit<RecurringIntervalSchedule, \"type\">,\r\n functionReference: FunctionReference<\"mutation\" | \"action\">,\r\n args: Record<string, unknown> = {},\r\n misfirePolicy: MisfirePolicy = { type: \"catch_up\" }\r\n ): this {\r\n this.jobs.push({\r\n name,\r\n schedule: { type: \"interval\", ...schedule },\r\n function: functionReference,\r\n args,\r\n misfirePolicy\r\n });\r\n return this;\r\n }\r\n\r\n daily(\r\n name: string,\r\n schedule: Omit<RecurringDailySchedule, \"type\">,\r\n functionReference: FunctionReference<\"mutation\" | \"action\">,\r\n args: Record<string, unknown> = {},\r\n misfirePolicy: MisfirePolicy = { type: \"catch_up\" }\r\n ): this {\r\n this.jobs.push({\r\n name,\r\n schedule: { type: \"daily\", ...schedule },\r\n function: functionReference,\r\n args,\r\n misfirePolicy\r\n });\r\n return this;\r\n }\r\n\r\n weekly(\r\n name: string,\r\n schedule: Omit<RecurringWeeklySchedule, \"type\">,\r\n functionReference: FunctionReference<\"mutation\" | \"action\">,\r\n args: Record<string, unknown> = {},\r\n misfirePolicy: MisfirePolicy = { type: \"catch_up\" }\r\n ): this {\r\n this.jobs.push({\r\n name,\r\n schedule: { type: \"weekly\", ...schedule },\r\n function: functionReference,\r\n args,\r\n misfirePolicy\r\n });\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * Create a recurring job registry for Syncore scheduler definitions.\r\n */\r\nexport function cronJobs(): CronJobs {\r\n return new CronJobs();\r\n}\r\n"],"mappings":";;AAkGA,SAAS,yBAMP,MACA,QAG4E;AAC5E,QAAO;EACL;EACA,eAAe,sBAAsB,OAAO,KAAK;EAGjD,GAAI,OAAO,UAAU,EAAE,kBAAkB,OAAO,SAAS,GAAG,EAAE;EAC9D,SAAS,OAAO;EACjB;;AA0BH,SAAgB,MAKd,QAQA;AACA,QAAO,yBAAyB,SAAS,OAAO;;AA+BlD,SAAgB,SAKd,QAQA;AACA,QAAO,yBAAyB,YAAY,OAAO;;AA+BrD,SAAgB,OAKd,QAQA;AACA,QAAO,yBAAyB,UAAU,OAAO;;AAmDnD,IAAa,WAAb,MAAsB;CACpB,OAA0C,EAAE;CAE5C,SACE,MACA,UACA,mBACA,OAAgC,EAAE,EAClC,gBAA+B,EAAE,MAAM,YAAY,EAC7C;AACN,OAAK,KAAK,KAAK;GACb;GACA,UAAU;IAAE,MAAM;IAAY,GAAG;IAAU;GAC3C,UAAU;GACV;GACA;GACD,CAAC;AACF,SAAO;;CAGT,MACE,MACA,UACA,mBACA,OAAgC,EAAE,EAClC,gBAA+B,EAAE,MAAM,YAAY,EAC7C;AACN,OAAK,KAAK,KAAK;GACb;GACA,UAAU;IAAE,MAAM;IAAS,GAAG;IAAU;GACxC,UAAU;GACV;GACA;GACD,CAAC;AACF,SAAO;;CAGT,OACE,MACA,UACA,mBACA,OAAgC,EAAE,EAClC,gBAA+B,EAAE,MAAM,YAAY,EAC7C;AACN,OAAK,KAAK,KAAK;GACb;GACA,UAAU;IAAE,MAAM;IAAU,GAAG;IAAU;GACzC,UAAU;GACV;GACA;GACD,CAAC;AACF,SAAO;;;;;;AAOX,SAAgB,WAAqB;AACnC,QAAO,IAAI,UAAU"}
|
|
1
|
+
{"version":3,"file":"functions.mjs","names":[],"sources":["../../src/runtime/functions.ts"],"sourcesContent":["import {\n ensureObjectValidator,\n type Infer,\n type Validator,\n type ValidatorMap\n} from \"@syncore/schema\";\n\nexport type SyncoreFunctionKind = \"query\" | \"mutation\" | \"action\";\nexport type EmptyArgs = Record<never, never>;\n\n/**\n * A typed reference to a Syncore function.\n *\n * Most app code gets these references from the generated `api` object.\n */\nexport interface FunctionReference<\n TKind extends SyncoreFunctionKind = SyncoreFunctionKind,\n TArgs = EmptyArgs,\n TResult = unknown\n> {\n kind: TKind;\n name: string;\n readonly __args?: TArgs;\n readonly __result?: TResult;\n}\n\nexport interface SyncoreFunctionDefinition<\n TKind extends SyncoreFunctionKind,\n TContext,\n TArgs,\n TResult\n> {\n kind: TKind;\n argsValidator: Validator<TArgs>;\n returnsValidator?: Validator<TResult>;\n handler: (ctx: TContext, args: TArgs) => Promise<TResult> | TResult;\n}\n\nexport type FunctionArgs<TReference> =\n TReference extends FunctionReference<\n SyncoreFunctionKind,\n infer TArgs,\n unknown\n >\n ? TArgs\n : never;\n\nexport type FunctionResult<TReference> =\n TReference extends FunctionReference<\n SyncoreFunctionKind,\n unknown,\n infer TResult\n >\n ? TResult\n : never;\n\nexport type FunctionKindFromDefinition<TDefinition> = TDefinition extends {\n kind: infer TKind;\n}\n ? Extract<TKind, SyncoreFunctionKind>\n : never;\n\nexport type FunctionArgsFromDefinition<TDefinition> = TDefinition extends {\n argsValidator: Validator<infer TArgs>;\n}\n ? TArgs\n : never;\n\nexport type FunctionResultFromDefinition<TDefinition> = TDefinition extends {\n returnsValidator?: Validator<infer TResult>;\n}\n ? TResult\n : never;\n\nexport type FunctionReferenceFor<TDefinition> =\n FunctionKindFromDefinition<TDefinition> extends never\n ? never\n : FunctionReference<\n FunctionKindFromDefinition<TDefinition>,\n FunctionArgsFromDefinition<TDefinition>,\n FunctionResultFromDefinition<TDefinition>\n >;\n\nexport interface FunctionConfig<TContext, TArgs, TResult> {\n args: Validator<TArgs> | ValidatorMap;\n returns?: Validator<TResult>;\n handler: (ctx: TContext, args: TArgs) => Promise<TResult> | TResult;\n}\n\nexport type InferArgs<TArgs extends Validator<unknown> | ValidatorMap> =\n TArgs extends Validator<unknown>\n ? Infer<TArgs>\n : TArgs extends ValidatorMap\n ? {\n [TKey in keyof TArgs]: Infer<TArgs[TKey]>;\n }\n : never;\n\nfunction createFunctionDefinition<\n TKind extends SyncoreFunctionKind,\n TContext,\n TArgsShape extends Validator<unknown> | ValidatorMap,\n TResult\n>(\n kind: TKind,\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\n args: TArgsShape;\n }\n): SyncoreFunctionDefinition<TKind, TContext, InferArgs<TArgsShape>, TResult> {\n return {\n kind,\n argsValidator: ensureObjectValidator(config.args) as Validator<\n InferArgs<TArgsShape>\n >,\n ...(config.returns ? { returnsValidator: config.returns } : {}),\n handler: config.handler\n };\n}\n\n/**\n * Define a Syncore query.\n *\n * Queries can read local Syncore state and are available to clients.\n */\nexport function query<\n TContext = unknown,\n TValidator extends Validator<unknown> = Validator<unknown>,\n TResult = unknown\n>(\n config: FunctionConfig<TContext, Infer<TValidator>, TResult> & {\n args: TValidator;\n }\n): SyncoreFunctionDefinition<\"query\", TContext, Infer<TValidator>, TResult>;\nexport function query<\n TContext = unknown,\n TArgsShape extends ValidatorMap = ValidatorMap,\n TResult = unknown\n>(\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\n args: TArgsShape;\n }\n): SyncoreFunctionDefinition<\"query\", TContext, InferArgs<TArgsShape>, TResult>;\nexport function query<\n TContext = unknown,\n TArgsShape extends Validator<unknown> | ValidatorMap = ValidatorMap,\n TResult = unknown\n>(\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\n args: TArgsShape;\n }\n): SyncoreFunctionDefinition<\n \"query\",\n TContext,\n InferArgs<TArgsShape>,\n TResult\n> {\n return createFunctionDefinition(\"query\", config);\n}\n\n/**\n * Define a Syncore mutation.\n *\n * Mutations can modify local Syncore state and are available to clients.\n */\nexport function mutation<\n TContext = unknown,\n TValidator extends Validator<unknown> = Validator<unknown>,\n TResult = unknown\n>(\n config: FunctionConfig<TContext, Infer<TValidator>, TResult> & {\n args: TValidator;\n }\n): SyncoreFunctionDefinition<\"mutation\", TContext, Infer<TValidator>, TResult>;\nexport function mutation<\n TContext = unknown,\n TArgsShape extends ValidatorMap = ValidatorMap,\n TResult = unknown\n>(\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\n args: TArgsShape;\n }\n): SyncoreFunctionDefinition<\n \"mutation\",\n TContext,\n InferArgs<TArgsShape>,\n TResult\n>;\nexport function mutation<\n TContext = unknown,\n TArgsShape extends Validator<unknown> | ValidatorMap = ValidatorMap,\n TResult = unknown\n>(\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\n args: TArgsShape;\n }\n): SyncoreFunctionDefinition<\n \"mutation\",\n TContext,\n InferArgs<TArgsShape>,\n TResult\n> {\n return createFunctionDefinition(\"mutation\", config);\n}\n\n/**\n * Define a Syncore action.\n *\n * Actions can run arbitrary JavaScript and may call other Syncore functions.\n */\nexport function action<\n TContext = unknown,\n TValidator extends Validator<unknown> = Validator<unknown>,\n TResult = unknown\n>(\n config: FunctionConfig<TContext, Infer<TValidator>, TResult> & {\n args: TValidator;\n }\n): SyncoreFunctionDefinition<\"action\", TContext, Infer<TValidator>, TResult>;\nexport function action<\n TContext = unknown,\n TArgsShape extends ValidatorMap = ValidatorMap,\n TResult = unknown\n>(\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\n args: TArgsShape;\n }\n): SyncoreFunctionDefinition<\n \"action\",\n TContext,\n InferArgs<TArgsShape>,\n TResult\n>;\nexport function action<\n TContext = unknown,\n TArgsShape extends Validator<unknown> | ValidatorMap = ValidatorMap,\n TResult = unknown\n>(\n config: FunctionConfig<TContext, InferArgs<TArgsShape>, TResult> & {\n args: TArgsShape;\n }\n): SyncoreFunctionDefinition<\n \"action\",\n TContext,\n InferArgs<TArgsShape>,\n TResult\n> {\n return createFunctionDefinition(\"action\", config);\n}\n\nexport interface RecurringIntervalSchedule {\n type: \"interval\";\n seconds?: number;\n minutes?: number;\n hours?: number;\n}\n\nexport interface RecurringDailySchedule {\n type: \"daily\";\n hour: number;\n minute: number;\n timezone?: string;\n}\n\nexport interface RecurringWeeklySchedule {\n type: \"weekly\";\n dayOfWeek:\n | \"sunday\"\n | \"monday\"\n | \"tuesday\"\n | \"wednesday\"\n | \"thursday\"\n | \"friday\"\n | \"saturday\";\n hour: number;\n minute: number;\n timezone?: string;\n}\n\nexport type RecurringSchedule =\n | RecurringIntervalSchedule\n | RecurringDailySchedule\n | RecurringWeeklySchedule;\n\nexport type MisfirePolicy =\n | { type: \"catch_up\" }\n | { type: \"skip\" }\n | { type: \"run_once_if_missed\" }\n | { type: \"windowed\"; windowMs: number };\n\nexport interface RecurringJobDefinition {\n name: string;\n schedule: RecurringSchedule;\n function: FunctionReference<\"mutation\" | \"action\">;\n args: Record<string, unknown>;\n misfirePolicy: MisfirePolicy;\n}\n\nexport class CronJobs {\n readonly jobs: RecurringJobDefinition[] = [];\n\n interval(\n name: string,\n schedule: Omit<RecurringIntervalSchedule, \"type\">,\n functionReference: FunctionReference<\"mutation\" | \"action\">,\n args: Record<string, unknown> = {},\n misfirePolicy: MisfirePolicy = { type: \"catch_up\" }\n ): this {\n this.jobs.push({\n name,\n schedule: { type: \"interval\", ...schedule },\n function: functionReference,\n args,\n misfirePolicy\n });\n return this;\n }\n\n daily(\n name: string,\n schedule: Omit<RecurringDailySchedule, \"type\">,\n functionReference: FunctionReference<\"mutation\" | \"action\">,\n args: Record<string, unknown> = {},\n misfirePolicy: MisfirePolicy = { type: \"catch_up\" }\n ): this {\n this.jobs.push({\n name,\n schedule: { type: \"daily\", ...schedule },\n function: functionReference,\n args,\n misfirePolicy\n });\n return this;\n }\n\n weekly(\n name: string,\n schedule: Omit<RecurringWeeklySchedule, \"type\">,\n functionReference: FunctionReference<\"mutation\" | \"action\">,\n args: Record<string, unknown> = {},\n misfirePolicy: MisfirePolicy = { type: \"catch_up\" }\n ): this {\n this.jobs.push({\n name,\n schedule: { type: \"weekly\", ...schedule },\n function: functionReference,\n args,\n misfirePolicy\n });\n return this;\n }\n}\n\n/**\n * Create a recurring job registry for Syncore scheduler definitions.\n */\nexport function cronJobs(): CronJobs {\n return new CronJobs();\n}\n"],"mappings":";;AAkGA,SAAS,yBAMP,MACA,QAG4E;AAC5E,QAAO;EACL;EACA,eAAe,sBAAsB,OAAO,KAAK;EAGjD,GAAI,OAAO,UAAU,EAAE,kBAAkB,OAAO,SAAS,GAAG,EAAE;EAC9D,SAAS,OAAO;EACjB;;AA0BH,SAAgB,MAKd,QAQA;AACA,QAAO,yBAAyB,SAAS,OAAO;;AA+BlD,SAAgB,SAKd,QAQA;AACA,QAAO,yBAAyB,YAAY,OAAO;;AA+BrD,SAAgB,OAKd,QAQA;AACA,QAAO,yBAAyB,UAAU,OAAO;;AAmDnD,IAAa,WAAb,MAAsB;CACpB,OAA0C,EAAE;CAE5C,SACE,MACA,UACA,mBACA,OAAgC,EAAE,EAClC,gBAA+B,EAAE,MAAM,YAAY,EAC7C;AACN,OAAK,KAAK,KAAK;GACb;GACA,UAAU;IAAE,MAAM;IAAY,GAAG;IAAU;GAC3C,UAAU;GACV;GACA;GACD,CAAC;AACF,SAAO;;CAGT,MACE,MACA,UACA,mBACA,OAAgC,EAAE,EAClC,gBAA+B,EAAE,MAAM,YAAY,EAC7C;AACN,OAAK,KAAK,KAAK;GACb;GACA,UAAU;IAAE,MAAM;IAAS,GAAG;IAAU;GACxC,UAAU;GACV;GACA;GACD,CAAC;AACF,SAAO;;CAGT,OACE,MACA,UACA,mBACA,OAAgC,EAAE,EAClC,gBAA+B,EAAE,MAAM,YAAY,EAC7C;AACN,OAAK,KAAK,KAAK;GACb;GACA,UAAU;IAAE,MAAM;IAAU,GAAG;IAAU;GACzC,UAAU;GACV;GACA;GACD,CAAC;AACF,SAAO;;;;;;AAOX,SAAgB,WAAqB;AACnC,QAAO,IAAI,UAAU"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { FunctionArgsFromDefinition, FunctionKindFromDefinition, FunctionReference, FunctionResultFromDefinition, MisfirePolicy, RecurringJobDefinition, SyncoreFunctionKind } from "./functions.mjs";
|
|
1
|
+
import { FunctionArgsFromDefinition, FunctionKindFromDefinition, FunctionReference, FunctionResultFromDefinition, MisfirePolicy, RecurringJobDefinition, RecurringSchedule, SyncoreFunctionKind } from "./functions.mjs";
|
|
2
2
|
import { InferDocument, InferTableInput, SyncoreSchema, Validator } from "../../schema/index.d.ts";
|
|
3
|
-
import { SyncoreDevtoolsEvent,
|
|
3
|
+
import { SyncoreActiveQueryInfo, SyncoreDevtoolsEvent, SyncoreDevtoolsEventOrigin, SyncoreRuntimeSummary } from "../../devtools-protocol/index.d.ts";
|
|
4
4
|
|
|
5
5
|
//#region src/runtime/runtime.d.ts
|
|
6
6
|
interface RegisteredSyncoreFunction {
|
|
@@ -37,6 +37,9 @@ type SearchQuery = {
|
|
|
37
37
|
searchText: string;
|
|
38
38
|
filters: QueryCondition[];
|
|
39
39
|
};
|
|
40
|
+
type DevtoolsEventMeta = {
|
|
41
|
+
origin?: SyncoreDevtoolsEventOrigin;
|
|
42
|
+
};
|
|
40
43
|
interface RunResult {
|
|
41
44
|
changes: number;
|
|
42
45
|
lastInsertRowid?: number | string;
|
|
@@ -50,6 +53,28 @@ interface SyncoreSqlDriver {
|
|
|
50
53
|
withSavepoint<T>(name: string, callback: () => Promise<T>): Promise<T>;
|
|
51
54
|
close?(): Promise<void>;
|
|
52
55
|
}
|
|
56
|
+
type SyncoreExternalChangeScope = "database" | "storage" | "all";
|
|
57
|
+
type SyncoreExternalChangeReason = "commit" | "storage-put" | "storage-delete" | "reconcile";
|
|
58
|
+
interface SyncoreExternalChangeEvent {
|
|
59
|
+
sourceId: string;
|
|
60
|
+
scope: SyncoreExternalChangeScope;
|
|
61
|
+
reason: SyncoreExternalChangeReason;
|
|
62
|
+
timestamp: number;
|
|
63
|
+
revision?: string;
|
|
64
|
+
changedTables?: string[];
|
|
65
|
+
storageIds?: string[];
|
|
66
|
+
}
|
|
67
|
+
interface SyncoreExternalChangeSignal {
|
|
68
|
+
subscribe(listener: (event: SyncoreExternalChangeEvent) => void): () => void;
|
|
69
|
+
publish(event: SyncoreExternalChangeEvent): void | Promise<void>;
|
|
70
|
+
close?(): void | Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
interface SyncoreExternalChangeApplier {
|
|
73
|
+
applyExternalChange(event: SyncoreExternalChangeEvent): Promise<{
|
|
74
|
+
databaseChanged: boolean;
|
|
75
|
+
storageChanged: boolean;
|
|
76
|
+
}>;
|
|
77
|
+
}
|
|
53
78
|
/**
|
|
54
79
|
* The binary or text payload written through Syncore storage APIs.
|
|
55
80
|
*/
|
|
@@ -76,11 +101,38 @@ interface SyncoreStorageAdapter {
|
|
|
76
101
|
}
|
|
77
102
|
interface DevtoolsSink {
|
|
78
103
|
emit(event: SyncoreDevtoolsEvent): void;
|
|
104
|
+
attachRuntime?(runtime: SyncoreRuntime<AnySyncoreSchema>): void;
|
|
79
105
|
}
|
|
106
|
+
interface DevtoolsLiveQuerySnapshot {
|
|
107
|
+
summary: SyncoreRuntimeSummary;
|
|
108
|
+
activeQueries: SyncoreActiveQueryInfo[];
|
|
109
|
+
schemaTables: Array<{
|
|
110
|
+
name: string;
|
|
111
|
+
fields: Array<{
|
|
112
|
+
name: string;
|
|
113
|
+
type: string;
|
|
114
|
+
optional: boolean;
|
|
115
|
+
}>;
|
|
116
|
+
indexes: Array<{
|
|
117
|
+
name: string;
|
|
118
|
+
fields: string[];
|
|
119
|
+
unique: boolean;
|
|
120
|
+
}>;
|
|
121
|
+
documentCount: number;
|
|
122
|
+
}>;
|
|
123
|
+
}
|
|
124
|
+
type DevtoolsLiveQueryScope = "all" | "runtime.summary" | "runtime.activeQueries" | "schema.tables" | "scheduler.jobs" | `table:${string}`;
|
|
80
125
|
interface SchedulerOptions {
|
|
81
126
|
pollIntervalMs?: number;
|
|
82
127
|
recurringJobs?: RecurringJobDefinition[];
|
|
83
128
|
}
|
|
129
|
+
interface UpdateScheduledJobOptions {
|
|
130
|
+
id: string;
|
|
131
|
+
schedule: RecurringSchedule;
|
|
132
|
+
args: JsonObject;
|
|
133
|
+
misfirePolicy: MisfirePolicy;
|
|
134
|
+
runAt?: number;
|
|
135
|
+
}
|
|
84
136
|
interface SyncoreCapabilities {
|
|
85
137
|
[name: string]: unknown;
|
|
86
138
|
}
|
|
@@ -105,6 +157,8 @@ interface SyncoreRuntimeOptions<TSchema extends AnySyncoreSchema> {
|
|
|
105
157
|
functions: SyncoreFunctionRegistry;
|
|
106
158
|
driver: SyncoreSqlDriver;
|
|
107
159
|
storage: SyncoreStorageAdapter;
|
|
160
|
+
externalChangeSignal?: SyncoreExternalChangeSignal;
|
|
161
|
+
externalChangeApplier?: SyncoreExternalChangeApplier;
|
|
108
162
|
capabilities?: SyncoreCapabilities;
|
|
109
163
|
experimentalPlugins?: Array<SyncoreExperimentalPlugin<TSchema>>;
|
|
110
164
|
platform?: string;
|
|
@@ -299,15 +353,24 @@ declare class SyncoreRuntime<TSchema extends AnySyncoreSchema> {
|
|
|
299
353
|
private readonly activeQueries;
|
|
300
354
|
private readonly disabledSearchIndexes;
|
|
301
355
|
private readonly recentEvents;
|
|
356
|
+
private readonly devtoolsListeners;
|
|
357
|
+
private readonly devtoolsInvalidationListeners;
|
|
358
|
+
private readonly externalChangeSourceId;
|
|
359
|
+
private detachExternalChangeListener;
|
|
360
|
+
private pendingExternalChangePromise;
|
|
361
|
+
private queuedExternalChange;
|
|
302
362
|
private schedulerTimer;
|
|
303
363
|
private readonly recurringJobs;
|
|
304
364
|
private readonly schedulerPollIntervalMs;
|
|
365
|
+
private readonly driverDatabasePath;
|
|
366
|
+
private prepared;
|
|
305
367
|
private started;
|
|
306
368
|
constructor(options: SyncoreRuntimeOptions<TSchema>);
|
|
307
369
|
/**
|
|
308
370
|
* Start the local Syncore runtime.
|
|
309
371
|
*/
|
|
310
372
|
start(): Promise<void>;
|
|
373
|
+
prepareForDirectAccess(): Promise<void>;
|
|
311
374
|
/**
|
|
312
375
|
* Stop the local Syncore runtime and release any open resources.
|
|
313
376
|
*/
|
|
@@ -316,11 +379,23 @@ declare class SyncoreRuntime<TSchema extends AnySyncoreSchema> {
|
|
|
316
379
|
* Create a typed client for calling this runtime from the same process.
|
|
317
380
|
*/
|
|
318
381
|
createClient(): SyncoreClient;
|
|
319
|
-
|
|
382
|
+
getDevtoolsLiveQuerySnapshot(): Promise<DevtoolsLiveQuerySnapshot>;
|
|
383
|
+
getRuntimeSummary(): SyncoreRuntimeSummary;
|
|
384
|
+
getActiveQueryInfos(): SyncoreActiveQueryInfo[];
|
|
385
|
+
getDriverDatabasePath(): string | undefined;
|
|
386
|
+
cancelScheduledJob(id: string): Promise<boolean>;
|
|
387
|
+
updateScheduledJob(options: UpdateScheduledJobOptions): Promise<boolean>;
|
|
388
|
+
subscribeToDevtoolsEvents(listener: (event: SyncoreDevtoolsEvent) => void): () => void;
|
|
389
|
+
subscribeToDevtoolsInvalidations(listener: (scopes: Set<DevtoolsLiveQueryScope>) => void): () => void;
|
|
390
|
+
notifyDevtoolsScopes(scopes: Iterable<DevtoolsLiveQueryScope>): void;
|
|
391
|
+
runDevtoolsMutation<TResult>(callback: (ctx: {
|
|
392
|
+
db: SyncoreDatabaseWriter<TSchema>;
|
|
393
|
+
}) => Promise<TResult>, meta?: DevtoolsEventMeta): Promise<TResult>;
|
|
394
|
+
forceRefreshDevtools(reason: string, meta?: DevtoolsEventMeta): Promise<void>;
|
|
320
395
|
getRuntimeId(): string;
|
|
321
|
-
runQuery<TArgs, TResult>(reference: FunctionReference<"query", TArgs, TResult>, args?: JsonObject): Promise<TResult>;
|
|
322
|
-
runMutation<TArgs, TResult>(reference: FunctionReference<"mutation", TArgs, TResult>, args?: JsonObject): Promise<TResult>;
|
|
323
|
-
runAction<TArgs, TResult>(reference: FunctionReference<"action", TArgs, TResult>, args?: JsonObject): Promise<TResult>;
|
|
396
|
+
runQuery<TArgs, TResult>(reference: FunctionReference<"query", TArgs, TResult>, args?: JsonObject, meta?: DevtoolsEventMeta): Promise<TResult>;
|
|
397
|
+
runMutation<TArgs, TResult>(reference: FunctionReference<"mutation", TArgs, TResult>, args?: JsonObject, meta?: DevtoolsEventMeta): Promise<TResult>;
|
|
398
|
+
runAction<TArgs, TResult>(reference: FunctionReference<"action", TArgs, TResult>, args?: JsonObject, meta?: DevtoolsEventMeta): Promise<TResult>;
|
|
324
399
|
watchQuery<TArgs, TResult>(reference: FunctionReference<"query", TArgs, TResult>, args?: JsonObject): SyncoreWatch<TResult>;
|
|
325
400
|
private executeQueryBuilder;
|
|
326
401
|
private invokeFunction;
|
|
@@ -329,6 +404,7 @@ declare class SyncoreRuntime<TSchema extends AnySyncoreSchema> {
|
|
|
329
404
|
private createDatabaseWriter;
|
|
330
405
|
private createStorageApi;
|
|
331
406
|
private createSchedulerApi;
|
|
407
|
+
private notifySchedulerJobsChanged;
|
|
332
408
|
private ensureSystemTables;
|
|
333
409
|
private reconcileStorageState;
|
|
334
410
|
private applySchema;
|
|
@@ -338,6 +414,12 @@ declare class SyncoreRuntime<TSchema extends AnySyncoreSchema> {
|
|
|
338
414
|
private advanceOrFinalizeJob;
|
|
339
415
|
private refreshInvalidatedQueries;
|
|
340
416
|
private rerunActiveQuery;
|
|
417
|
+
private handleExternalChangeEvent;
|
|
418
|
+
private processExternalChangeResult;
|
|
419
|
+
private publishExternalChange;
|
|
420
|
+
private publishStorageChanges;
|
|
421
|
+
private refreshAllActiveQueries;
|
|
422
|
+
private getSchemaTablesForDevtools;
|
|
341
423
|
private collectQueryDependencies;
|
|
342
424
|
private resolveFunction;
|
|
343
425
|
private validateDocument;
|
|
@@ -366,5 +448,5 @@ declare function createFunctionReferenceFor<TDefinition extends {
|
|
|
366
448
|
returnsValidator?: Validator<unknown>;
|
|
367
449
|
}>(kind: FunctionKindFromDefinition<TDefinition>, name: string): FunctionReference<FunctionKindFromDefinition<TDefinition>, FunctionArgsFromDefinition<TDefinition>, FunctionResultFromDefinition<TDefinition>>;
|
|
368
450
|
//#endregion
|
|
369
|
-
export { ActionCtx, AnySyncoreSchema, ComparisonOperator, DevtoolsSink, DocumentForTable, FilterBuilder, IndexRangeBuilder, InsertValueForTable, JsonObject, MutationCtx, PaginationOptions, PaginationResult, QueryBuilder, QueryCondition, QueryCtx, QueryExpression, RegisteredSyncoreFunction, RegisteredSyncoreHandler, RunResult, SchedulerApi, SchedulerOptions, SearchIndexBuilder, SearchQuery, StorageObject, StorageWriteInput, SyncoreCapabilities, SyncoreClient, SyncoreDatabaseReader, SyncoreDatabaseWriter, SyncoreExperimentalPlugin, SyncoreExperimentalPluginContext, SyncoreFunctionRegistry, SyncoreRuntime, SyncoreRuntimeOptions, SyncoreSqlDriver, SyncoreStorageAdapter, SyncoreStorageApi, SyncoreWatch, TableNames, createFunctionReference, createFunctionReferenceFor };
|
|
451
|
+
export { ActionCtx, AnySyncoreSchema, ComparisonOperator, DevtoolsLiveQueryScope, DevtoolsLiveQuerySnapshot, DevtoolsSink, DocumentForTable, FilterBuilder, IndexRangeBuilder, InsertValueForTable, JsonObject, MutationCtx, PaginationOptions, PaginationResult, QueryBuilder, QueryCondition, QueryCtx, QueryExpression, RegisteredSyncoreFunction, RegisteredSyncoreHandler, RunResult, SchedulerApi, SchedulerOptions, SearchIndexBuilder, SearchQuery, StorageObject, StorageWriteInput, SyncoreCapabilities, SyncoreClient, SyncoreDatabaseReader, SyncoreDatabaseWriter, SyncoreExperimentalPlugin, SyncoreExperimentalPluginContext, SyncoreExternalChangeApplier, SyncoreExternalChangeEvent, SyncoreExternalChangeReason, SyncoreExternalChangeScope, SyncoreExternalChangeSignal, SyncoreFunctionRegistry, SyncoreRuntime, SyncoreRuntimeOptions, SyncoreSqlDriver, SyncoreStorageAdapter, SyncoreStorageApi, SyncoreWatch, TableNames, UpdateScheduledJobOptions, createFunctionReference, createFunctionReferenceFor };
|
|
370
452
|
//# sourceMappingURL=runtime.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.mts","names":[],"sources":["../../src/runtime/runtime.ts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.d.mts","names":[],"sources":["../../src/runtime/runtime.ts"],"mappings":"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"}
|