@sixb/core 0.1.2 → 0.1.3

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 (264) hide show
  1. package/dist/actions/index.js +16 -13
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/agents/adapters.d.ts +11 -1
  4. package/dist/agents/adapters.d.ts.map +1 -1
  5. package/dist/agents/context.js +1 -1
  6. package/dist/agents/errors.d.ts +1 -1
  7. package/dist/agents/errors.d.ts.map +1 -1
  8. package/dist/agents/execution.d.ts +3 -0
  9. package/dist/agents/execution.d.ts.map +1 -1
  10. package/dist/agents/index.d.ts +6 -3
  11. package/dist/agents/index.d.ts.map +1 -1
  12. package/dist/agents/index.js +33 -22
  13. package/dist/agents/index.js.map +1 -1
  14. package/dist/agents/prompt.d.ts +8 -2
  15. package/dist/agents/prompt.d.ts.map +1 -1
  16. package/dist/agents/request.d.ts.map +1 -1
  17. package/dist/agents/streams.js +2 -2
  18. package/dist/agents/thread-context-projection.d.ts +19 -0
  19. package/dist/agents/thread-context-projection.d.ts.map +1 -0
  20. package/dist/agents/tool-definition.d.ts.map +1 -1
  21. package/dist/agents/tool-result.d.ts +6 -0
  22. package/dist/agents/tool-result.d.ts.map +1 -0
  23. package/dist/agents/types.d.ts +37 -1
  24. package/dist/agents/types.d.ts.map +1 -1
  25. package/dist/agents/validation.d.ts +1 -1
  26. package/dist/agents/validation.d.ts.map +1 -1
  27. package/dist/auth/index.js +7 -5
  28. package/dist/auth/index.js.map +1 -1
  29. package/dist/authorization/index.js +1 -1
  30. package/dist/bootstrap/index.js +27 -24
  31. package/dist/bootstrap/index.js.map +1 -1
  32. package/dist/{chunk-0mbx247x.js → chunk-177ed2mp.js} +241 -45
  33. package/dist/chunk-177ed2mp.js.map +46 -0
  34. package/dist/{chunk-sa4340y1.js → chunk-1ywq4hzk.js} +7 -7
  35. package/dist/{chunk-zg9yryhz.js → chunk-261ag4t4.js} +3 -3
  36. package/dist/{chunk-k9pts48t.js → chunk-3rsf30p4.js} +5 -5
  37. package/dist/{chunk-8ryen3p3.js → chunk-4aw0jwk0.js} +1 -1
  38. package/dist/{chunk-bh6k3nc6.js → chunk-4p9rh7jj.js} +1 -1
  39. package/dist/{chunk-34bqh420.js → chunk-4z3n1dzt.js} +59 -21
  40. package/dist/{chunk-34bqh420.js.map → chunk-4z3n1dzt.js.map} +4 -4
  41. package/dist/chunk-96swp2wd.js +47 -0
  42. package/dist/chunk-96swp2wd.js.map +10 -0
  43. package/dist/{chunk-n8herkry.js → chunk-bv41fmjn.js} +11 -11
  44. package/dist/{chunk-7pc8b818.js → chunk-c6cfqydk.js} +1 -1
  45. package/dist/{chunk-0k4avqr2.js → chunk-c8bw2b6c.js} +2 -2
  46. package/dist/{chunk-jaj13078.js → chunk-d2adj15j.js} +3 -33
  47. package/dist/{chunk-jaj13078.js.map → chunk-d2adj15j.js.map} +3 -4
  48. package/dist/{chunk-c6qd89g5.js → chunk-d6y2wsfg.js} +3 -3
  49. package/dist/chunk-dysw7nsm.js.map +1 -1
  50. package/dist/{chunk-st4xgxey.js → chunk-ettb0cy4.js} +150 -23
  51. package/dist/chunk-ettb0cy4.js.map +45 -0
  52. package/dist/{chunk-nnyp53zt.js → chunk-f1cyvnrk.js} +1 -1
  53. package/dist/chunk-fmx1sz2h.js.map +2 -2
  54. package/dist/{chunk-bct7hmfc.js → chunk-km4rkj4t.js} +3 -3
  55. package/dist/chunk-kqxgf6kv.js +898 -0
  56. package/dist/chunk-kqxgf6kv.js.map +15 -0
  57. package/dist/{chunk-qvybnnpe.js → chunk-n5x5y80a.js} +2 -2
  58. package/dist/{chunk-4x43bkbp.js → chunk-pxtrxm3p.js} +1 -1
  59. package/dist/chunk-qer6am8w.js +133 -0
  60. package/dist/chunk-qer6am8w.js.map +11 -0
  61. package/dist/{chunk-85j5ybfj.js → chunk-rdeagz6b.js} +2 -2
  62. package/dist/{chunk-85j5ybfj.js.map → chunk-rdeagz6b.js.map} +3 -3
  63. package/dist/chunk-rhrbz7d4.js +36 -0
  64. package/dist/chunk-rhrbz7d4.js.map +10 -0
  65. package/dist/{chunk-663csy96.js → chunk-t0jjkep3.js} +2 -1
  66. package/dist/chunk-t0jjkep3.js.map +10 -0
  67. package/dist/{chunk-5egfka8j.js → chunk-ttba8x6z.js} +2 -2
  68. package/dist/{chunk-nten49ta.js → chunk-wb4051cx.js} +3 -3
  69. package/dist/{chunk-nten49ta.js.map → chunk-wb4051cx.js.map} +1 -1
  70. package/dist/{chunk-57r1cpxx.js → chunk-xc7hq65b.js} +3 -2
  71. package/dist/{chunk-57r1cpxx.js.map → chunk-xc7hq65b.js.map} +3 -3
  72. package/dist/{chunk-ys1nse2v.js → chunk-xmggaxg4.js} +256 -231
  73. package/dist/{chunk-ys1nse2v.js.map → chunk-xmggaxg4.js.map} +8 -10
  74. package/dist/{chunk-g9t3kdtx.js → chunk-z8j83gzd.js} +1 -1
  75. package/dist/{chunk-57zpb99z.js → chunk-zpw39qhj.js} +1 -1
  76. package/dist/execution/agent.js +23 -20
  77. package/dist/execution/agent.js.map +1 -1
  78. package/dist/execution/primitive.js +23 -20
  79. package/dist/execution/primitive.js.map +2 -2
  80. package/dist/execution/request.js +24 -21
  81. package/dist/execution/request.js.map +2 -2
  82. package/dist/index.d.ts +3 -3
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +32 -29
  85. package/dist/index.js.map +1 -1
  86. package/dist/materialization/model.d.ts +4 -0
  87. package/dist/materialization/model.d.ts.map +1 -1
  88. package/dist/materializer/edits/apply.d.ts +6 -1
  89. package/dist/materializer/edits/apply.d.ts.map +1 -1
  90. package/dist/materializer/edits/working-state.d.ts +2 -0
  91. package/dist/materializer/edits/working-state.d.ts.map +1 -1
  92. package/dist/materializer/effective/resolve.d.ts +3 -1
  93. package/dist/materializer/effective/resolve.d.ts.map +1 -1
  94. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  95. package/dist/materializer/index.js +14 -11
  96. package/dist/materializer/index.js.map +1 -1
  97. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  98. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  99. package/dist/objects/index.js +17 -14
  100. package/dist/objects/index.js.map +1 -1
  101. package/dist/objects/query/index.js +2 -2
  102. package/dist/pipelines/index.js +14 -12
  103. package/dist/pipelines/index.js.map +1 -1
  104. package/dist/projections/builders.d.ts +19 -6
  105. package/dist/projections/builders.d.ts.map +1 -1
  106. package/dist/projections/index.d.ts +2 -1
  107. package/dist/projections/index.d.ts.map +1 -1
  108. package/dist/projections/internal.d.ts +4 -1
  109. package/dist/projections/internal.d.ts.map +1 -1
  110. package/dist/projections/internal.js +17 -11
  111. package/dist/projections/internal.js.map +1 -1
  112. package/dist/projections/timestamp.d.ts +3 -0
  113. package/dist/projections/timestamp.d.ts.map +1 -0
  114. package/dist/projections/types.d.ts +9 -0
  115. package/dist/projections/types.d.ts.map +1 -1
  116. package/dist/projections/validation.d.ts.map +1 -1
  117. package/dist/queues/index.d.ts +1 -1
  118. package/dist/queues/index.d.ts.map +1 -1
  119. package/dist/queues/types.d.ts +7 -0
  120. package/dist/queues/types.d.ts.map +1 -1
  121. package/dist/runtime/ai-cost.d.ts +8 -0
  122. package/dist/runtime/ai-cost.d.ts.map +1 -0
  123. package/dist/storage/agents/in-memory.d.ts +18 -4
  124. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  125. package/dist/storage/agents/index.d.ts +1 -1
  126. package/dist/storage/agents/index.d.ts.map +1 -1
  127. package/dist/storage/agents/provider.d.ts +31 -0
  128. package/dist/storage/agents/provider.d.ts.map +1 -1
  129. package/dist/storage/agents/provider.js +18 -7
  130. package/dist/storage/agents/provider.js.map +1 -1
  131. package/dist/storage/agents/types.d.ts +70 -4
  132. package/dist/storage/agents/types.d.ts.map +1 -1
  133. package/dist/storage/ai-cost/analytics.d.ts +61 -0
  134. package/dist/storage/ai-cost/analytics.d.ts.map +1 -0
  135. package/dist/storage/ai-cost/codec.d.ts +14 -0
  136. package/dist/storage/ai-cost/codec.d.ts.map +1 -0
  137. package/dist/storage/ai-cost/errors.d.ts +7 -0
  138. package/dist/storage/ai-cost/errors.d.ts.map +1 -0
  139. package/dist/storage/ai-cost/in-memory.d.ts +32 -0
  140. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -0
  141. package/dist/storage/ai-cost/index.d.ts +6 -0
  142. package/dist/storage/ai-cost/index.d.ts.map +1 -0
  143. package/dist/storage/ai-cost/provider.d.ts +7 -0
  144. package/dist/storage/ai-cost/provider.d.ts.map +1 -0
  145. package/dist/storage/ai-cost/provider.js +132 -0
  146. package/dist/storage/ai-cost/provider.js.map +10 -0
  147. package/dist/storage/ai-cost/types.d.ts +154 -0
  148. package/dist/storage/ai-cost/types.d.ts.map +1 -0
  149. package/dist/storage/ai-cost/validation.d.ts +7 -0
  150. package/dist/storage/ai-cost/validation.d.ts.map +1 -0
  151. package/dist/storage/in-memory/index.d.ts +5 -0
  152. package/dist/storage/in-memory/index.d.ts.map +1 -1
  153. package/dist/storage/index.d.ts +3 -1
  154. package/dist/storage/index.d.ts.map +1 -1
  155. package/dist/storage/index.js +22 -15
  156. package/dist/storage/index.js.map +1 -1
  157. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  158. package/dist/storage/ontology/materializations.d.ts +3 -0
  159. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  160. package/dist/storage/operation-scope.d.ts.map +1 -1
  161. package/dist/storage/operation-scope.js +1 -1
  162. package/dist/storage/types.d.ts +2 -0
  163. package/dist/storage/types.d.ts.map +1 -1
  164. package/dist/storage/workflow-runs/provider.js +6 -5
  165. package/dist/storage/workflow-runs/provider.js.map +1 -1
  166. package/dist/syncs/index.js +14 -12
  167. package/dist/syncs/index.js.map +1 -1
  168. package/dist/testing/agent-storage-contract.d.ts +3 -2
  169. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  170. package/dist/testing/ai-cost-storage-contract.d.ts +12 -0
  171. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -0
  172. package/dist/testing/index.d.ts +1 -0
  173. package/dist/testing/index.d.ts.map +1 -1
  174. package/dist/testing/index.js +2098 -1468
  175. package/dist/testing/index.js.map +6 -5
  176. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  177. package/dist/webhooks/internal.js +12 -10
  178. package/dist/webhooks/internal.js.map +2 -2
  179. package/dist/workers/index.js +12 -2
  180. package/dist/workers/index.js.map +3 -3
  181. package/dist/workers/queue-worker.d.ts +2 -0
  182. package/dist/workers/queue-worker.d.ts.map +1 -1
  183. package/dist/workflows/execution.d.ts +3 -0
  184. package/dist/workflows/execution.d.ts.map +1 -1
  185. package/dist/workflows/index.js +24 -21
  186. package/dist/workflows/index.js.map +1 -1
  187. package/package.json +7 -1
  188. package/src/agents/adapters.ts +64 -23
  189. package/src/agents/errors.ts +2 -2
  190. package/src/agents/execution.ts +14 -2
  191. package/src/agents/index.ts +18 -1
  192. package/src/agents/prompt.ts +33 -5
  193. package/src/agents/request.ts +5 -0
  194. package/src/agents/thread-context-projection.ts +93 -0
  195. package/src/agents/tool-definition.ts +17 -2
  196. package/src/agents/tool-result.ts +61 -0
  197. package/src/agents/types.ts +47 -1
  198. package/src/agents/validation.ts +1 -1
  199. package/src/index.ts +13 -0
  200. package/src/materialization/model.ts +4 -0
  201. package/src/materializer/edits/apply.ts +55 -2
  202. package/src/materializer/edits/operations.ts +8 -1
  203. package/src/materializer/edits/working-state.ts +7 -0
  204. package/src/materializer/effective/resolve.ts +78 -9
  205. package/src/materializer/execution/work-records.ts +3 -1
  206. package/src/materializer/projections/entry-validator.ts +23 -1
  207. package/src/materializer/projections/replacement-plan.ts +2 -0
  208. package/src/materializer/shared/normalize.ts +16 -0
  209. package/src/projections/builders.ts +100 -35
  210. package/src/projections/index.ts +6 -0
  211. package/src/projections/internal.ts +4 -1
  212. package/src/projections/registry.ts +7 -0
  213. package/src/projections/revision.ts +4 -0
  214. package/src/projections/timestamp.ts +66 -0
  215. package/src/projections/types.ts +7 -0
  216. package/src/projections/validation.ts +24 -0
  217. package/src/queues/index.ts +1 -0
  218. package/src/queues/types.ts +8 -0
  219. package/src/runtime/ai-cost.ts +15 -0
  220. package/src/storage/agents/in-memory.ts +171 -4
  221. package/src/storage/agents/index.ts +5 -0
  222. package/src/storage/agents/provider.ts +225 -0
  223. package/src/storage/agents/types.ts +77 -3
  224. package/src/storage/ai-cost/analytics.ts +602 -0
  225. package/src/storage/ai-cost/codec.ts +136 -0
  226. package/src/storage/ai-cost/errors.ts +12 -0
  227. package/src/storage/ai-cost/in-memory.ts +164 -0
  228. package/src/storage/ai-cost/index.ts +35 -0
  229. package/src/storage/ai-cost/provider.ts +20 -0
  230. package/src/storage/ai-cost/types.ts +193 -0
  231. package/src/storage/ai-cost/validation.ts +337 -0
  232. package/src/storage/in-memory/index.ts +50 -0
  233. package/src/storage/index.ts +37 -0
  234. package/src/storage/ontology/in-memory/materializations.ts +1 -0
  235. package/src/storage/ontology/materializations.ts +3 -0
  236. package/src/storage/operation-scope.ts +1 -0
  237. package/src/storage/types.ts +2 -0
  238. package/src/testing/agent-storage-contract.ts +341 -2
  239. package/src/testing/ai-cost-storage-contract.ts +320 -0
  240. package/src/testing/index.ts +5 -0
  241. package/src/testing/materializer-storage-contract.ts +120 -2
  242. package/src/workers/queue-worker.ts +14 -1
  243. package/src/workflows/execution.ts +31 -10
  244. package/dist/chunk-0mbx247x.js.map +0 -43
  245. package/dist/chunk-663csy96.js.map +0 -10
  246. package/dist/chunk-st4xgxey.js.map +0 -45
  247. package/dist/chunk-vp1vc6ee.js +0 -35
  248. package/dist/chunk-vp1vc6ee.js.map +0 -11
  249. /package/dist/{chunk-sa4340y1.js.map → chunk-1ywq4hzk.js.map} +0 -0
  250. /package/dist/{chunk-zg9yryhz.js.map → chunk-261ag4t4.js.map} +0 -0
  251. /package/dist/{chunk-k9pts48t.js.map → chunk-3rsf30p4.js.map} +0 -0
  252. /package/dist/{chunk-8ryen3p3.js.map → chunk-4aw0jwk0.js.map} +0 -0
  253. /package/dist/{chunk-bh6k3nc6.js.map → chunk-4p9rh7jj.js.map} +0 -0
  254. /package/dist/{chunk-n8herkry.js.map → chunk-bv41fmjn.js.map} +0 -0
  255. /package/dist/{chunk-7pc8b818.js.map → chunk-c6cfqydk.js.map} +0 -0
  256. /package/dist/{chunk-0k4avqr2.js.map → chunk-c8bw2b6c.js.map} +0 -0
  257. /package/dist/{chunk-c6qd89g5.js.map → chunk-d6y2wsfg.js.map} +0 -0
  258. /package/dist/{chunk-nnyp53zt.js.map → chunk-f1cyvnrk.js.map} +0 -0
  259. /package/dist/{chunk-bct7hmfc.js.map → chunk-km4rkj4t.js.map} +0 -0
  260. /package/dist/{chunk-qvybnnpe.js.map → chunk-n5x5y80a.js.map} +0 -0
  261. /package/dist/{chunk-4x43bkbp.js.map → chunk-pxtrxm3p.js.map} +0 -0
  262. /package/dist/{chunk-5egfka8j.js.map → chunk-ttba8x6z.js.map} +0 -0
  263. /package/dist/{chunk-g9t3kdtx.js.map → chunk-z8j83gzd.js.map} +0 -0
  264. /package/dist/{chunk-57zpb99z.js.map → chunk-zpw39qhj.js.map} +0 -0
