@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,536 +0,0 @@
1
- // biome-ignore-all lint/style/noNonNullAssertion: regex capture-group indexing — match-success implies non-null capture
2
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
- import { join, relative } from "node:path";
4
- import { Glob } from "bun";
5
- import { Node, Project, SyntaxKind } from "ts-morph";
6
- export function analyzeHandlerArrow(arrowText) {
7
- const text = arrowText.trim();
8
- let handlerBodyText;
9
- let isStaticReturn = false;
10
- let isSimpleExecutorCreate = false;
11
- let isSimpleExecutorUpdate = false;
12
- let hasConditionalLogic = false;
13
- let executorName;
14
- let executorCreateVar;
15
- let executorCreateArgs;
16
- let executorUpdateVar;
17
- let isExpressionBodyCreate = false;
18
- let isExpressionBodyUpdate = false;
19
- let expressionBodyArgs;
20
- let isGuardedCreate = false;
21
- let guardConfig;
22
- if (text.startsWith("async (")) {
23
- const arrowIdx = text.indexOf("=>");
24
- if (arrowIdx === -1) {
25
- return {
26
- handlerBodyText: text,
27
- isStaticReturn: false,
28
- isSimpleExecutorCreate: false,
29
- isSimpleExecutorUpdate: false,
30
- hasConditionalLogic: false,
31
- isExpressionBodyCreate: false,
32
- isExpressionBodyUpdate: false,
33
- expressionBodyArgs: undefined,
34
- isGuardedCreate: false,
35
- guardConfig: undefined,
36
- };
37
- }
38
- const afterArrow = text.slice(arrowIdx + 2).trim();
39
- if (afterArrow.startsWith("(")) {
40
- isStaticReturn = true;
41
- handlerBodyText = afterArrow;
42
- }
43
- else if (afterArrow.startsWith("{")) {
44
- handlerBodyText = afterArrow;
45
- const lines = handlerBodyText
46
- .split("\n")
47
- .map((l) => l.trim())
48
- .filter(Boolean);
49
- // Detect conditional logic (if/try/for/while/catch)
50
- hasConditionalLogic = lines.some((l) => l.startsWith("if ") ||
51
- l.startsWith("try ") ||
52
- l.startsWith("for ") ||
53
- l.startsWith("while ") ||
54
- l.startsWith("} else"));
55
- const [, createVar, createExecutor] = handlerBodyText.match(/const\s+(\w+)\s*=\s*await\s+(\w+)\.create\s*\(/) ?? [];
56
- const updateMatch = handlerBodyText.match(/const\s+(\w+)\s*=\s*await\s+(\w+)\.update\s*\(/);
57
- const hasSimpleReturn = /return\s*\{[^}]*isSuccess:\s*true/.test(handlerBodyText);
58
- if (createVar !== undefined &&
59
- createExecutor !== undefined &&
60
- hasSimpleReturn &&
61
- !hasConditionalLogic) {
62
- isSimpleExecutorCreate = true;
63
- executorName = createExecutor;
64
- executorCreateVar = createVar;
65
- executorCreateArgs = extractArgs(handlerBodyText, createExecutor, "create");
66
- }
67
- else if (createVar !== undefined &&
68
- createExecutor !== undefined &&
69
- hasSimpleReturn &&
70
- hasConditionalLogic) {
71
- // Try to match the guard pattern: if (!<var>.isSuccess) { return fail } return success
72
- const guard = extractGuardedPattern(handlerBodyText, createVar);
73
- if (guard) {
74
- isGuardedCreate = true;
75
- guardConfig = guard;
76
- executorName = createExecutor;
77
- executorCreateVar = createVar;
78
- executorCreateArgs = extractArgs(handlerBodyText, createExecutor, "create");
79
- }
80
- }
81
- if (updateMatch &&
82
- hasSimpleReturn &&
83
- !hasConditionalLogic &&
84
- !isSimpleExecutorCreate &&
85
- !isGuardedCreate) {
86
- isSimpleExecutorUpdate = true;
87
- executorName = updateMatch[2];
88
- executorUpdateVar = updateMatch[1];
89
- }
90
- }
91
- else {
92
- handlerBodyText = afterArrow;
93
- // Expression body — check for member-call patterns like
94
- // `crud.create(event.payload)` or `crud.update({ id, changes })`.
95
- const exprCallMatch = afterArrow.match(/^(\w+)\.(create|update)\s*\(/);
96
- if (exprCallMatch) {
97
- executorName = exprCallMatch[1];
98
- const method = exprCallMatch[2];
99
- expressionBodyArgs = extractExprArgs(afterArrow, executorName, method);
100
- if (method === "create") {
101
- isExpressionBodyCreate = true;
102
- }
103
- else {
104
- isExpressionBodyUpdate = true;
105
- }
106
- }
107
- else if (afterArrow.startsWith("(") && afterArrow.endsWith(")")) {
108
- isStaticReturn = true;
109
- }
110
- }
111
- }
112
- else {
113
- handlerBodyText = text;
114
- }
115
- return {
116
- handlerBodyText,
117
- isStaticReturn,
118
- isSimpleExecutorCreate,
119
- isSimpleExecutorUpdate,
120
- hasConditionalLogic,
121
- executorName,
122
- executorCreateVar,
123
- executorCreateArgs,
124
- executorUpdateVar,
125
- isExpressionBodyCreate,
126
- isExpressionBodyUpdate,
127
- expressionBodyArgs,
128
- isGuardedCreate,
129
- guardConfig,
130
- };
131
- }
132
- function extractArgs(body, executorVar, method) {
133
- const pattern = new RegExp(`const\\s+\\w+\\s*=\\s*await\\s+${escapeRegex(executorVar)}\\.${method}\\s*\\(`);
134
- const match = body.match(pattern);
135
- if (!match)
136
- return undefined;
137
- const startIdx = (match.index ?? 0) + match[0].length;
138
- let depth = 1;
139
- let endIdx = startIdx;
140
- while (endIdx < body.length && depth > 0) {
141
- if (body[endIdx] === "(")
142
- depth++;
143
- else if (body[endIdx] === ")")
144
- depth--;
145
- if (depth > 0)
146
- endIdx++;
147
- }
148
- const argsStr = body.slice(startIdx, endIdx);
149
- return splitTopLevel(argsStr);
150
- }
151
- function escapeRegex(str) {
152
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
153
- }
154
- function splitTopLevel(args) {
155
- const result = [];
156
- let depth = 0;
157
- let current = "";
158
- for (const ch of args) {
159
- if (ch === "(" || ch === "{" || ch === "[")
160
- depth++;
161
- else if (ch === ")" || ch === "}" || ch === "]")
162
- depth--;
163
- if (ch === "," && depth === 0) {
164
- result.push(current.trim());
165
- current = "";
166
- }
167
- else {
168
- current += ch;
169
- }
170
- }
171
- if (current.trim())
172
- result.push(current.trim());
173
- return result;
174
- }
175
- function extractExprArgs(body, executorVar, method) {
176
- const escaped = executorVar.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
177
- const pattern = new RegExp(`${escaped}\\.${method}\\s*\\(`);
178
- const match = body.match(pattern);
179
- if (!match)
180
- return undefined;
181
- const startIdx = (match.index ?? 0) + match[0].length;
182
- let depth = 1;
183
- let endIdx = startIdx;
184
- while (endIdx < body.length && depth > 0) {
185
- if (body[endIdx] === "(")
186
- depth++;
187
- else if (body[endIdx] === ")")
188
- depth--;
189
- if (depth > 0)
190
- endIdx++;
191
- }
192
- const argsStr = body.slice(startIdx, endIdx);
193
- return splitTopLevel(argsStr);
194
- }
195
- function transpileEventRefs(argsStr) {
196
- // Transform `event.<prop>` → `ctx.event.<prop>` inside a resolver fn.
197
- // The original handler has `event` as a parameter; inside the pipeline
198
- // resolver, `event` lives on `ctx`, not as a standalone binding.
199
- // `ctx` references stay as-is (the resolver also receives ctx).
200
- return argsStr.replace(/\bevent\./g, "ctx.event.");
201
- }
202
- function transpileGuardRefs(body, varName) {
203
- // Transform `<var>` → `ctx.steps.result` in guard body text.
204
- // The original handler references the executor result via
205
- // `result.isSuccess`, `result.error`, `result.data`, or standalone
206
- // `return result`. Inside the compute step, executor result lives at
207
- // `ctx.steps.result`. `\b` word boundary ensures we only match the
208
- // exact variable name.
209
- return body.replace(new RegExp(`\\b${escapeRegex(varName)}\\b`, "g"), "ctx.steps.result");
210
- }
211
- function extractGuardedPattern(body, varName) {
212
- const escaped = escapeRegex(varName);
213
- // Match: if (!<varName>.isSuccess) { return ... }
214
- const ifOpenPattern = new RegExp(`if\\s*\\(!${escaped}\\.isSuccess\\)\\s*\\{`);
215
- const ifOpenMatch = body.match(ifOpenPattern);
216
- if (!ifOpenMatch)
217
- return undefined;
218
- // Extract condition
219
- const condPattern = new RegExp(`if\\s*\\((!${escaped}\\.isSuccess)\\)`);
220
- const condMatch = body.match(condPattern);
221
- if (!condMatch)
222
- return undefined;
223
- const condition = condMatch[1];
224
- // Extract if body (between { and matching })
225
- const ifBodyStart = (ifOpenMatch.index ?? 0) + ifOpenMatch[0].length;
226
- let depth = 1;
227
- let ifBodyEnd = ifBodyStart;
228
- while (ifBodyEnd < body.length && depth > 0) {
229
- if (body[ifBodyEnd] === "{")
230
- depth++;
231
- else if (body[ifBodyEnd] === "}")
232
- depth--;
233
- if (depth > 0)
234
- ifBodyEnd++;
235
- }
236
- const ifBodyContent = body.slice(ifBodyStart, ifBodyEnd).trim();
237
- const failRetMatch = ifBodyContent.match(/return\s*([^;]+)\s*;/);
238
- if (!failRetMatch)
239
- return undefined;
240
- const failureReturn = failRetMatch[1].trim();
241
- // Extract trailing return after the if block
242
- const afterIf = body.slice(ifBodyEnd + 1).trim();
243
- const succRetMatch = afterIf.match(/return\s*([^;]+)\s*;/);
244
- if (!succRetMatch)
245
- return undefined;
246
- const successReturn = succRetMatch[1].trim();
247
- return { condition, failureReturn, successReturn };
248
- }
249
- export function generatePerformBlock(analysis, schemaType, indent) {
250
- const steps = [];
251
- if (analysis.isStaticReturn) {
252
- let body = analysis.handlerBodyText.trim();
253
- if (body.startsWith("(") && body.endsWith(")")) {
254
- body = body.slice(1, -1);
255
- }
256
- steps.push(`r.step.return((ctx) => (${body}))`);
257
- }
258
- else if (analysis.isSimpleExecutorCreate &&
259
- analysis.executorName &&
260
- analysis.executorCreateArgs) {
261
- const dataArg = analysis.executorCreateArgs[0] ?? "{}";
262
- steps.push(`r.step.aggregate.create("result", { executor: ${analysis.executorName}, data: (ctx) => ${dataArg} })`);
263
- steps.push(`r.step.return((ctx) => ({ isSuccess: true, data: ctx.steps.result }))`);
264
- }
265
- else if (analysis.isSimpleExecutorUpdate && analysis.executorName) {
266
- steps.push(`r.step.aggregate.update("result", { executor: ${analysis.executorName}, id: event.payload.id, changes: event.payload.changes })`);
267
- steps.push(`r.step.return((ctx) => ({ isSuccess: true, data: ctx.steps.result }))`);
268
- }
269
- else if (analysis.isExpressionBodyCreate &&
270
- analysis.executorName &&
271
- analysis.expressionBodyArgs) {
272
- const dataArg = transpileEventRefs(analysis.expressionBodyArgs[0] ?? "{}");
273
- steps.push(`r.step.aggregate.create("result", { executor: ${analysis.executorName}, data: (ctx) => ${dataArg} })`);
274
- steps.push(`r.step.return((ctx) => ({ isSuccess: true, data: ctx.steps.result }))`);
275
- }
276
- else if (analysis.isExpressionBodyUpdate &&
277
- analysis.executorName &&
278
- analysis.expressionBodyArgs) {
279
- const argStr = transpileEventRefs(analysis.expressionBodyArgs[0] ?? "{}");
280
- steps.push(`r.step.compute("result", (ctx) => ${analysis.executorName}.update(${argStr}))`);
281
- steps.push(`r.step.return((ctx) => ({ isSuccess: true, data: ctx.steps.result }))`);
282
- }
283
- else if (analysis.isGuardedCreate &&
284
- analysis.executorName &&
285
- analysis.executorCreateArgs &&
286
- analysis.guardConfig) {
287
- const varName = analysis.executorCreateVar ?? "result";
288
- const dataArg = analysis.executorCreateArgs[0] ?? "{}";
289
- const guard = analysis.guardConfig;
290
- const condition = guard.condition; // already references varName
291
- const failureReturn = transpileGuardRefs(guard.failureReturn, varName);
292
- const successReturn = transpileGuardRefs(guard.successReturn, varName);
293
- // The condition references the original var name — transpile it too
294
- const condTranspiled = transpileGuardRefs(condition, varName);
295
- steps.push(`r.step.aggregate.create("result", { executor: ${analysis.executorName}, data: (ctx) => ${dataArg} })`);
296
- steps.push(`r.step.compute("outcome", (ctx) => {
297
- if (${condTranspiled}) {
298
- return ${failureReturn};
299
- }
300
- return ${successReturn};
301
- })`);
302
- steps.push(`r.step.return((ctx) => ctx.steps.outcome)`);
303
- }
304
- else {
305
- return null;
306
- }
307
- const stepIndent = indent;
308
- const stepsStr = steps.map((s) => `${stepIndent} ${s}`).join(",\n");
309
- const pipelineType = schemaType ? `<${schemaType}, unknown>` : "";
310
- return [
311
- `perform: stepsPipeline${pipelineType}(({ event, r }) => [`,
312
- stepsStr,
313
- ` ${stepIndent}]),`,
314
- ].join("\n");
315
- }
316
- function inferSchemaType(objLiteral) {
317
- const schemaProp = objLiteral.getProperty("schema");
318
- if (!schemaProp)
319
- return "unknown";
320
- if (!Node.isPropertyAssignment(schemaProp))
321
- return "unknown";
322
- const init = schemaProp.getInitializer();
323
- if (!init)
324
- return "unknown";
325
- const text = init.getText();
326
- // Only return simple names (like `InvoiceSchema`), not inline definitions
327
- if (/^[A-Za-z_$][\w$.]*$/.test(text)) {
328
- return `typeof ${text}`;
329
- }
330
- return ""; // Empty = omit type params
331
- }
332
- function findFiles(rootDir) {
333
- const glob = new Glob("**/*.write.ts");
334
- const files = [];
335
- for (const file of glob.scanSync(rootDir)) {
336
- files.push(join(rootDir, file));
337
- }
338
- return files.sort();
339
- }
340
- export function scanForCandidates(rootDir) {
341
- const files = findFiles(rootDir);
342
- const results = [];
343
- for (const file of files) {
344
- const analysis = analyzeFile(file);
345
- if (analysis)
346
- results.push(analysis);
347
- }
348
- return results;
349
- }
350
- export function analyzeFile(filePath) {
351
- if (!existsSync(filePath))
352
- return null;
353
- try {
354
- const content = readFileSync(filePath, "utf8");
355
- if (!content.includes("defineWriteHandler") && !content.includes("defineQueryHandler")) {
356
- return null;
357
- }
358
- if (content.includes("defineWriteHandler") && content.includes("perform:")) {
359
- return {
360
- filePath,
361
- pattern: "pipeline-write",
362
- convertible: false,
363
- reason: "already_uses_pipeline_form",
364
- };
365
- }
366
- if (content.includes("defineWriteHandler")) {
367
- return {
368
- filePath,
369
- pattern: "free-form-write",
370
- convertible: true,
371
- reason: "free_form_write_handler",
372
- };
373
- }
374
- if (content.includes("defineQueryHandler")) {
375
- return {
376
- filePath,
377
- pattern: "query-handler",
378
- convertible: false,
379
- reason: "query_handlers_not_convertible",
380
- };
381
- }
382
- return null;
383
- }
384
- catch {
385
- return null;
386
- }
387
- }
388
- export async function runCodemod(rootDir, options = {}) {
389
- const project = new Project({
390
- skipAddingFilesFromTsConfig: true,
391
- skipFileDependencyResolution: true,
392
- });
393
- const candidates = scanForCandidates(rootDir);
394
- const writeHandlers = candidates.filter((c) => c.pattern === "free-form-write");
395
- console.log(`\n Scanning ${rootDir}...`);
396
- console.log(` Found ${writeHandlers.length} file(s) with free-form write handlers.\n`);
397
- if (writeHandlers.length === 0) {
398
- return { results: [], converted: 0, skipped: 0, errors: 0 };
399
- }
400
- const results = [];
401
- for (const candidate of writeHandlers) {
402
- const result = await convertFile(candidate.filePath, project, options);
403
- results.push(result);
404
- }
405
- const converted = results.filter((r) => r.status === "converted").length;
406
- const skipped = results.filter((r) => r.status === "skipped").length;
407
- const errors = results.filter((r) => r.status === "error").length;
408
- console.log(`\n Results: ${converted} converted, ${skipped} skipped, ${errors} errors\n`);
409
- if (options.verbose) {
410
- for (const r of results) {
411
- if (r.status === "error") {
412
- console.log(` ✗ ${relative(process.cwd(), r.filePath)}: ${r.reason}`);
413
- }
414
- else if (r.status === "converted") {
415
- console.log(` ✓ ${relative(process.cwd(), r.filePath)}`);
416
- }
417
- else {
418
- console.log(` - ${relative(process.cwd(), r.filePath)}: ${r.reason}`);
419
- }
420
- }
421
- }
422
- return { results, converted, skipped, errors };
423
- }
424
- function contentHasPipelineImport(content) {
425
- // Check the actual import line, not later usage of the word `pipeline`
426
- // in the perform block. Single-line import matching only (standard
427
- // formatting in this codebase — never multi-line).
428
- const importLine = content
429
- .split("\n")
430
- .find((l) => l.includes("import") && l.includes("@cosmicdrift/kumiko-framework/engine"));
431
- return !!importLine && importLine.includes("stepsPipeline");
432
- }
433
- function ensurePipelineImport(content) {
434
- if (contentHasPipelineImport(content))
435
- return null;
436
- // Single-line regex is safe — imports in this codebase are always
437
- // `import { ... } from "@cosmicdrift/kumiko-framework/engine"`.
438
- const importRegex = /import\s*\{([^}]*)\}\s*from\s*["']@cosmicdrift\/kumiko-framework\/engine["']/;
439
- const match = content.match(importRegex);
440
- if (match) {
441
- const existingImports = (match[1] ?? "").trim();
442
- const newImports = existingImports ? `${existingImports}, stepsPipeline` : "stepsPipeline";
443
- return content.replace(importRegex, `import { ${newImports} } from "@cosmicdrift/kumiko-framework/engine"`);
444
- }
445
- return null;
446
- }
447
- export async function convertFile(filePath, project, options = {}) {
448
- try {
449
- const contentBefore = readFileSync(filePath, "utf8");
450
- const proj = project ??
451
- new Project({
452
- skipAddingFilesFromTsConfig: true,
453
- skipFileDependencyResolution: true,
454
- });
455
- const sourceFile = proj.addSourceFileAtPath(filePath);
456
- const handlerCalls = findDefineWriteHandlerCalls(sourceFile);
457
- if (handlerCalls.length === 0) {
458
- return { filePath, status: "skipped", reason: "no_define_write_handler_calls" };
459
- }
460
- let content = contentBefore;
461
- let hadChanges = false;
462
- for (const call of handlerCalls) {
463
- const arg = call.getArguments()[0];
464
- if (!arg || arg.getKind() !== SyntaxKind.ObjectLiteralExpression) {
465
- continue;
466
- }
467
- const objLiteral = arg.asKind(SyntaxKind.ObjectLiteralExpression);
468
- if (!objLiteral)
469
- continue;
470
- const handlerProp = objLiteral.getProperty("handler");
471
- if (!handlerProp)
472
- continue;
473
- const propAssign = handlerProp.asKind(SyntaxKind.PropertyAssignment);
474
- if (!propAssign)
475
- continue;
476
- const handlerInit = propAssign.getInitializer();
477
- if (!handlerInit)
478
- continue;
479
- const analysis = analyzeHandlerArrow(handlerInit.getText());
480
- if (!analysis.isStaticReturn &&
481
- !analysis.isSimpleExecutorCreate &&
482
- !analysis.isSimpleExecutorUpdate &&
483
- !analysis.isExpressionBodyCreate &&
484
- !analysis.isExpressionBodyUpdate &&
485
- !analysis.isGuardedCreate) {
486
- if (options.verbose) {
487
- console.log(` ~ ${relative(process.cwd(), filePath)}: non-trivial handler, skipping`);
488
- }
489
- continue;
490
- }
491
- const schemaType = inferSchemaType(objLiteral);
492
- const indent = propAssign.getIndentationText() ?? " ";
493
- const performBlock = generatePerformBlock(analysis, schemaType, indent);
494
- if (!performBlock)
495
- continue;
496
- const start = propAssign.getStart();
497
- let end = propAssign.getEnd();
498
- // Consume trailing comma after the property assignment
499
- if (end < content.length && content[end] === ",") {
500
- end++;
501
- }
502
- content = content.slice(0, start) + performBlock + content.slice(end);
503
- hadChanges = true;
504
- }
505
- if (hadChanges) {
506
- const importResult = ensurePipelineImport(content);
507
- if (importResult) {
508
- content = importResult;
509
- }
510
- else if (options.verbose) {
511
- console.log(` ~ ${filePath}: stepsPipeline import not needed or already present`);
512
- }
513
- }
514
- if (hadChanges && !options.dryRun) {
515
- writeFileSync(filePath, content, "utf8");
516
- }
517
- const status = hadChanges ? "converted" : "skipped";
518
- const reason = hadChanges
519
- ? "handler replaced with perform: stepsPipeline(...)"
520
- : "no convertible handler";
521
- return { filePath, status, reason };
522
- }
523
- catch (err) {
524
- return {
525
- filePath,
526
- status: "error",
527
- reason: err instanceof Error ? err.message : String(err),
528
- };
529
- }
530
- }
531
- function findDefineWriteHandlerCalls(sourceFile) {
532
- return sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).filter((call) => {
533
- const expr = call.getExpression();
534
- return expr.getText() === "defineWriteHandler";
535
- });
536
- }
@@ -1,13 +0,0 @@
1
- export type UnknownEntityFieldType = {
2
- readonly fieldName: string;
3
- readonly type: string;
4
- };
5
- /**
6
- * Scans `definition.fields.<name>.type` for values outside the FieldDefinition
7
- * catalogue. Tolerant of RawRefSentinel at every level (definition itself,
8
- * `fields`, a single field, or its `type`) — those are unresolvable source
9
- * references, not validated field shapes, and readDataLiteralNode already
10
- * chose not to fail the whole extraction over them.
11
- */
12
- export declare function findUnknownEntityFieldTypes(definition: unknown): readonly UnknownEntityFieldType[];
13
- export declare function describeUnknownFieldType(entry: UnknownEntityFieldType): string;
@@ -1,35 +0,0 @@
1
- // Shared field-type validation for EntityDefinition. Used by both the
2
- // static extractor (extractEntity, parse-time ParseError) and the runtime
3
- // PatternChange validator (pattern-change-schema.ts) so the two never drift
4
- // into reporting different "unknown field type" catalogues.
5
- import { FIELD_TYPE_NAMES } from "@cosmicdrift/kumiko-types/fields";
6
- import { isPlainObject, isRawRefSentinel } from "./extractors/shared.js";
7
- /**
8
- * Scans `definition.fields.<name>.type` for values outside the FieldDefinition
9
- * catalogue. Tolerant of RawRefSentinel at every level (definition itself,
10
- * `fields`, a single field, or its `type`) — those are unresolvable source
11
- * references, not validated field shapes, and readDataLiteralNode already
12
- * chose not to fail the whole extraction over them.
13
- */
14
- export function findUnknownEntityFieldTypes(definition) {
15
- if (isRawRefSentinel(definition) || !isPlainObject(definition))
16
- return [];
17
- const fields = definition["fields"];
18
- if (isRawRefSentinel(fields) || !isPlainObject(fields))
19
- return [];
20
- const out = [];
21
- for (const [fieldName, fieldDef] of Object.entries(fields)) {
22
- if (isRawRefSentinel(fieldDef) || !isPlainObject(fieldDef))
23
- continue;
24
- const type = fieldDef["type"];
25
- if (isRawRefSentinel(type) || typeof type !== "string")
26
- continue;
27
- if (!FIELD_TYPE_NAMES.includes(type)) {
28
- out.push({ fieldName, type });
29
- }
30
- }
31
- return out;
32
- }
33
- export function describeUnknownFieldType(entry) {
34
- return `unknown field type "${entry.type}"; expected one of: ${FIELD_TYPE_NAMES.join(", ")}`;
35
- }
@@ -1,6 +0,0 @@
1
- import type { CallExpression, SourceFile } from "ts-morph";
2
- import type { AiClassifyPattern, AiExtractPattern, AiGeneratePattern } from "../patterns.ts";
3
- import { type ExtractOutput } from "./shared.ts";
4
- export declare function extractAiGenerate(call: CallExpression, sourceFile: SourceFile): ExtractOutput<AiGeneratePattern>;
5
- export declare function extractAiExtract(call: CallExpression, sourceFile: SourceFile): ExtractOutput<AiExtractPattern>;
6
- export declare function extractAiClassify(call: CallExpression, sourceFile: SourceFile): ExtractOutput<AiClassifyPattern>;