@cosmicdrift/kumiko-framework 0.389.0 → 0.390.1

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 (617) hide show
  1. package/AGENTS.md +9 -4
  2. package/README.md +1 -1
  3. package/agents/examples/apex-surface-auth.md +2 -3
  4. package/agents/examples/api-worker-split.md +9 -2
  5. package/agents/examples/auth-claims.md +1 -1
  6. package/agents/examples/cross-feature-events.md +12 -12
  7. package/agents/examples/crypto-shredding-hr.md +2 -2
  8. package/agents/examples/encrypted-tenant-config.md +1 -1
  9. package/agents/examples/error-contract.md +12 -7
  10. package/agents/examples/event-sourcing.md +29 -29
  11. package/agents/examples/files-post-processing.md +10 -8
  12. package/agents/examples/inbound-mail-triage.md +1 -0
  13. package/agents/examples/lane-routing.md +2 -1
  14. package/agents/examples/legal-pages.md +2 -2
  15. package/agents/examples/lifecycle-hooks.md +3 -3
  16. package/agents/examples/managed-config.md +4 -4
  17. package/agents/examples/managed-pages.md +1 -1
  18. package/agents/examples/relations.md +19 -4
  19. package/agents/examples/search.md +4 -4
  20. package/agents/examples/secrets-demo.md +9 -6
  21. package/agents/examples/state-machine.md +2 -2
  22. package/agents/examples/tenant-settings.md +1 -1
  23. package/agents/examples/user-data-rights.md +3 -6
  24. package/agents/examples/workflow-engine.md +53 -47
  25. package/agents/examples.md +4 -4
  26. package/agents/features.md +1 -1
  27. package/dist/api/auth-middleware.js +1 -1
  28. package/dist/api/auth-routes-invite.js +2 -1
  29. package/dist/api/entity-read-access.d.ts +3 -1
  30. package/dist/api/export/export-columns.d.ts +3 -1
  31. package/dist/api/export/export-route.js +3 -2
  32. package/dist/api/export/export-screen.d.ts +2 -1
  33. package/dist/api/extra-route.d.ts +3 -1
  34. package/dist/api/index.d.ts +23 -27
  35. package/dist/api/index.js +13 -15
  36. package/dist/api/jwt.js +1 -1
  37. package/dist/api/observability-middleware.d.ts +1 -1
  38. package/dist/api/observability-middleware.js +2 -1
  39. package/dist/api/request-context-internals.d.ts +31 -0
  40. package/dist/api/request-context-internals.js +11 -0
  41. package/dist/api/request-context-scopes.d.ts +14 -0
  42. package/dist/api/request-context-scopes.js +69 -0
  43. package/dist/api/request-context.d.ts +1 -40
  44. package/dist/api/request-context.js +22 -51
  45. package/dist/api/request-id-middleware.d.ts +1 -1
  46. package/dist/api/route-registrars.d.ts +2 -1
  47. package/dist/api/route-registrars.js +1 -1
  48. package/dist/api/routes.js +7 -3
  49. package/dist/api/server-boot-checks.d.ts +1 -1
  50. package/dist/api/server-boot-checks.js +2 -2
  51. package/dist/api/server-event-dispatcher.d.ts +6 -1
  52. package/dist/api/server-event-dispatcher.js +3 -4
  53. package/dist/api/server-extra-routes.d.ts +1 -1
  54. package/dist/api/server-extra-routes.js +2 -1
  55. package/dist/api/server-middleware.js +3 -1
  56. package/dist/api/server-routes.d.ts +2 -1
  57. package/dist/api/server-wiring.js +6 -4
  58. package/dist/api/server.d.ts +2 -1
  59. package/dist/api/sse-route.d.ts +2 -1
  60. package/dist/api/tenant-scoped-secrets.d.ts +2 -0
  61. package/dist/api/tenant-scoped-secrets.js +13 -0
  62. package/dist/api/websocket-route.d.ts +1 -1
  63. package/dist/auth/index.d.ts +0 -1
  64. package/dist/auth/roles.d.ts +0 -5
  65. package/dist/compliance/duration-spec.d.ts +0 -1
  66. package/dist/compliance/duration-spec.js +0 -5
  67. package/dist/compliance/index.d.ts +4 -4
  68. package/dist/compliance/index.js +2 -2
  69. package/dist/compliance/profiles.d.ts +0 -15
  70. package/dist/compliance/profiles.js +0 -23
  71. package/dist/config/index.d.ts +10 -10
  72. package/dist/config/index.js +13 -1
  73. package/dist/config/internals.d.ts +9 -0
  74. package/dist/config/internals.js +1 -0
  75. package/dist/consumer-cli-internals.d.ts +4 -0
  76. package/dist/consumer-cli-internals.js +1 -0
  77. package/dist/consumer-cli.d.ts +1 -4
  78. package/dist/consumer-cli.js +5 -1
  79. package/dist/crypto/event-pii.js +1 -1
  80. package/dist/crypto/index.d.ts +8 -9
  81. package/dist/crypto/index.js +7 -8
  82. package/dist/crypto/pg-kms-adapter.js +6 -1
  83. package/dist/db/apply-entity-event.d.ts +1 -1
  84. package/dist/db/apply-entity-event.js +15 -47
  85. package/dist/db/blind-index-cleanup.js +91 -77
  86. package/dist/db/collect-table-metas.js +1 -1
  87. package/dist/db/compound-types.d.ts +1 -1
  88. package/dist/db/compound-types.js +0 -7
  89. package/dist/db/config-seed.d.ts +2 -1
  90. package/dist/db/config-seed.js +6 -1
  91. package/dist/db/connection.d.ts +3 -1
  92. package/dist/db/connection.js +15 -5
  93. package/dist/db/cross-tenant-reads.d.ts +1 -1
  94. package/dist/db/cross-tenant-reads.js +1 -1
  95. package/dist/db/dialect.d.ts +0 -5
  96. package/dist/db/dialect.js +0 -3
  97. package/dist/db/driver-value-preparation.js +23 -2
  98. package/dist/db/eagerload.d.ts +2 -1
  99. package/dist/db/entity-field-encryption.d.ts +1 -1
  100. package/dist/db/entity-table-meta.d.ts +1 -1
  101. package/dist/db/event-store-executor-context.d.ts +3 -1
  102. package/dist/db/event-store-executor-context.js +4 -3
  103. package/dist/db/event-store-executor-read-filter.d.ts +1 -1
  104. package/dist/db/event-store-executor-read-rows.d.ts +2 -1
  105. package/dist/db/event-store-executor-read-search.d.ts +2 -1
  106. package/dist/db/event-store-executor-read-sort.d.ts +2 -1
  107. package/dist/db/event-store-executor-read.js +2 -2
  108. package/dist/db/event-store-executor-write-atomic.js +8 -7
  109. package/dist/db/event-store-executor-write-steps.d.ts +3 -2
  110. package/dist/db/event-store-executor-write.js +7 -4
  111. package/dist/db/event-store-executor.d.ts +1 -1
  112. package/dist/db/executor-managed-tables.d.ts +7 -1
  113. package/dist/db/executor-managed-tables.js +11 -2
  114. package/dist/db/index.d.ts +29 -28
  115. package/dist/db/index.js +22 -20
  116. package/dist/db/known-table-names.d.ts +6 -0
  117. package/dist/db/known-table-names.js +21 -0
  118. package/dist/db/list-aggregate-labels.d.ts +1 -1
  119. package/dist/db/located-timestamp.d.ts +1 -1
  120. package/dist/db/located-timestamp.js +0 -5
  121. package/dist/db/migrate-generator.d.ts +17 -1
  122. package/dist/db/migrate-generator.js +50 -20
  123. package/dist/db/migrate-primary-key.d.ts +12 -0
  124. package/dist/db/migrate-primary-key.js +45 -0
  125. package/dist/db/migrate-rls-diff.d.ts +20 -0
  126. package/dist/db/migrate-rls-diff.js +61 -0
  127. package/dist/db/migrate-runner.js +4 -0
  128. package/dist/db/money.d.ts +1 -1
  129. package/dist/db/money.js +1 -1
  130. package/dist/db/parent-ref-clause.d.ts +2 -1
  131. package/dist/db/pg-error.d.ts +2 -0
  132. package/dist/db/pg-error.js +11 -0
  133. package/dist/db/queries/ddl.d.ts +3 -0
  134. package/dist/db/queries/ddl.js +34 -1
  135. package/dist/db/queries/event-store.js +4 -2
  136. package/dist/db/queries/event-tenants.d.ts +2 -0
  137. package/dist/db/queries/event-tenants.js +17 -0
  138. package/dist/db/queries/rebuild-rls-guard.d.ts +2 -0
  139. package/dist/db/queries/rebuild-rls-guard.js +29 -0
  140. package/dist/db/queries/rls-boot-catalog.d.ts +16 -0
  141. package/dist/db/queries/rls-boot-catalog.js +39 -0
  142. package/dist/db/queries/rls-catalog.d.ts +6 -0
  143. package/dist/db/queries/rls-catalog.js +82 -0
  144. package/dist/db/queries/rls-scope.d.ts +3 -0
  145. package/dist/db/queries/rls-scope.js +17 -0
  146. package/dist/db/queries/rls-shape.d.ts +10 -0
  147. package/dist/db/queries/rls-shape.js +42 -0
  148. package/dist/db/queries/session-advisory-lock.d.ts +2 -0
  149. package/dist/db/queries/session-advisory-lock.js +23 -0
  150. package/dist/db/queries/shadow-swap.d.ts +1 -2
  151. package/dist/db/queries/shadow-swap.js +9 -25
  152. package/dist/db/queries/test-stack.d.ts +4 -1
  153. package/dist/db/queries/test-stack.js +84 -2
  154. package/dist/db/query.js +11 -7
  155. package/dist/db/reference-data.d.ts +1 -1
  156. package/dist/db/reference-data.js +6 -1
  157. package/dist/db/render-ddl.d.ts +6 -2
  158. package/dist/db/render-ddl.js +7 -7
  159. package/dist/db/render-rls-ddl.d.ts +35 -0
  160. package/dist/db/render-rls-ddl.js +127 -0
  161. package/dist/db/replay-migration-sql.d.ts +3 -1
  162. package/dist/db/replay-migration-sql.js +22 -5
  163. package/dist/db/replay-rls.d.ts +25 -0
  164. package/dist/db/replay-rls.js +156 -0
  165. package/dist/db/row-level-security-boot-check.d.ts +6 -0
  166. package/dist/db/row-level-security-boot-check.js +86 -0
  167. package/dist/db/row-level-security-connection.d.ts +3 -0
  168. package/dist/db/row-level-security-connection.js +213 -0
  169. package/dist/db/row-level-security-scope.d.ts +33 -0
  170. package/dist/db/row-level-security-scope.js +127 -0
  171. package/dist/db/scope-tenant-db-to-tenant.d.ts +3 -0
  172. package/dist/db/scope-tenant-db-to-tenant.js +14 -0
  173. package/dist/db/sql-identifier.d.ts +1 -0
  174. package/dist/db/sql-identifier.js +3 -0
  175. package/dist/db/table-builder.d.ts +2 -1
  176. package/dist/db/table-builder.js +1 -1
  177. package/dist/db/table-info.js +1 -1
  178. package/dist/db/table-push.d.ts +11 -2
  179. package/dist/db/table-push.js +15 -2
  180. package/dist/db/tenant-db-runner.d.ts +3 -1
  181. package/dist/db/tenant-db-runner.js +4 -3
  182. package/dist/db/tenant-db-scoped-rebind.d.ts +10 -0
  183. package/dist/db/tenant-db-scoped-rebind.js +33 -0
  184. package/dist/db/tenant-db-statement-runner.d.ts +13 -0
  185. package/dist/db/tenant-db-statement-runner.js +48 -0
  186. package/dist/db/tenant-db.d.ts +17 -12
  187. package/dist/db/tenant-db.js +49 -120
  188. package/dist/db/tenant-id-filter.d.ts +3 -0
  189. package/dist/db/tenant-id-filter.js +30 -0
  190. package/dist/db/transaction-serialization.d.ts +6 -0
  191. package/dist/db/transaction-serialization.js +60 -0
  192. package/dist/derivatives/delete-stored-file.js +1 -1
  193. package/dist/derivatives/index.d.ts +2 -5
  194. package/dist/derivatives/index.js +2 -3
  195. package/dist/engine/access.d.ts +2 -1
  196. package/dist/engine/access.js +1 -1
  197. package/dist/engine/boot-validator/entity-handler.d.ts +2 -1
  198. package/dist/engine/boot-validator/entity-handler.js +1 -1
  199. package/dist/engine/boot-validator/entity-list-aggregate-options.d.ts +1 -1
  200. package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +1 -1
  201. package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +2 -1
  202. package/dist/engine/boot-validator/nav.d.ts +3 -1
  203. package/dist/engine/boot-validator/nav.js +1 -1
  204. package/dist/engine/boot-validator/ownership.d.ts +2 -1
  205. package/dist/engine/boot-validator/parent-ref.d.ts +2 -1
  206. package/dist/engine/boot-validator/projection-list-screens.d.ts +2 -1
  207. package/dist/engine/boot-validator/query-refs.d.ts +2 -1
  208. package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
  209. package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
  210. package/dist/engine/boot-validator/screens.d.ts +2 -1
  211. package/dist/engine/boot-validator/workspaces.d.ts +3 -1
  212. package/dist/engine/bridge-stub.d.ts +5 -2
  213. package/dist/engine/bridge-stub.js +39 -24
  214. package/dist/engine/config-helpers.d.ts +2 -2
  215. package/dist/engine/config-helpers.js +0 -9
  216. package/dist/engine/constants.d.ts +0 -10
  217. package/dist/engine/constants.js +0 -8
  218. package/dist/engine/create-app.js +1 -1
  219. package/dist/engine/define-feature.d.ts +2 -1
  220. package/dist/engine/define-feature.js +1 -2
  221. package/dist/engine/define-handler.d.ts +1 -1
  222. package/dist/engine/define-step.d.ts +0 -1
  223. package/dist/engine/define-step.js +0 -3
  224. package/dist/engine/embedded-derived.d.ts +1 -1
  225. package/dist/engine/entity-handlers.d.ts +2 -1
  226. package/dist/engine/entity-handlers.js +7 -7
  227. package/dist/engine/entity-list-runtime-options.js +3 -1
  228. package/dist/engine/entity-list-searchability.d.ts +2 -1
  229. package/dist/engine/event-def.d.ts +2 -1
  230. package/dist/engine/event-helpers.d.ts +3 -1
  231. package/dist/engine/event-helpers.js +3 -3
  232. package/dist/engine/extension-names.d.ts +2 -8
  233. package/dist/engine/extension-names.js +2 -2
  234. package/dist/engine/extension-selector-plugins.d.ts +1 -1
  235. package/dist/engine/extensions/storage-provider.d.ts +1 -2
  236. package/dist/engine/extensions/user-data.d.ts +0 -8
  237. package/dist/engine/factories.d.ts +2 -1
  238. package/dist/engine/feature-builder-state.d.ts +8 -1
  239. package/dist/engine/feature-changelog.d.ts +1 -1
  240. package/dist/engine/feature-config-events-jobs.d.ts +4 -1
  241. package/dist/engine/feature-entity-handlers.d.ts +5 -1
  242. package/dist/engine/feature-manifest.js +1 -1
  243. package/dist/engine/feature-ui-extensions.d.ts +7 -1
  244. package/dist/engine/feature-ui-extensions.js +6 -4
  245. package/dist/engine/field-access.d.ts +2 -1
  246. package/dist/engine/handler-field-references.d.ts +0 -4
  247. package/dist/engine/index.d.ts +57 -54
  248. package/dist/engine/index.js +22 -27
  249. package/dist/engine/instruction-fields.d.ts +1 -1
  250. package/dist/engine/personal-data-fields.d.ts +1 -1
  251. package/dist/engine/qualified-name.d.ts +0 -1
  252. package/dist/engine/read-claim.d.ts +2 -1
  253. package/dist/engine/registry-facade.js +0 -3
  254. package/dist/engine/registry-ingest.d.ts +2 -1
  255. package/dist/engine/registry-ingest.js +1 -2
  256. package/dist/engine/registry-state.d.ts +12 -2
  257. package/dist/engine/registry-state.js +2 -3
  258. package/dist/engine/registry-validate.d.ts +3 -1
  259. package/dist/engine/registry-validate.js +7 -7
  260. package/dist/engine/run-in.d.ts +1 -1
  261. package/dist/engine/run-in.js +0 -1
  262. package/dist/engine/schema-builder.d.ts +1 -1
  263. package/dist/engine/schema-builder.js +1 -1
  264. package/dist/engine/screen-filter-ops.d.ts +2 -1
  265. package/dist/engine/screen-filter-ops.js +0 -5
  266. package/dist/engine/soft-delete-cleanup.d.ts +1 -1
  267. package/dist/engine/soft-delete-cleanup.js +4 -4
  268. package/dist/engine/state-machine.js +2 -1
  269. package/dist/engine/steps/_read-source.js +1 -1
  270. package/dist/engine/steps/aggregate-append-event.js +2 -2
  271. package/dist/engine/steps/call-feature.js +2 -2
  272. package/dist/engine/steps/mail-send.js +1 -1
  273. package/dist/engine/steps/retry.js +1 -1
  274. package/dist/engine/steps/wait-for-event.js +1 -1
  275. package/dist/engine/steps/wait.js +1 -1
  276. package/dist/engine/steps/webhook-send.js +1 -1
  277. package/dist/engine/template-variables.d.ts +2 -1
  278. package/dist/engine/transfer-adjacency.d.ts +1 -1
  279. package/dist/engine/types/index.d.ts +8 -31
  280. package/dist/engine/types/index.js +2 -10
  281. package/dist/engine/validation.d.ts +2 -1
  282. package/dist/entrypoint/index.d.ts +7 -35
  283. package/dist/entrypoint/index.js +7 -1
  284. package/dist/entrypoint/internals.d.ts +40 -0
  285. package/dist/entrypoint/internals.js +1 -0
  286. package/dist/entrypoint/row-level-security-mode-check.d.ts +3 -0
  287. package/dist/entrypoint/row-level-security-mode-check.js +19 -0
  288. package/dist/env/dry-run-internals.d.ts +10 -0
  289. package/dist/env/dry-run-internals.js +1 -0
  290. package/dist/env/dry-run.d.ts +1 -10
  291. package/dist/env/dry-run.js +2 -1
  292. package/dist/env/index.d.ts +1 -85
  293. package/dist/env/index.js +6 -50
  294. package/dist/env/internals.d.ts +87 -0
  295. package/dist/env/internals.js +53 -0
  296. package/dist/errors/classes.js +2 -2
  297. package/dist/errors/index.d.ts +5 -14
  298. package/dist/errors/index.js +4 -9
  299. package/dist/errors/member-resolution.js +1 -1
  300. package/dist/errors/reasons.d.ts +0 -1
  301. package/dist/errors/reasons.js +7 -7
  302. package/dist/errors/serialize.d.ts +0 -18
  303. package/dist/errors/serialize.js +0 -27
  304. package/dist/es-ops/index.d.ts +4 -4
  305. package/dist/es-ops/index.js +2 -2
  306. package/dist/es-ops/operations-schema.d.ts +1 -1
  307. package/dist/es-ops/types.d.ts +4 -5
  308. package/dist/event-store/admin-api-internals.d.ts +14 -0
  309. package/dist/event-store/admin-api-internals.js +1 -0
  310. package/dist/event-store/admin-api.d.ts +1 -14
  311. package/dist/event-store/admin-api.js +11 -6
  312. package/dist/event-store/archive.js +4 -2
  313. package/dist/event-store/errors.js +2 -2
  314. package/dist/event-store/event-store.js +41 -34
  315. package/dist/event-store/events-schema.js +4 -1
  316. package/dist/event-store/index.d.ts +11 -13
  317. package/dist/event-store/index.js +7 -9
  318. package/dist/event-store/rebuild-dead-letter.js +4 -2
  319. package/dist/event-store/snapshot.js +4 -3
  320. package/dist/event-store/stream-scope.d.ts +2 -0
  321. package/dist/event-store/stream-scope.js +6 -0
  322. package/dist/event-store/upcaster-dead-letter.js +4 -2
  323. package/dist/event-store/upcaster.d.ts +2 -1
  324. package/dist/files/action-form-upload.d.ts +2 -1
  325. package/dist/files/action-form-upload.js +1 -1
  326. package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -1
  327. package/dist/files/assert-file-refs-belong-to-tenant.js +1 -1
  328. package/dist/files/bind-pending-file-refs.d.ts +2 -1
  329. package/dist/files/bind-pending-file-refs.js +2 -1
  330. package/dist/files/bind-referenced-files.write.js +1 -1
  331. package/dist/files/create-file-ref-from-bytes.d.ts +6 -3
  332. package/dist/files/create-file-ref-from-bytes.js +3 -3
  333. package/dist/files/create-file-ref.d.ts +3 -2
  334. package/dist/files/create-file-ref.js +2 -2
  335. package/dist/files/dispose-removed-file-refs.d.ts +2 -1
  336. package/dist/files/dispose-removed-file-refs.js +1 -1
  337. package/dist/files/feature.js +2 -2
  338. package/dist/files/file-handle.js +1 -1
  339. package/dist/files/file-routes.d.ts +1 -1
  340. package/dist/files/file-routes.js +12 -2
  341. package/dist/files/index.d.ts +11 -13
  342. package/dist/files/index.js +5 -7
  343. package/dist/files/load-save-file-refs.d.ts +2 -1
  344. package/dist/files/load-save-file-refs.js +1 -1
  345. package/dist/files/provider-resolver.d.ts +5 -4
  346. package/dist/files/provider-resolver.js +4 -4
  347. package/dist/files/storage-tracking.js +4 -2
  348. package/dist/files/sweep-orphaned-uploads.d.ts +1 -1
  349. package/dist/files/sweep-orphaned-uploads.js +1 -1
  350. package/dist/i18n/index.d.ts +2 -8
  351. package/dist/i18n/index.js +1 -1
  352. package/dist/i18n/internals.d.ts +7 -0
  353. package/dist/i18n/internals.js +1 -0
  354. package/dist/i18n/required-surface-keys.d.ts +4 -1
  355. package/dist/internal/row-level-security.d.ts +3 -0
  356. package/dist/internal/row-level-security.js +3 -0
  357. package/dist/internal/stack-support.d.ts +1 -1
  358. package/dist/internal/stack-support.js +1 -1
  359. package/dist/internal/testing.d.ts +1 -0
  360. package/dist/internal/testing.js +9 -5
  361. package/dist/jobs/index.d.ts +1 -1
  362. package/dist/jobs/job-append-event.d.ts +12 -0
  363. package/dist/jobs/job-append-event.js +30 -0
  364. package/dist/jobs/job-runner-context.d.ts +2 -2
  365. package/dist/jobs/job-runner-context.js +46 -16
  366. package/dist/jobs/job-runner-execution.d.ts +1 -1
  367. package/dist/jobs/job-runner-execution.js +6 -4
  368. package/dist/jobs/job-runner-gates.d.ts +1 -1
  369. package/dist/jobs/job-runner-gates.js +0 -1
  370. package/dist/jobs/job-runner-helpers.d.ts +11 -4
  371. package/dist/jobs/job-runner-helpers.js +10 -1
  372. package/dist/jobs/job-runner-scope.d.ts +5 -2
  373. package/dist/jobs/job-runner-types.d.ts +2 -1
  374. package/dist/jobs/job-runner.js +19 -6
  375. package/dist/jobs/max-per-tenant.d.ts +1 -1
  376. package/dist/logging/index.d.ts +1 -2
  377. package/dist/logging/index.js +1 -1
  378. package/dist/logging/pino-logger.js +1 -1
  379. package/dist/logging/utils.d.ts +1 -0
  380. package/dist/logging/utils.js +6 -0
  381. package/dist/migrations/index.d.ts +3 -3
  382. package/dist/migrations/index.js +3 -3
  383. package/dist/migrations/pending-rebuilds.d.ts +1 -1
  384. package/dist/migrations/pending-rebuilds.js +1 -1
  385. package/dist/migrations/pii-event-backfill.js +4 -1
  386. package/dist/observability/escape-hatch-report.d.ts +2 -1
  387. package/dist/observability/index.d.ts +7 -15
  388. package/dist/observability/index.js +4 -12
  389. package/dist/observability/metric-validator.js +1 -1
  390. package/dist/observability/metrics-handle.d.ts +0 -1
  391. package/dist/observability/metrics-handle.js +2 -15
  392. package/dist/observability/recording-tracer.d.ts +1 -2
  393. package/dist/observability/recording-tracer.js +0 -6
  394. package/dist/observability/sensitive-filter.d.ts +0 -2
  395. package/dist/observability/sensitive-filter.js +0 -29
  396. package/dist/pipeline/active-membership.d.ts +2 -1
  397. package/dist/pipeline/active-membership.js +6 -2
  398. package/dist/pipeline/append-event-core.d.ts +2 -1
  399. package/dist/pipeline/append-event-core.js +2 -2
  400. package/dist/pipeline/attach-outside-transaction.d.ts +3 -0
  401. package/dist/pipeline/attach-outside-transaction.js +13 -0
  402. package/dist/pipeline/auth-claims-resolver.d.ts +2 -1
  403. package/dist/pipeline/cascade-handler.d.ts +2 -1
  404. package/dist/pipeline/cascade-handler.js +3 -2
  405. package/dist/pipeline/config-accessor-factory.d.ts +1 -1
  406. package/dist/pipeline/config-accessor-factory.js +1 -1
  407. package/dist/pipeline/context-services.d.ts +56 -0
  408. package/dist/pipeline/context-services.js +73 -0
  409. package/dist/pipeline/dispatch-batch.d.ts +2 -1
  410. package/dist/pipeline/dispatch-batch.js +31 -18
  411. package/dist/pipeline/dispatch-query.js +5 -4
  412. package/dist/pipeline/dispatch-scope.d.ts +6 -0
  413. package/dist/pipeline/dispatch-scope.js +27 -0
  414. package/dist/pipeline/dispatch-shared.d.ts +13 -9
  415. package/dist/pipeline/dispatch-shared.js +75 -198
  416. package/dist/pipeline/dispatch-stream.js +8 -4
  417. package/dist/pipeline/dispatch-write.d.ts +2 -1
  418. package/dist/pipeline/dispatch-write.js +10 -8
  419. package/dist/pipeline/dispatcher-utils.d.ts +3 -1
  420. package/dist/pipeline/dispatcher-utils.js +8 -2
  421. package/dist/pipeline/dispatcher.d.ts +3 -2
  422. package/dist/pipeline/dispatcher.js +4 -3
  423. package/dist/pipeline/event-consumer-state.d.ts +0 -1
  424. package/dist/pipeline/event-dispatcher-delivery.d.ts +1 -1
  425. package/dist/pipeline/event-dispatcher-delivery.js +4 -2
  426. package/dist/pipeline/event-dispatcher.d.ts +2 -2
  427. package/dist/pipeline/event-dispatcher.js +7 -3
  428. package/dist/pipeline/event-retention.js +59 -56
  429. package/dist/pipeline/handler-access-error.js +2 -1
  430. package/dist/pipeline/handler-context-auth.d.ts +5 -6
  431. package/dist/pipeline/handler-context-auth.js +7 -4
  432. package/dist/pipeline/handler-context-config.d.ts +2 -5
  433. package/dist/pipeline/handler-context-config.js +2 -2
  434. package/dist/pipeline/handler-context-db.d.ts +32 -7
  435. package/dist/pipeline/handler-context-db.js +26 -17
  436. package/dist/pipeline/handler-context-dispatch.d.ts +13 -7
  437. package/dist/pipeline/handler-context-dispatch.js +9 -8
  438. package/dist/pipeline/handler-context-events.d.ts +22 -36
  439. package/dist/pipeline/handler-context-events.js +36 -31
  440. package/dist/pipeline/handler-context-member-resolution.d.ts +2 -0
  441. package/dist/pipeline/handler-context-member-resolution.js +110 -0
  442. package/dist/pipeline/handler-context-notify.d.ts +3 -2
  443. package/dist/pipeline/handler-context-notify.js +1 -1
  444. package/dist/pipeline/handler-context-observability.d.ts +2 -4
  445. package/dist/pipeline/handler-context-observability.js +7 -5
  446. package/dist/pipeline/handler-context-phase-denials.d.ts +11 -0
  447. package/dist/pipeline/handler-context-phase-denials.js +98 -0
  448. package/dist/pipeline/handler-context-scope.d.ts +7 -10
  449. package/dist/pipeline/handler-context-scope.js +18 -20
  450. package/dist/pipeline/index.d.ts +9 -21
  451. package/dist/pipeline/index.js +5 -7
  452. package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
  453. package/dist/pipeline/irreversible-operation-gate.js +2 -2
  454. package/dist/pipeline/lifecycle-pipeline.d.ts +8 -7
  455. package/dist/pipeline/lifecycle-pipeline.js +9 -15
  456. package/dist/pipeline/member-read-only-transaction.js +11 -3
  457. package/dist/pipeline/member-reader.d.ts +1 -1
  458. package/dist/pipeline/member-reader.js +2 -2
  459. package/dist/pipeline/msp-rebuild.js +5 -3
  460. package/dist/pipeline/multi-stream-apply-context.js +3 -2
  461. package/dist/pipeline/notify-scope.d.ts +2 -1
  462. package/dist/pipeline/pre-handler-gates.d.ts +2 -1
  463. package/dist/pipeline/pre-transaction-reservations.d.ts +3 -3
  464. package/dist/pipeline/pre-transaction-reservations.js +9 -7
  465. package/dist/pipeline/projection-rebuild.js +12 -5
  466. package/dist/pipeline/projection-state.d.ts +0 -6
  467. package/dist/pipeline/projection-state.js +0 -5
  468. package/dist/pipeline/projections-runner.d.ts +2 -1
  469. package/dist/pipeline/projections-runner.js +10 -6
  470. package/dist/pipeline/system-hooks.d.ts +3 -1
  471. package/dist/pipeline/system-hooks.js +6 -4
  472. package/dist/pipeline/system-identity-switch.d.ts +4 -2
  473. package/dist/pipeline/system-identity-switch.js +51 -36
  474. package/dist/pipeline/typed-append-event.d.ts +2 -0
  475. package/dist/pipeline/typed-append-event.js +4 -0
  476. package/dist/pipeline/write-origin.js +2 -2
  477. package/dist/pipeline/write-result-masking.d.ts +1 -1
  478. package/dist/random/index.d.ts +1 -2
  479. package/dist/random/index.js +1 -2
  480. package/dist/rate-limit/bucket.d.ts +2 -1
  481. package/dist/rate-limit/middleware.js +2 -1
  482. package/dist/redis/index.d.ts +3 -4
  483. package/dist/redis/index.js +2 -2
  484. package/dist/schema-cli/apply-command.js +5 -2
  485. package/dist/schema-cli/baseline-command.js +7 -2
  486. package/dist/schema-cli/generate-command.js +7 -9
  487. package/dist/schema-cli/shared.d.ts +12 -2
  488. package/dist/schema-cli/shared.js +24 -2
  489. package/dist/schema-cli/status-command.js +8 -2
  490. package/dist/schema-cli/validate-command.js +48 -4
  491. package/dist/schema-cli.d.ts +0 -1
  492. package/dist/search/configure-tenant-index.d.ts +1 -3
  493. package/dist/search/configure-tenant-index.js +0 -4
  494. package/dist/search/index.d.ts +1 -4
  495. package/dist/search/index.js +0 -2
  496. package/dist/search/meilisearch-adapter-internals.d.ts +8 -0
  497. package/dist/search/meilisearch-adapter-internals.js +9 -0
  498. package/dist/search/meilisearch-adapter.d.ts +1 -8
  499. package/dist/search/meilisearch-adapter.js +6 -7
  500. package/dist/search/meilisearch-peer.d.ts +2 -0
  501. package/dist/search/meilisearch-peer.js +5 -0
  502. package/dist/search/reindex-entity.js +93 -87
  503. package/dist/secrets/index.d.ts +3 -4
  504. package/dist/secrets/index.js +2 -3
  505. package/dist/seeding/index.d.ts +2 -2
  506. package/dist/seeding/index.js +1 -2
  507. package/dist/time/index.d.ts +2 -2
  508. package/dist/time/index.js +1 -1
  509. package/dist/time/tz-context.d.ts +0 -5
  510. package/dist/time/tz-context.js +0 -9
  511. package/dist/ui-types/index.d.ts +8 -11
  512. package/dist/ui-types/index.js +3 -3
  513. package/dist/upgrade-changelog.d.ts +3 -2
  514. package/dist/upgrade-changelog.js +12 -8
  515. package/dist/upgrade-cli-internals.d.ts +8 -0
  516. package/dist/upgrade-cli-internals.js +63 -0
  517. package/dist/upgrade-cli.d.ts +2 -9
  518. package/dist/upgrade-cli.js +28 -70
  519. package/dist/utils/import-optional-peer.d.ts +6 -0
  520. package/dist/utils/import-optional-peer.js +19 -0
  521. package/dist/utils/index.d.ts +1 -4
  522. package/dist/utils/index.js +1 -4
  523. package/package.json +23 -19
  524. package/src/changes.json +236 -0
  525. package/dist/crypto/request-kms-cache.d.ts +0 -8
  526. package/dist/crypto/request-kms-cache.js +0 -21
  527. package/dist/engine/codemod/index.d.ts +0 -2
  528. package/dist/engine/codemod/index.js +0 -1
  529. package/dist/engine/codemod/pipeline-codemod.d.ts +0 -50
  530. package/dist/engine/codemod/pipeline-codemod.js +0 -536
  531. package/dist/engine/feature-ast/entity-field-types.d.ts +0 -13
  532. package/dist/engine/feature-ast/entity-field-types.js +0 -35
  533. package/dist/engine/feature-ast/extractors/ai-steps.d.ts +0 -6
  534. package/dist/engine/feature-ast/extractors/ai-steps.js +0 -254
  535. package/dist/engine/feature-ast/extractors/events.d.ts +0 -5
  536. package/dist/engine/feature-ast/extractors/events.js +0 -275
  537. package/dist/engine/feature-ast/extractors/handlers.d.ts +0 -24
  538. package/dist/engine/feature-ast/extractors/handlers.js +0 -358
  539. package/dist/engine/feature-ast/extractors/hooks.d.ts +0 -24
  540. package/dist/engine/feature-ast/extractors/hooks.js +0 -248
  541. package/dist/engine/feature-ast/extractors/index.d.ts +0 -14
  542. package/dist/engine/feature-ast/extractors/index.js +0 -13
  543. package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +0 -7
  544. package/dist/engine/feature-ast/extractors/jobs-routes.js +0 -145
  545. package/dist/engine/feature-ast/extractors/projections-screens.d.ts +0 -10
  546. package/dist/engine/feature-ast/extractors/projections-screens.js +0 -195
  547. package/dist/engine/feature-ast/extractors/resolve-import.d.ts +0 -21
  548. package/dist/engine/feature-ast/extractors/resolve-import.js +0 -180
  549. package/dist/engine/feature-ast/extractors/round1.d.ts +0 -11
  550. package/dist/engine/feature-ast/extractors/round1.js +0 -87
  551. package/dist/engine/feature-ast/extractors/round2.d.ts +0 -7
  552. package/dist/engine/feature-ast/extractors/round2.js +0 -191
  553. package/dist/engine/feature-ast/extractors/round3.d.ts +0 -23
  554. package/dist/engine/feature-ast/extractors/round3.js +0 -292
  555. package/dist/engine/feature-ast/extractors/round5.d.ts +0 -9
  556. package/dist/engine/feature-ast/extractors/round5.js +0 -68
  557. package/dist/engine/feature-ast/extractors/round6.d.ts +0 -4
  558. package/dist/engine/feature-ast/extractors/round6.js +0 -17
  559. package/dist/engine/feature-ast/extractors/shared.d.ts +0 -94
  560. package/dist/engine/feature-ast/extractors/shared.js +0 -343
  561. package/dist/engine/feature-ast/index.d.ts +0 -16
  562. package/dist/engine/feature-ast/index.js +0 -10
  563. package/dist/engine/feature-ast/parse.d.ts +0 -31
  564. package/dist/engine/feature-ast/parse.js +0 -485
  565. package/dist/engine/feature-ast/patch.d.ts +0 -212
  566. package/dist/engine/feature-ast/patch.js +0 -611
  567. package/dist/engine/feature-ast/patcher.d.ts +0 -217
  568. package/dist/engine/feature-ast/patcher.js +0 -281
  569. package/dist/engine/feature-ast/pattern-change-schema.d.ts +0 -1238
  570. package/dist/engine/feature-ast/pattern-change-schema.js +0 -1072
  571. package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
  572. package/dist/engine/feature-ast/pattern-id-matchers.js +0 -211
  573. package/dist/engine/feature-ast/pattern-id-schema.d.ts +0 -251
  574. package/dist/engine/feature-ast/pattern-id-schema.js +0 -166
  575. package/dist/engine/feature-ast/patterns.d.ts +0 -322
  576. package/dist/engine/feature-ast/patterns.js +0 -107
  577. package/dist/engine/feature-ast/render.d.ts +0 -47
  578. package/dist/engine/feature-ast/render.js +0 -666
  579. package/dist/engine/feature-ast/source-location.d.ts +0 -17
  580. package/dist/engine/feature-ast/source-location.js +0 -27
  581. package/dist/engine/pattern-library/index.d.ts +0 -2
  582. package/dist/engine/pattern-library/index.js +0 -3
  583. package/dist/engine/pattern-library/library.d.ts +0 -14
  584. package/dist/engine/pattern-library/library.js +0 -94
  585. package/dist/engine/pattern-library/mixed-schemas.d.ts +0 -16
  586. package/dist/engine/pattern-library/mixed-schemas.js +0 -559
  587. package/dist/engine/pattern-library/opaque-schemas.d.ts +0 -7
  588. package/dist/engine/pattern-library/opaque-schemas.js +0 -115
  589. package/dist/engine/pattern-library/shared-fields.d.ts +0 -122
  590. package/dist/engine/pattern-library/shared-fields.js +0 -88
  591. package/dist/engine/pattern-library/static-schemas.d.ts +0 -21
  592. package/dist/engine/pattern-library/static-schemas.js +0 -487
  593. package/dist/engine/pattern-library/types.d.ts +0 -158
  594. package/dist/engine/pattern-library/types.js +0 -36
  595. package/dist/engine/resolve-config-or-param.d.ts +0 -18
  596. package/dist/engine/resolve-config-or-param.js +0 -76
  597. package/src/scripts/codemod/README.md +0 -187
  598. package/src/scripts/codemod/codemod-support.ts +0 -334
  599. package/src/scripts/codemod/collect-source-files.ts +0 -48
  600. package/src/scripts/codemod/crypto-shredding-testing-move.ts +0 -119
  601. package/src/scripts/codemod/db-factory.ts +0 -810
  602. package/src/scripts/codemod/feature-factory.ts +0 -429
  603. package/src/scripts/codemod/feature-layout.ts +0 -424
  604. package/src/scripts/codemod/import-extensions.ts +0 -118
  605. package/src/scripts/codemod/migrate-cross-tenant.ts +0 -328
  606. package/src/scripts/codemod/migrate-db-raw.ts +0 -401
  607. package/src/scripts/codemod/migrate-open-to-all.ts +0 -235
  608. package/src/scripts/codemod/object-form.ts +0 -746
  609. package/src/scripts/codemod/package-merge.ts +0 -299
  610. package/src/scripts/codemod/pii-personal-migration.ts +0 -816
  611. package/src/scripts/codemod/remove-engine-payload-casts.ts +0 -318
  612. package/src/scripts/codemod/s3-imports.ts +0 -236
  613. package/src/scripts/codemod/tenant-db-options.ts +0 -454
  614. package/src/scripts/codemod/testing-injection.ts +0 -215
  615. package/src/scripts/codemod/testing-move-targets.ts +0 -161
  616. package/src/scripts/codemod/testing-move.ts +0 -542
  617. package/src/scripts/codemod/unprocessable-error-details-reason.ts +0 -411