@@ -12,12 +12,12 @@
12
12
  "import type { Principal } from \"../auth/types\"\nimport type { RoleDefinition, Selection } from \"../security\"\nimport {\n emptyGrantSets,\n GRANT_KIND_KEYS,\n GRANT_KINDS,\n type GrantUniverse,\n grantKindOf,\n} from \"./grant-kinds\"\nimport type { AuthorizationContext, GrantIndex, ResolvedRole } from \"./types\"\n\n/**\n * Expand a role's grants into concrete id sets once at startup.\n *\n * Broad grants (`every.object().except([...])`) expand against the registered\n * universe; object-type grants also expand to subtypes. The result holds only\n * `Set`s, so per-request resolution and runtime checks stay simple `set.has`.\n * The per-kind universe and subtype rules come from the `GRANT_KINDS` table, so\n * this loop never enumerates targets by hand.\n */\nexport function resolveRoleGrants(role: RoleDefinition, universe: GrantUniverse): GrantIndex {\n const grants = emptyGrantSets()\n\n for (const grant of role.grants) {\n const kind = grantKindOf(grant)\n const spec = GRANT_KINDS[kind]\n expandSelection(\n grant.selection,\n universe[spec.universeKey],\n grants[kind],\n spec.expandsSubtypes ? universe.getSubTypes : undefined\n )\n }\n\n return grants\n}\n\nfunction expandSelection(\n selection: Selection,\n universe: ReadonlySet<string>,\n into: Set<string>,\n expand?: (id: string) => readonly string[]\n): void {\n if (selection.all) {\n const except = new Set(selection.except)\n for (const id of universe) {\n if (!except.has(id)) {\n into.add(id)\n }\n }\n return\n }\n\n for (const id of selection.ids) {\n into.add(id)\n if (expand) {\n for (const subTypeId of expand(id)) {\n into.add(subTypeId)\n }\n }\n }\n}\n\n/**\n * Resolve a principal's authorization context from its group memberships.\n *\n * Pure set-union over pre-resolved roles: roles match when their grantedTo\n * groups intersect the principal's memberships, and their concrete id sets\n * union into the principal's grant index.\n */\nexport function resolveAuthorizationContext(input: {\n readonly principal: Principal\n readonly sessionId?: string\n readonly groupIds: readonly string[]\n readonly roles: readonly ResolvedRole[]\n}): AuthorizationContext {\n const memberGroupIds = new Set(input.groupIds)\n const roleIds: string[] = []\n const grants = emptyGrantSets()\n\n for (const role of input.roles) {\n if (!role.grantedToGroupIds.some((groupId) => memberGroupIds.has(groupId))) {\n continue\n }\n\n roleIds.push(role.id)\n for (const kind of GRANT_KIND_KEYS) {\n for (const id of role.grants[kind]) {\n grants[kind].add(id)\n }\n }\n }\n\n return {\n principal: input.principal,\n ...(input.sessionId !== undefined ? { sessionId: input.sessionId } : {}),\n groupIds: input.groupIds,\n roleIds,\n grants,\n }\n}\n",
13
13
  "export class ProjectionValidationError extends Error {\n readonly name = \"ProjectionValidationError\"\n}\n",
14
14
  "import { compareStrings } from \"../json\"\nimport type { OntologyDefinitionCatalog } from \"../ontology\"\nimport { ProjectionValidationError } from \"./errors\"\nimport type { ProjectionDefinition, ProjectionOwnership } from \"./types\"\n\nexport function computeProjectionOwnership(\n projection: ProjectionDefinition,\n ontology: OntologyDefinitionCatalog\n): ProjectionOwnership {\n if (projection._tag === \"ObjectProjectionDefinition\") {\n const primaryId = ontology.getPrimaryPropertyId(projection.objectTypeId)\n return freezeOwnership({\n objects: [\n {\n objectTypeId: projection.objectTypeId,\n existence: true,\n propertyIds: Object.keys(projection.properties)\n .filter((propertyId) => propertyId !== primaryId)\n .sort(compareStrings),\n },\n ],\n links: Object.keys(projection.links)\n .sort(compareStrings)\n .map((linkId) => ({ sourceObjectTypeId: projection.objectTypeId, linkId })),\n telemetry: [],\n })\n }\n\n if (projection._tag === \"LinkProjectionDefinition\") {\n return freezeOwnership({\n objects: [],\n links: [\n {\n sourceObjectTypeId: projection.sourceObjectTypeId,\n linkId: projection.linkId,\n },\n ],\n telemetry: [],\n })\n }\n\n return freezeOwnership({\n objects: [],\n links: [],\n telemetry: [\n {\n objectTypeId: projection.objectTypeId,\n propertyId: projection.propertyId,\n },\n ],\n })\n}\n\nexport interface ProjectionOwnershipRecord<\n TDefinition extends ProjectionDefinition = ProjectionDefinition,\n> {\n readonly definition: TDefinition\n readonly ownership: ProjectionOwnership\n}\n\nexport function validateProjectionOwnership(\n projections: readonly ProjectionOwnershipRecord[]\n): void {\n const existenceOwners = new Map<string, string>()\n const propertyOwners = new Map<string, string>()\n const linkOwners = new Map<string, string>()\n const telemetryOwners = new Map<string, string>()\n\n for (const { definition, ownership } of projections) {\n for (const object of ownership.objects) {\n if (object.existence) {\n registerOwner(\n existenceOwners,\n object.objectTypeId,\n definition.id,\n `object type '${object.objectTypeId}' existence`\n )\n }\n for (const propertyId of object.propertyIds) {\n registerOwner(\n propertyOwners,\n JSON.stringify([object.objectTypeId, propertyId]),\n definition.id,\n `property '${object.objectTypeId}.${propertyId}'`\n )\n }\n }\n for (const link of ownership.links) {\n registerOwner(\n linkOwners,\n JSON.stringify([link.sourceObjectTypeId, link.linkId]),\n definition.id,\n `link scope '${link.sourceObjectTypeId}.${link.linkId}'`\n )\n }\n for (const telemetry of ownership.telemetry) {\n registerOwner(\n telemetryOwners,\n JSON.stringify([telemetry.objectTypeId, telemetry.propertyId]),\n definition.id,\n `telemetry source '${telemetry.objectTypeId}.${telemetry.propertyId}'`\n )\n }\n }\n}\n\nfunction registerOwner(\n owners: Map<string, string>,\n key: string,\n projectionId: string,\n description: string\n): void {\n const existing = owners.get(key)\n if (existing !== undefined) {\n throw new ProjectionValidationError(\n `[Sixb] Projection '${projectionId}' overlaps ${description} owned by projection '${existing}'.`\n )\n }\n owners.set(key, projectionId)\n}\n\nfunction freezeOwnership(ownership: ProjectionOwnership): ProjectionOwnership {\n return Object.freeze({\n objects: Object.freeze(\n ownership.objects.map((object) =>\n Object.freeze({ ...object, propertyIds: Object.freeze([...object.propertyIds]) })\n )\n ),\n links: Object.freeze(ownership.links.map((link) => Object.freeze({ ...link }))),\n telemetry: Object.freeze(\n ownership.telemetry.map((telemetry) => Object.freeze({ ...telemetry }))\n ),\n })\n}\n",
