@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,485 +0,0 @@
1
- // parseFeatureFile — entry-point for AST pattern detection. Reads a
2
- // `defineFeature.ts` file, walks the `setup(r => { ... })` callback,
3
- // and emits one FeaturePattern per recognised `r.*` call.
4
- //
5
- // **Pipeline position:**
6
- //
7
- // ┌──────────────────┐ parseFeatureFile ┌─────────────────────┐
8
- // │ feature-file.ts │ ──────────────────────► │ ParseResult │
9
- // │ (defineFeature │ │ - featureName │
10
- // │ with r.* calls) │ │ - patterns: FP[] │
11
- // └──────────────────┘ │ - errors: PE[] │
12
- // └─────────────────────┘
13
- //
14
- // **What is NOT extracted:**
15
- // - Imports, helper functions, local consts between the `r.*` calls.
16
- // Those stay in the file buffer and survive every patch unchanged.
17
- // - Top-level code outside `defineFeature(...)`. Designer/AI treat
18
- // such files as "not a feature file".
19
- //
20
- // **Skeleton status:** interface fixed, extractors are TODO.
21
- // Per-pattern extractors fill in iteratively — each iteration adds
22
- // one extractor + a focused test.
23
- import { Project, SyntaxKind } from "ts-morph";
24
- import { extractAdoptsBundledLists, extractAiClassify, extractAiExtract, extractAiGenerate, extractAuthClaims, extractBootCheck, extractClaimKey, extractConfig, extractDefineEvent, extractDescribe, extractEntity, extractEnvSchema, extractExposesApi, extractExtendsRegistrar, extractHook, extractHttpRoute, extractJob, extractMetric, extractMultiStreamProjection, extractNav, extractNotification, extractOptionalRequires, extractProjection, extractQueryHandler, extractReadsConfig, extractReferenceData, extractRelation, extractRequires, extractScreen, extractSecret, extractSecretNamespace, extractStoreTable, extractStreamHandler, extractSystemScope, extractToggleable, extractTranslations, extractTreeActions, extractUiHints, extractUseExtension, extractUsesApi, extractWorkspace, extractWriteHandler, findFunctionLiteral, findImportBindingForLocalName, readObjectPropertyInitializer, resolveModuleFile, resolveSameFileObjectLiteral, } from "./extractors/index.js";
25
- import { sourceLocationFromNode } from "./source-location.js";
26
- /**
27
- * Parse the given feature file and return all recognised r.* calls
28
- * as a FeaturePattern list.
29
- *
30
- * Does NOT throw on TypeScript errors — the visitor works on the syntax
31
- * tree, not on the type checker. Files with type errors can still be
32
- * parsed structurally (Designer keeps showing them, AI can suggest fixes).
33
- *
34
- * Throws on filesystem / parse errors that ts-morph cannot recover from.
35
- */
36
- export function parseFeatureFile(filePath) {
37
- const project = new Project({
38
- // Skip tsconfig file discovery: we only ever load this single file.
39
- // Without these flags ts-morph would resolve the whole tsconfig
40
- // tree, which is expensive on large repos and unnecessary for
41
- // structural analysis.
42
- skipAddingFilesFromTsConfig: true,
43
- skipFileDependencyResolution: true,
44
- });
45
- const sourceFile = project.addSourceFileAtPath(filePath);
46
- return parseSourceFile(sourceFile);
47
- }
48
- /**
49
- * Same as parseFeatureFile, but for SourceFiles already loaded by the
50
- * caller. Useful for tests + the Designer (which keeps its own Project
51
- * instance and avoids re-IO per parse).
52
- */
53
- export function parseSourceFile(sourceFile) {
54
- const setupCall = findDefineFeatureCall(sourceFile);
55
- if (!setupCall) {
56
- return { featureName: undefined, patterns: [], errors: [] };
57
- }
58
- const featureName = extractFeatureName(setupCall);
59
- const setupCallback = extractSetupCallback(setupCall);
60
- if (!setupCallback) {
61
- return { featureName, patterns: [], errors: [] };
62
- }
63
- const registrarParamName = extractRegistrarParamName(setupCallback);
64
- if (!registrarParamName) {
65
- return { featureName, patterns: [], errors: [] };
66
- }
67
- const patterns = [];
68
- const errors = [];
69
- walkSetupCallback(setupCallback.getBody(), registrarParamName, sourceFile, patterns, errors);
70
- walkAiStepCalls(setupCallback.getBody(), registrarParamName, sourceFile, patterns, errors);
71
- // Tie-break on the path relative to the entry file's directory so cross-file
72
- // registrar wrappers don't interleave by foreign line numbers alone, without
73
- // the order depending on where the repo is checked out (worktrees).
74
- const parseRoot = sourceFile.getDirectoryPath();
75
- patterns.sort((a, b) => {
76
- const fileCmp = relativePosixPath(parseRoot, a.source.file).localeCompare(relativePosixPath(parseRoot, b.source.file));
77
- if (fileCmp !== 0)
78
- return fileCmp;
79
- return a.source.start.line - b.source.start.line;
80
- });
81
- return { featureName, patterns, errors };
82
- }
83
- // node:path is avoided: the Designer runs this against an in-memory file
84
- // system outside Node. ts-morph paths are always posix-style.
85
- export function relativePosixPath(fromDirectory, filePath) {
86
- const fromSegments = fromDirectory.split("/").filter(Boolean);
87
- const fileSegments = filePath.split("/").filter(Boolean);
88
- let common = 0;
89
- while (common < fromSegments.length &&
90
- common < fileSegments.length - 1 &&
91
- fromSegments[common] === fileSegments[common]) {
92
- common += 1;
93
- }
94
- return [...fromSegments.slice(common).map(() => ".."), ...fileSegments.slice(common)].join("/");
95
- }
96
- // =============================================================================
97
- // Internal — locate defineFeature + setup callback
98
- // =============================================================================
99
- /**
100
- * Find the `defineFeature(name, setup)` call in the source file.
101
- * Convention: each feature file invokes `defineFeature` exactly once
102
- * at top level. If multiple calls exist (unusual outside of test
103
- * helpers) we take the first.
104
- */
105
- function findDefineFeatureCall(sourceFile) {
106
- for (const stmt of sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {
107
- const expr = stmt.getExpression();
108
- if (expr.getText() === "defineFeature") {
109
- return stmt;
110
- }
111
- }
112
- return undefined;
113
- }
114
- /**
115
- * Read the feature name from the first argument of `defineFeature(...)`.
116
- * Returns undefined when the argument is not a string literal (e.g.
117
- * dynamic name from a const). Designer can still load the file but the
118
- * AI generator will never produce such a setup.
119
- */
120
- function extractFeatureName(call) {
121
- const arg = call.getArguments()[0];
122
- if (!arg)
123
- return undefined;
124
- const literal = arg.asKind(SyntaxKind.StringLiteral);
125
- if (!literal)
126
- return undefined;
127
- return literal.getLiteralValue();
128
- }
129
- /**
130
- * Read the `setup` callback (second argument) from `defineFeature(...)`.
131
- * We only support the arrow-function form here — function expressions
132
- * have not turned up in any sample so far. If a future feature needs
133
- * them, this is the single hook to extend.
134
- */
135
- function extractSetupCallback(call) {
136
- const arg = call.getArguments()[1];
137
- if (!arg)
138
- return undefined;
139
- return arg.asKind(SyntaxKind.ArrowFunction);
140
- }
141
- /**
142
- * Read the parameter name of the setup callback's first parameter.
143
- * Idiomatic feature files call it `r`, but `(registrar) => { ... }` or
144
- * `(reg) => { ... }` are equally legal — the visitor must follow the
145
- * author's choice or it would silently miss every call.
146
- *
147
- * Returns undefined when the callback takes no parameter at all (a
148
- * feature that does nothing — empty patterns list, no error).
149
- */
150
- function extractRegistrarParamName(setup) {
151
- const param = setup.getParameters()[0];
152
- if (!param)
153
- return undefined;
154
- return param.getName();
155
- }
156
- // =============================================================================
157
- // Internal — walk + dispatch
158
- // =============================================================================
159
- /**
160
- * Walk the body of the setup callback and route every `<param>.<method>(...)`
161
- * call to the matching extractor. Helper functions / local variables /
162
- * imports are ignored.
163
- *
164
- * We rely on `getDescendantsOfKind` rather than walking only direct
165
- * children: the `r.*` API is always called on the registrar variable,
166
- * which the closure rules keep scoped to the setup callback. Nested
167
- * calls inside a writeHandler closure would not see `r` and therefore
168
- * cannot pose as feature-level patterns — collisions are
169
- * structurally impossible.
170
- */
171
- function walkSetupCallback(body, registrarParamName, sourceFile, patterns, errors, visitedWrapperDecls = new Set()) {
172
- for (const call of body.getDescendantsOfKind(SyntaxKind.CallExpression)) {
173
- const methodName = extractRegistrarMethodName(call, registrarParamName);
174
- if (methodName) {
175
- const result = dispatchExtractor(methodName, call, sourceFile);
176
- if (result.kind === "pattern") {
177
- patterns.push(result.pattern);
178
- }
179
- else {
180
- errors.push(result.error);
181
- }
182
- continue;
183
- }
184
- // Not a direct `<registrarParam>.<method>(...)` call. Check whether it's
185
- // a registrar-wrapper call — a function that receives the registrar as
186
- // a bare argument, e.g. `registerShowPonyScreens(r)`. Such wrappers are
187
- // invisible to a receiver-shape match, so we resolve the callee (same
188
- // file, or the declaring file of a named import) and recurse
189
- // into its body with its own parameter name for the registrar slot.
190
- const wrapper = resolveRegistrarWrapperCall(call, registrarParamName);
191
- if (!wrapper)
192
- continue; // Free function call unrelated to the registrar — ignore.
193
- if (visitedWrapperDecls.has(wrapper.declNode))
194
- continue; // Cycle guard.
195
- visitedWrapperDecls.add(wrapper.declNode);
196
- // wrapper.sourceFile, not the outer `sourceFile` param: a cross-file
197
- // wrapper's body lives in a different file, and sourceLocationFromNode
198
- // uses whichever SourceFile it's given for both the `file` path and
199
- // the line/column table — passing the wrong one silently corrupts
200
- // both for every pattern found inside the wrapper.
201
- walkSetupCallback(wrapper.body, wrapper.paramName, wrapper.sourceFile, patterns, errors, visitedWrapperDecls);
202
- }
203
- }
204
- /**
205
- * Resolves a bare call like `registerShowPonyScreens(r)` to the callee's
206
- * body + its own parameter name for the registrar slot. The callee may be
207
- * declared in the same file, or imported by name from another file —
208
- * resolved syntactically via resolveModuleFile, which only works against a
209
- * real-filesystem Project; the in-memory Designer Project has no files to
210
- * resolve against and returns undefined there, same as any other
211
- * unresolvable reference. Does not follow re-exports in the target file — a
212
- * wrapper function is expected to be declared directly in the module it's
213
- * imported from.
214
- */
215
- function resolveRegistrarWrapperCall(call, registrarParamName) {
216
- const callee = call.getExpression().asKind(SyntaxKind.Identifier);
217
- if (!callee)
218
- return undefined;
219
- const args = call.getArguments();
220
- const argIndex = args.findIndex((arg) => arg.getText() === registrarParamName);
221
- if (argIndex === -1)
222
- return undefined; // Registrar not passed to this call.
223
- const callSourceFile = call.getSourceFile();
224
- const name = callee.getText();
225
- const local = resolveWrapperDeclarationInFile(callSourceFile, name, argIndex);
226
- if (local)
227
- return { ...local, sourceFile: callSourceFile };
228
- const binding = findImportBindingForLocalName(callSourceFile, name);
229
- if (!binding)
230
- return undefined;
231
- const targetFile = resolveModuleFile(callSourceFile, binding.moduleSpecifier);
232
- if (!targetFile)
233
- return undefined; // Unresolvable: in-memory project, external package, or missing file.
234
- const imported = resolveWrapperDeclarationInFile(targetFile, binding.importedName, argIndex);
235
- return imported ? { ...imported, sourceFile: targetFile } : undefined;
236
- }
237
- function resolveWrapperDeclarationInFile(sourceFile, name, argIndex) {
238
- const fnDecl = sourceFile.getFunction(name);
239
- if (fnDecl) {
240
- const param = fnDecl.getParameters()[argIndex];
241
- const body = fnDecl.getBody();
242
- if (!param || !body)
243
- return undefined;
244
- return { body, paramName: param.getName(), declNode: fnDecl };
245
- }
246
- const varDecl = sourceFile.getVariableDeclaration(name);
247
- const init = varDecl?.getInitializer();
248
- const literal = init ? findFunctionLiteral(init) : undefined;
249
- const fnLiteral = literal?.asKind(SyntaxKind.ArrowFunction) ?? literal?.asKind(SyntaxKind.FunctionExpression);
250
- if (fnLiteral) {
251
- const param = fnLiteral.getParameters()[argIndex];
252
- if (!param)
253
- return undefined;
254
- return { body: fnLiteral.getBody(), paramName: param.getName(), declNode: fnLiteral };
255
- }
256
- return undefined;
257
- }
258
- /**
259
- * Returns the method name when the call has the form
260
- * `<registrarParamName>.<method>(...)`, otherwise undefined.
261
- *
262
- * Reads the property-access expression on the call's left-hand side
263
- * and matches the receiver against the captured parameter name. Any
264
- * other shape (free function call, method call on something else)
265
- * returns undefined and is skipped by the walker.
266
- */
267
- function extractRegistrarMethodName(call, registrarParamName) {
268
- const expr = call.getExpression();
269
- const propAccess = expr.asKind(SyntaxKind.PropertyAccessExpression);
270
- if (!propAccess)
271
- return undefined;
272
- const receiver = propAccess.getExpression();
273
- if (receiver.getText() !== registrarParamName)
274
- return undefined;
275
- return propAccess.getName();
276
- }
277
- function resolveStepsArrayRoot(stepsInit) {
278
- const directArray = stepsInit.asKind(SyntaxKind.ArrayLiteralExpression);
279
- if (directArray)
280
- return directArray;
281
- const pipelineCall = stepsInit.asKind(SyntaxKind.CallExpression);
282
- if (pipelineCall?.getExpression().getText() !== "stepsPipeline") {
283
- return undefined;
284
- }
285
- const closureArg = pipelineCall.getArguments()[0];
286
- if (!closureArg)
287
- return undefined;
288
- const fn = findFunctionLiteral(closureArg);
289
- if (!fn)
290
- return undefined;
291
- const fnBody = fn.asKind(SyntaxKind.ArrowFunction)?.getBody() ??
292
- fn.asKind(SyntaxKind.FunctionExpression)?.getBody();
293
- const exprBody = fnBody?.asKind(SyntaxKind.ArrayLiteralExpression);
294
- if (exprBody)
295
- return exprBody;
296
- if (fnBody?.isKind(SyntaxKind.Block)) {
297
- for (const stmt of fnBody.getStatements()) {
298
- const ret = stmt.asKind(SyntaxKind.ReturnStatement);
299
- const retArray = ret?.getExpression()?.asKind(SyntaxKind.ArrayLiteralExpression);
300
- if (retArray)
301
- return retArray;
302
- }
303
- }
304
- return undefined;
305
- }
306
- function collectWorkflowStepArrayRoots(body) {
307
- const roots = [];
308
- for (const call of body.getDescendantsOfKind(SyntaxKind.CallExpression)) {
309
- if (call.getExpression().getText() !== "defineWorkflow")
310
- continue;
311
- const obj = resolveSameFileObjectLiteral(call.getArguments()[0] ?? call);
312
- if (!obj)
313
- continue;
314
- const stepsInit = readObjectPropertyInitializer(obj, "steps");
315
- if (!stepsInit)
316
- continue;
317
- const arrayRoot = resolveStepsArrayRoot(stepsInit);
318
- if (arrayRoot)
319
- roots.push(arrayRoot);
320
- }
321
- return roots;
322
- }
323
- function walkAiStepCallsInNode(node, sourceFile, patterns, errors) {
324
- for (const call of node.getDescendantsOfKind(SyntaxKind.CallExpression)) {
325
- const callee = call.getExpression().getText();
326
- switch (callee) {
327
- case "aiGenerateStep": {
328
- const result = extractAiGenerate(call, sourceFile);
329
- if (result.kind === "pattern")
330
- patterns.push(result.pattern);
331
- else
332
- errors.push(result.error);
333
- break;
334
- }
335
- case "aiExtractStep": {
336
- const result = extractAiExtract(call, sourceFile);
337
- if (result.kind === "pattern")
338
- patterns.push(result.pattern);
339
- else
340
- errors.push(result.error);
341
- break;
342
- }
343
- case "aiClassifyStep": {
344
- const result = extractAiClassify(call, sourceFile);
345
- if (result.kind === "pattern")
346
- patterns.push(result.pattern);
347
- else
348
- errors.push(result.error);
349
- break;
350
- }
351
- default:
352
- break;
353
- }
354
- }
355
- }
356
- function walkAiStepCalls(body, registrarParamName, sourceFile, patterns, errors, visitedWrapperDecls = new Set()) {
357
- for (const arrayRoot of collectWorkflowStepArrayRoots(body)) {
358
- walkAiStepCallsInNode(arrayRoot, sourceFile, patterns, errors);
359
- }
360
- for (const call of body.getDescendantsOfKind(SyntaxKind.CallExpression)) {
361
- const wrapper = resolveRegistrarWrapperCall(call, registrarParamName);
362
- if (!wrapper)
363
- continue;
364
- if (visitedWrapperDecls.has(wrapper.declNode))
365
- continue;
366
- visitedWrapperDecls.add(wrapper.declNode);
367
- walkAiStepCalls(wrapper.body, wrapper.paramName, wrapper.sourceFile, patterns, errors, visitedWrapperDecls);
368
- }
369
- }
370
- // =============================================================================
371
- // Internal — pattern extractors
372
- // =============================================================================
373
- /**
374
- * Route an `<r>.<method>(...)` call to its concrete extractor. New
375
- * r.* APIs → new case + new extractor + new pattern type in patterns.ts.
376
- * The discriminated union forces consumers (Designer, AI patcher) to
377
- * commit to the new kind via compile errors.
378
- *
379
- * Skeleton: every recognised method currently returns an UnknownPattern
380
- * with the right method name. Extractors replace the cases with concrete
381
- * implementations one at a time.
382
- */
383
- function dispatchExtractor(methodName, call, sourceFile) {
384
- switch (methodName) {
385
- // Simplest static patterns
386
- case "requires":
387
- return extractRequires(call, sourceFile);
388
- case "optionalRequires":
389
- return extractOptionalRequires(call, sourceFile);
390
- case "readsConfig":
391
- return extractReadsConfig(call, sourceFile);
392
- case "systemScope":
393
- return extractSystemScope(call, sourceFile);
394
- case "toggleable":
395
- return extractToggleable(call, sourceFile);
396
- case "describe":
397
- return extractDescribe(call, sourceFile);
398
- case "uiHints":
399
- return extractUiHints(call, sourceFile);
400
- case "adoptsBundledLists":
401
- return extractAdoptsBundledLists(call, sourceFile);
402
- // Object-literal-based static patterns
403
- case "entity":
404
- return extractEntity(call, sourceFile);
405
- case "relation":
406
- return extractRelation(call, sourceFile);
407
- case "nav":
408
- return extractNav(call, sourceFile);
409
- case "workspace":
410
- return extractWorkspace(call, sourceFile);
411
- // Complex static patterns
412
- case "config":
413
- return extractConfig(call, sourceFile);
414
- case "translations":
415
- return extractTranslations(call, sourceFile);
416
- case "metric":
417
- return extractMetric(call, sourceFile);
418
- case "secret":
419
- return extractSecret(call, sourceFile);
420
- case "secretNamespace":
421
- return extractSecretNamespace(call, sourceFile);
422
- case "claimKey":
423
- return extractClaimKey(call, sourceFile);
424
- case "referenceData":
425
- return extractReferenceData(call, sourceFile);
426
- case "useExtension":
427
- return extractUseExtension(call, sourceFile);
428
- // Mixed (header + body) patterns
429
- case "hook":
430
- return extractHook(call, sourceFile);
431
- case "authClaims":
432
- return extractAuthClaims(call, sourceFile);
433
- case "writeHandler":
434
- return extractWriteHandler(call, sourceFile);
435
- case "queryHandler":
436
- return extractQueryHandler(call, sourceFile);
437
- case "streamHandler":
438
- return extractStreamHandler(call, sourceFile);
439
- case "job":
440
- return extractJob(call, sourceFile);
441
- case "httpRoute":
442
- return extractHttpRoute(call, sourceFile);
443
- case "defineEvent":
444
- return extractDefineEvent(call, sourceFile);
445
- case "notification":
446
- return extractNotification(call, sourceFile);
447
- case "projection":
448
- return extractProjection(call, sourceFile);
449
- case "multiStreamProjection":
450
- return extractMultiStreamProjection(call, sourceFile);
451
- case "screen":
452
- return extractScreen(call, sourceFile);
453
- // Opaque patterns
454
- case "extendsRegistrar":
455
- return extractExtendsRegistrar(call, sourceFile);
456
- case "usesApi":
457
- return extractUsesApi(call, sourceFile);
458
- case "exposesApi":
459
- return extractExposesApi(call, sourceFile);
460
- case "storeTable":
461
- return extractStoreTable(call, sourceFile);
462
- case "bootCheck":
463
- return extractBootCheck(call, sourceFile);
464
- // Tree-Actions pattern
465
- case "treeActions":
466
- return extractTreeActions(call, sourceFile);
467
- // Env-schema contract (opaque, Zod-expression argument)
468
- case "envSchema":
469
- return extractEnvSchema(call, sourceFile);
470
- // Unknown method — UnknownPattern signal so Designer/AI surface it
471
- // as "custom call" without losing the source location.
472
- default:
473
- return {
474
- kind: "pattern",
475
- pattern: makeUnknownPattern(methodName, call, sourceFile),
476
- };
477
- }
478
- }
479
- function makeUnknownPattern(methodName, call, sourceFile) {
480
- return {
481
- kind: "unknown",
482
- methodName,
483
- source: sourceLocationFromNode(call, sourceFile),
484
- };
485
- }