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.
Files changed (200) hide show
  1. package/dist/{core/src/cli.d.ts → _vendor/cli/app.d.mts} +4 -2
  2. package/dist/_vendor/cli/app.d.mts.map +1 -0
  3. package/dist/_vendor/cli/app.mjs +997 -0
  4. package/dist/_vendor/cli/app.mjs.map +1 -0
  5. package/dist/_vendor/cli/context.mjs +180 -0
  6. package/dist/_vendor/cli/context.mjs.map +1 -0
  7. package/dist/_vendor/cli/dev-session.mjs +49 -0
  8. package/dist/_vendor/cli/dev-session.mjs.map +1 -0
  9. package/dist/_vendor/cli/doctor.mjs +80 -0
  10. package/dist/_vendor/cli/doctor.mjs.map +1 -0
  11. package/dist/_vendor/cli/errors.mjs +22 -0
  12. package/dist/_vendor/cli/errors.mjs.map +1 -0
  13. package/dist/_vendor/cli/help.mjs +26 -0
  14. package/dist/_vendor/cli/help.mjs.map +1 -0
  15. package/dist/_vendor/cli/index.d.mts +2 -0
  16. package/dist/_vendor/cli/index.mjs +23 -0
  17. package/dist/_vendor/cli/index.mjs.map +1 -0
  18. package/dist/_vendor/cli/messages.mjs +32 -0
  19. package/dist/_vendor/cli/messages.mjs.map +1 -0
  20. package/dist/_vendor/cli/preflight.mjs +35 -0
  21. package/dist/_vendor/cli/preflight.mjs.map +1 -0
  22. package/dist/_vendor/cli/project.mjs +583 -0
  23. package/dist/_vendor/cli/project.mjs.map +1 -0
  24. package/dist/_vendor/cli/render.mjs +133 -0
  25. package/dist/_vendor/cli/render.mjs.map +1 -0
  26. package/dist/_vendor/cli/targets.mjs +87 -0
  27. package/dist/_vendor/cli/targets.mjs.map +1 -0
  28. package/dist/_vendor/core/cli.d.mts +59 -1
  29. package/dist/_vendor/core/cli.d.mts.map +1 -1
  30. package/dist/_vendor/core/cli.mjs +528 -75
  31. package/dist/_vendor/core/cli.mjs.map +1 -1
  32. package/dist/_vendor/core/index.d.mts +12 -4
  33. package/dist/_vendor/core/index.d.mts.map +1 -0
  34. package/dist/_vendor/core/index.mjs +4 -3
  35. package/dist/_vendor/core/index.mjs.map +1 -1
  36. package/dist/_vendor/core/runtime/devtools.d.mts +32 -6
  37. package/dist/_vendor/core/runtime/devtools.d.mts.map +1 -1
  38. package/dist/_vendor/core/runtime/devtools.mjs +397 -182
  39. package/dist/_vendor/core/runtime/devtools.mjs.map +1 -1
  40. package/dist/_vendor/core/runtime/functions.mjs.map +1 -1
  41. package/dist/_vendor/core/runtime/runtime.d.mts +89 -7
  42. package/dist/_vendor/core/runtime/runtime.d.mts.map +1 -1
  43. package/dist/_vendor/core/runtime/runtime.mjs +303 -32
  44. package/dist/_vendor/core/runtime/runtime.mjs.map +1 -1
  45. package/dist/_vendor/devtools-protocol/index.d.ts +189 -82
  46. package/dist/_vendor/devtools-protocol/index.d.ts.map +1 -1
  47. package/dist/_vendor/devtools-protocol/index.js +39 -0
  48. package/dist/_vendor/devtools-protocol/index.js.map +1 -0
  49. package/dist/_vendor/next/config.d.ts.map +1 -1
  50. package/dist/_vendor/next/config.js +2 -5
  51. package/dist/_vendor/next/config.js.map +1 -1
  52. package/dist/_vendor/platform-expo/index.d.ts +15 -5
  53. package/dist/_vendor/platform-expo/index.d.ts.map +1 -1
  54. package/dist/_vendor/platform-expo/index.js +33 -3
  55. package/dist/_vendor/platform-expo/index.js.map +1 -1
  56. package/dist/_vendor/platform-expo/react.js.map +1 -1
  57. package/dist/_vendor/platform-node/index.d.mts +10 -5
  58. package/dist/_vendor/platform-node/index.d.mts.map +1 -1
  59. package/dist/_vendor/platform-node/index.mjs +145 -35
  60. package/dist/_vendor/platform-node/index.mjs.map +1 -1
  61. package/dist/_vendor/platform-node/ipc-react.mjs.map +1 -1
  62. package/dist/_vendor/platform-web/external-change.d.ts +39 -0
  63. package/dist/_vendor/platform-web/external-change.d.ts.map +1 -0
  64. package/dist/_vendor/platform-web/external-change.js +61 -0
  65. package/dist/_vendor/platform-web/external-change.js.map +1 -0
  66. package/dist/_vendor/platform-web/index.d.ts +27 -5
  67. package/dist/_vendor/platform-web/index.d.ts.map +1 -1
  68. package/dist/_vendor/platform-web/index.js +310 -44
  69. package/dist/_vendor/platform-web/index.js.map +1 -1
  70. package/dist/_vendor/platform-web/indexeddb.js.map +1 -1
  71. package/dist/_vendor/platform-web/opfs.js.map +1 -1
  72. package/dist/_vendor/platform-web/persistence.js.map +1 -1
  73. package/dist/_vendor/platform-web/react.js.map +1 -1
  74. package/dist/_vendor/platform-web/sqljs.js +22 -2
  75. package/dist/_vendor/platform-web/sqljs.js.map +1 -1
  76. package/dist/_vendor/schema/definition.js.map +1 -1
  77. package/dist/_vendor/schema/planner.js.map +1 -1
  78. package/dist/_vendor/schema/validators.js.map +1 -1
  79. package/dist/browser-react.d.ts +1 -1
  80. package/dist/browser-react.js +1 -1
  81. package/dist/browser.d.ts +6 -7
  82. package/dist/browser.d.ts.map +1 -1
  83. package/dist/browser.js +4 -5
  84. package/dist/browser.js.map +1 -1
  85. package/dist/cli.d.ts +1 -1
  86. package/dist/cli.js +12 -3
  87. package/dist/cli.js.map +1 -1
  88. package/dist/expo-react.d.ts +1 -1
  89. package/dist/expo-react.js +1 -1
  90. package/dist/expo.d.ts +1 -2
  91. package/dist/expo.js +1 -2
  92. package/dist/index.d.ts +3 -7
  93. package/dist/index.js +3 -8
  94. package/dist/next-config.d.ts +1 -2
  95. package/dist/next-config.js +1 -2
  96. package/dist/next.d.ts +1 -3
  97. package/dist/next.js +1 -3
  98. package/dist/node-ipc-react.d.ts +1 -1
  99. package/dist/node-ipc-react.js +1 -1
  100. package/dist/node-ipc.d.ts +1 -2
  101. package/dist/node-ipc.js +1 -2
  102. package/dist/node.d.ts +1 -4
  103. package/dist/node.js +1 -3
  104. package/dist/react.d.ts +1 -2
  105. package/dist/react.js +1 -2
  106. package/dist/svelte.d.ts +1 -2
  107. package/dist/svelte.js +1 -2
  108. package/package.json +6 -3
  109. package/dist/core/src/cli.d.ts.map +0 -1
  110. package/dist/core/src/cli.js +0 -1196
  111. package/dist/core/src/cli.js.map +0 -1
  112. package/dist/core/src/index.js +0 -7
  113. package/dist/core/src/runtime/devtools.d.ts +0 -7
  114. package/dist/core/src/runtime/devtools.d.ts.map +0 -1
  115. package/dist/core/src/runtime/devtools.js +0 -300
  116. package/dist/core/src/runtime/devtools.js.map +0 -1
  117. package/dist/core/src/runtime/functions.d.ts +0 -123
  118. package/dist/core/src/runtime/functions.d.ts.map +0 -1
  119. package/dist/core/src/runtime/functions.js +0 -71
  120. package/dist/core/src/runtime/functions.js.map +0 -1
  121. package/dist/core/src/runtime/id.d.ts +0 -13
  122. package/dist/core/src/runtime/id.d.ts.map +0 -1
  123. package/dist/core/src/runtime/id.js +0 -28
  124. package/dist/core/src/runtime/id.js.map +0 -1
  125. package/dist/core/src/runtime/runtime.d.ts +0 -371
  126. package/dist/core/src/runtime/runtime.d.ts.map +0 -1
  127. package/dist/core/src/runtime/runtime.js +0 -1143
  128. package/dist/core/src/runtime/runtime.js.map +0 -1
  129. package/dist/devtools-protocol/src/index.d.ts +0 -201
  130. package/dist/devtools-protocol/src/index.d.ts.map +0 -1
  131. package/dist/next/src/config.d.ts +0 -17
  132. package/dist/next/src/config.d.ts.map +0 -1
  133. package/dist/next/src/config.js +0 -73
  134. package/dist/next/src/config.js.map +0 -1
  135. package/dist/next/src/index.d.ts +0 -80
  136. package/dist/next/src/index.d.ts.map +0 -1
  137. package/dist/next/src/index.js +0 -82
  138. package/dist/next/src/index.js.map +0 -1
  139. package/dist/platform-expo/src/index.d.ts +0 -96
  140. package/dist/platform-expo/src/index.d.ts.map +0 -1
  141. package/dist/platform-expo/src/index.js +0 -198
  142. package/dist/platform-expo/src/index.js.map +0 -1
  143. package/dist/platform-expo/src/react.d.ts +0 -26
  144. package/dist/platform-expo/src/react.d.ts.map +0 -1
  145. package/dist/platform-expo/src/react.js +0 -30
  146. package/dist/platform-expo/src/react.js.map +0 -1
  147. package/dist/platform-node/src/index.d.ts +0 -145
  148. package/dist/platform-node/src/index.d.ts.map +0 -1
  149. package/dist/platform-node/src/index.js +0 -407
  150. package/dist/platform-node/src/index.js.map +0 -1
  151. package/dist/platform-node/src/ipc-react.d.ts +0 -25
  152. package/dist/platform-node/src/ipc-react.d.ts.map +0 -1
  153. package/dist/platform-node/src/ipc-react.js +0 -21
  154. package/dist/platform-node/src/ipc-react.js.map +0 -1
  155. package/dist/platform-node/src/ipc.d.ts +0 -76
  156. package/dist/platform-node/src/ipc.d.ts.map +0 -1
  157. package/dist/platform-node/src/ipc.js +0 -344
  158. package/dist/platform-node/src/ipc.js.map +0 -1
  159. package/dist/platform-web/src/index.d.ts +0 -106
  160. package/dist/platform-web/src/index.d.ts.map +0 -1
  161. package/dist/platform-web/src/index.js +0 -311
  162. package/dist/platform-web/src/index.js.map +0 -1
  163. package/dist/platform-web/src/indexeddb.js +0 -125
  164. package/dist/platform-web/src/indexeddb.js.map +0 -1
  165. package/dist/platform-web/src/opfs.js +0 -146
  166. package/dist/platform-web/src/opfs.js.map +0 -1
  167. package/dist/platform-web/src/persistence.d.ts +0 -20
  168. package/dist/platform-web/src/persistence.d.ts.map +0 -1
  169. package/dist/platform-web/src/persistence.js +0 -23
  170. package/dist/platform-web/src/persistence.js.map +0 -1
  171. package/dist/platform-web/src/react.d.ts +0 -35
  172. package/dist/platform-web/src/react.d.ts.map +0 -1
  173. package/dist/platform-web/src/react.js +0 -42
  174. package/dist/platform-web/src/react.js.map +0 -1
  175. package/dist/platform-web/src/sqljs.js +0 -133
  176. package/dist/platform-web/src/sqljs.js.map +0 -1
  177. package/dist/platform-web/src/worker.d.ts +0 -79
  178. package/dist/platform-web/src/worker.d.ts.map +0 -1
  179. package/dist/platform-web/src/worker.js +0 -308
  180. package/dist/platform-web/src/worker.js.map +0 -1
  181. package/dist/react/src/index.d.ts +0 -59
  182. package/dist/react/src/index.d.ts.map +0 -1
  183. package/dist/react/src/index.js +0 -151
  184. package/dist/react/src/index.js.map +0 -1
  185. package/dist/schema/src/definition.d.ts +0 -98
  186. package/dist/schema/src/definition.d.ts.map +0 -1
  187. package/dist/schema/src/definition.js +0 -84
  188. package/dist/schema/src/definition.js.map +0 -1
  189. package/dist/schema/src/planner.d.ts +0 -42
  190. package/dist/schema/src/planner.d.ts.map +0 -1
  191. package/dist/schema/src/planner.js +0 -131
  192. package/dist/schema/src/planner.js.map +0 -1
  193. package/dist/schema/src/validators.d.ts +0 -194
  194. package/dist/schema/src/validators.d.ts.map +0 -1
  195. package/dist/schema/src/validators.js +0 -158
  196. package/dist/schema/src/validators.js.map +0 -1
  197. package/dist/svelte/src/index.d.ts +0 -44
  198. package/dist/svelte/src/index.d.ts.map +0 -1
  199. package/dist/svelte/src/index.js +0 -75
  200. 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, SyncoreDevtoolsSnapshot } from "../../devtools-protocol/index.d.ts";
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
- getDevtoolsSnapshot(): SyncoreDevtoolsSnapshot;
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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"}