15
- "/**\n * Build-time validation helpers for projection definitions.\n *\n * These run eagerly inside builder calls (not deferred to `.build()`).\n * They are also reusable by Increment 7 for startup validation.\n */\n\nimport type { DatasetDefinition } from \"../datasets\"\nimport type { OntologyDefinitionCatalog } from \"../ontology\"\nimport type { ObjectType, Property } from \"../ontology/types\"\nimport { ProjectionValidationError } from \"./errors\"\nimport {\n computeProjectionOwnership,\n type ProjectionOwnershipRecord,\n validateProjectionOwnership,\n} from \"./ownership\"\nimport type {\n ForeignKeyDescriptor,\n LinkProjectionDefinition,\n ObjectProjectionDefinition,\n ProjectionDefinition,\n TelemetryProjectionDefinition,\n} from \"./types\"\n\n/**\n * Validates the property mapping for an object projection.\n *\n * Rules:\n * 1. All keys must be valid property ids on the object type.\n * 2. The object type must have exactly one primary property.\n * 3. The primary property must be included in the mapping.\n */\nexport function validatePropertyMapping(\n objectType: ObjectType,\n mapping: Record<string, string>\n): void {\n const propertyIds = new Set(objectType.properties.map((p) => p.id))\n const mappingKeys = Object.keys(mapping)\n\n // Rule 1: all keys are valid property ids\n for (const key of mappingKeys) {\n if (!propertyIds.has(key)) {\n const available = [...propertyIds].sort().join(\", \")\n throw new ProjectionValidationError(\n `Property '${key}' does not exist on object type '${objectType.id}'. ` +\n `Available properties: ${available}`\n )\n }\n }\n\n // Rule 2: exactly one primary property\n const primaryProperties = objectType.properties.filter((p) => p.primary === true)\n if (primaryProperties.length !== 1) {\n throw new ProjectionValidationError(\n `Object type '${objectType.id}' must have exactly one primary property, ` +\n `found ${primaryProperties.length}.`\n )\n }\n\n // Rule 3: primary property is in the mapping\n const primaryId = primaryProperties[0].id\n if (!(primaryId in mapping)) {\n throw new ProjectionValidationError(\n `Primary property '${primaryId}' of object type '${objectType.id}' ` +\n `must be included in the property mapping.`\n )\n }\n}\n\n/**\n * Validates the link mapping for an object projection and returns a validated copy.\n *\n * Rules:\n * 1. All keys must be valid link ids on the object type.\n * 2. Record key must match descriptor.linkId.\n * 3. Link target must be a single concrete type (not polymorphic or wildcard).\n * 4. The descriptor must use exactly one source: sourcePropertyId or sourceField.\n * 5. Source properties must exist and be present in the property mapping.\n * Source fields are validated later against the projection dataset.\n */\nexport function validateAndLowerLinkMapping(\n objectType: ObjectType,\n linkMapping: Record<string, ForeignKeyDescriptor>,\n propertyMapping: Record<string, string>\n): Record<string, ForeignKeyDescriptor> {\n const linkIds = new Set(objectType.links.map((l) => l.id))\n const linksById = new Map(objectType.links.map((l) => [l.id, l]))\n const propertyIds = new Set(objectType.properties.map((p) => p.id))\n\n for (const [key, descriptor] of Object.entries(linkMapping)) {\n // Rule 1: valid link id\n if (!linkIds.has(key)) {\n const available = [...linkIds].sort().join(\", \")\n throw new ProjectionValidationError(\n `Link '${key}' does not exist on object type '${objectType.id}'. ` +\n `Available links: ${available}`\n )\n }\n\n // Rule 2: key matches descriptor.linkId\n if (key !== descriptor.linkId) {\n throw new ProjectionValidationError(\n `Link mapping key '${key}' does not match descriptor linkId '${descriptor.linkId}'.`\n )\n }\n\n // Rule 3: single concrete target\n const link = linksById.get(key)!\n if (Array.isArray(link.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `Link '${key}' on object type '${objectType.id}' has a polymorphic target. ` +\n `FK projection of polymorphic links is not yet supported.`\n )\n }\n if (link.targetObjectTypeId === \"*\") {\n throw new ProjectionValidationError(\n `Link '${key}' on object type '${objectType.id}' has a wildcard target. ` +\n `FK projection of wildcard links is not supported.`\n )\n }\n\n const sourcePropertyId = descriptor.sourcePropertyId\n const sourceField = descriptor.sourceField\n if (sourcePropertyId && sourceField) {\n throw new ProjectionValidationError(\n `FK link '${key}' must use either sourceProperty or sourceField, not both.`\n )\n }\n if (!sourcePropertyId && !sourceField) {\n throw new ProjectionValidationError(\n `FK link '${key}' must declare sourceProperty or sourceField.`\n )\n }\n\n if (!sourcePropertyId) {\n continue\n }\n\n // Rule 4: source property exists on the type\n if (!propertyIds.has(sourcePropertyId)) {\n const available = [...propertyIds].sort().join(\", \")\n throw new ProjectionValidationError(\n `Source property '${sourcePropertyId}' does not exist on ` +\n `object type '${objectType.id}'. Available properties: ${available}`\n )\n }\n\n // Rule 5: source property is in the property mapping\n if (!(sourcePropertyId in propertyMapping)) {\n throw new ProjectionValidationError(\n `Source property '${sourcePropertyId}' for link '${key}' ` +\n `must be included in the property mapping.`\n )\n }\n }\n\n return Object.fromEntries(\n Object.entries(linkMapping).map(([linkId, descriptor]) => [\n linkId,\n {\n linkId: descriptor.linkId,\n ...(descriptor.sourcePropertyId !== undefined\n ? { sourcePropertyId: descriptor.sourcePropertyId }\n : {}),\n ...(descriptor.sourceField !== undefined ? { sourceField: descriptor.sourceField } : {}),\n targetObjectTypeId: descriptor.targetObjectTypeId,\n },\n ])\n )\n}\n\n/**\n * Validates that a link token points to a single concrete target type.\n *\n * Rules:\n * 1. Not an array (polymorphic).\n * 2. Not wildcard (\"*\").\n */\nexport function validateLinkProjectionTarget(linkToken: {\n readonly id: string\n readonly targetObjectTypeId: string | readonly string[]\n}): void {\n if (Array.isArray(linkToken.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `Link '${linkToken.id}' has a polymorphic target. ` +\n `Link projection of polymorphic links is not yet supported.`\n )\n }\n if (linkToken.targetObjectTypeId === \"*\") {\n throw new ProjectionValidationError(\n `Link '${linkToken.id}' has a wildcard target. ` +\n `Link projection of wildcard links is not supported.`\n )\n }\n}\n\n/**\n * Validates a telemetry projection's field mapping against its dataset columns\n * and object type: the telemetry property exists and is telemetry-enabled, and\n * every mapped field (objectId/at/value/unit) resolves to a real dataset column.\n *\n * Owned here so startup validation and the projection worker's pre-execution\n * check share one implementation and cannot drift; the worker layers\n * dataset-version column type compatibility on top of these rules. Returns the\n * resolved telemetry property for callers that need its schema.\n */\nexport function validateTelemetryProjectionFieldMapping(\n projection: TelemetryProjectionDefinition,\n objectType: { readonly id: string; readonly properties: readonly Property[] },\n datasetColumnNames: ReadonlySet<string>,\n prefix: string\n): Property {\n const property = objectType.properties.find((candidate) => candidate.id === projection.propertyId)\n if (!property) {\n throw new ProjectionValidationError(\n `${prefix}: unknown property \"${projection.propertyId}\" on type \"${projection.objectTypeId}\"`\n )\n }\n if (property.mode !== \"telemetry\") {\n throw new ProjectionValidationError(\n `${prefix}: property \"${projection.propertyId}\" on type \"${projection.objectTypeId}\" must be telemetry-enabled`\n )\n }\n\n const mappedFields = [\n [\"objectId\", projection.objectIdField],\n [\"at\", projection.atField],\n [\"value\", projection.valueField],\n ...(projection.unitField !== undefined ? ([[\"unit\", projection.unitField]] as const) : []),\n ] as const\n for (const [fieldRole, columnName] of mappedFields) {\n if (!datasetColumnNames.has(columnName)) {\n throw new ProjectionValidationError(\n `${prefix}: ${fieldRole} field \"${columnName}\" references unknown dataset column ` +\n `on dataset \"${projection.datasetId}\"`\n )\n }\n }\n\n return property\n}\n\n/**\n * Validates all registered projections against the ontology at startup.\n *\n * For object projections:\n * 1. `datasetId` exists in the dataset registry.\n * 2. `objectTypeId` exists in the type registry.\n * 3. All property mapping keys are valid property ids on the type.\n * 4. All mapped dataset columns exist in the referenced dataset.\n * 5. The primary property is included in the property mapping.\n * 6. FK link descriptors reference valid links, valid source properties (present in mapping),\n * and valid target types with primaries.\n *\n * For link projections:\n * 1. `datasetId` exists in the dataset registry.\n * 2. Source and target types exist.\n * 3. The link exists on the source type.\n * 4. Source and target fields exist in the referenced dataset.\n * 5. Both source and target types have primary properties.\n *\n * For telemetry projections:\n * 1. `datasetId` exists in the dataset registry.\n * 2. `objectTypeId` exists in the type registry.\n * 3. `propertyId` exists on the object type and is telemetry-enabled.\n * 4. Point mapping fields exist in the referenced dataset.\n */\nexport interface ValidatedProjectionRecord<TDefinition extends ProjectionDefinition>\n extends ProjectionOwnershipRecord<TDefinition> {\n readonly dataset: DatasetDefinition\n}\n\nexport interface ProjectionValidationInput {\n readonly objectProjections: readonly ObjectProjectionDefinition[]\n readonly linkProjections: readonly LinkProjectionDefinition[]\n readonly telemetryProjections: readonly TelemetryProjectionDefinition[]\n}\n\nexport interface ValidatedProjectionCatalog {\n readonly objectProjections: readonly ValidatedProjectionRecord<ObjectProjectionDefinition>[]\n readonly linkProjections: readonly ValidatedProjectionRecord<LinkProjectionDefinition>[]\n readonly telemetryProjections: readonly ValidatedProjectionRecord<TelemetryProjectionDefinition>[]\n}\n\nexport function validateProjectionsAtStartup(\n projections: ProjectionValidationInput,\n ontology: OntologyDefinitionCatalog,\n datasetsById: ReadonlyMap<string, DatasetDefinition>\n): ValidatedProjectionCatalog {\n const { objectProjections, linkProjections, telemetryProjections } = projections\n const objectTypesById = ontology.getObjectTypesById()\n const primaryByTypeId = ontology.getPrimaryByTypeId()\n const validatedObjectProjections: ValidatedProjectionRecord<ObjectProjectionDefinition>[] = []\n const validatedLinkProjections: ValidatedProjectionRecord<LinkProjectionDefinition>[] = []\n const validatedTelemetryProjections: ValidatedProjectionRecord<TelemetryProjectionDefinition>[] =\n []\n\n validateMaterializationOntologyConstraints(ontology)\n\n for (const projection of objectProjections) {\n const prefix = `Projection \"${projection.id}\"`\n const dataset = datasetsById.get(projection.datasetId)\n if (!dataset) {\n throw new ProjectionValidationError(\n `${prefix}: unknown dataset \"${projection.datasetId}\". ` +\n `Add it to 'datasets' in createSixb() or export it from 'datasets/'.`\n )\n }\n\n const objectType = objectTypesById.get(projection.objectTypeId)\n if (!objectType) {\n throw new ProjectionValidationError(\n `${prefix}: unknown object type \"${projection.objectTypeId}\"`\n )\n }\n\n const datasetColumnNames = new Set(dataset.schema.columns.map((column) => column.name))\n const propertyIds = new Set(objectType.properties.map((p) => p.id))\n for (const [propId, columnName] of Object.entries(projection.properties)) {\n if (!propertyIds.has(propId)) {\n throw new ProjectionValidationError(\n `${prefix}: unknown property \"${propId}\" on type \"${projection.objectTypeId}\"`\n )\n }\n if (!datasetColumnNames.has(columnName)) {\n throw new ProjectionValidationError(\n `${prefix}: property \"${propId}\" references unknown dataset column \"${columnName}\" ` +\n `on dataset \"${projection.datasetId}\"`\n )\n }\n const property = objectType.properties.find((candidate) => candidate.id === propId)\n if (property?.mode === \"telemetry\") {\n throw new ProjectionValidationError(\n `[Sixb] ${prefix}: source mappings cannot own telemetry property \"${projection.objectTypeId}.${propId}\"`\n )\n }\n }\n\n const primaryId = primaryByTypeId.get(projection.objectTypeId)!\n if (!(primaryId in projection.properties)) {\n throw new ProjectionValidationError(\n `${prefix}: primary property \"${primaryId}\" must be in property mapping`\n )\n }\n\n const linkIds = new Set(objectType.links.map((l) => l.id))\n for (const [linkId, fk] of Object.entries(projection.links)) {\n if (!linkIds.has(linkId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" references unknown link on type \"${projection.objectTypeId}\"`\n )\n }\n if (fk.linkId !== linkId) {\n throw new ProjectionValidationError(\n `${prefix}: FK link mapping key \"${linkId}\" does not match descriptor linkId \"${fk.linkId}\"`\n )\n }\n const sourcePropertyId = fk.sourcePropertyId\n const sourceField = fk.sourceField\n if (sourcePropertyId && sourceField) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" must use either sourcePropertyId or sourceField, not both`\n )\n }\n if (!sourcePropertyId && !sourceField) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" must declare sourcePropertyId or sourceField`\n )\n }\n if (sourcePropertyId && !propertyIds.has(sourcePropertyId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" source property \"${sourcePropertyId}\" does not exist on type \"${projection.objectTypeId}\"`\n )\n }\n if (sourcePropertyId && !(sourcePropertyId in projection.properties)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" source property \"${sourcePropertyId}\" must be in property mapping`\n )\n }\n if (sourceField && !datasetColumnNames.has(sourceField)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" source field \"${sourceField}\" references unknown dataset column on dataset \"${projection.datasetId}\"`\n )\n }\n if (!objectTypesById.has(fk.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" target type \"${fk.targetObjectTypeId}\" is unknown`\n )\n }\n if (!primaryByTypeId.has(fk.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" target type \"${fk.targetObjectTypeId}\" has no primary property`\n )\n }\n const link = objectType.links.find((candidate) => candidate.id === linkId)!\n if (!ontology.isValidLinkTarget(link.targetObjectTypeId, fk.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" target type \"${fk.targetObjectTypeId}\" is not compatible with its declared target`\n )\n }\n }\n\n validatedObjectProjections.push({\n definition: projection,\n dataset,\n ownership: computeProjectionOwnership(projection, ontology),\n })\n }\n\n for (const projection of linkProjections) {\n const prefix = `Projection \"${projection.id}\"`\n const dataset = datasetsById.get(projection.datasetId)\n if (!dataset) {\n throw new ProjectionValidationError(\n `${prefix}: unknown dataset \"${projection.datasetId}\". ` +\n `Add it to 'datasets' in createSixb() or export it from 'datasets/'.`\n )\n }\n\n if (!objectTypesById.has(projection.sourceObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: unknown source type \"${projection.sourceObjectTypeId}\"`\n )\n }\n if (!objectTypesById.has(projection.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: unknown target type \"${projection.targetObjectTypeId}\"`\n )\n }\n const sourceType = objectTypesById.get(projection.sourceObjectTypeId)!\n const link = sourceType.links.find((candidate) => candidate.id === projection.linkId)\n if (!link) {\n throw new ProjectionValidationError(\n `${prefix}: link \"${projection.linkId}\" does not exist on source type \"${projection.sourceObjectTypeId}\"`\n )\n }\n if (!ontology.isValidLinkTarget(link.targetObjectTypeId, projection.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: target type \"${projection.targetObjectTypeId}\" is not compatible with link \"${projection.linkId}\"`\n )\n }\n const datasetColumnNames = new Set(dataset.schema.columns.map((column) => column.name))\n if (!datasetColumnNames.has(projection.sourceField)) {\n throw new ProjectionValidationError(\n `${prefix}: source field \"${projection.sourceField}\" references unknown dataset column ` +\n `on dataset \"${projection.datasetId}\"`\n )\n }\n if (!datasetColumnNames.has(projection.targetField)) {\n throw new ProjectionValidationError(\n `${prefix}: target field \"${projection.targetField}\" references unknown dataset column ` +\n `on dataset \"${projection.datasetId}\"`\n )\n }\n if (!primaryByTypeId.has(projection.sourceObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: source type \"${projection.sourceObjectTypeId}\" has no primary property`\n )\n }\n if (!primaryByTypeId.has(projection.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: target type \"${projection.targetObjectTypeId}\" has no primary property`\n )\n }\n\n validatedLinkProjections.push({\n definition: projection,\n dataset,\n ownership: computeProjectionOwnership(projection, ontology),\n })\n }\n\n for (const projection of telemetryProjections) {\n const prefix = `Projection \"${projection.id}\"`\n const dataset = datasetsById.get(projection.datasetId)\n if (!dataset) {\n throw new ProjectionValidationError(\n `${prefix}: unknown dataset \"${projection.datasetId}\". ` +\n `Add it to 'datasets' in createSixb() or export it from 'datasets/'.`\n )\n }\n\n const objectType = objectTypesById.get(projection.objectTypeId)\n if (!objectType) {\n throw new ProjectionValidationError(\n `${prefix}: unknown object type \"${projection.objectTypeId}\"`\n )\n }\n\n const datasetColumnNames = new Set(dataset.schema.columns.map((column) => column.name))\n validateTelemetryProjectionFieldMapping(projection, objectType, datasetColumnNames, prefix)\n validatedTelemetryProjections.push({\n definition: projection,\n dataset,\n ownership: computeProjectionOwnership(projection, ontology),\n })\n }\n\n const validatedProjections = [\n ...validatedObjectProjections,\n ...validatedLinkProjections,\n ...validatedTelemetryProjections,\n ]\n validateProjectionOwnership(validatedProjections)\n return {\n objectProjections: validatedObjectProjections,\n linkProjections: validatedLinkProjections,\n telemetryProjections: validatedTelemetryProjections,\n }\n}\n\nfunction validateMaterializationOntologyConstraints(ontology: OntologyDefinitionCatalog): void {\n for (const objectType of ontology.getObjectTypesById().values()) {\n for (const property of objectType.properties) {\n if (property.mode === \"telemetry\" && property.required === true) {\n throw new ProjectionValidationError(\n `[Sixb] Telemetry property '${objectType.id}.${property.id}' cannot be required.`\n )\n }\n }\n for (const link of objectType.links) {\n for (const property of link.properties ?? []) {\n if (property.mode === \"telemetry\") {\n throw new ProjectionValidationError(\n `[Sixb] Link property '${objectType.id}.${link.id}.${property.id}' cannot use telemetry mode.`\n )\n }\n }\n }\n }\n}\n",
16
- "/**\n * Projection DSL builders, helpers, and type guards.\n *\n * Uses the same fluent builder style as the other definition APIs.\n */\n\nimport type {\n DatasetColumnNameOf,\n DatasetColumnType,\n DatasetColumnTypeOf,\n DatasetDefinition,\n} from \"../datasets\"\nimport type { LinkToken, PropertyToken } from \"../ontology/tokens\"\nimport type { ObjectLink, ObjectType, Property, Schema } from \"../ontology/types\"\nimport { ProjectionValidationError } from \"./errors\"\nimport type {\n ForeignKeyDescriptor,\n LinkProjectionDefinition,\n LinkProjectionTarget,\n ObjectProjectionDefinition,\n ObjectProjectionTarget,\n ProjectionDefinition,\n ProjectionTarget,\n TelemetryProjectionDefinition,\n} from \"./types\"\nimport {\n validateAndLowerLinkMapping,\n validateLinkProjectionTarget,\n validatePropertyMapping,\n} from \"./validation\"\n\n// ── Internal helpers ─────────────────────────────────────────\n\nfunction assertNonEmpty(value: string, field: string): void {\n if (!value.trim()) {\n throw new ProjectionValidationError(`Projection ${field} must not be empty.`)\n }\n}\n\nfunction assertProjectionDataset(dataset: DatasetDefinition): void {\n if (!dataset || dataset.kind !== \"dataset\" || typeof dataset.id !== \"string\") {\n throw new ProjectionValidationError(\"Projection dataset must be a dataset definition.\")\n }\n assertNonEmpty(dataset.id, \"dataset id\")\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\n// ── Type utilities ───────────────────────────────────────────\n\n/** Union of property ids from an ObjectType. */\ntype PropertyIdOf<T extends ObjectType> = T[\"properties\"][number][\"id\"]\n\n/** Property definition by id from an ObjectType. */\ntype PropertyById<T extends ObjectType, TPropertyId extends PropertyIdOf<T>> = Extract<\n T[\"properties\"][number],\n { id: TPropertyId }\n>\n\n/** Union of link ids from an ObjectType. */\ntype LinkIdOf<T extends ObjectType> = T[\"links\"][number][\"id\"]\n\ntype LinkById<T extends ObjectType, TLinkId extends LinkIdOf<T>> = Extract<\n T[\"links\"][number],\n { id: TLinkId }\n>\n\ntype SingleTargetIdOf<TLink extends ObjectLink> = TLink[\"targetObjectTypeId\"] extends string\n ? TLink[\"targetObjectTypeId\"]\n : never\n\ntype ResolvedProjectionSchema<TSchema extends Schema> = TSchema extends {\n type: \"valueTypeRef\"\n _resolved: infer TResolved extends Schema\n}\n ? ResolvedProjectionSchema<TResolved>\n : TSchema extends { type: \"valueTypeRef\" }\n ? never\n : TSchema\n\ntype StringCompatibleProjectionSchema =\n | \"string\"\n | \"uuid\"\n | { type: \"enum\"; values: readonly string[] }\n\ntype IntegerCompatibleProjectionSchema =\n | \"integer\"\n | \"double\"\n | \"decimal\"\n | { type: \"enum\"; values: readonly number[] }\n\ntype JsonCompatibleProjectionSchema = { type: \"object\" | \"array\" | \"map\" | \"enum\" }\n\ntype ProjectionSchemaByDatasetColumnType = {\n readonly string: StringCompatibleProjectionSchema\n readonly boolean: \"boolean\"\n readonly int64: IntegerCompatibleProjectionSchema\n readonly float64: \"double\"\n readonly decimal: \"decimal\" | \"double\"\n readonly date: \"date\"\n readonly timestamp: \"timestamp\"\n readonly json: JsonCompatibleProjectionSchema\n readonly fileRef: \"fileRef\"\n}\n\ntype DatasetColumnCompatibleWithSchema<\n TColumnType extends DatasetColumnType,\n TSchema extends Schema,\n> = [ResolvedProjectionSchema<TSchema>] extends [never]\n ? false\n : ResolvedProjectionSchema<TSchema> extends ProjectionSchemaByDatasetColumnType[TColumnType]\n ? true\n : false\n\ntype DatasetColumnNameCompatibleWithSchema<\n TDataset extends DatasetDefinition,\n TSchema extends Schema,\n> =\n string extends DatasetColumnNameOf<TDataset>\n ? string\n : {\n [TColumnName in DatasetColumnNameOf<TDataset>]: DatasetColumnCompatibleWithSchema<\n DatasetColumnTypeOf<TDataset, TColumnName>,\n TSchema\n > extends true\n ? TColumnName\n : never\n }[DatasetColumnNameOf<TDataset>]\n\ntype StringDatasetColumnNameOf<TDataset extends DatasetDefinition> =\n string extends DatasetColumnNameOf<TDataset>\n ? string\n : {\n [TColumnName in DatasetColumnNameOf<TDataset>]: DatasetColumnTypeOf<\n TDataset,\n TColumnName\n > extends \"string\"\n ? TColumnName\n : never\n }[DatasetColumnNameOf<TDataset>]\n\ntype DateLikeDatasetColumnNameOf<TDataset extends DatasetDefinition> =\n string extends DatasetColumnNameOf<TDataset>\n ? string\n : {\n [TColumnName in DatasetColumnNameOf<TDataset>]: DatasetColumnTypeOf<\n TDataset,\n TColumnName\n > extends \"string\" | \"date\" | \"timestamp\"\n ? TColumnName\n : never\n }[DatasetColumnNameOf<TDataset>]\n\ntype ProjectionMappingFor<TObjectType extends ObjectType, TDataset extends DatasetDefinition> = {\n readonly [TPropertyId in PropertyIdOf<TObjectType>]?: DatasetColumnNameCompatibleWithSchema<\n TDataset,\n PropertyById<TObjectType, TPropertyId>[\"schema\"]\n >\n}\n\ntype ExactProjectionMapping<TObjectType extends ObjectType, TMapping> = TMapping & {\n readonly [TKey in Exclude<keyof TMapping, PropertyIdOf<TObjectType>>]: never\n}\n\ntype TelemetryPropertyToken<TObjectTypeId extends string = string> = PropertyToken<\n TObjectTypeId,\n string,\n Property & { readonly mode: \"telemetry\" }\n>\n\ntype TelemetryProjectionPointMapping<\n TPropertyToken extends TelemetryPropertyToken,\n TDataset extends DatasetDefinition,\n> = {\n readonly objectId: StringDatasetColumnNameOf<TDataset>\n readonly at: DateLikeDatasetColumnNameOf<TDataset>\n readonly value: DatasetColumnNameCompatibleWithSchema<\n TDataset,\n TPropertyToken[\"property\"][\"schema\"]\n >\n readonly unit?: StringDatasetColumnNameOf<TDataset>\n}\n\ntype ExactTelemetryProjectionPointMapping<TMapping> = TMapping & {\n readonly [TKey in Exclude<keyof TMapping, \"objectId\" | \"at\" | \"value\" | \"unit\">]: never\n}\n\ntype ForeignKeyFromSourceProperty = Omit<\n ForeignKeyDescriptor,\n \"sourcePropertyId\" | \"sourceField\"\n> & {\n readonly sourcePropertyId: string\n readonly sourceField?: never\n}\n\ntype ForeignKeyFromSourceField<TSourceField extends string = string> = Omit<\n ForeignKeyDescriptor,\n \"sourcePropertyId\" | \"sourceField\"\n> & {\n readonly sourcePropertyId?: never\n readonly sourceField: TSourceField\n}\n\ntype ProjectionForeignKeyDescriptor<TDataset extends DatasetDefinition> =\n | ForeignKeyFromSourceProperty\n | ForeignKeyFromSourceField<StringDatasetColumnNameOf<TDataset>>\n\ntype ProjectionForeignKeyTokenInput<\n TObjectType extends ObjectType,\n TDataset extends DatasetDefinition,\n TLinkId extends LinkIdOf<TObjectType>,\n> =\n | {\n readonly link: LinkToken<\n TObjectType[\"id\"],\n TLinkId,\n SingleTargetIdOf<LinkById<TObjectType, TLinkId>>\n >\n readonly sourceProperty: PropertyToken<TObjectType[\"id\"]>\n readonly target: ObjectType &\n (\n | { id: NoInfer<SingleTargetIdOf<LinkById<TObjectType, TLinkId>>> }\n | { extends: NoInfer<SingleTargetIdOf<LinkById<TObjectType, TLinkId>>> }\n )\n }\n | {\n readonly link: LinkToken<\n TObjectType[\"id\"],\n TLinkId,\n SingleTargetIdOf<LinkById<TObjectType, TLinkId>>\n >\n readonly sourceField: StringDatasetColumnNameOf<TDataset>\n readonly target: ObjectType &\n (\n | { id: NoInfer<SingleTargetIdOf<LinkById<TObjectType, TLinkId>>> }\n | { extends: NoInfer<SingleTargetIdOf<LinkById<TObjectType, TLinkId>>> }\n )\n }\n\ntype ProjectionForeignKeyInput<\n TObjectType extends ObjectType,\n TDataset extends DatasetDefinition,\n TLinkId extends LinkIdOf<TObjectType>,\n> =\n | ProjectionForeignKeyDescriptor<TDataset>\n | ProjectionForeignKeyTokenInput<TObjectType, TDataset, TLinkId>\n\nfunction lowerForeignKeyMapping<TObjectType extends ObjectType, TDataset extends DatasetDefinition>(\n mapping: {\n [K in LinkIdOf<TObjectType>]?: ProjectionForeignKeyInput<TObjectType, TDataset, K>\n }\n): Record<string, ForeignKeyDescriptor> {\n const lowered: Record<string, ForeignKeyDescriptor> = {}\n for (const [linkId, descriptor] of Object.entries(mapping)) {\n if (!descriptor) continue\n lowered[linkId] = isForeignKeyDescriptor(descriptor)\n ? descriptor\n : fromForeignKey(descriptor as Parameters<typeof fromForeignKey>[0])\n }\n return lowered\n}\n\nfunction isForeignKeyDescriptor(value: unknown): value is ForeignKeyDescriptor {\n return isRecord(value) && typeof value.linkId === \"string\"\n}\n\n// ── defineProjection ─────────────────────────────────────────\n\ninterface ObjectProjectionSourceBuilder<TObjectType extends ObjectType> {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): ObjectProjectionMappingBuilder<TObjectType, TDataset>\n}\n\ninterface ObjectProjectionMappingBuilder<\n TObjectType extends ObjectType,\n TDataset extends DatasetDefinition,\n> {\n properties<const TMapping extends ProjectionMappingFor<TObjectType, TDataset>>(\n mapping: ExactProjectionMapping<TObjectType, TMapping>\n ): ObjectProjectionDefinition & ObjectProjectionLinkBuilder<TObjectType, TDataset>\n}\n\ninterface ObjectProjectionLinkBuilder<\n TObjectType extends ObjectType,\n TDataset extends DatasetDefinition,\n> {\n withLinks(\n mapping: { [K in LinkIdOf<TObjectType>]?: ProjectionForeignKeyInput<TObjectType, TDataset, K> }\n ): ObjectProjectionDefinition\n}\n\n/**\n * Defines an object, link, or telemetry projection from its ontology target.\n *\n * ```ts\n * defineProjection(\"room-projection\", Room)\n * .fromDataset(canonicalRoomsDataset)\n * .properties({ id: \"room_id\", name: \"room_name\" })\n * .withLinks({\n * inBuilding: {\n * link: Room.l.inBuilding,\n * sourceField: \"building_id\",\n * target: Building,\n * },\n * })\n * ```\n */\nexport function defineProjection<const TObjectType extends ObjectType>(\n id: string,\n objectType: TObjectType\n): ObjectProjectionSourceBuilder<TObjectType>\nexport function defineProjection<\n TObjectTypeId extends string,\n TLinkId extends string,\n TTargetObjectTypeId extends string,\n>(\n id: string,\n linkToken: LinkToken<TObjectTypeId, TLinkId, TTargetObjectTypeId>\n): LinkProjectionSourceBuilder\nexport function defineProjection<const TPropertyToken extends TelemetryPropertyToken>(\n id: string,\n propertyToken: TPropertyToken\n): TelemetryProjectionSourceBuilder<TPropertyToken>\nexport function defineProjection(\n id: string,\n target: ObjectType | LinkToken<string, string, string> | TelemetryPropertyToken\n):\n | ObjectProjectionSourceBuilder<ObjectType>\n | LinkProjectionSourceBuilder\n | TelemetryProjectionSourceBuilder<TelemetryPropertyToken> {\n if (\"link\" in target) return buildLinkProjection(id, target)\n if (\"property\" in target) return buildTelemetryProjection(id, target)\n return buildObjectProjection(id, target)\n}\n\nfunction buildObjectProjection<const TObjectType extends ObjectType>(\n id: string,\n objectType: TObjectType\n): ObjectProjectionSourceBuilder<TObjectType> {\n assertNonEmpty(id, \"id\")\n\n return {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): ObjectProjectionMappingBuilder<TObjectType, TDataset> {\n assertProjectionDataset(dataset)\n const datasetId = dataset.id\n\n return {\n properties<const TMapping extends ProjectionMappingFor<TObjectType, TDataset>>(\n mapping: ExactProjectionMapping<TObjectType, TMapping>\n ): ObjectProjectionDefinition & ObjectProjectionLinkBuilder<TObjectType, TDataset> {\n const propertyMapping = mapping as Record<string, string>\n validatePropertyMapping(objectType, propertyMapping)\n\n const definition: ObjectProjectionDefinition = {\n _tag: \"ObjectProjectionDefinition\",\n id,\n objectTypeId: objectType.id,\n datasetId,\n properties: { ...propertyMapping },\n links: {},\n }\n\n return Object.assign(definition, {\n withLinks(\n linkMapping: {\n [K in LinkIdOf<TObjectType>]?: ProjectionForeignKeyInput<TObjectType, TDataset, K>\n }\n ): ObjectProjectionDefinition {\n const loweredLinkMapping = lowerForeignKeyMapping(linkMapping)\n const validatedLinks = validateAndLowerLinkMapping(\n objectType,\n loweredLinkMapping,\n propertyMapping\n )\n\n return {\n _tag: \"ObjectProjectionDefinition\",\n id,\n objectTypeId: objectType.id,\n datasetId,\n properties: { ...propertyMapping },\n links: validatedLinks,\n }\n },\n })\n },\n }\n },\n }\n}\n\n// ── Telemetry projection ────────────────────────────────────\n\ninterface TelemetryProjectionSourceBuilder<TPropertyToken extends TelemetryPropertyToken> {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): TelemetryProjectionMappingBuilder<TPropertyToken, TDataset>\n}\n\ninterface TelemetryProjectionMappingBuilder<\n TPropertyToken extends TelemetryPropertyToken,\n TDataset extends DatasetDefinition,\n> {\n points<const TMapping extends TelemetryProjectionPointMapping<TPropertyToken, TDataset>>(\n mapping: ExactTelemetryProjectionPointMapping<TMapping>\n ): TelemetryProjectionDefinition\n}\n\n/**\n * Fluent builder for {@link TelemetryProjectionDefinition}.\n *\n * ```ts\n * defineProjection(\"room-temperatures\", Room.p.temperature)\n * .fromDataset(roomReadingsDataset)\n * .points({\n * objectId: \"room_id\",\n * at: \"observed_at\",\n * value: \"temperature\",\n * unit: \"unit\",\n * })\n * ```\n */\nfunction buildTelemetryProjection<const TPropertyToken extends TelemetryPropertyToken>(\n id: string,\n propertyToken: TPropertyToken\n): TelemetryProjectionSourceBuilder<TPropertyToken> {\n assertNonEmpty(id, \"id\")\n validateTelemetryProjectionProperty(propertyToken)\n\n return {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): TelemetryProjectionMappingBuilder<TPropertyToken, TDataset> {\n assertProjectionDataset(dataset)\n const datasetId = dataset.id\n\n return {\n points<const TMapping extends TelemetryProjectionPointMapping<TPropertyToken, TDataset>>(\n mapping: ExactTelemetryProjectionPointMapping<TMapping>\n ): TelemetryProjectionDefinition {\n const pointMapping = lowerTelemetryPointMapping(mapping)\n return {\n _tag: \"TelemetryProjectionDefinition\",\n id,\n objectTypeId: propertyToken.objectTypeId,\n propertyId: propertyToken.id,\n datasetId,\n objectIdField: pointMapping.objectId,\n atField: pointMapping.at,\n valueField: pointMapping.value,\n ...(pointMapping.unit !== undefined ? { unitField: pointMapping.unit } : {}),\n }\n },\n }\n },\n }\n}\n\nfunction validateTelemetryProjectionProperty(propertyToken: PropertyToken): void {\n if (propertyToken.property.mode !== \"telemetry\") {\n throw new ProjectionValidationError(\n `Projection property '${propertyToken.objectTypeId}.${propertyToken.id}' must be telemetry-enabled.`\n )\n }\n}\n\nfunction lowerTelemetryPointMapping(mapping: {\n readonly objectId?: string\n readonly at?: string\n readonly value?: string\n readonly unit?: string\n}): {\n readonly objectId: string\n readonly at: string\n readonly value: string\n readonly unit?: string\n} {\n const allowedKeys = new Set([\"objectId\", \"at\", \"value\", \"unit\"])\n for (const key of Object.keys(mapping)) {\n if (!allowedKeys.has(key)) {\n throw new ProjectionValidationError(\n `Telemetry projection point mapping contains unknown key '${key}'.`\n )\n }\n }\n\n if (mapping.objectId === undefined) {\n throw new ProjectionValidationError(\"Telemetry projection point mapping requires objectId.\")\n }\n if (mapping.at === undefined) {\n throw new ProjectionValidationError(\"Telemetry projection point mapping requires at.\")\n }\n if (mapping.value === undefined) {\n throw new ProjectionValidationError(\"Telemetry projection point mapping requires value.\")\n }\n\n assertNonEmpty(mapping.objectId, \"objectId field\")\n assertNonEmpty(mapping.at, \"at field\")\n assertNonEmpty(mapping.value, \"value field\")\n if (mapping.unit !== undefined) {\n assertNonEmpty(mapping.unit, \"unit field\")\n }\n\n return {\n objectId: mapping.objectId,\n at: mapping.at,\n value: mapping.value,\n ...(mapping.unit !== undefined ? { unit: mapping.unit } : {}),\n }\n}\n\n// ── fromForeignKey ───────────────────────────────────────────\n\n/**\n * Creates a {@link ForeignKeyDescriptor} from typed tokens.\n *\n * Compile-time constraints:\n * - `TObjectTypeId` ties `link` and `sourceProperty` to the same object type\n * when a projected source property is used.\n * - `TTargetObjectTypeId` (inferred from the link token) constrains `target`\n * to an ObjectType whose `id` or `extends` matches the link's declared target.\n * This covers exact type match and direct subtypes. Multi-level inheritance\n * is validated at Sixb startup when the full type graph is available.\n *\n * ```ts\n * fromForeignKey({\n * link: Room.l.inBuilding,\n * sourceProperty: Room.p.buildingRef,\n * target: Building,\n * })\n * ```\n */\nexport function fromForeignKey<\n TObjectTypeId extends string,\n TTargetObjectTypeId extends string,\n>(input: {\n link: LinkToken<TObjectTypeId, string, TTargetObjectTypeId>\n sourceProperty: PropertyToken<TObjectTypeId>\n target: ObjectType &\n ({ id: NoInfer<TTargetObjectTypeId> } | { extends: NoInfer<TTargetObjectTypeId> })\n}): ForeignKeyFromSourceProperty\nexport function fromForeignKey<\n TObjectTypeId extends string,\n TTargetObjectTypeId extends string,\n const TSourceField extends string,\n>(input: {\n link: LinkToken<TObjectTypeId, string, TTargetObjectTypeId>\n sourceField: TSourceField\n target: ObjectType &\n ({ id: NoInfer<TTargetObjectTypeId> } | { extends: NoInfer<TTargetObjectTypeId> })\n}): ForeignKeyFromSourceField<TSourceField>\nexport function fromForeignKey<\n TObjectTypeId extends string,\n TTargetObjectTypeId extends string,\n>(input: {\n link: LinkToken<TObjectTypeId, string, TTargetObjectTypeId>\n sourceProperty?: PropertyToken<TObjectTypeId>\n sourceField?: string\n target: ObjectType &\n ({ id: NoInfer<TTargetObjectTypeId> } | { extends: NoInfer<TTargetObjectTypeId> })\n}): ForeignKeyDescriptor {\n validateLinkProjectionTarget(input.link)\n\n if (input.sourceProperty) {\n return {\n linkId: input.link.id,\n sourcePropertyId: input.sourceProperty.id,\n targetObjectTypeId: input.target.id,\n }\n }\n\n if (input.sourceField === undefined) {\n throw new ProjectionValidationError(\"Foreign key sourceField is required.\")\n }\n assertNonEmpty(input.sourceField, \"source field\")\n return {\n linkId: input.link.id,\n sourceField: input.sourceField,\n targetObjectTypeId: input.target.id,\n }\n}\n\n// ── Link projection ─────────────────────────────────────────\n\ninterface LinkProjectionSourceBuilder {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): LinkProjectionFieldBuilder<TDataset>\n}\n\ninterface LinkProjectionFieldBuilder<TDataset extends DatasetDefinition> {\n sourceField(\n columnName: StringDatasetColumnNameOf<TDataset>\n ): LinkProjectionTargetBuilder<TDataset>\n}\n\ninterface LinkProjectionTargetBuilder<TDataset extends DatasetDefinition> {\n targetField(columnName: StringDatasetColumnNameOf<TDataset>): LinkProjectionDefinition\n}\n\n/**\n * Fluent builder for {@link LinkProjectionDefinition} (many-to-many join datasets).\n *\n * ```ts\n * defineProjection(\"room-sensor-links\", Room.l.hasSensors)\n * .fromDataset(roomSensorsDataset)\n * .sourceField(\"room_id\")\n * .targetField(\"sensor_id\")\n * ```\n */\nfunction buildLinkProjection<\n TObjectTypeId extends string,\n TLinkId extends string,\n TTargetObjectTypeId extends string,\n>(\n id: string,\n linkToken: LinkToken<TObjectTypeId, TLinkId, TTargetObjectTypeId>\n): LinkProjectionSourceBuilder {\n assertNonEmpty(id, \"id\")\n validateLinkProjectionTarget(linkToken)\n\n return {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): LinkProjectionFieldBuilder<TDataset> {\n assertProjectionDataset(dataset)\n const datasetId = dataset.id\n\n return {\n sourceField(\n columnName: StringDatasetColumnNameOf<TDataset>\n ): LinkProjectionTargetBuilder<TDataset> {\n assertNonEmpty(columnName, \"source field\")\n\n return {\n targetField(\n targetColumnName: StringDatasetColumnNameOf<TDataset>\n ): LinkProjectionDefinition {\n assertNonEmpty(targetColumnName, \"target field\")\n\n return {\n _tag: \"LinkProjectionDefinition\",\n id,\n linkId: linkToken.id,\n sourceObjectTypeId: linkToken.objectTypeId,\n targetObjectTypeId: linkToken.targetObjectTypeId as string,\n datasetId,\n sourceField: columnName,\n targetField: targetColumnName,\n }\n },\n }\n },\n }\n },\n }\n}\n\n// ── Type guards ──────────────────────────────────────────────\n\n/** Runtime type guard for {@link ObjectProjectionDefinition}. */\nexport function isObjectProjectionDefinition(value: unknown): value is ObjectProjectionDefinition {\n if (!isRecord(value)) return false\n return (\n value._tag === \"ObjectProjectionDefinition\" &&\n typeof value.id === \"string\" &&\n typeof value.objectTypeId === \"string\" &&\n typeof value.datasetId === \"string\" &&\n isRecord(value.properties) &&\n isRecord(value.links)\n )\n}\n\n/** Runtime type guard for {@link LinkProjectionDefinition}. */\nexport function isLinkProjectionDefinition(value: unknown): value is LinkProjectionDefinition {\n if (!isRecord(value)) return false\n return (\n value._tag === \"LinkProjectionDefinition\" &&\n typeof value.id === \"string\" &&\n typeof value.linkId === \"string\" &&\n typeof value.sourceObjectTypeId === \"string\" &&\n typeof value.targetObjectTypeId === \"string\" &&\n typeof value.datasetId === \"string\" &&\n typeof value.sourceField === \"string\" &&\n typeof value.targetField === \"string\"\n )\n}\n\n/** Runtime type guard for {@link TelemetryProjectionDefinition}. */\nexport function isTelemetryProjectionDefinition(\n value: unknown\n): value is TelemetryProjectionDefinition {\n if (!isRecord(value)) return false\n return (\n value._tag === \"TelemetryProjectionDefinition\" &&\n typeof value.id === \"string\" &&\n typeof value.objectTypeId === \"string\" &&\n typeof value.propertyId === \"string\" &&\n typeof value.datasetId === \"string\" &&\n typeof value.objectIdField === \"string\" &&\n typeof value.atField === \"string\" &&\n typeof value.valueField === \"string\" &&\n (value.unitField === undefined || typeof value.unitField === \"string\")\n )\n}\n\n/** Runtime type guard for any {@link ProjectionDefinition}. */\nexport function isProjectionDefinition(value: unknown): value is ProjectionDefinition {\n return (\n isObjectProjectionDefinition(value) ||\n isLinkProjectionDefinition(value) ||\n isTelemetryProjectionDefinition(value)\n )\n}\n\n/**\n * Extracts the object type id(s) a projection targets, used to authorize run\n * visibility (`object.view`). Link projections require both ends; object and\n * telemetry projections target a single type.\n */\nexport function projectionTargetOf(projection: LinkProjectionDefinition): LinkProjectionTarget\nexport function projectionTargetOf(\n projection: ObjectProjectionDefinition | TelemetryProjectionDefinition\n): ObjectProjectionTarget\nexport function projectionTargetOf(projection: ProjectionDefinition): ProjectionTarget\nexport function projectionTargetOf(projection: ProjectionDefinition): ProjectionTarget {\n return projection._tag === \"LinkProjectionDefinition\"\n ? {\n sourceObjectTypeId: projection.sourceObjectTypeId,\n targetObjectTypeId: projection.targetObjectTypeId,\n }\n : { objectTypeId: projection.objectTypeId }\n}\n\n// ── Categorization ──────────────────────────────────────────\n\n/** Splits a mixed list of projection definitions into typed arrays by tag. */\nexport function categorizeProjections(projections: readonly ProjectionDefinition[]): {\n objectProjections: ObjectProjectionDefinition[]\n linkProjections: LinkProjectionDefinition[]\n telemetryProjections: TelemetryProjectionDefinition[]\n} {\n const objectProjections: ObjectProjectionDefinition[] = []\n const linkProjections: LinkProjectionDefinition[] = []\n const telemetryProjections: TelemetryProjectionDefinition[] = []\n for (const projection of projections) {\n if (isObjectProjectionDefinition(projection)) {\n objectProjections.push(projection)\n } else if (isLinkProjectionDefinition(projection)) {\n linkProjections.push(projection)\n } else if (isTelemetryProjectionDefinition(projection)) {\n telemetryProjections.push(projection)\n }\n }\n return { objectProjections, linkProjections, telemetryProjections }\n}\n",
15
+ "/**\n * Build-time validation helpers for projection definitions.\n *\n * These run eagerly inside builder calls (not deferred to `.build()`).\n * They are also reusable by Increment 7 for startup validation.\n */\n\nimport type { DatasetDefinition } from \"../datasets\"\nimport type { OntologyDefinitionCatalog } from \"../ontology\"\nimport type { ObjectType, Property } from \"../ontology/types\"\nimport { ProjectionValidationError } from \"./errors\"\nimport {\n computeProjectionOwnership,\n type ProjectionOwnershipRecord,\n validateProjectionOwnership,\n} from \"./ownership\"\nimport type {\n ForeignKeyDescriptor,\n LinkProjectionDefinition,\n ObjectProjectionDefinition,\n ProjectionDefinition,\n TelemetryProjectionDefinition,\n} from \"./types\"\n\n/**\n * Validates the property mapping for an object projection.\n *\n * Rules:\n * 1. All keys must be valid property ids on the object type.\n * 2. The object type must have exactly one primary property.\n * 3. The primary property must be included in the mapping.\n */\nexport function validatePropertyMapping(\n objectType: ObjectType,\n mapping: Record<string, string>\n): void {\n const propertyIds = new Set(objectType.properties.map((p) => p.id))\n const mappingKeys = Object.keys(mapping)\n\n // Rule 1: all keys are valid property ids\n for (const key of mappingKeys) {\n if (!propertyIds.has(key)) {\n const available = [...propertyIds].sort().join(\", \")\n throw new ProjectionValidationError(\n `Property '${key}' does not exist on object type '${objectType.id}'. ` +\n `Available properties: ${available}`\n )\n }\n }\n\n // Rule 2: exactly one primary property\n const primaryProperties = objectType.properties.filter((p) => p.primary === true)\n if (primaryProperties.length !== 1) {\n throw new ProjectionValidationError(\n `Object type '${objectType.id}' must have exactly one primary property, ` +\n `found ${primaryProperties.length}.`\n )\n }\n\n // Rule 3: primary property is in the mapping\n const primaryId = primaryProperties[0].id\n if (!(primaryId in mapping)) {\n throw new ProjectionValidationError(\n `Primary property '${primaryId}' of object type '${objectType.id}' ` +\n `must be included in the property mapping.`\n )\n }\n}\n\n/**\n * Validates the link mapping for an object projection and returns a validated copy.\n *\n * Rules:\n * 1. All keys must be valid link ids on the object type.\n * 2. Record key must match descriptor.linkId.\n * 3. Link target must be a single concrete type (not polymorphic or wildcard).\n * 4. The descriptor must use exactly one source: sourcePropertyId or sourceField.\n * 5. Source properties must exist and be present in the property mapping.\n * Source fields are validated later against the projection dataset.\n */\nexport function validateAndLowerLinkMapping(\n objectType: ObjectType,\n linkMapping: Record<string, ForeignKeyDescriptor>,\n propertyMapping: Record<string, string>\n): Record<string, ForeignKeyDescriptor> {\n const linkIds = new Set(objectType.links.map((l) => l.id))\n const linksById = new Map(objectType.links.map((l) => [l.id, l]))\n const propertyIds = new Set(objectType.properties.map((p) => p.id))\n\n for (const [key, descriptor] of Object.entries(linkMapping)) {\n // Rule 1: valid link id\n if (!linkIds.has(key)) {\n const available = [...linkIds].sort().join(\", \")\n throw new ProjectionValidationError(\n `Link '${key}' does not exist on object type '${objectType.id}'. ` +\n `Available links: ${available}`\n )\n }\n\n // Rule 2: key matches descriptor.linkId\n if (key !== descriptor.linkId) {\n throw new ProjectionValidationError(\n `Link mapping key '${key}' does not match descriptor linkId '${descriptor.linkId}'.`\n )\n }\n\n // Rule 3: single concrete target\n const link = linksById.get(key)!\n if (Array.isArray(link.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `Link '${key}' on object type '${objectType.id}' has a polymorphic target. ` +\n `FK projection of polymorphic links is not yet supported.`\n )\n }\n if (link.targetObjectTypeId === \"*\") {\n throw new ProjectionValidationError(\n `Link '${key}' on object type '${objectType.id}' has a wildcard target. ` +\n `FK projection of wildcard links is not supported.`\n )\n }\n\n const sourcePropertyId = descriptor.sourcePropertyId\n const sourceField = descriptor.sourceField\n if (sourcePropertyId && sourceField) {\n throw new ProjectionValidationError(\n `FK link '${key}' must use either sourceProperty or sourceField, not both.`\n )\n }\n if (!sourcePropertyId && !sourceField) {\n throw new ProjectionValidationError(\n `FK link '${key}' must declare sourceProperty or sourceField.`\n )\n }\n\n if (!sourcePropertyId) {\n continue\n }\n\n // Rule 4: source property exists on the type\n if (!propertyIds.has(sourcePropertyId)) {\n const available = [...propertyIds].sort().join(\", \")\n throw new ProjectionValidationError(\n `Source property '${sourcePropertyId}' does not exist on ` +\n `object type '${objectType.id}'. Available properties: ${available}`\n )\n }\n\n // Rule 5: source property is in the property mapping\n if (!(sourcePropertyId in propertyMapping)) {\n throw new ProjectionValidationError(\n `Source property '${sourcePropertyId}' for link '${key}' ` +\n `must be included in the property mapping.`\n )\n }\n }\n\n return Object.fromEntries(\n Object.entries(linkMapping).map(([linkId, descriptor]) => [\n linkId,\n {\n linkId: descriptor.linkId,\n ...(descriptor.sourcePropertyId !== undefined\n ? { sourcePropertyId: descriptor.sourcePropertyId }\n : {}),\n ...(descriptor.sourceField !== undefined ? { sourceField: descriptor.sourceField } : {}),\n targetObjectTypeId: descriptor.targetObjectTypeId,\n },\n ])\n )\n}\n\n/**\n * Validates that a link token points to a single concrete target type.\n *\n * Rules:\n * 1. Not an array (polymorphic).\n * 2. Not wildcard (\"*\").\n */\nexport function validateLinkProjectionTarget(linkToken: {\n readonly id: string\n readonly targetObjectTypeId: string | readonly string[]\n}): void {\n if (Array.isArray(linkToken.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `Link '${linkToken.id}' has a polymorphic target. ` +\n `Link projection of polymorphic links is not yet supported.`\n )\n }\n if (linkToken.targetObjectTypeId === \"*\") {\n throw new ProjectionValidationError(\n `Link '${linkToken.id}' has a wildcard target. ` +\n `Link projection of wildcard links is not supported.`\n )\n }\n}\n\n/**\n * Validates a telemetry projection's field mapping against its dataset columns\n * and object type: the telemetry property exists and is telemetry-enabled, and\n * every mapped field (objectId/at/value/unit) resolves to a real dataset column.\n *\n * Owned here so startup validation and the projection worker's pre-execution\n * check share one implementation and cannot drift; the worker layers\n * dataset-version column type compatibility on top of these rules. Returns the\n * resolved telemetry property for callers that need its schema.\n */\nexport function validateTelemetryProjectionFieldMapping(\n projection: TelemetryProjectionDefinition,\n objectType: { readonly id: string; readonly properties: readonly Property[] },\n datasetColumnNames: ReadonlySet<string>,\n prefix: string\n): Property {\n const property = objectType.properties.find((candidate) => candidate.id === projection.propertyId)\n if (!property) {\n throw new ProjectionValidationError(\n `${prefix}: unknown property \"${projection.propertyId}\" on type \"${projection.objectTypeId}\"`\n )\n }\n if (property.mode !== \"telemetry\") {\n throw new ProjectionValidationError(\n `${prefix}: property \"${projection.propertyId}\" on type \"${projection.objectTypeId}\" must be telemetry-enabled`\n )\n }\n\n const mappedFields = [\n [\"objectId\", projection.objectIdField],\n [\"at\", projection.atField],\n [\"value\", projection.valueField],\n ...(projection.unitField !== undefined ? ([[\"unit\", projection.unitField]] as const) : []),\n ] as const\n for (const [fieldRole, columnName] of mappedFields) {\n if (!datasetColumnNames.has(columnName)) {\n throw new ProjectionValidationError(\n `${prefix}: ${fieldRole} field \"${columnName}\" references unknown dataset column ` +\n `on dataset \"${projection.datasetId}\"`\n )\n }\n }\n\n return property\n}\n\n/**\n * Validates all registered projections against the ontology at startup.\n *\n * For object projections:\n * 1. `datasetId` exists in the dataset registry.\n * 2. `objectTypeId` exists in the type registry.\n * 3. All property mapping keys are valid property ids on the type.\n * 4. All mapped dataset columns exist in the referenced dataset.\n * 5. The primary property is included in the property mapping.\n * 6. FK link descriptors reference valid links, valid source properties (present in mapping),\n * and valid target types with primaries.\n *\n * For link projections:\n * 1. `datasetId` exists in the dataset registry.\n * 2. Source and target types exist.\n * 3. The link exists on the source type.\n * 4. Source and target fields exist in the referenced dataset.\n * 5. Both source and target types have primary properties.\n *\n * For telemetry projections:\n * 1. `datasetId` exists in the dataset registry.\n * 2. `objectTypeId` exists in the type registry.\n * 3. `propertyId` exists on the object type and is telemetry-enabled.\n * 4. Point mapping fields exist in the referenced dataset.\n */\nexport interface ValidatedProjectionRecord<TDefinition extends ProjectionDefinition>\n extends ProjectionOwnershipRecord<TDefinition> {\n readonly dataset: DatasetDefinition\n}\n\nexport interface ProjectionValidationInput {\n readonly objectProjections: readonly ObjectProjectionDefinition[]\n readonly linkProjections: readonly LinkProjectionDefinition[]\n readonly telemetryProjections: readonly TelemetryProjectionDefinition[]\n}\n\nexport interface ValidatedProjectionCatalog {\n readonly objectProjections: readonly ValidatedProjectionRecord<ObjectProjectionDefinition>[]\n readonly linkProjections: readonly ValidatedProjectionRecord<LinkProjectionDefinition>[]\n readonly telemetryProjections: readonly ValidatedProjectionRecord<TelemetryProjectionDefinition>[]\n}\n\nexport function validateProjectionsAtStartup(\n projections: ProjectionValidationInput,\n ontology: OntologyDefinitionCatalog,\n datasetsById: ReadonlyMap<string, DatasetDefinition>\n): ValidatedProjectionCatalog {\n const { objectProjections, linkProjections, telemetryProjections } = projections\n const objectTypesById = ontology.getObjectTypesById()\n const primaryByTypeId = ontology.getPrimaryByTypeId()\n const validatedObjectProjections: ValidatedProjectionRecord<ObjectProjectionDefinition>[] = []\n const validatedLinkProjections: ValidatedProjectionRecord<LinkProjectionDefinition>[] = []\n const validatedTelemetryProjections: ValidatedProjectionRecord<TelemetryProjectionDefinition>[] =\n []\n\n validateMaterializationOntologyConstraints(ontology)\n\n for (const projection of objectProjections) {\n const prefix = `Projection \"${projection.id}\"`\n const dataset = datasetsById.get(projection.datasetId)\n if (!dataset) {\n throw new ProjectionValidationError(\n `${prefix}: unknown dataset \"${projection.datasetId}\". ` +\n `Add it to 'datasets' in createSixb() or export it from 'datasets/'.`\n )\n }\n\n const objectType = objectTypesById.get(projection.objectTypeId)\n if (!objectType) {\n throw new ProjectionValidationError(\n `${prefix}: unknown object type \"${projection.objectTypeId}\"`\n )\n }\n\n const datasetColumnNames = new Set(dataset.schema.columns.map((column) => column.name))\n const conflictResolution = projection.conflictResolution ?? { strategy: \"editsWin\" }\n if (conflictResolution.strategy === \"mostRecent\") {\n const sourceTimestamp = dataset.schema.columns.find(\n (column) => column.name === conflictResolution.sourceTimestamp\n )\n if (!sourceTimestamp) {\n throw new ProjectionValidationError(\n `${prefix}: source timestamp \"${conflictResolution.sourceTimestamp}\" references unknown ` +\n `dataset column on dataset \"${projection.datasetId}\"`\n )\n }\n if (sourceTimestamp.type !== \"timestamp\") {\n throw new ProjectionValidationError(\n `${prefix}: source timestamp \"${conflictResolution.sourceTimestamp}\" must reference a ` +\n `timestamp dataset column`\n )\n }\n if (sourceTimestamp.nullable === true) {\n throw new ProjectionValidationError(\n `${prefix}: source timestamp \"${conflictResolution.sourceTimestamp}\" must reference a ` +\n `non-null timestamp dataset column`\n )\n }\n }\n const propertyIds = new Set(objectType.properties.map((p) => p.id))\n for (const [propId, columnName] of Object.entries(projection.properties)) {\n if (!propertyIds.has(propId)) {\n throw new ProjectionValidationError(\n `${prefix}: unknown property \"${propId}\" on type \"${projection.objectTypeId}\"`\n )\n }\n if (!datasetColumnNames.has(columnName)) {\n throw new ProjectionValidationError(\n `${prefix}: property \"${propId}\" references unknown dataset column \"${columnName}\" ` +\n `on dataset \"${projection.datasetId}\"`\n )\n }\n const property = objectType.properties.find((candidate) => candidate.id === propId)\n if (property?.mode === \"telemetry\") {\n throw new ProjectionValidationError(\n `[Sixb] ${prefix}: source mappings cannot own telemetry property \"${projection.objectTypeId}.${propId}\"`\n )\n }\n }\n\n const primaryId = primaryByTypeId.get(projection.objectTypeId)!\n if (!(primaryId in projection.properties)) {\n throw new ProjectionValidationError(\n `${prefix}: primary property \"${primaryId}\" must be in property mapping`\n )\n }\n\n const linkIds = new Set(objectType.links.map((l) => l.id))\n for (const [linkId, fk] of Object.entries(projection.links)) {\n if (!linkIds.has(linkId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" references unknown link on type \"${projection.objectTypeId}\"`\n )\n }\n if (fk.linkId !== linkId) {\n throw new ProjectionValidationError(\n `${prefix}: FK link mapping key \"${linkId}\" does not match descriptor linkId \"${fk.linkId}\"`\n )\n }\n const sourcePropertyId = fk.sourcePropertyId\n const sourceField = fk.sourceField\n if (sourcePropertyId && sourceField) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" must use either sourcePropertyId or sourceField, not both`\n )\n }\n if (!sourcePropertyId && !sourceField) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" must declare sourcePropertyId or sourceField`\n )\n }\n if (sourcePropertyId && !propertyIds.has(sourcePropertyId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" source property \"${sourcePropertyId}\" does not exist on type \"${projection.objectTypeId}\"`\n )\n }\n if (sourcePropertyId && !(sourcePropertyId in projection.properties)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" source property \"${sourcePropertyId}\" must be in property mapping`\n )\n }\n if (sourceField && !datasetColumnNames.has(sourceField)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" source field \"${sourceField}\" references unknown dataset column on dataset \"${projection.datasetId}\"`\n )\n }\n if (!objectTypesById.has(fk.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" target type \"${fk.targetObjectTypeId}\" is unknown`\n )\n }\n if (!primaryByTypeId.has(fk.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" target type \"${fk.targetObjectTypeId}\" has no primary property`\n )\n }\n const link = objectType.links.find((candidate) => candidate.id === linkId)!\n if (!ontology.isValidLinkTarget(link.targetObjectTypeId, fk.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: FK link \"${linkId}\" target type \"${fk.targetObjectTypeId}\" is not compatible with its declared target`\n )\n }\n }\n\n validatedObjectProjections.push({\n definition: projection,\n dataset,\n ownership: computeProjectionOwnership(projection, ontology),\n })\n }\n\n for (const projection of linkProjections) {\n const prefix = `Projection \"${projection.id}\"`\n const dataset = datasetsById.get(projection.datasetId)\n if (!dataset) {\n throw new ProjectionValidationError(\n `${prefix}: unknown dataset \"${projection.datasetId}\". ` +\n `Add it to 'datasets' in createSixb() or export it from 'datasets/'.`\n )\n }\n\n if (!objectTypesById.has(projection.sourceObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: unknown source type \"${projection.sourceObjectTypeId}\"`\n )\n }\n if (!objectTypesById.has(projection.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: unknown target type \"${projection.targetObjectTypeId}\"`\n )\n }\n const sourceType = objectTypesById.get(projection.sourceObjectTypeId)!\n const link = sourceType.links.find((candidate) => candidate.id === projection.linkId)\n if (!link) {\n throw new ProjectionValidationError(\n `${prefix}: link \"${projection.linkId}\" does not exist on source type \"${projection.sourceObjectTypeId}\"`\n )\n }\n if (!ontology.isValidLinkTarget(link.targetObjectTypeId, projection.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: target type \"${projection.targetObjectTypeId}\" is not compatible with link \"${projection.linkId}\"`\n )\n }\n const datasetColumnNames = new Set(dataset.schema.columns.map((column) => column.name))\n if (!datasetColumnNames.has(projection.sourceField)) {\n throw new ProjectionValidationError(\n `${prefix}: source field \"${projection.sourceField}\" references unknown dataset column ` +\n `on dataset \"${projection.datasetId}\"`\n )\n }\n if (!datasetColumnNames.has(projection.targetField)) {\n throw new ProjectionValidationError(\n `${prefix}: target field \"${projection.targetField}\" references unknown dataset column ` +\n `on dataset \"${projection.datasetId}\"`\n )\n }\n if (!primaryByTypeId.has(projection.sourceObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: source type \"${projection.sourceObjectTypeId}\" has no primary property`\n )\n }\n if (!primaryByTypeId.has(projection.targetObjectTypeId)) {\n throw new ProjectionValidationError(\n `${prefix}: target type \"${projection.targetObjectTypeId}\" has no primary property`\n )\n }\n\n validatedLinkProjections.push({\n definition: projection,\n dataset,\n ownership: computeProjectionOwnership(projection, ontology),\n })\n }\n\n for (const projection of telemetryProjections) {\n const prefix = `Projection \"${projection.id}\"`\n const dataset = datasetsById.get(projection.datasetId)\n if (!dataset) {\n throw new ProjectionValidationError(\n `${prefix}: unknown dataset \"${projection.datasetId}\". ` +\n `Add it to 'datasets' in createSixb() or export it from 'datasets/'.`\n )\n }\n\n const objectType = objectTypesById.get(projection.objectTypeId)\n if (!objectType) {\n throw new ProjectionValidationError(\n `${prefix}: unknown object type \"${projection.objectTypeId}\"`\n )\n }\n\n const datasetColumnNames = new Set(dataset.schema.columns.map((column) => column.name))\n validateTelemetryProjectionFieldMapping(projection, objectType, datasetColumnNames, prefix)\n validatedTelemetryProjections.push({\n definition: projection,\n dataset,\n ownership: computeProjectionOwnership(projection, ontology),\n })\n }\n\n const validatedProjections = [\n ...validatedObjectProjections,\n ...validatedLinkProjections,\n ...validatedTelemetryProjections,\n ]\n validateProjectionOwnership(validatedProjections)\n return {\n objectProjections: validatedObjectProjections,\n linkProjections: validatedLinkProjections,\n telemetryProjections: validatedTelemetryProjections,\n }\n}\n\nfunction validateMaterializationOntologyConstraints(ontology: OntologyDefinitionCatalog): void {\n for (const objectType of ontology.getObjectTypesById().values()) {\n for (const property of objectType.properties) {\n if (property.mode === \"telemetry\" && property.required === true) {\n throw new ProjectionValidationError(\n `[Sixb] Telemetry property '${objectType.id}.${property.id}' cannot be required.`\n )\n }\n }\n for (const link of objectType.links) {\n for (const property of link.properties ?? []) {\n if (property.mode === \"telemetry\") {\n throw new ProjectionValidationError(\n `[Sixb] Link property '${objectType.id}.${link.id}.${property.id}' cannot use telemetry mode.`\n )\n }\n }\n }\n }\n}\n",
16
+ "/**\n * Projection DSL builders, helpers, and type guards.\n *\n * Uses the same fluent builder style as the other definition APIs.\n */\n\nimport type {\n DatasetColumnDefinitionOf,\n DatasetColumnNameOf,\n DatasetColumnType,\n DatasetColumnTypeOf,\n DatasetDefinition,\n} from \"../datasets\"\nimport type { LinkToken, PropertyToken } from \"../ontology/tokens\"\nimport type { ObjectLink, ObjectType, Property, Schema } from \"../ontology/types\"\nimport { ProjectionValidationError } from \"./errors\"\nimport type {\n ForeignKeyDescriptor,\n LinkProjectionDefinition,\n LinkProjectionTarget,\n ObjectProjectionDefinition,\n ObjectProjectionTarget,\n ProjectionDefinition,\n ProjectionTarget,\n SourceEditConflictResolution,\n TelemetryProjectionDefinition,\n} from \"./types\"\nimport {\n validateAndLowerLinkMapping,\n validateLinkProjectionTarget,\n validatePropertyMapping,\n} from \"./validation\"\n\n// ── Internal helpers ─────────────────────────────────────────\n\nfunction assertNonEmpty(value: string, field: string): void {\n if (!value.trim()) {\n throw new ProjectionValidationError(`Projection ${field} must not be empty.`)\n }\n}\n\nfunction assertProjectionDataset(dataset: DatasetDefinition): void {\n if (!dataset || dataset.kind !== \"dataset\" || typeof dataset.id !== \"string\") {\n throw new ProjectionValidationError(\"Projection dataset must be a dataset definition.\")\n }\n assertNonEmpty(dataset.id, \"dataset id\")\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\n// ── Type utilities ───────────────────────────────────────────\n\n/** Union of property ids from an ObjectType. */\ntype PropertyIdOf<T extends ObjectType> = T[\"properties\"][number][\"id\"]\n\n/** Property definition by id from an ObjectType. */\ntype PropertyById<T extends ObjectType, TPropertyId extends PropertyIdOf<T>> = Extract<\n T[\"properties\"][number],\n { id: TPropertyId }\n>\n\n/** Union of link ids from an ObjectType. */\ntype LinkIdOf<T extends ObjectType> = T[\"links\"][number][\"id\"]\n\ntype LinkById<T extends ObjectType, TLinkId extends LinkIdOf<T>> = Extract<\n T[\"links\"][number],\n { id: TLinkId }\n>\n\ntype SingleTargetIdOf<TLink extends ObjectLink> = TLink[\"targetObjectTypeId\"] extends string\n ? TLink[\"targetObjectTypeId\"]\n : never\n\ntype ResolvedProjectionSchema<TSchema extends Schema> = TSchema extends {\n type: \"valueTypeRef\"\n _resolved: infer TResolved extends Schema\n}\n ? ResolvedProjectionSchema<TResolved>\n : TSchema extends { type: \"valueTypeRef\" }\n ? never\n : TSchema\n\ntype StringCompatibleProjectionSchema =\n | \"string\"\n | \"uuid\"\n | { type: \"enum\"; values: readonly string[] }\n\ntype IntegerCompatibleProjectionSchema =\n | \"integer\"\n | \"double\"\n | \"decimal\"\n | { type: \"enum\"; values: readonly number[] }\n\ntype JsonCompatibleProjectionSchema = { type: \"object\" | \"array\" | \"map\" | \"enum\" }\n\ntype ProjectionSchemaByDatasetColumnType = {\n readonly string: StringCompatibleProjectionSchema\n readonly boolean: \"boolean\"\n readonly int64: IntegerCompatibleProjectionSchema\n readonly float64: \"double\"\n readonly decimal: \"decimal\" | \"double\"\n readonly date: \"date\"\n readonly timestamp: \"timestamp\"\n readonly json: JsonCompatibleProjectionSchema\n readonly fileRef: \"fileRef\"\n}\n\ntype DatasetColumnCompatibleWithSchema<\n TColumnType extends DatasetColumnType,\n TSchema extends Schema,\n> = [ResolvedProjectionSchema<TSchema>] extends [never]\n ? false\n : ResolvedProjectionSchema<TSchema> extends ProjectionSchemaByDatasetColumnType[TColumnType]\n ? true\n : false\n\ntype DatasetColumnNameCompatibleWithSchema<\n TDataset extends DatasetDefinition,\n TSchema extends Schema,\n> =\n string extends DatasetColumnNameOf<TDataset>\n ? string\n : {\n [TColumnName in DatasetColumnNameOf<TDataset>]: DatasetColumnCompatibleWithSchema<\n DatasetColumnTypeOf<TDataset, TColumnName>,\n TSchema\n > extends true\n ? TColumnName\n : never\n }[DatasetColumnNameOf<TDataset>]\n\ntype StringDatasetColumnNameOf<TDataset extends DatasetDefinition> =\n string extends DatasetColumnNameOf<TDataset>\n ? string\n : {\n [TColumnName in DatasetColumnNameOf<TDataset>]: DatasetColumnTypeOf<\n TDataset,\n TColumnName\n > extends \"string\"\n ? TColumnName\n : never\n }[DatasetColumnNameOf<TDataset>]\n\ntype DateLikeDatasetColumnNameOf<TDataset extends DatasetDefinition> =\n string extends DatasetColumnNameOf<TDataset>\n ? string\n : {\n [TColumnName in DatasetColumnNameOf<TDataset>]: DatasetColumnTypeOf<\n TDataset,\n TColumnName\n > extends \"string\" | \"date\" | \"timestamp\"\n ? TColumnName\n : never\n }[DatasetColumnNameOf<TDataset>]\n\ntype TimestampDatasetColumnNameOf<TDataset extends DatasetDefinition> =\n string extends DatasetColumnNameOf<TDataset>\n ? string\n : {\n [TColumnName in DatasetColumnNameOf<TDataset>]: DatasetColumnTypeOf<\n TDataset,\n TColumnName\n > extends \"timestamp\"\n ? DatasetColumnDefinitionOf<TDataset, TColumnName> extends { readonly nullable: true }\n ? never\n : TColumnName\n : never\n }[DatasetColumnNameOf<TDataset>]\n\ntype ProjectionMappingFor<TObjectType extends ObjectType, TDataset extends DatasetDefinition> = {\n readonly [TPropertyId in PropertyIdOf<TObjectType>]?: DatasetColumnNameCompatibleWithSchema<\n TDataset,\n PropertyById<TObjectType, TPropertyId>[\"schema\"]\n >\n}\n\ntype ExactProjectionMapping<TObjectType extends ObjectType, TMapping> = TMapping & {\n readonly [TKey in Exclude<keyof TMapping, PropertyIdOf<TObjectType>>]: never\n}\n\ntype TelemetryPropertyToken<TObjectTypeId extends string = string> = PropertyToken<\n TObjectTypeId,\n string,\n Property & { readonly mode: \"telemetry\" }\n>\n\ntype TelemetryProjectionPointMapping<\n TPropertyToken extends TelemetryPropertyToken,\n TDataset extends DatasetDefinition,\n> = {\n readonly objectId: StringDatasetColumnNameOf<TDataset>\n readonly at: DateLikeDatasetColumnNameOf<TDataset>\n readonly value: DatasetColumnNameCompatibleWithSchema<\n TDataset,\n TPropertyToken[\"property\"][\"schema\"]\n >\n readonly unit?: StringDatasetColumnNameOf<TDataset>\n}\n\ntype ExactTelemetryProjectionPointMapping<TMapping> = TMapping & {\n readonly [TKey in Exclude<keyof TMapping, \"objectId\" | \"at\" | \"value\" | \"unit\">]: never\n}\n\ntype ForeignKeyFromSourceProperty = Omit<\n ForeignKeyDescriptor,\n \"sourcePropertyId\" | \"sourceField\"\n> & {\n readonly sourcePropertyId: string\n readonly sourceField?: never\n}\n\ntype ForeignKeyFromSourceField<TSourceField extends string = string> = Omit<\n ForeignKeyDescriptor,\n \"sourcePropertyId\" | \"sourceField\"\n> & {\n readonly sourcePropertyId?: never\n readonly sourceField: TSourceField\n}\n\ntype ProjectionForeignKeyDescriptor<TDataset extends DatasetDefinition> =\n | ForeignKeyFromSourceProperty\n | ForeignKeyFromSourceField<StringDatasetColumnNameOf<TDataset>>\n\ntype ProjectionForeignKeyTokenInput<\n TObjectType extends ObjectType,\n TDataset extends DatasetDefinition,\n TLinkId extends LinkIdOf<TObjectType>,\n> =\n | {\n readonly link: LinkToken<\n TObjectType[\"id\"],\n TLinkId,\n SingleTargetIdOf<LinkById<TObjectType, TLinkId>>\n >\n readonly sourceProperty: PropertyToken<TObjectType[\"id\"]>\n readonly target: ObjectType &\n (\n | { id: NoInfer<SingleTargetIdOf<LinkById<TObjectType, TLinkId>>> }\n | { extends: NoInfer<SingleTargetIdOf<LinkById<TObjectType, TLinkId>>> }\n )\n }\n | {\n readonly link: LinkToken<\n TObjectType[\"id\"],\n TLinkId,\n SingleTargetIdOf<LinkById<TObjectType, TLinkId>>\n >\n readonly sourceField: StringDatasetColumnNameOf<TDataset>\n readonly target: ObjectType &\n (\n | { id: NoInfer<SingleTargetIdOf<LinkById<TObjectType, TLinkId>>> }\n | { extends: NoInfer<SingleTargetIdOf<LinkById<TObjectType, TLinkId>>> }\n )\n }\n\nexport type ProjectionForeignKeyInput<\n TObjectType extends ObjectType,\n TDataset extends DatasetDefinition,\n TLinkId extends LinkIdOf<TObjectType>,\n> =\n | ProjectionForeignKeyDescriptor<TDataset>\n | ProjectionForeignKeyTokenInput<TObjectType, TDataset, TLinkId>\n\nfunction lowerForeignKeyMapping<TObjectType extends ObjectType, TDataset extends DatasetDefinition>(\n mapping: {\n [K in LinkIdOf<TObjectType>]?: ProjectionForeignKeyInput<TObjectType, TDataset, K>\n }\n): Record<string, ForeignKeyDescriptor> {\n const lowered: Record<string, ForeignKeyDescriptor> = {}\n for (const [linkId, descriptor] of Object.entries(mapping)) {\n if (!descriptor) continue\n lowered[linkId] = isForeignKeyDescriptor(descriptor)\n ? descriptor\n : fromForeignKey(descriptor as Parameters<typeof fromForeignKey>[0])\n }\n return lowered\n}\n\nfunction isForeignKeyDescriptor(value: unknown): value is ForeignKeyDescriptor {\n return isRecord(value) && typeof value.linkId === \"string\"\n}\n\n// ── defineProjection ─────────────────────────────────────────\n\ninterface ObjectProjectionSourceBuilder<TObjectType extends ObjectType> {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): ObjectProjectionMappingBuilder<TObjectType, TDataset>\n}\n\ninterface ObjectProjectionMappingBuilder<\n TObjectType extends ObjectType,\n TDataset extends DatasetDefinition,\n> {\n properties<const TMapping extends ProjectionMappingFor<TObjectType, TDataset>>(\n mapping: ExactProjectionMapping<TObjectType, TMapping>\n ): ObjectProjectionBuilder<TObjectType, TDataset>\n}\n\nexport type ObjectProjectionConflictResolution<TDataset extends DatasetDefinition> =\n | { readonly strategy: \"editsWin\" }\n | {\n readonly strategy: \"mostRecent\"\n readonly sourceTimestamp: TimestampDatasetColumnNameOf<TDataset>\n }\n\nexport interface ObjectProjectionBuilder<\n TObjectType extends ObjectType,\n TDataset extends DatasetDefinition,\n> extends ObjectProjectionDefinition {\n readonly conflictResolution: SourceEditConflictResolution\n withLinks(\n mapping: { [K in LinkIdOf<TObjectType>]?: ProjectionForeignKeyInput<TObjectType, TDataset, K> }\n ): ObjectProjectionBuilder<TObjectType, TDataset>\n resolveConflicts(\n resolution: ObjectProjectionConflictResolution<TDataset>\n ): ObjectProjectionBuilder<TObjectType, TDataset>\n}\n\n/**\n * Defines an object, link, or telemetry projection from its ontology target.\n *\n * ```ts\n * defineProjection(\"room-projection\", Room)\n * .fromDataset(canonicalRoomsDataset)\n * .properties({ id: \"room_id\", name: \"room_name\" })\n * .withLinks({\n * inBuilding: {\n * link: Room.l.inBuilding,\n * sourceField: \"building_id\",\n * target: Building,\n * },\n * })\n * ```\n */\nexport function defineProjection<const TObjectType extends ObjectType>(\n id: string,\n objectType: TObjectType\n): ObjectProjectionSourceBuilder<TObjectType>\nexport function defineProjection<\n TObjectTypeId extends string,\n TLinkId extends string,\n TTargetObjectTypeId extends string,\n>(\n id: string,\n linkToken: LinkToken<TObjectTypeId, TLinkId, TTargetObjectTypeId>\n): LinkProjectionSourceBuilder\nexport function defineProjection<const TPropertyToken extends TelemetryPropertyToken>(\n id: string,\n propertyToken: TPropertyToken\n): TelemetryProjectionSourceBuilder<TPropertyToken>\nexport function defineProjection(\n id: string,\n target: ObjectType | LinkToken<string, string, string> | TelemetryPropertyToken\n):\n | ObjectProjectionSourceBuilder<ObjectType>\n | LinkProjectionSourceBuilder\n | TelemetryProjectionSourceBuilder<TelemetryPropertyToken> {\n if (\"link\" in target) return buildLinkProjection(id, target)\n if (\"property\" in target) return buildTelemetryProjection(id, target)\n return buildObjectProjection(id, target)\n}\n\nfunction buildObjectProjection<const TObjectType extends ObjectType>(\n id: string,\n objectType: TObjectType\n): ObjectProjectionSourceBuilder<TObjectType> {\n assertNonEmpty(id, \"id\")\n\n return {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): ObjectProjectionMappingBuilder<TObjectType, TDataset> {\n assertProjectionDataset(dataset)\n const datasetId = dataset.id\n\n return {\n properties<const TMapping extends ProjectionMappingFor<TObjectType, TDataset>>(\n mapping: ExactProjectionMapping<TObjectType, TMapping>\n ): ObjectProjectionBuilder<TObjectType, TDataset> {\n const propertyMapping = mapping as Record<string, string>\n validatePropertyMapping(objectType, propertyMapping)\n\n return objectProjectionBuilder({\n id,\n objectType,\n datasetId,\n propertyMapping,\n links: {},\n conflictResolution: { strategy: \"editsWin\" },\n })\n },\n }\n },\n }\n}\n\nfunction objectProjectionBuilder<\n TObjectType extends ObjectType,\n TDataset extends DatasetDefinition,\n>(input: {\n readonly id: string\n readonly objectType: TObjectType\n readonly datasetId: string\n readonly propertyMapping: Readonly<Record<string, string>>\n readonly links: Readonly<Record<string, ForeignKeyDescriptor>>\n readonly conflictResolution: SourceEditConflictResolution\n}): ObjectProjectionBuilder<TObjectType, TDataset> {\n const definition: ObjectProjectionDefinition & {\n readonly conflictResolution: SourceEditConflictResolution\n } = {\n _tag: \"ObjectProjectionDefinition\",\n id: input.id,\n objectTypeId: input.objectType.id,\n datasetId: input.datasetId,\n properties: { ...input.propertyMapping },\n links: { ...input.links },\n conflictResolution: { ...input.conflictResolution },\n }\n\n return Object.assign(definition, {\n withLinks(\n linkMapping: {\n [K in LinkIdOf<TObjectType>]?: ProjectionForeignKeyInput<TObjectType, TDataset, K>\n }\n ): ObjectProjectionBuilder<TObjectType, TDataset> {\n const loweredLinkMapping = lowerForeignKeyMapping(linkMapping)\n const validatedLinks = validateAndLowerLinkMapping(\n input.objectType,\n loweredLinkMapping,\n input.propertyMapping as Record<string, string>\n )\n return objectProjectionBuilder({ ...input, links: validatedLinks })\n },\n resolveConflicts(\n resolution: ObjectProjectionConflictResolution<TDataset>\n ): ObjectProjectionBuilder<TObjectType, TDataset> {\n validateConflictResolution(resolution)\n return objectProjectionBuilder({\n ...input,\n conflictResolution: resolution as SourceEditConflictResolution,\n })\n },\n })\n}\n\nfunction validateConflictResolution(resolution: SourceEditConflictResolution): void {\n if (resolution.strategy === \"editsWin\") return\n assertNonEmpty(resolution.sourceTimestamp, \"source timestamp field\")\n}\n\n// ── Telemetry projection ────────────────────────────────────\n\ninterface TelemetryProjectionSourceBuilder<TPropertyToken extends TelemetryPropertyToken> {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): TelemetryProjectionMappingBuilder<TPropertyToken, TDataset>\n}\n\ninterface TelemetryProjectionMappingBuilder<\n TPropertyToken extends TelemetryPropertyToken,\n TDataset extends DatasetDefinition,\n> {\n points<const TMapping extends TelemetryProjectionPointMapping<TPropertyToken, TDataset>>(\n mapping: ExactTelemetryProjectionPointMapping<TMapping>\n ): TelemetryProjectionDefinition\n}\n\n/**\n * Fluent builder for {@link TelemetryProjectionDefinition}.\n *\n * ```ts\n * defineProjection(\"room-temperatures\", Room.p.temperature)\n * .fromDataset(roomReadingsDataset)\n * .points({\n * objectId: \"room_id\",\n * at: \"observed_at\",\n * value: \"temperature\",\n * unit: \"unit\",\n * })\n * ```\n */\nfunction buildTelemetryProjection<const TPropertyToken extends TelemetryPropertyToken>(\n id: string,\n propertyToken: TPropertyToken\n): TelemetryProjectionSourceBuilder<TPropertyToken> {\n assertNonEmpty(id, \"id\")\n validateTelemetryProjectionProperty(propertyToken)\n\n return {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): TelemetryProjectionMappingBuilder<TPropertyToken, TDataset> {\n assertProjectionDataset(dataset)\n const datasetId = dataset.id\n\n return {\n points<const TMapping extends TelemetryProjectionPointMapping<TPropertyToken, TDataset>>(\n mapping: ExactTelemetryProjectionPointMapping<TMapping>\n ): TelemetryProjectionDefinition {\n const pointMapping = lowerTelemetryPointMapping(mapping)\n return {\n _tag: \"TelemetryProjectionDefinition\",\n id,\n objectTypeId: propertyToken.objectTypeId,\n propertyId: propertyToken.id,\n datasetId,\n objectIdField: pointMapping.objectId,\n atField: pointMapping.at,\n valueField: pointMapping.value,\n ...(pointMapping.unit !== undefined ? { unitField: pointMapping.unit } : {}),\n }\n },\n }\n },\n }\n}\n\nfunction validateTelemetryProjectionProperty(propertyToken: PropertyToken): void {\n if (propertyToken.property.mode !== \"telemetry\") {\n throw new ProjectionValidationError(\n `Projection property '${propertyToken.objectTypeId}.${propertyToken.id}' must be telemetry-enabled.`\n )\n }\n}\n\nfunction lowerTelemetryPointMapping(mapping: {\n readonly objectId?: string\n readonly at?: string\n readonly value?: string\n readonly unit?: string\n}): {\n readonly objectId: string\n readonly at: string\n readonly value: string\n readonly unit?: string\n} {\n const allowedKeys = new Set([\"objectId\", \"at\", \"value\", \"unit\"])\n for (const key of Object.keys(mapping)) {\n if (!allowedKeys.has(key)) {\n throw new ProjectionValidationError(\n `Telemetry projection point mapping contains unknown key '${key}'.`\n )\n }\n }\n\n if (mapping.objectId === undefined) {\n throw new ProjectionValidationError(\"Telemetry projection point mapping requires objectId.\")\n }\n if (mapping.at === undefined) {\n throw new ProjectionValidationError(\"Telemetry projection point mapping requires at.\")\n }\n if (mapping.value === undefined) {\n throw new ProjectionValidationError(\"Telemetry projection point mapping requires value.\")\n }\n\n assertNonEmpty(mapping.objectId, \"objectId field\")\n assertNonEmpty(mapping.at, \"at field\")\n assertNonEmpty(mapping.value, \"value field\")\n if (mapping.unit !== undefined) {\n assertNonEmpty(mapping.unit, \"unit field\")\n }\n\n return {\n objectId: mapping.objectId,\n at: mapping.at,\n value: mapping.value,\n ...(mapping.unit !== undefined ? { unit: mapping.unit } : {}),\n }\n}\n\n// ── fromForeignKey ───────────────────────────────────────────\n\n/**\n * Creates a {@link ForeignKeyDescriptor} from typed tokens.\n *\n * Compile-time constraints:\n * - `TObjectTypeId` ties `link` and `sourceProperty` to the same object type\n * when a projected source property is used.\n * - `TTargetObjectTypeId` (inferred from the link token) constrains `target`\n * to an ObjectType whose `id` or `extends` matches the link's declared target.\n * This covers exact type match and direct subtypes. Multi-level inheritance\n * is validated at Sixb startup when the full type graph is available.\n *\n * ```ts\n * fromForeignKey({\n * link: Room.l.inBuilding,\n * sourceProperty: Room.p.buildingRef,\n * target: Building,\n * })\n * ```\n */\nexport function fromForeignKey<\n TObjectTypeId extends string,\n TTargetObjectTypeId extends string,\n>(input: {\n link: LinkToken<TObjectTypeId, string, TTargetObjectTypeId>\n sourceProperty: PropertyToken<TObjectTypeId>\n target: ObjectType &\n ({ id: NoInfer<TTargetObjectTypeId> } | { extends: NoInfer<TTargetObjectTypeId> })\n}): ForeignKeyFromSourceProperty\nexport function fromForeignKey<\n TObjectTypeId extends string,\n TTargetObjectTypeId extends string,\n const TSourceField extends string,\n>(input: {\n link: LinkToken<TObjectTypeId, string, TTargetObjectTypeId>\n sourceField: TSourceField\n target: ObjectType &\n ({ id: NoInfer<TTargetObjectTypeId> } | { extends: NoInfer<TTargetObjectTypeId> })\n}): ForeignKeyFromSourceField<TSourceField>\nexport function fromForeignKey<\n TObjectTypeId extends string,\n TTargetObjectTypeId extends string,\n>(input: {\n link: LinkToken<TObjectTypeId, string, TTargetObjectTypeId>\n sourceProperty?: PropertyToken<TObjectTypeId>\n sourceField?: string\n target: ObjectType &\n ({ id: NoInfer<TTargetObjectTypeId> } | { extends: NoInfer<TTargetObjectTypeId> })\n}): ForeignKeyDescriptor {\n validateLinkProjectionTarget(input.link)\n\n if (input.sourceProperty) {\n return {\n linkId: input.link.id,\n sourcePropertyId: input.sourceProperty.id,\n targetObjectTypeId: input.target.id,\n }\n }\n\n if (input.sourceField === undefined) {\n throw new ProjectionValidationError(\"Foreign key sourceField is required.\")\n }\n assertNonEmpty(input.sourceField, \"source field\")\n return {\n linkId: input.link.id,\n sourceField: input.sourceField,\n targetObjectTypeId: input.target.id,\n }\n}\n\n// ── Link projection ─────────────────────────────────────────\n\ninterface LinkProjectionSourceBuilder {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): LinkProjectionFieldBuilder<TDataset>\n}\n\ninterface LinkProjectionFieldBuilder<TDataset extends DatasetDefinition> {\n sourceField(\n columnName: StringDatasetColumnNameOf<TDataset>\n ): LinkProjectionTargetBuilder<TDataset>\n}\n\ninterface LinkProjectionTargetBuilder<TDataset extends DatasetDefinition> {\n targetField(columnName: StringDatasetColumnNameOf<TDataset>): LinkProjectionDefinition\n}\n\n/**\n * Fluent builder for {@link LinkProjectionDefinition} (many-to-many join datasets).\n *\n * ```ts\n * defineProjection(\"room-sensor-links\", Room.l.hasSensors)\n * .fromDataset(roomSensorsDataset)\n * .sourceField(\"room_id\")\n * .targetField(\"sensor_id\")\n * ```\n */\nfunction buildLinkProjection<\n TObjectTypeId extends string,\n TLinkId extends string,\n TTargetObjectTypeId extends string,\n>(\n id: string,\n linkToken: LinkToken<TObjectTypeId, TLinkId, TTargetObjectTypeId>\n): LinkProjectionSourceBuilder {\n assertNonEmpty(id, \"id\")\n validateLinkProjectionTarget(linkToken)\n\n return {\n fromDataset<const TDataset extends DatasetDefinition>(\n dataset: TDataset\n ): LinkProjectionFieldBuilder<TDataset> {\n assertProjectionDataset(dataset)\n const datasetId = dataset.id\n\n return {\n sourceField(\n columnName: StringDatasetColumnNameOf<TDataset>\n ): LinkProjectionTargetBuilder<TDataset> {\n assertNonEmpty(columnName, \"source field\")\n\n return {\n targetField(\n targetColumnName: StringDatasetColumnNameOf<TDataset>\n ): LinkProjectionDefinition {\n assertNonEmpty(targetColumnName, \"target field\")\n\n return {\n _tag: \"LinkProjectionDefinition\",\n id,\n linkId: linkToken.id,\n sourceObjectTypeId: linkToken.objectTypeId,\n targetObjectTypeId: linkToken.targetObjectTypeId as string,\n datasetId,\n sourceField: columnName,\n targetField: targetColumnName,\n }\n },\n }\n },\n }\n },\n }\n}\n\n// ── Type guards ──────────────────────────────────────────────\n\n/** Runtime type guard for {@link ObjectProjectionDefinition}. */\nexport function isObjectProjectionDefinition(value: unknown): value is ObjectProjectionDefinition {\n if (!isRecord(value)) return false\n return (\n value._tag === \"ObjectProjectionDefinition\" &&\n typeof value.id === \"string\" &&\n typeof value.objectTypeId === \"string\" &&\n typeof value.datasetId === \"string\" &&\n isRecord(value.properties) &&\n isRecord(value.links) &&\n isSourceEditConflictResolution(value.conflictResolution)\n )\n}\n\nfunction isSourceEditConflictResolution(value: unknown): boolean {\n if (value === undefined) return true\n if (!isRecord(value) || typeof value.strategy !== \"string\") return false\n if (value.strategy === \"editsWin\") return value.sourceTimestamp === undefined\n return value.strategy === \"mostRecent\" && typeof value.sourceTimestamp === \"string\"\n}\n\n/** Runtime type guard for {@link LinkProjectionDefinition}. */\nexport function isLinkProjectionDefinition(value: unknown): value is LinkProjectionDefinition {\n if (!isRecord(value)) return false\n return (\n value._tag === \"LinkProjectionDefinition\" &&\n typeof value.id === \"string\" &&\n typeof value.linkId === \"string\" &&\n typeof value.sourceObjectTypeId === \"string\" &&\n typeof value.targetObjectTypeId === \"string\" &&\n typeof value.datasetId === \"string\" &&\n typeof value.sourceField === \"string\" &&\n typeof value.targetField === \"string\"\n )\n}\n\n/** Runtime type guard for {@link TelemetryProjectionDefinition}. */\nexport function isTelemetryProjectionDefinition(\n value: unknown\n): value is TelemetryProjectionDefinition {\n if (!isRecord(value)) return false\n return (\n value._tag === \"TelemetryProjectionDefinition\" &&\n typeof value.id === \"string\" &&\n typeof value.objectTypeId === \"string\" &&\n typeof value.propertyId === \"string\" &&\n typeof value.datasetId === \"string\" &&\n typeof value.objectIdField === \"string\" &&\n typeof value.atField === \"string\" &&\n typeof value.valueField === \"string\" &&\n (value.unitField === undefined || typeof value.unitField === \"string\")\n )\n}\n\n/** Runtime type guard for any {@link ProjectionDefinition}. */\nexport function isProjectionDefinition(value: unknown): value is ProjectionDefinition {\n return (\n isObjectProjectionDefinition(value) ||\n isLinkProjectionDefinition(value) ||\n isTelemetryProjectionDefinition(value)\n )\n}\n\n/**\n * Extracts the object type id(s) a projection targets, used to authorize run\n * visibility (`object.view`). Link projections require both ends; object and\n * telemetry projections target a single type.\n */\nexport function projectionTargetOf(projection: LinkProjectionDefinition): LinkProjectionTarget\nexport function projectionTargetOf(\n projection: ObjectProjectionDefinition | TelemetryProjectionDefinition\n): ObjectProjectionTarget\nexport function projectionTargetOf(projection: ProjectionDefinition): ProjectionTarget\nexport function projectionTargetOf(projection: ProjectionDefinition): ProjectionTarget {\n return projection._tag === \"LinkProjectionDefinition\"\n ? {\n sourceObjectTypeId: projection.sourceObjectTypeId,\n targetObjectTypeId: projection.targetObjectTypeId,\n }\n : { objectTypeId: projection.objectTypeId }\n}\n\n// ── Categorization ──────────────────────────────────────────\n\n/** Splits a mixed list of projection definitions into typed arrays by tag. */\nexport function categorizeProjections(projections: readonly ProjectionDefinition[]): {\n objectProjections: ObjectProjectionDefinition[]\n linkProjections: LinkProjectionDefinition[]\n telemetryProjections: TelemetryProjectionDefinition[]\n} {\n const objectProjections: ObjectProjectionDefinition[] = []\n const linkProjections: LinkProjectionDefinition[] = []\n const telemetryProjections: TelemetryProjectionDefinition[] = []\n for (const projection of projections) {\n if (isObjectProjectionDefinition(projection)) {\n objectProjections.push(projection)\n } else if (isLinkProjectionDefinition(projection)) {\n linkProjections.push(projection)\n } else if (isTelemetryProjectionDefinition(projection)) {\n telemetryProjections.push(projection)\n }\n }\n return { objectProjections, linkProjections, telemetryProjections }\n}\n",
17
17
  "import type { ProjectionDefinition, ProjectionTarget } from \"../projections\"\nimport { projectionTargetOf } from \"../projections/builders\"\nimport type { ActionRunRecord } from \"../storage/action-runs\"\nimport type { PipelineRunRecord } from \"../storage/pipeline-runs\"\nimport type { WorkflowInterventionRecord } from \"../storage/workflow-interventions\"\nimport type { WorkflowRunRecord } from \"../storage/workflow-runs\"\nimport { isAllowed } from \"./decision\"\nimport type { AuthorizationContext } from \"./types\"\n\nexport function canViewActionRun(\n authorization: AuthorizationContext | null | undefined,\n run: Pick<ActionRunRecord, \"actionId\" | \"subject\">\n): boolean {\n if (!authorization) {\n return true\n }\n\n if (!isAllowed(authorization, { kind: \"action.apply\", actionId: run.actionId })) {\n return false\n }\n\n return run.subject.kind !== \"object\"\n ? true\n : isAllowed(authorization, {\n kind: \"object.view\",\n objectTypeId: run.subject.objectTypeId,\n })\n}\n\nexport function canViewWorkflowRun(\n authorization: AuthorizationContext | null | undefined,\n run: Pick<WorkflowRunRecord, \"workflowId\">\n): boolean {\n return (\n !authorization || isAllowed(authorization, { kind: \"workflow.run\", workflowId: run.workflowId })\n )\n}\n\nexport function canViewWorkflowIntervention(\n authorization: AuthorizationContext | null | undefined,\n intervention: Pick<WorkflowInterventionRecord, \"workflowId\">\n): boolean {\n return (\n !authorization ||\n isAllowed(authorization, { kind: \"workflow.run\", workflowId: intervention.workflowId })\n )\n}\n\nexport function canViewPipelineRun(\n authorization: AuthorizationContext | null | undefined,\n run: Pick<PipelineRunRecord, \"pipelineId\">\n): boolean {\n return (\n !authorization || isAllowed(authorization, { kind: \"pipeline.run\", pipelineId: run.pipelineId })\n )\n}\n\n/** A projection run is viewable when its target object type(s) are viewable. */\nexport function canViewProjectionRun(\n authorization: AuthorizationContext | null | undefined,\n target: ProjectionTarget\n): boolean {\n if (!authorization) return true\n const canView = (objectTypeId: string) =>\n isAllowed(authorization, { kind: \"object.view\", objectTypeId })\n if (\"sourceObjectTypeId\" in target) {\n return canView(target.sourceObjectTypeId) && canView(target.targetObjectTypeId)\n }\n return canView(target.objectTypeId)\n}\n\n/** Whether a principal may see a projection definition (and its run history). */\nexport function canViewProjection(\n authorization: AuthorizationContext | null | undefined,\n projection: ProjectionDefinition\n): boolean {\n return canViewProjectionRun(authorization, projectionTargetOf(projection))\n}\n",
18
18
  "/**\n * Authorization context types.\n *\n * The context is plain, immutable data resolved once per request\n * (`principal -> groups -> roles -> grants`). Grants resolve eagerly into set\n * lookups so enforcement on the hot path is synchronous and allocation-free.\n * Group and role ids are retained so decisions stay explainable.\n */\n\nimport type { Principal } from \"../auth/types\"\nimport { emptyGrantSets, type GrantKind } from \"./grant-kinds\"\n\n/**\n * Grants resolved to concrete id sets, keyed by grant kind (`view:object`,\n * `run:sync`, …). Broad grants and object subtypes are already expanded, so\n * enforcement is a single `grants[kind].has(id)` lookup. Keyed by `GrantKind`\n * so a new grant family adds one key, not a new bucket every consumer must\n * learn.\n */\nexport type GrantIndex = Readonly<Record<GrantKind, ReadonlySet<string>>>\n\n/**\n * A grant index that grants nothing, as the base for a hand-built context — typically in tests.\n *\n * This is the read-only face of `emptyGrantSets()`, the mutable builder resolution fills in and which\n * stays internal. A factory rather than a shared constant, because the sets are only `ReadonlySet` to\n * the type system: one frozen instance would be aliased into every context that spreads it.\n *\n * Writing the literal by hand is what this avoids. `GrantIndex` is deliberately a total `Record` so\n * that `grants[kind].has(id)` cannot be misspelled into a silent `undefined` — with an optional index\n * every enforcement site would read `?.has(id) ?? false`, where a typo denies instead of failing to\n * compile. The cost of totality is that a literal breaks whenever a grant family is added.\n */\nexport function emptyGrantIndex(): GrantIndex {\n return emptyGrantSets()\n}\n\n/** A role with its grants pre-expanded to concrete id sets at startup. */\nexport interface ResolvedRole {\n readonly id: string\n readonly grantedToGroupIds: readonly string[]\n readonly grants: GrantIndex\n}\n\nexport interface AuthorizationContext {\n readonly principal: Principal\n readonly sessionId?: string\n readonly groupIds: readonly string[]\n /** Roles whose grantedTo groups intersect the principal's memberships. */\n readonly roleIds: readonly string[]\n readonly grants: GrantIndex\n}\n"
19
19
  ],
20
- "mappings": "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",
21
- "debugId": "EA88C5F91530A04564756E2164756E21",
20
+ "mappings": "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",
21
+ "debugId": "07A883C0450D0C9064756E2164756E21",
22
22
  "names": []
23
23
  }