@@ -1,145 +0,0 @@
1
- import { SyntaxKind } from "ts-morph";
2
- import { sourceLocationFromNode } from "../source-location.js";
3
- import { fail, findFunctionLiteral, isPlainObject, ok, readBooleanProperty, readDataLiteralNode, readNameLiteral, readPropertyKey, } from "./shared.js";
4
- export function isHttpRouteMethod(value) {
5
- return (value === "GET" ||
6
- value === "POST" ||
7
- value === "PUT" ||
8
- value === "PATCH" ||
9
- value === "DELETE" ||
10
- value === "HEAD" ||
11
- value === "OPTIONS");
12
- }
13
- export function extractJob(call, sourceFile) {
14
- const args = call.getArguments();
15
- const first = args[0];
16
- if (!first) {
17
- return fail("job", sourceLocationFromNode(call, sourceFile), "expected at least one argument");
18
- }
19
- const obj = first.asKind(SyntaxKind.ObjectLiteralExpression);
20
- if (obj && args.length === 1) {
21
- const nameInit = obj
22
- .getProperty("name")
23
- ?.asKind(SyntaxKind.PropertyAssignment)
24
- ?.getInitializer()
25
- ?.asKind(SyntaxKind.StringLiteral);
26
- if (!nameInit) {
27
- return fail("job", sourceLocationFromNode(call, sourceFile), "object form requires a string-literal `name` property");
28
- }
29
- const handlerInit = obj
30
- .getProperty("handler")
31
- ?.asKind(SyntaxKind.PropertyAssignment)
32
- ?.getInitializer();
33
- if (!handlerInit) {
34
- return fail("job", sourceLocationFromNode(call, sourceFile), "object form requires a `handler` property");
35
- }
36
- const fn = findFunctionLiteral(handlerInit);
37
- if (!fn) {
38
- return fail("job", sourceLocationFromNode(call, sourceFile), "handler must be an inline arrow function or function expression");
39
- }
40
- const optionsBag = {};
41
- for (const prop of obj.getProperties()) {
42
- const propAssign = prop.asKind(SyntaxKind.PropertyAssignment);
43
- if (!propAssign)
44
- continue;
45
- const key = readPropertyKey(propAssign);
46
- if (key === "name" || key === "handler")
47
- continue;
48
- const init = propAssign.getInitializer();
49
- if (!init)
50
- continue;
51
- const value = readDataLiteralNode(init);
52
- if (value === undefined) {
53
- return fail("job", sourceLocationFromNode(call, sourceFile), `option "${key}" could not be read as a plain value`);
54
- }
55
- optionsBag[key] = value;
56
- }
57
- return ok({
58
- kind: "job",
59
- source: sourceLocationFromNode(call, sourceFile),
60
- jobName: nameInit.getLiteralValue(),
61
- options: optionsBag,
62
- handlerBody: sourceLocationFromNode(fn, sourceFile),
63
- });
64
- }
65
- const jobName = readNameLiteral(first);
66
- if (jobName === undefined) {
67
- return fail("job", sourceLocationFromNode(call, sourceFile), "first argument must be a string literal job name, or an identifier resolving to one (or use the object form)");
68
- }
69
- const optionsArg = args[1];
70
- if (!optionsArg) {
71
- return fail("job", sourceLocationFromNode(call, sourceFile), "expected an options object as second argument");
72
- }
73
- const options = readDataLiteralNode(optionsArg);
74
- if (!isPlainObject(options)) {
75
- return fail("job", sourceLocationFromNode(call, sourceFile), "options could not be read as a plain object");
76
- }
77
- const handlerArg = args[2];
78
- if (!handlerArg) {
79
- return fail("job", sourceLocationFromNode(call, sourceFile), "expected a handler function as third argument");
80
- }
81
- const fn = findFunctionLiteral(handlerArg);
82
- if (!fn) {
83
- return fail("job", sourceLocationFromNode(call, sourceFile), "third argument must be an inline arrow function or function expression");
84
- }
85
- return ok({
86
- kind: "job",
87
- source: sourceLocationFromNode(call, sourceFile),
88
- jobName,
89
- options: options,
90
- handlerBody: sourceLocationFromNode(fn, sourceFile),
91
- });
92
- }
93
- export function extractHttpRoute(call, sourceFile) {
94
- const arg = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
95
- if (!arg) {
96
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "argument must be an inline HttpRouteDefinition object");
97
- }
98
- const methodLiteral = arg
99
- .getProperty("method")
100
- ?.asKind(SyntaxKind.PropertyAssignment)
101
- ?.getInitializer()
102
- ?.asKind(SyntaxKind.StringLiteral);
103
- if (!methodLiteral) {
104
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "method must be a string literal");
105
- }
106
- const methodValue = methodLiteral.getLiteralValue();
107
- if (!isHttpRouteMethod(methodValue)) {
108
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), `method must be one of GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS (got "${methodValue}")`);
109
- }
110
- const pathLiteral = arg
111
- .getProperty("path")
112
- ?.asKind(SyntaxKind.PropertyAssignment)
113
- ?.getInitializer()
114
- ?.asKind(SyntaxKind.StringLiteral);
115
- if (!pathLiteral) {
116
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "path must be a string literal");
117
- }
118
- const handlerInit = arg
119
- .getProperty("handler")
120
- ?.asKind(SyntaxKind.PropertyAssignment)
121
- ?.getInitializer();
122
- if (!handlerInit) {
123
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "missing `handler` property");
124
- }
125
- const fn = findFunctionLiteral(handlerInit);
126
- if (!fn) {
127
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "handler must be an inline arrow function or function expression");
128
- }
129
- // Missing `anonymous` reads as false (the safe side — mounted
130
- // behind the session auth chain, not public) so a source file that predates
131
- // the required field still parses instead of erroring here.
132
- const anonymousValue = readBooleanProperty(arg, "anonymous");
133
- if (anonymousValue === undefined && arg.getProperty("anonymous") !== undefined) {
134
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "anonymous must be a boolean literal — a non-literal value would be rewritten to a literal on round-trip");
135
- }
136
- const anonymous = anonymousValue === true;
137
- return ok({
138
- kind: "httpRoute",
139
- source: sourceLocationFromNode(call, sourceFile),
140
- method: methodValue,
141
- path: pathLiteral.getLiteralValue(),
142
- handlerBody: sourceLocationFromNode(fn, sourceFile),
143
- anonymous,
144
- });
145
- }
@@ -1,10 +0,0 @@
1
- import type { CallExpression, Node, SourceFile } from "ts-morph";
2
- import type { MultiStreamProjectionPattern, ProjectionPattern, ScreenPattern } from "../patterns.ts";
3
- import type { SourceLocation } from "../source-location.ts";
4
- import { type ExtractOutput } from "./shared.ts";
5
- export declare function readApplyBodies(defObj: ReturnType<Node["asKind"]>, sourceFile: SourceFile): Record<string, SourceLocation> | undefined;
6
- export declare function extractProjection(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ProjectionPattern>;
7
- export declare function extractMultiStreamProjection(call: CallExpression, sourceFile: SourceFile): ExtractOutput<MultiStreamProjectionPattern>;
8
- export declare function collectScreenOpaqueProps(node: Node, path: string, sourceFile: SourceFile, out: Record<string, SourceLocation>): void;
9
- export declare function readScreenStatic(node: Node): unknown;
10
- export declare function extractScreen(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ScreenPattern>;
@@ -1,195 +0,0 @@
1
- import { SyntaxKind } from "ts-morph";
2
- import { SCREEN_OPAQUE_MARKER } from "../patterns.js";
3
- import { sourceLocationFromNode } from "../source-location.js";
4
- import { fail, findFunctionLiteral, isPlainObject, isRawRefSentinel, ok, readDataLiteralNode, readNameOrRefOrList, readPropertyKey, } from "./shared.js";
5
- export function readApplyBodies(defObj, sourceFile) {
6
- if (!defObj)
7
- return undefined;
8
- const obj = defObj.asKind?.(SyntaxKind.ObjectLiteralExpression);
9
- if (!obj)
10
- return undefined;
11
- const applyObj = obj
12
- .getProperty("apply")
13
- ?.asKind(SyntaxKind.PropertyAssignment)
14
- ?.getInitializer()
15
- ?.asKind(SyntaxKind.ObjectLiteralExpression);
16
- if (!applyObj)
17
- return undefined;
18
- const out = {};
19
- for (const prop of applyObj.getProperties()) {
20
- const propAssign = prop.asKind(SyntaxKind.PropertyAssignment);
21
- if (!propAssign)
22
- return undefined;
23
- const init = propAssign.getInitializer();
24
- if (!init)
25
- return undefined;
26
- const fn = findFunctionLiteral(init);
27
- if (!fn)
28
- return undefined;
29
- out[readPropertyKey(propAssign)] = sourceLocationFromNode(fn, sourceFile);
30
- }
31
- return out;
32
- }
33
- export function extractProjection(call, sourceFile) {
34
- const arg = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
35
- if (!arg) {
36
- return fail("projection", sourceLocationFromNode(call, sourceFile), "argument must be an inline ProjectionDefinition object");
37
- }
38
- const nameLit = arg
39
- .getProperty("name")
40
- ?.asKind(SyntaxKind.PropertyAssignment)
41
- ?.getInitializer()
42
- ?.asKind(SyntaxKind.StringLiteral);
43
- if (!nameLit) {
44
- return fail("projection", sourceLocationFromNode(call, sourceFile), "name must be a string literal");
45
- }
46
- const sourceInit = arg
47
- .getProperty("source")
48
- ?.asKind(SyntaxKind.PropertyAssignment)
49
- ?.getInitializer();
50
- if (!sourceInit) {
51
- return fail("projection", sourceLocationFromNode(call, sourceFile), "missing `source` property");
52
- }
53
- const sourceEntity = readNameOrRefOrList(sourceInit);
54
- if (!sourceEntity) {
55
- return fail("projection", sourceLocationFromNode(call, sourceFile), "source must be a string literal or array of string literals");
56
- }
57
- const applyBodies = readApplyBodies(arg, sourceFile);
58
- if (!applyBodies) {
59
- return fail("projection", sourceLocationFromNode(call, sourceFile), "apply must be an inline object map of event-type → function");
60
- }
61
- return ok({
62
- kind: "projection",
63
- source: sourceLocationFromNode(call, sourceFile),
64
- name: nameLit.getLiteralValue(),
65
- sourceEntity,
66
- applyBodies,
67
- });
68
- }
69
- export function extractMultiStreamProjection(call, sourceFile) {
70
- const arg = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
71
- if (!arg) {
72
- return fail("multiStreamProjection", sourceLocationFromNode(call, sourceFile), "argument must be an inline MultiStreamProjectionDefinition object");
73
- }
74
- const nameLit = arg
75
- .getProperty("name")
76
- ?.asKind(SyntaxKind.PropertyAssignment)
77
- ?.getInitializer()
78
- ?.asKind(SyntaxKind.StringLiteral);
79
- if (!nameLit) {
80
- return fail("multiStreamProjection", sourceLocationFromNode(call, sourceFile), "name must be a string literal");
81
- }
82
- const applyBodies = readApplyBodies(arg, sourceFile);
83
- if (!applyBodies) {
84
- return fail("multiStreamProjection", sourceLocationFromNode(call, sourceFile), "apply must be an inline object map of event-type → function");
85
- }
86
- const errorModeInit = arg
87
- .getProperty("errorMode")
88
- ?.asKind(SyntaxKind.PropertyAssignment)
89
- ?.getInitializer();
90
- const errorMode = errorModeInit ? readDataLiteralNode(errorModeInit) : undefined;
91
- const runInLit = arg
92
- .getProperty("runIn")
93
- ?.asKind(SyntaxKind.PropertyAssignment)
94
- ?.getInitializer()
95
- ?.asKind(SyntaxKind.StringLiteral);
96
- const runIn = runInLit ? runInLit.getLiteralValue() : undefined;
97
- const deliveryLit = arg
98
- .getProperty("delivery")
99
- ?.asKind(SyntaxKind.PropertyAssignment)
100
- ?.getInitializer()
101
- ?.asKind(SyntaxKind.StringLiteral);
102
- const delivery = deliveryLit
103
- ? deliveryLit.getLiteralValue()
104
- : undefined;
105
- return ok({
106
- kind: "multiStreamProjection",
107
- source: sourceLocationFromNode(call, sourceFile),
108
- name: nameLit.getLiteralValue(),
109
- applyBodies,
110
- ...(isPlainObject(errorMode) && { errorMode: errorMode }),
111
- ...(runIn !== undefined && { runIn }),
112
- ...(delivery !== undefined && { delivery }),
113
- });
114
- }
115
- export function collectScreenOpaqueProps(node, path, sourceFile, out) {
116
- const fn = findFunctionLiteral(node);
117
- if (fn) {
118
- out[path] = sourceLocationFromNode(fn, sourceFile);
119
- }
120
- else if (node.isKind(SyntaxKind.ObjectLiteralExpression)) {
121
- for (const prop of node.getProperties()) {
122
- const propAssign = prop.asKind(SyntaxKind.PropertyAssignment);
123
- if (!propAssign)
124
- continue;
125
- const init = propAssign.getInitializer();
126
- if (!init)
127
- continue;
128
- const key = readPropertyKey(propAssign);
129
- const childPath = path ? `${path}.${key}` : key;
130
- collectScreenOpaqueProps(init, childPath, sourceFile, out);
131
- }
132
- }
133
- else if (node.isKind(SyntaxKind.ArrayLiteralExpression)) {
134
- node.getElements().forEach((el, idx) => {
135
- collectScreenOpaqueProps(el, `${path}.${idx}`, sourceFile, out);
136
- });
137
- }
138
- }
139
- export function readScreenStatic(node) {
140
- if (findFunctionLiteral(node))
141
- return SCREEN_OPAQUE_MARKER;
142
- const obj = node.asKind(SyntaxKind.ObjectLiteralExpression);
143
- if (obj) {
144
- const out = {};
145
- for (const prop of obj.getProperties()) {
146
- const propAssign = prop.asKind(SyntaxKind.PropertyAssignment);
147
- if (!propAssign)
148
- continue;
149
- const init = propAssign.getInitializer();
150
- if (!init)
151
- continue;
152
- out[readPropertyKey(propAssign)] = readScreenStatic(init);
153
- }
154
- return out;
155
- }
156
- const arr = node.asKind(SyntaxKind.ArrayLiteralExpression);
157
- if (arr) {
158
- return arr.getElements().map(readScreenStatic);
159
- }
160
- const value = readDataLiteralNode(node);
161
- if (value === undefined)
162
- return SCREEN_OPAQUE_MARKER;
163
- return value;
164
- }
165
- export function extractScreen(call, sourceFile) {
166
- const arg = call.getArguments()[0];
167
- if (!arg) {
168
- return fail("screen", sourceLocationFromNode(call, sourceFile), "expected a ScreenDefinition object as first argument");
169
- }
170
- const obj = arg.asKind(SyntaxKind.ObjectLiteralExpression);
171
- if (!obj) {
172
- const raw = readDataLiteralNode(arg);
173
- if (!isRawRefSentinel(raw)) {
174
- return fail("screen", sourceLocationFromNode(call, sourceFile), "argument must be an inline object literal");
175
- }
176
- return ok({
177
- kind: "screen",
178
- source: sourceLocationFromNode(call, sourceFile),
179
- definition: raw,
180
- opaqueProps: {},
181
- });
182
- }
183
- const opaqueProps = {};
184
- collectScreenOpaqueProps(obj, "", sourceFile, opaqueProps);
185
- const definition = readScreenStatic(obj);
186
- if (!isPlainObject(definition)) {
187
- return fail("screen", sourceLocationFromNode(call, sourceFile), "definition could not be read structurally");
188
- }
189
- return ok({
190
- kind: "screen",
191
- source: sourceLocationFromNode(call, sourceFile),
192
- definition: definition,
193
- opaqueProps: opaqueProps,
194
- });
195
- }
@@ -1,21 +0,0 @@
1
- import type { SourceFile, VariableDeclaration } from "ts-morph";
2
- import { Node } from "ts-morph";
3
- export declare function resolveModuleFile(fromFile: SourceFile, specifier: string, { allowDeclarationFiles }?: {
4
- readonly allowDeclarationFiles?: boolean;
5
- }): SourceFile | undefined;
6
- export declare function findImportBindingForLocalName(sourceFile: SourceFile, localName: string): {
7
- readonly moduleSpecifier: string;
8
- readonly importedName: string;
9
- } | undefined;
10
- /**
11
- * `visited` keys on `${filePath}#${name}`, not path alone — aliasing can
12
- * legally re-export a different name from the same file — and doubles as
13
- * the cycle guard; `depth` backstops pathological non-cyclic chains.
14
- */
15
- export declare function resolveExportedVariable(file: SourceFile, exportedName: string, visited?: Set<string>, depth?: number): VariableDeclaration | undefined;
16
- /**
17
- * Any binding of the same name that is not a plain `const NAME = <init>`
18
- * (parameter, destructuring, loop variable, catch variable) shadows and ends
19
- * the search — it has no statically readable initializer.
20
- */
21
- export declare function findScopedVariableDeclaration(identifier: Node, name: string): VariableDeclaration | undefined;
@@ -1,180 +0,0 @@
1
- import { Node, SyntaxKind, ts } from "ts-morph";
2
- const MODULE_RESOLUTION_OPTIONS = {
3
- moduleResolution: ts.ModuleResolutionKind.Bundler,
4
- module: ts.ModuleKind.ESNext,
5
- target: ts.ScriptTarget.ESNext,
6
- };
7
- const MAX_RESOLUTION_DEPTH = 24;
8
- const DECLARATION_FILES_OK = { allowDeclarationFiles: true };
9
- export function resolveModuleFile(fromFile, specifier, { allowDeclarationFiles = false } = {}) {
10
- const project = fromFile.getProject();
11
- // The project's own host, not ts.sys: it honours an in-memory file system
12
- // (Designer) and exists outside Node.
13
- const resolved = ts.resolveModuleName(specifier, fromFile.getFilePath(), MODULE_RESOLUTION_OPTIONS, project.getModuleResolutionHost());
14
- const resolvedFileName = resolved.resolvedModule?.resolvedFileName;
15
- if (!resolvedFileName)
16
- return undefined;
17
- // A declaration file has no initializers to read. Callers that only need
18
- // `export declare const X: "literal"` types opt in (installed packages
19
- // resolve to dist/*.d.ts through their publishConfig exports).
20
- if (!allowDeclarationFiles && resolvedFileName.endsWith(".d.ts"))
21
- return undefined;
22
- return fromFile.getProject().addSourceFileAtPathIfExists(resolvedFileName);
23
- }
24
- export function findImportBindingForLocalName(sourceFile, localName) {
25
- for (const importDecl of sourceFile.getImportDeclarations()) {
26
- const named = importDecl
27
- .getNamedImports()
28
- .find((ni) => (ni.getAliasNode()?.getText() ?? ni.getName()) === localName);
29
- if (!named)
30
- continue;
31
- return {
32
- moduleSpecifier: importDecl.getModuleSpecifierValue(),
33
- importedName: named.getName(),
34
- };
35
- }
36
- return undefined;
37
- }
38
- /**
39
- * `visited` keys on `${filePath}#${name}`, not path alone — aliasing can
40
- * legally re-export a different name from the same file — and doubles as
41
- * the cycle guard; `depth` backstops pathological non-cyclic chains.
42
- */
43
- export function resolveExportedVariable(file, exportedName, visited = new Set(), depth = 0) {
44
- if (depth > MAX_RESOLUTION_DEPTH)
45
- return undefined;
46
- const key = `${file.getFilePath()}#${exportedName}`;
47
- if (visited.has(key))
48
- return undefined;
49
- visited.add(key);
50
- const directDecl = file.getVariableDeclaration(exportedName);
51
- if (directDecl?.getVariableStatement()?.hasExportKeyword())
52
- return directDecl;
53
- const namedExportMatch = resolveViaNamedExportSpecifier(file, exportedName, visited, depth);
54
- if (namedExportMatch)
55
- return namedExportMatch;
56
- return resolveViaStarExport(file, exportedName, visited, depth);
57
- }
58
- function resolveViaNamedExportSpecifier(file, exportedName, visited, depth) {
59
- for (const exportDecl of file.getExportDeclarations()) {
60
- const specifier = exportDecl
61
- .getNamedExports()
62
- .find((spec) => (spec.getAliasNode()?.getText() ?? spec.getName()) === exportedName);
63
- if (!specifier)
64
- continue;
65
- const originalName = specifier.getName();
66
- if (!exportDecl.hasModuleSpecifier()) {
67
- const resolved = resolveLocalExportBinding(file, originalName, visited, depth);
68
- if (resolved)
69
- return resolved;
70
- continue;
71
- }
72
- const moduleSpecifierValue = exportDecl.getModuleSpecifierValue();
73
- if (!moduleSpecifierValue)
74
- continue;
75
- const target = resolveModuleFile(file, moduleSpecifierValue, DECLARATION_FILES_OK);
76
- if (!target)
77
- continue;
78
- const resolved = resolveExportedVariable(target, originalName, visited, depth + 1);
79
- if (resolved)
80
- return resolved;
81
- }
82
- return undefined;
83
- }
84
- function resolveLocalExportBinding(file, originalName, visited, depth) {
85
- const localDecl = file.getVariableDeclaration(originalName);
86
- if (localDecl)
87
- return localDecl;
88
- const binding = findImportBindingForLocalName(file, originalName);
89
- if (!binding)
90
- return undefined;
91
- const target = resolveModuleFile(file, binding.moduleSpecifier, DECLARATION_FILES_OK);
92
- if (!target)
93
- return undefined;
94
- return resolveExportedVariable(target, binding.importedName, visited, depth + 1);
95
- }
96
- function resolveViaStarExport(file, exportedName, visited, depth) {
97
- for (const exportDecl of file.getExportDeclarations()) {
98
- if (!exportDecl.hasModuleSpecifier())
99
- continue;
100
- if (exportDecl.getNamedExports().length > 0)
101
- continue;
102
- if (exportDecl.getNamespaceExport())
103
- continue; // `export * as ns from "./m"` is not a re-export target.
104
- const moduleSpecifierValue = exportDecl.getModuleSpecifierValue();
105
- if (!moduleSpecifierValue)
106
- continue;
107
- const target = resolveModuleFile(file, moduleSpecifierValue, DECLARATION_FILES_OK);
108
- if (!target)
109
- continue;
110
- const resolved = resolveExportedVariable(target, exportedName, visited, depth + 1);
111
- if (resolved)
112
- return resolved;
113
- }
114
- return undefined;
115
- }
116
- /**
117
- * Any binding of the same name that is not a plain `const NAME = <init>`
118
- * (parameter, destructuring, loop variable, catch variable) shadows and ends
119
- * the search — it has no statically readable initializer.
120
- */
121
- export function findScopedVariableDeclaration(identifier, name) {
122
- for (const ancestor of [identifier, ...identifier.getAncestors()]) {
123
- if (declaresShadowingBinding(ancestor, name))
124
- return undefined;
125
- const statements = getDirectStatements(ancestor);
126
- if (!statements)
127
- continue;
128
- for (const stmt of statements) {
129
- const varStmt = stmt.asKind(SyntaxKind.VariableStatement);
130
- if (!varStmt)
131
- continue;
132
- for (const decl of varStmt.getDeclarationList().getDeclarations()) {
133
- const nameNode = decl.getNameNode();
134
- if (Node.isIdentifier(nameNode)) {
135
- if (nameNode.getText() === name)
136
- return decl;
137
- }
138
- else if (bindingNames(nameNode).includes(name)) {
139
- return undefined;
140
- }
141
- }
142
- }
143
- }
144
- return undefined;
145
- }
146
- function bindingNames(nameNode) {
147
- if (Node.isIdentifier(nameNode))
148
- return [nameNode.getText()];
149
- if (Node.isObjectBindingPattern(nameNode) || Node.isArrayBindingPattern(nameNode)) {
150
- return nameNode
151
- .getElements()
152
- .flatMap((element) => Node.isBindingElement(element) ? bindingNames(element.getNameNode()) : []);
153
- }
154
- return [];
155
- }
156
- function declaresShadowingBinding(node, name) {
157
- if (Node.isParametered(node)) {
158
- return node.getParameters().some((p) => bindingNames(p.getNameNode()).includes(name));
159
- }
160
- if (Node.isForOfStatement(node) || Node.isForInStatement(node) || Node.isForStatement(node)) {
161
- const initializer = node.getInitializer();
162
- return (initializer !== undefined &&
163
- Node.isVariableDeclarationList(initializer) &&
164
- initializer.getDeclarations().some((decl) => bindingNames(decl.getNameNode()).includes(name)));
165
- }
166
- if (Node.isCatchClause(node)) {
167
- const decl = node.getVariableDeclaration();
168
- return decl !== undefined && bindingNames(decl.getNameNode()).includes(name);
169
- }
170
- return false;
171
- }
172
- function getDirectStatements(node) {
173
- const block = node.asKind(SyntaxKind.Block);
174
- if (block)
175
- return block.getStatements();
176
- const sourceFile = node.asKind(SyntaxKind.SourceFile);
177
- if (sourceFile)
178
- return sourceFile.getStatements();
179
- return undefined;
180
- }
@@ -1,11 +0,0 @@
1
- import type { CallExpression, SourceFile } from "ts-morph";
2
- import type { AdoptsBundledListsPattern, DescribePattern, OptionalRequiresPattern, ReadsConfigPattern, RequiresPattern, SystemScopePattern, ToggleablePattern, UiHintsPattern } from "../patterns.ts";
3
- import { type ExtractOutput } from "./shared.ts";
4
- export declare function extractRequires(call: CallExpression, sourceFile: SourceFile): ExtractOutput<RequiresPattern>;
5
- export declare function extractOptionalRequires(call: CallExpression, sourceFile: SourceFile): ExtractOutput<OptionalRequiresPattern>;
6
- export declare function extractReadsConfig(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ReadsConfigPattern>;
7
- export declare function extractSystemScope(call: CallExpression, sourceFile: SourceFile): ExtractOutput<SystemScopePattern>;
8
- export declare function extractAdoptsBundledLists(call: CallExpression, sourceFile: SourceFile): ExtractOutput<AdoptsBundledListsPattern>;
9
- export declare function extractUiHints(call: CallExpression, sourceFile: SourceFile): ExtractOutput<UiHintsPattern>;
10
- export declare function extractDescribe(call: CallExpression, sourceFile: SourceFile): ExtractOutput<DescribePattern>;
11
- export declare function extractToggleable(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ToggleablePattern>;
@@ -1,87 +0,0 @@
1
- import { sourceLocationFromNode } from "../source-location.js";
2
- import { fail, ok, readBooleanProperty, readStringLiteralArgs, readVarargsOrArrayProp, } from "./shared.js";
3
- export function extractRequires(call, sourceFile) {
4
- const names = readVarargsOrArrayProp(call, "features");
5
- if (!names) {
6
- return fail("requires", sourceLocationFromNode(call, sourceFile), "expected positional string literals or { features: string[] }");
7
- }
8
- return ok({
9
- kind: "requires",
10
- source: sourceLocationFromNode(call, sourceFile),
11
- featureNames: names,
12
- });
13
- }
14
- export function extractOptionalRequires(call, sourceFile) {
15
- const names = readVarargsOrArrayProp(call, "features");
16
- if (!names) {
17
- return fail("optionalRequires", sourceLocationFromNode(call, sourceFile), "expected positional string literals or { features: string[] }");
18
- }
19
- return ok({
20
- kind: "optionalRequires",
21
- source: sourceLocationFromNode(call, sourceFile),
22
- featureNames: names,
23
- });
24
- }
25
- export function extractReadsConfig(call, sourceFile) {
26
- const keys = readVarargsOrArrayProp(call, "keys");
27
- if (!keys) {
28
- return fail("readsConfig", sourceLocationFromNode(call, sourceFile), "expected positional string literals or { keys: string[] }");
29
- }
30
- return ok({
31
- kind: "readsConfig",
32
- source: sourceLocationFromNode(call, sourceFile),
33
- qualifiedKeys: keys,
34
- });
35
- }
36
- export function extractSystemScope(call, sourceFile) {
37
- return ok({
38
- kind: "systemScope",
39
- source: sourceLocationFromNode(call, sourceFile),
40
- });
41
- }
42
- export function extractAdoptsBundledLists(call, sourceFile) {
43
- return ok({
44
- kind: "adoptsBundledLists",
45
- source: sourceLocationFromNode(call, sourceFile),
46
- });
47
- }
48
- export function extractUiHints(call, sourceFile) {
49
- return ok({
50
- kind: "uiHints",
51
- source: sourceLocationFromNode(call, sourceFile),
52
- });
53
- }
54
- export function extractDescribe(call, sourceFile) {
55
- const args = readStringLiteralArgs(call);
56
- const text = args?.[0];
57
- if (text === undefined || args?.length !== 1) {
58
- return fail("describe", sourceLocationFromNode(call, sourceFile), "expected a single string literal");
59
- }
60
- // Mirrors the define-feature boot guard: whitespace-only describes throw
61
- // at boot — the AST path must reject them too, and store the TRIMMED
62
- // text so render output matches the runtime/manifest value.
63
- const trimmed = text.trim();
64
- if (trimmed.length === 0) {
65
- return fail("describe", sourceLocationFromNode(call, sourceFile), "must be a non-empty string");
66
- }
67
- return ok({
68
- kind: "describe",
69
- source: sourceLocationFromNode(call, sourceFile),
70
- text: trimmed,
71
- });
72
- }
73
- export function extractToggleable(call, sourceFile) {
74
- const arg = call.getArguments()[0];
75
- if (!arg) {
76
- return fail("toggleable", sourceLocationFromNode(call, sourceFile), "expected an object argument with a `default` boolean");
77
- }
78
- const defaultValue = readBooleanProperty(arg, "default");
79
- if (defaultValue === undefined) {
80
- return fail("toggleable", sourceLocationFromNode(call, sourceFile), "argument must be `{ default: true | false }`");
81
- }
82
- return ok({
83
- kind: "toggleable",
84
- source: sourceLocationFromNode(call, sourceFile),
85
- default: defaultValue,
86
- });
87
- }
@@ -1,7 +0,0 @@
1
- import type { CallExpression, SourceFile } from "ts-morph";
2
- import type { EntityPattern, NavPattern, RelationPattern, WorkspacePattern } from "../patterns.ts";
3
- import { type ExtractOutput } from "./shared.ts";
4
- export declare function extractEntity(call: CallExpression, sourceFile: SourceFile): ExtractOutput<EntityPattern>;
5
- export declare function extractRelation(call: CallExpression, sourceFile: SourceFile): ExtractOutput<RelationPattern>;
6
- export declare function extractNav(call: CallExpression, sourceFile: SourceFile): ExtractOutput<NavPattern>;
7
- export declare function extractWorkspace(call: CallExpression, sourceFile: SourceFile): ExtractOutput<WorkspacePattern>;