@@ -0,0 +1,47 @@
1
+ // @bun
2
+ // src/projections/timestamp.ts
3
+ var DATASET_TIMESTAMP = /^(\d{4})-(\d{1,2})-(\d{1,2})(?:[ T](\d{1,2}):(\d{2})(?::(\d{2})(?:\.(\d{1,9}))?)?)?([zZ]|[+-]\d{2}:?\d{2})?$/;
4
+ function parseDatasetTimestamp(value) {
5
+ if (value instanceof Date)
6
+ return Number.isNaN(value.getTime()) ? null : value;
7
+ if (typeof value !== "string")
8
+ return null;
9
+ const match = DATASET_TIMESTAMP.exec(value.trim());
10
+ if (!match)
11
+ return null;
12
+ const [, year, month, day, hour, minute, second, fraction, zone] = match;
13
+ const offsetMinutes = parseZoneOffsetMinutes(zone);
14
+ if (offsetMinutes === null)
15
+ return null;
16
+ const components = {
17
+ year: Number(year),
18
+ month: Number(month),
19
+ day: Number(day),
20
+ hour: hour === undefined ? 0 : Number(hour),
21
+ minute: minute === undefined ? 0 : Number(minute),
22
+ second: second === undefined ? 0 : Number(second),
23
+ milliseconds: fraction === undefined ? 0 : Math.trunc(Number(`0.${fraction}`) * 1000)
24
+ };
25
+ const wallClock = Date.UTC(components.year, components.month - 1, components.day, components.hour, components.minute, components.second, components.milliseconds);
26
+ if (!wallClockMatchesComponents(wallClock, components))
27
+ return null;
28
+ return new Date(wallClock - offsetMinutes * 60000);
29
+ }
30
+ function parseZoneOffsetMinutes(zone) {
31
+ if (zone === undefined || zone === "Z" || zone === "z")
32
+ return 0;
33
+ const digits = zone.slice(1).replace(":", "");
34
+ const hours = Number(digits.slice(0, 2));
35
+ const minutes = Number(digits.slice(2, 4));
36
+ if (hours > 23 || minutes > 59)
37
+ return null;
38
+ return (zone[0] === "-" ? -1 : 1) * (hours * 60 + minutes);
39
+ }
40
+ function wallClockMatchesComponents(wallClock, components) {
41
+ const date = new Date(wallClock);
42
+ return date.getUTCFullYear() === components.year && date.getUTCMonth() === components.month - 1 && date.getUTCDate() === components.day && date.getUTCHours() === components.hour && date.getUTCMinutes() === components.minute && date.getUTCSeconds() === components.second;
43
+ }
44
+
45
+ export { parseDatasetTimestamp };
46
+
47
+ //# debugId=E9A28815FA1B574C64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/projections/timestamp.ts"],
4
+ "sourcesContent": [
5
+ "const DATASET_TIMESTAMP =\n /^(\\d{4})-(\\d{1,2})-(\\d{1,2})(?:[ T](\\d{1,2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{1,9}))?)?)?([zZ]|[+-]\\d{2}:?\\d{2})?$/\n\ninterface TimestampComponents {\n readonly year: number\n readonly month: number\n readonly day: number\n readonly hour: number\n readonly minute: number\n readonly second: number\n readonly milliseconds: number\n}\n\n/** Parses a projection dataset timestamp, interpreting zone-less values as UTC. */\nexport function parseDatasetTimestamp(value: unknown): Date | null {\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value\n if (typeof value !== \"string\") return null\n\n const match = DATASET_TIMESTAMP.exec(value.trim())\n if (!match) return null\n const [, year, month, day, hour, minute, second, fraction, zone] = match\n const offsetMinutes = parseZoneOffsetMinutes(zone)\n if (offsetMinutes === null) return null\n\n const components: TimestampComponents = {\n year: Number(year),\n month: Number(month),\n day: Number(day),\n hour: hour === undefined ? 0 : Number(hour),\n minute: minute === undefined ? 0 : Number(minute),\n second: second === undefined ? 0 : Number(second),\n milliseconds: fraction === undefined ? 0 : Math.trunc(Number(`0.${fraction}`) * 1000),\n }\n const wallClock = Date.UTC(\n components.year,\n components.month - 1,\n components.day,\n components.hour,\n components.minute,\n components.second,\n components.milliseconds\n )\n if (!wallClockMatchesComponents(wallClock, components)) return null\n return new Date(wallClock - offsetMinutes * 60_000)\n}\n\nfunction parseZoneOffsetMinutes(zone: string | undefined): number | null {\n if (zone === undefined || zone === \"Z\" || zone === \"z\") return 0\n const digits = zone.slice(1).replace(\":\", \"\")\n const hours = Number(digits.slice(0, 2))\n const minutes = Number(digits.slice(2, 4))\n if (hours > 23 || minutes > 59) return null\n return (zone[0] === \"-\" ? -1 : 1) * (hours * 60 + minutes)\n}\n\nfunction wallClockMatchesComponents(wallClock: number, components: TimestampComponents): boolean {\n const date = new Date(wallClock)\n return (\n date.getUTCFullYear() === components.year &&\n date.getUTCMonth() === components.month - 1 &&\n date.getUTCDate() === components.day &&\n date.getUTCHours() === components.hour &&\n date.getUTCMinutes() === components.minute &&\n date.getUTCSeconds() === components.second\n )\n}\n"
6
+ ],
7
+ "mappings": ";;AAAA,IAAM,oBACJ;AAaK,SAAS,qBAAqB,CAAC,OAA6B;AAAA,EACjE,IAAI,iBAAiB;AAAA,IAAM,OAAO,OAAO,MAAM,MAAM,QAAQ,CAAC,IAAI,OAAO;AAAA,EACzE,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EAEtC,MAAM,QAAQ,kBAAkB,KAAK,MAAM,KAAK,CAAC;AAAA,EACjD,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,SAAS,MAAM,OAAO,KAAK,MAAM,QAAQ,QAAQ,UAAU,QAAQ;AAAA,EACnE,MAAM,gBAAgB,uBAAuB,IAAI;AAAA,EACjD,IAAI,kBAAkB;AAAA,IAAM,OAAO;AAAA,EAEnC,MAAM,aAAkC;AAAA,IACtC,MAAM,OAAO,IAAI;AAAA,IACjB,OAAO,OAAO,KAAK;AAAA,IACnB,KAAK,OAAO,GAAG;AAAA,IACf,MAAM,SAAS,YAAY,IAAI,OAAO,IAAI;AAAA,IAC1C,QAAQ,WAAW,YAAY,IAAI,OAAO,MAAM;AAAA,IAChD,QAAQ,WAAW,YAAY,IAAI,OAAO,MAAM;AAAA,IAChD,cAAc,aAAa,YAAY,IAAI,KAAK,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,EACtF;AAAA,EACA,MAAM,YAAY,KAAK,IACrB,WAAW,MACX,WAAW,QAAQ,GACnB,WAAW,KACX,WAAW,MACX,WAAW,QACX,WAAW,QACX,WAAW,YACb;AAAA,EACA,IAAI,CAAC,2BAA2B,WAAW,UAAU;AAAA,IAAG,OAAO;AAAA,EAC/D,OAAO,IAAI,KAAK,YAAY,gBAAgB,KAAM;AAAA;AAGpD,SAAS,sBAAsB,CAAC,MAAyC;AAAA,EACvE,IAAI,SAAS,aAAa,SAAS,OAAO,SAAS;AAAA,IAAK,OAAO;AAAA,EAC/D,MAAM,SAAS,KAAK,MAAM,CAAC,EAAE,QAAQ,KAAK,EAAE;AAAA,EAC5C,MAAM,QAAQ,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC;AAAA,EACvC,MAAM,UAAU,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC;AAAA,EACzC,IAAI,QAAQ,MAAM,UAAU;AAAA,IAAI,OAAO;AAAA,EACvC,QAAQ,KAAK,OAAO,MAAM,KAAK,MAAM,QAAQ,KAAK;AAAA;AAGpD,SAAS,0BAA0B,CAAC,WAAmB,YAA0C;AAAA,EAC/F,MAAM,OAAO,IAAI,KAAK,SAAS;AAAA,EAC/B,OACE,KAAK,eAAe,MAAM,WAAW,QACrC,KAAK,YAAY,MAAM,WAAW,QAAQ,KAC1C,KAAK,WAAW,MAAM,WAAW,OACjC,KAAK,YAAY,MAAM,WAAW,QAClC,KAAK,cAAc,MAAM,WAAW,UACpC,KAAK,cAAc,MAAM,WAAW;AAAA;",
8
+ "debugId": "E9A28815FA1B574C64756E2164756E21",
9
+ "names": []
10
+ }
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-9t8f5xfx.js";
5
5
  import {
6
6
  registerProjectionRegistry
7
- } from "./chunk-nten49ta.js";
7
+ } from "./chunk-wb4051cx.js";
8
8
  import {
9
9
  LoggingService
10
10
  } from "./chunk-ghteq96b.js";
@@ -16,7 +16,7 @@ import {
16
16
  discoverOntologySources,
17
17
  discoverProjectDefinitions,
18
18
  validateRulesAtStartup
19
- } from "./chunk-sa4340y1.js";
19
+ } from "./chunk-1ywq4hzk.js";
20
20
  import {
21
21
  validateSchedulesAtStartup
22
22
  } from "./chunk-5sz8ta9r.js";
@@ -28,7 +28,7 @@ import {
28
28
  validateAgentGroupReferences,
29
29
  validateAgentToolsAtStartup,
30
30
  validateWorkflowsAtStartup
31
- } from "./chunk-0mbx247x.js";
31
+ } from "./chunk-177ed2mp.js";
32
32
  import {
33
33
  ConnectorError,
34
34
  ConnectorNotFoundError,
@@ -41,10 +41,10 @@ import {
41
41
  providerFailureCode,
42
42
  recoverConnectorFailure,
43
43
  storageBoundaryError
44
- } from "./chunk-bct7hmfc.js";
44
+ } from "./chunk-km4rkj4t.js";
45
45
  import {
46
46
  RuntimeError
47
- } from "./chunk-k9pts48t.js";
47
+ } from "./chunk-3rsf30p4.js";
48
48
  import {
49
49
  createOntologyMutationRuntime,
50
50
  registerOntologyMutationRuntime
@@ -58,18 +58,18 @@ import {
58
58
  } from "./chunk-nf4r78r4.js";
59
59
  import {
60
60
  ActionRegistry
61
- } from "./chunk-5egfka8j.js";
61
+ } from "./chunk-ttba8x6z.js";
62
62
  import {
63
63
  ProjectionRegistry,
64
64
  createOntologyMaterializer
65
- } from "./chunk-st4xgxey.js";
65
+ } from "./chunk-ettb0cy4.js";
66
66
  import {
67
67
  ensureExecutionRecord
68
- } from "./chunk-8ryen3p3.js";
68
+ } from "./chunk-4aw0jwk0.js";
69
69
  import {
70
70
  checkStorageSchema,
71
71
  isMigrationCapableStorage
72
- } from "./chunk-ys1nse2v.js";
72
+ } from "./chunk-xmggaxg4.js";
73
73
  import {
74
74
  CONNECTOR_CONNECTION_RUN_FAILURE_CODES,
75
75
  ConnectorConnectionStorageError
@@ -87,7 +87,7 @@ import {
87
87
  import {
88
88
  AuthRuntime,
89
89
  SecurityRegistry
90
- } from "./chunk-jaj13078.js";
90
+ } from "./chunk-d2adj15j.js";
91
91
  import {
92
92
  AuthRuntimeError,
93
93
  isMagicLinkAuthStrategy,
@@ -96,7 +96,7 @@ import {
96
96
  import {
97
97
  AuthorizationError,
98
98
  resolveExecutionScopeAuthorization
99
- } from "./chunk-34bqh420.js";
99
+ } from "./chunk-4z3n1dzt.js";
100
100
  import {
101
101
  captureSixbFailure,
102
102
  isSixbError
@@ -11,7 +11,7 @@ import {
11
11
  SyncValidationError,
12
12
  createConnectorCodedError,
13
13
  getConnectorExecutionSourceResolver
14
- } from "./chunk-bct7hmfc.js";
14
+ } from "./chunk-km4rkj4t.js";
15
15
  import {
16
16
  isConnectorDefinition,
17
17
  isOAuthConnectorAdapter
@@ -9,10 +9,10 @@ import {
9
9
  isAgentStepDefinition,
10
10
  isInterventionDefinition,
11
11
  isStepDefinition
12
- } from "./chunk-0mbx247x.js";
12
+ } from "./chunk-177ed2mp.js";
13
13
  import {
14
14
  isActionDefinition
15
- } from "./chunk-c6qd89g5.js";
15
+ } from "./chunk-d6y2wsfg.js";
16
16
  import {
17
17
  createSixbError,
18
18
  isSixbError,