@cosmicdrift/kumiko-framework 0.388.0 → 0.390.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (711) hide show
  1. package/AGENTS.md +12 -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/golden-path.md +13 -1
  13. package/agents/examples/inbound-mail-triage.md +1 -0
  14. package/agents/examples/lane-routing.md +2 -1
  15. package/agents/examples/legal-pages.md +2 -2
  16. package/agents/examples/lifecycle-hooks.md +55 -2
  17. package/agents/examples/list-table-options.md +466 -0
  18. package/agents/examples/managed-config.md +4 -4
  19. package/agents/examples/managed-pages.md +1 -1
  20. package/agents/examples/pdf-audit-export.md +4 -2
  21. package/agents/examples/relations.md +19 -4
  22. package/agents/examples/search.md +4 -4
  23. package/agents/examples/secrets-demo.md +9 -6
  24. package/agents/examples/state-machine.md +5 -4
  25. package/agents/examples/tenant-isolation.md +73 -1
  26. package/agents/examples/tenant-settings.md +1 -1
  27. package/agents/examples/user-data-rights.md +3 -6
  28. package/agents/examples/workflow-engine.md +53 -47
  29. package/agents/examples.md +5 -4
  30. package/agents/features.md +1 -1
  31. package/agents/widgets.md +1 -0
  32. package/dist/api/api-constants.d.ts +1 -0
  33. package/dist/api/api-constants.js +2 -0
  34. package/dist/api/auth-middleware.js +1 -1
  35. package/dist/api/auth-routes-invite.js +2 -1
  36. package/dist/api/auth-routes-shared.d.ts +2 -0
  37. package/dist/api/auth-routes-shared.js +5 -0
  38. package/dist/api/client-error-route.js +2 -3
  39. package/dist/api/entity-read-access.d.ts +4 -1
  40. package/dist/api/entity-read-access.js +14 -0
  41. package/dist/api/export/export-cells-reference.d.ts +9 -0
  42. package/dist/api/export/export-cells-reference.js +21 -0
  43. package/dist/api/export/export-cells.d.ts +11 -0
  44. package/dist/api/export/export-cells.js +136 -0
  45. package/dist/api/export/export-ciphertext-guard.d.ts +2 -0
  46. package/dist/api/export/export-ciphertext-guard.js +27 -0
  47. package/dist/api/export/export-columns.d.ts +31 -0
  48. package/dist/api/export/export-columns.js +85 -0
  49. package/dist/api/export/export-errors.d.ts +4 -0
  50. package/dist/api/export/export-errors.js +14 -0
  51. package/dist/api/export/export-route.d.ts +4 -0
  52. package/dist/api/export/export-route.js +75 -0
  53. package/dist/api/export/export-rows.d.ts +13 -0
  54. package/dist/api/export/export-rows.js +62 -0
  55. package/dist/api/export/export-screen.d.ts +13 -0
  56. package/dist/api/export/export-screen.js +47 -0
  57. package/dist/api/export/export-xlsx-writer.d.ts +4 -0
  58. package/dist/api/export/export-xlsx-writer.js +21 -0
  59. package/dist/api/extra-route.d.ts +7 -1
  60. package/dist/api/index.d.ts +23 -27
  61. package/dist/api/index.js +13 -15
  62. package/dist/api/jwt.js +1 -1
  63. package/dist/api/observability-middleware.d.ts +1 -1
  64. package/dist/api/observability-middleware.js +2 -1
  65. package/dist/api/pii-leak-guard.d.ts +3 -0
  66. package/dist/api/pii-leak-guard.js +3 -2
  67. package/dist/api/request-context-internals.d.ts +31 -0
  68. package/dist/api/request-context-internals.js +11 -0
  69. package/dist/api/request-context-scopes.d.ts +14 -0
  70. package/dist/api/request-context-scopes.js +69 -0
  71. package/dist/api/request-context.d.ts +1 -40
  72. package/dist/api/request-context.js +22 -51
  73. package/dist/api/request-id-middleware.d.ts +1 -1
  74. package/dist/api/route-registrars.d.ts +2 -1
  75. package/dist/api/route-registrars.js +1 -1
  76. package/dist/api/routes.d.ts +16 -0
  77. package/dist/api/routes.js +9 -5
  78. package/dist/api/server-boot-checks.d.ts +1 -1
  79. package/dist/api/server-boot-checks.js +2 -2
  80. package/dist/api/server-event-dispatcher.d.ts +6 -1
  81. package/dist/api/server-event-dispatcher.js +3 -4
  82. package/dist/api/server-extra-routes.d.ts +1 -1
  83. package/dist/api/server-extra-routes.js +5 -1
  84. package/dist/api/server-middleware.js +3 -1
  85. package/dist/api/server-routes.d.ts +3 -2
  86. package/dist/api/server-routes.js +8 -2
  87. package/dist/api/server-wiring.js +8 -4
  88. package/dist/api/server.d.ts +2 -1
  89. package/dist/api/sse-route.d.ts +3 -1
  90. package/dist/api/sse-route.js +11 -1
  91. package/dist/api/tenant-scoped-secrets.d.ts +2 -0
  92. package/dist/api/tenant-scoped-secrets.js +13 -0
  93. package/dist/api/websocket-route.d.ts +1 -1
  94. package/dist/auth/index.d.ts +0 -1
  95. package/dist/auth/roles.d.ts +0 -5
  96. package/dist/compliance/duration-spec.d.ts +0 -1
  97. package/dist/compliance/duration-spec.js +0 -5
  98. package/dist/compliance/index.d.ts +4 -4
  99. package/dist/compliance/index.js +2 -2
  100. package/dist/compliance/profiles.d.ts +0 -15
  101. package/dist/compliance/profiles.js +0 -23
  102. package/dist/config/index.d.ts +11 -9
  103. package/dist/config/index.js +13 -1
  104. package/dist/config/internals.d.ts +9 -0
  105. package/dist/config/internals.js +1 -0
  106. package/dist/consumer-cli-internals.d.ts +4 -0
  107. package/dist/consumer-cli-internals.js +1 -0
  108. package/dist/consumer-cli.d.ts +1 -4
  109. package/dist/consumer-cli.js +5 -1
  110. package/dist/crypto/event-pii.js +1 -1
  111. package/dist/crypto/index.d.ts +8 -9
  112. package/dist/crypto/index.js +7 -8
  113. package/dist/crypto/pg-kms-adapter.d.ts +1 -0
  114. package/dist/crypto/pg-kms-adapter.js +17 -18
  115. package/dist/db/aggregate-sql.d.ts +2 -0
  116. package/dist/db/aggregate-sql.js +10 -0
  117. package/dist/db/apply-entity-event.d.ts +1 -1
  118. package/dist/db/apply-entity-event.js +15 -47
  119. package/dist/db/blind-index-cleanup.js +91 -77
  120. package/dist/db/closed-connection.js +12 -19
  121. package/dist/db/collect-table-metas.js +1 -1
  122. package/dist/db/compound-types.d.ts +1 -1
  123. package/dist/db/compound-types.js +0 -7
  124. package/dist/db/config-seed.d.ts +2 -1
  125. package/dist/db/config-seed.js +6 -1
  126. package/dist/db/connection.d.ts +7 -6
  127. package/dist/db/connection.js +43 -24
  128. package/dist/db/cross-tenant-reads.d.ts +1 -1
  129. package/dist/db/cross-tenant-reads.js +1 -1
  130. package/dist/db/dialect.d.ts +0 -5
  131. package/dist/db/dialect.js +0 -3
  132. package/dist/db/driver-row-coercion.js +4 -4
  133. package/dist/db/driver-value-preparation.js +6 -4
  134. package/dist/db/eagerload.d.ts +2 -1
  135. package/dist/db/entity-field-encryption.d.ts +1 -1
  136. package/dist/db/entity-table-meta.d.ts +1 -1
  137. package/dist/db/event-store-executor-context.d.ts +3 -1
  138. package/dist/db/event-store-executor-context.js +4 -3
  139. package/dist/db/event-store-executor-read-aggregate-currencies.d.ts +17 -0
  140. package/dist/db/event-store-executor-read-aggregate-currencies.js +40 -0
  141. package/dist/db/event-store-executor-read-aggregate.js +36 -5
  142. package/dist/db/event-store-executor-read-filter.d.ts +1 -1
  143. package/dist/db/event-store-executor-read-filter.js +6 -3
  144. package/dist/db/event-store-executor-read-rows.d.ts +2 -1
  145. package/dist/db/event-store-executor-read-search.d.ts +2 -1
  146. package/dist/db/event-store-executor-read-sort.d.ts +2 -1
  147. package/dist/db/event-store-executor-read.js +2 -2
  148. package/dist/db/event-store-executor-write-atomic.d.ts +4 -0
  149. package/dist/db/event-store-executor-write-atomic.js +42 -0
  150. package/dist/db/event-store-executor-write-steps.d.ts +3 -5
  151. package/dist/db/event-store-executor-write-steps.js +0 -5
  152. package/dist/db/event-store-executor-write.js +22 -19
  153. package/dist/db/event-store-executor.d.ts +1 -1
  154. package/dist/db/event-store-executor.js +2 -1
  155. package/dist/db/executor-managed-tables.d.ts +7 -1
  156. package/dist/db/executor-managed-tables.js +12 -3
  157. package/dist/db/index.d.ts +29 -28
  158. package/dist/db/index.js +22 -20
  159. package/dist/db/known-table-names.d.ts +6 -0
  160. package/dist/db/known-table-names.js +21 -0
  161. package/dist/db/list-aggregate-labels.d.ts +1 -1
  162. package/dist/db/located-timestamp.d.ts +1 -1
  163. package/dist/db/located-timestamp.js +0 -5
  164. package/dist/db/migrate-generator.d.ts +17 -1
  165. package/dist/db/migrate-generator.js +50 -20
  166. package/dist/db/migrate-primary-key.d.ts +12 -0
  167. package/dist/db/migrate-primary-key.js +45 -0
  168. package/dist/db/migrate-rls-diff.d.ts +20 -0
  169. package/dist/db/migrate-rls-diff.js +61 -0
  170. package/dist/db/migrate-runner.js +7 -3
  171. package/dist/db/money.d.ts +1 -1
  172. package/dist/db/money.js +1 -1
  173. package/dist/db/parent-ref-clause.d.ts +2 -1
  174. package/dist/db/pg-error.d.ts +2 -0
  175. package/dist/db/pg-error.js +37 -21
  176. package/dist/db/queries/backfill-pii.js +3 -6
  177. package/dist/db/queries/database-now.js +2 -1
  178. package/dist/db/queries/ddl.d.ts +3 -0
  179. package/dist/db/queries/ddl.js +34 -1
  180. package/dist/db/queries/event-store.js +4 -2
  181. package/dist/db/queries/event-tenants.d.ts +2 -0
  182. package/dist/db/queries/event-tenants.js +17 -0
  183. package/dist/db/queries/rebuild-rls-guard.d.ts +2 -0
  184. package/dist/db/queries/rebuild-rls-guard.js +29 -0
  185. package/dist/db/queries/rls-boot-catalog.d.ts +16 -0
  186. package/dist/db/queries/rls-boot-catalog.js +39 -0
  187. package/dist/db/queries/rls-catalog.d.ts +6 -0
  188. package/dist/db/queries/rls-catalog.js +82 -0
  189. package/dist/db/queries/rls-scope.d.ts +3 -0
  190. package/dist/db/queries/rls-scope.js +17 -0
  191. package/dist/db/queries/rls-shape.d.ts +10 -0
  192. package/dist/db/queries/rls-shape.js +42 -0
  193. package/dist/db/queries/session-advisory-lock.d.ts +2 -0
  194. package/dist/db/queries/session-advisory-lock.js +23 -0
  195. package/dist/db/queries/shadow-swap.d.ts +1 -2
  196. package/dist/db/queries/shadow-swap.js +11 -28
  197. package/dist/db/queries/test-stack.d.ts +4 -1
  198. package/dist/db/queries/test-stack.js +83 -2
  199. package/dist/db/query.d.ts +14 -0
  200. package/dist/db/query.js +77 -48
  201. package/dist/db/reference-data.d.ts +1 -1
  202. package/dist/db/reference-data.js +20 -3
  203. package/dist/db/render-ddl.d.ts +6 -2
  204. package/dist/db/render-ddl.js +7 -7
  205. package/dist/db/render-rls-ddl.d.ts +35 -0
  206. package/dist/db/render-rls-ddl.js +127 -0
  207. package/dist/db/replay-migration-sql.d.ts +3 -1
  208. package/dist/db/replay-migration-sql.js +22 -5
  209. package/dist/db/replay-rls.d.ts +25 -0
  210. package/dist/db/replay-rls.js +156 -0
  211. package/dist/db/row-level-security-boot-check.d.ts +5 -0
  212. package/dist/db/row-level-security-boot-check.js +85 -0
  213. package/dist/db/row-level-security-connection.d.ts +3 -0
  214. package/dist/db/row-level-security-connection.js +213 -0
  215. package/dist/db/row-level-security-scope.d.ts +33 -0
  216. package/dist/db/row-level-security-scope.js +127 -0
  217. package/dist/db/scope-tenant-db-to-tenant.d.ts +3 -0
  218. package/dist/db/scope-tenant-db-to-tenant.js +14 -0
  219. package/dist/db/sql-identifier.d.ts +1 -0
  220. package/dist/db/sql-identifier.js +3 -0
  221. package/dist/db/statement-timeout.js +2 -1
  222. package/dist/db/table-builder.d.ts +2 -1
  223. package/dist/db/table-builder.js +1 -1
  224. package/dist/db/table-info.js +1 -1
  225. package/dist/db/table-push.d.ts +11 -2
  226. package/dist/db/table-push.js +15 -2
  227. package/dist/db/tenant-db-runner.d.ts +3 -1
  228. package/dist/db/tenant-db-runner.js +4 -3
  229. package/dist/db/tenant-db-scoped-rebind.d.ts +10 -0
  230. package/dist/db/tenant-db-scoped-rebind.js +33 -0
  231. package/dist/db/tenant-db-statement-runner.d.ts +13 -0
  232. package/dist/db/tenant-db-statement-runner.js +48 -0
  233. package/dist/db/tenant-db-upsert.d.ts +5 -0
  234. package/dist/db/tenant-db-upsert.js +91 -0
  235. package/dist/db/tenant-db.d.ts +17 -12
  236. package/dist/db/tenant-db.js +60 -121
  237. package/dist/db/tenant-id-filter.d.ts +3 -0
  238. package/dist/db/tenant-id-filter.js +30 -0
  239. package/dist/db/transaction-serialization.d.ts +6 -0
  240. package/dist/db/transaction-serialization.js +60 -0
  241. package/dist/derivatives/delete-stored-file.js +1 -1
  242. package/dist/derivatives/index.d.ts +2 -5
  243. package/dist/derivatives/index.js +2 -3
  244. package/dist/engine/access.d.ts +2 -1
  245. package/dist/engine/access.js +1 -1
  246. package/dist/engine/boot-validator/bundled-lists-table.d.ts +2 -0
  247. package/dist/engine/boot-validator/bundled-lists-table.js +36 -0
  248. package/dist/engine/boot-validator/entity-handler.d.ts +2 -1
  249. package/dist/engine/boot-validator/entity-handler.js +1 -1
  250. package/dist/engine/boot-validator/entity-list-aggregate-options.d.ts +3 -0
  251. package/dist/engine/boot-validator/entity-list-aggregate-options.js +23 -0
  252. package/dist/engine/boot-validator/list-bulk-actions.d.ts +3 -0
  253. package/dist/engine/boot-validator/list-bulk-actions.js +49 -0
  254. package/dist/engine/boot-validator/list-column-layout.d.ts +8 -0
  255. package/dist/engine/boot-validator/list-column-layout.js +41 -0
  256. package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +24 -0
  257. package/dist/engine/boot-validator/list-table-aggregate-options.js +145 -0
  258. package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +11 -0
  259. package/dist/engine/boot-validator/list-table-aggregate-query.js +31 -0
  260. package/dist/engine/boot-validator/list-table-export-options.d.ts +1 -0
  261. package/dist/engine/boot-validator/list-table-export-options.js +27 -0
  262. package/dist/engine/boot-validator/list-table-options.d.ts +3 -0
  263. package/dist/engine/boot-validator/list-table-options.js +77 -0
  264. package/dist/engine/boot-validator/list-table-reject-unknown-keys.d.ts +1 -0
  265. package/dist/engine/boot-validator/list-table-reject-unknown-keys.js +7 -0
  266. package/dist/engine/boot-validator/nav.d.ts +3 -1
  267. package/dist/engine/boot-validator/nav.js +1 -1
  268. package/dist/engine/boot-validator/ownership.d.ts +2 -1
  269. package/dist/engine/boot-validator/parent-ref.d.ts +2 -1
  270. package/dist/engine/boot-validator/projection-list-screens.d.ts +2 -1
  271. package/dist/engine/boot-validator/projection-list-screens.js +3 -13
  272. package/dist/engine/boot-validator/query-refs.d.ts +2 -1
  273. package/dist/engine/boot-validator/related-list-table-rules.d.ts +4 -0
  274. package/dist/engine/boot-validator/related-list-table-rules.js +42 -0
  275. package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
  276. package/dist/engine/boot-validator/screens-kind-entity-list.js +7 -0
  277. package/dist/engine/boot-validator/screens-kind-projection-list.js +4 -0
  278. package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
  279. package/dist/engine/boot-validator/screens-lists.js +12 -2
  280. package/dist/engine/boot-validator/screens.d.ts +2 -1
  281. package/dist/engine/boot-validator/workspaces.d.ts +3 -1
  282. package/dist/engine/bridge-stub.d.ts +5 -2
  283. package/dist/engine/bridge-stub.js +39 -24
  284. package/dist/engine/build-app-schema.d.ts +2 -1
  285. package/dist/engine/build-app-schema.js +9 -1
  286. package/dist/engine/build-config-feature-schema.js +6 -1
  287. package/dist/engine/config-helpers.d.ts +2 -2
  288. package/dist/engine/config-helpers.js +0 -9
  289. package/dist/engine/constants.d.ts +0 -10
  290. package/dist/engine/constants.js +0 -8
  291. package/dist/engine/create-app.js +1 -1
  292. package/dist/engine/define-feature.d.ts +2 -1
  293. package/dist/engine/define-feature.js +5 -2
  294. package/dist/engine/define-handler.d.ts +1 -1
  295. package/dist/engine/define-step.d.ts +0 -1
  296. package/dist/engine/define-step.js +0 -3
  297. package/dist/engine/embedded-derived.d.ts +1 -1
  298. package/dist/engine/entity-handlers.d.ts +2 -1
  299. package/dist/engine/entity-handlers.js +7 -7
  300. package/dist/engine/entity-list-runtime-options.js +3 -1
  301. package/dist/engine/entity-list-searchability.d.ts +2 -1
  302. package/dist/engine/event-def.d.ts +2 -1
  303. package/dist/engine/event-helpers.d.ts +3 -1
  304. package/dist/engine/event-helpers.js +3 -3
  305. package/dist/engine/extension-names.d.ts +2 -8
  306. package/dist/engine/extension-names.js +2 -2
  307. package/dist/engine/extension-selector-plugins.d.ts +1 -1
  308. package/dist/engine/extensions/storage-provider.d.ts +1 -2
  309. package/dist/engine/extensions/user-data.d.ts +0 -8
  310. package/dist/engine/factories.d.ts +2 -1
  311. package/dist/engine/feature-builder-state.d.ts +9 -1
  312. package/dist/engine/feature-builder-state.js +1 -0
  313. package/dist/engine/feature-changelog.d.ts +1 -1
  314. package/dist/engine/feature-config-events-jobs.d.ts +4 -1
  315. package/dist/engine/feature-entity-handlers.d.ts +5 -1
  316. package/dist/engine/feature-manifest.d.ts +1 -0
  317. package/dist/engine/feature-manifest.js +2 -1
  318. package/dist/engine/feature-ui-extensions.d.ts +7 -1
  319. package/dist/engine/feature-ui-extensions.js +6 -4
  320. package/dist/engine/field-access.d.ts +3 -1
  321. package/dist/engine/field-access.js +12 -0
  322. package/dist/engine/handler-field-references.d.ts +0 -4
  323. package/dist/engine/index.d.ts +58 -55
  324. package/dist/engine/index.js +23 -28
  325. package/dist/engine/instruction-fields.d.ts +1 -1
  326. package/dist/engine/personal-data-fields.d.ts +1 -1
  327. package/dist/engine/qualified-name.d.ts +0 -1
  328. package/dist/engine/read-claim.d.ts +2 -1
  329. package/dist/engine/registry-facade.js +0 -3
  330. package/dist/engine/registry-ingest.d.ts +2 -1
  331. package/dist/engine/registry-ingest.js +1 -2
  332. package/dist/engine/registry-state.d.ts +12 -2
  333. package/dist/engine/registry-state.js +2 -3
  334. package/dist/engine/registry-validate.d.ts +3 -1
  335. package/dist/engine/registry-validate.js +7 -7
  336. package/dist/engine/run-in.d.ts +1 -1
  337. package/dist/engine/run-in.js +0 -1
  338. package/dist/engine/schema-builder.d.ts +1 -1
  339. package/dist/engine/schema-builder.js +1 -1
  340. package/dist/engine/screen-filter-ops.d.ts +2 -1
  341. package/dist/engine/screen-filter-ops.js +2 -5
  342. package/dist/engine/soft-delete-cleanup.d.ts +1 -1
  343. package/dist/engine/soft-delete-cleanup.js +4 -4
  344. package/dist/engine/state-machine.js +2 -1
  345. package/dist/engine/steps/_read-source.js +1 -1
  346. package/dist/engine/steps/aggregate-append-event.js +2 -2
  347. package/dist/engine/steps/call-feature.js +2 -2
  348. package/dist/engine/steps/mail-send.js +1 -1
  349. package/dist/engine/steps/retry.js +1 -1
  350. package/dist/engine/steps/wait-for-event.js +1 -1
  351. package/dist/engine/steps/wait.js +1 -1
  352. package/dist/engine/steps/webhook-send.js +1 -1
  353. package/dist/engine/strip-disabled-features-from-app-schema.js +7 -3
  354. package/dist/engine/template-variables.d.ts +2 -1
  355. package/dist/engine/transfer-adjacency.d.ts +1 -1
  356. package/dist/engine/types/feature.d.ts +1 -0
  357. package/dist/engine/types/index.d.ts +8 -30
  358. package/dist/engine/types/index.js +2 -10
  359. package/dist/engine/types/screen.d.ts +1 -1
  360. package/dist/engine/types/screen.js +1 -1
  361. package/dist/engine/validation.d.ts +2 -1
  362. package/dist/entrypoint/index.d.ts +9 -35
  363. package/dist/entrypoint/index.js +10 -1
  364. package/dist/entrypoint/internals.d.ts +40 -0
  365. package/dist/entrypoint/internals.js +1 -0
  366. package/dist/entrypoint/row-level-security-mode-check.d.ts +3 -0
  367. package/dist/entrypoint/row-level-security-mode-check.js +19 -0
  368. package/dist/env/dry-run-internals.d.ts +10 -0
  369. package/dist/env/dry-run-internals.js +1 -0
  370. package/dist/env/dry-run.d.ts +1 -10
  371. package/dist/env/dry-run.js +2 -1
  372. package/dist/env/index.d.ts +1 -85
  373. package/dist/env/index.js +6 -50
  374. package/dist/env/internals.d.ts +87 -0
  375. package/dist/env/internals.js +53 -0
  376. package/dist/errors/classes.js +2 -2
  377. package/dist/errors/index.d.ts +5 -14
  378. package/dist/errors/index.js +4 -9
  379. package/dist/errors/member-resolution.js +1 -1
  380. package/dist/errors/reasons.d.ts +0 -1
  381. package/dist/errors/reasons.js +7 -7
  382. package/dist/errors/serialize.d.ts +0 -18
  383. package/dist/errors/serialize.js +0 -27
  384. package/dist/es-ops/index.d.ts +4 -4
  385. package/dist/es-ops/index.js +2 -2
  386. package/dist/es-ops/operations-schema.d.ts +1 -1
  387. package/dist/es-ops/types.d.ts +4 -5
  388. package/dist/event-store/admin-api-internals.d.ts +14 -0
  389. package/dist/event-store/admin-api-internals.js +1 -0
  390. package/dist/event-store/admin-api.d.ts +1 -14
  391. package/dist/event-store/admin-api.js +11 -6
  392. package/dist/event-store/archive.js +4 -2
  393. package/dist/event-store/errors.js +2 -2
  394. package/dist/event-store/event-store.d.ts +1 -0
  395. package/dist/event-store/event-store.js +42 -32
  396. package/dist/event-store/events-schema.js +4 -1
  397. package/dist/event-store/index.d.ts +11 -13
  398. package/dist/event-store/index.js +7 -9
  399. package/dist/event-store/provenance-append.js +1 -1
  400. package/dist/event-store/rebuild-dead-letter.js +4 -2
  401. package/dist/event-store/snapshot.js +4 -3
  402. package/dist/event-store/stream-scope.d.ts +2 -0
  403. package/dist/event-store/stream-scope.js +6 -0
  404. package/dist/event-store/upcaster-dead-letter.js +4 -2
  405. package/dist/event-store/upcaster.d.ts +2 -1
  406. package/dist/files/action-form-upload.d.ts +2 -1
  407. package/dist/files/action-form-upload.js +1 -1
  408. package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -1
  409. package/dist/files/assert-file-refs-belong-to-tenant.js +1 -1
  410. package/dist/files/bind-pending-file-refs.d.ts +2 -1
  411. package/dist/files/bind-pending-file-refs.js +2 -1
  412. package/dist/files/bind-referenced-files.write.js +1 -1
  413. package/dist/files/create-file-ref-from-bytes.d.ts +6 -3
  414. package/dist/files/create-file-ref-from-bytes.js +6 -3
  415. package/dist/files/create-file-ref.d.ts +6 -2
  416. package/dist/files/create-file-ref.js +13 -4
  417. package/dist/files/dispose-removed-file-refs.d.ts +2 -1
  418. package/dist/files/dispose-removed-file-refs.js +1 -1
  419. package/dist/files/feature.js +2 -2
  420. package/dist/files/file-handle.js +1 -1
  421. package/dist/files/file-routes.d.ts +3 -1
  422. package/dist/files/file-routes.js +41 -4
  423. package/dist/files/index.d.ts +11 -13
  424. package/dist/files/index.js +5 -7
  425. package/dist/files/load-save-file-refs.d.ts +2 -1
  426. package/dist/files/load-save-file-refs.js +1 -1
  427. package/dist/files/provider-resolver.d.ts +6 -4
  428. package/dist/files/provider-resolver.js +5 -5
  429. package/dist/files/record-write-check.d.ts +6 -0
  430. package/dist/files/record-write-check.js +13 -0
  431. package/dist/files/storage-tracking.js +4 -2
  432. package/dist/files/sweep-orphaned-uploads.d.ts +1 -1
  433. package/dist/files/sweep-orphaned-uploads.js +1 -1
  434. package/dist/files/upload-ledger.d.ts +2 -2
  435. package/dist/files/upload-ledger.js +4 -4
  436. package/dist/i18n/index.d.ts +2 -8
  437. package/dist/i18n/index.js +1 -1
  438. package/dist/i18n/internals.d.ts +7 -0
  439. package/dist/i18n/internals.js +1 -0
  440. package/dist/i18n/required-surface-keys.d.ts +4 -1
  441. package/dist/i18n/required-surface-keys.js +7 -2
  442. package/dist/internal/row-level-security.d.ts +3 -0
  443. package/dist/internal/row-level-security.js +3 -0
  444. package/dist/internal/stack-support.d.ts +1 -1
  445. package/dist/internal/stack-support.js +1 -1
  446. package/dist/internal/testing.d.ts +1 -0
  447. package/dist/internal/testing.js +10 -6
  448. package/dist/jobs/index.d.ts +1 -1
  449. package/dist/jobs/job-append-event.d.ts +12 -0
  450. package/dist/jobs/job-append-event.js +30 -0
  451. package/dist/jobs/job-runner-context.d.ts +2 -2
  452. package/dist/jobs/job-runner-context.js +46 -16
  453. package/dist/jobs/job-runner-execution.d.ts +1 -1
  454. package/dist/jobs/job-runner-execution.js +6 -4
  455. package/dist/jobs/job-runner-gates.d.ts +1 -1
  456. package/dist/jobs/job-runner-gates.js +0 -1
  457. package/dist/jobs/job-runner-helpers.d.ts +11 -4
  458. package/dist/jobs/job-runner-helpers.js +10 -1
  459. package/dist/jobs/job-runner-scope.d.ts +5 -2
  460. package/dist/jobs/job-runner-scope.js +6 -6
  461. package/dist/jobs/job-runner-types.d.ts +2 -1
  462. package/dist/jobs/job-runner.js +22 -6
  463. package/dist/jobs/max-per-tenant.d.ts +1 -1
  464. package/dist/logging/index.d.ts +1 -2
  465. package/dist/logging/index.js +1 -1
  466. package/dist/logging/pino-logger.js +1 -1
  467. package/dist/logging/utils.d.ts +1 -0
  468. package/dist/logging/utils.js +6 -0
  469. package/dist/migrations/index.d.ts +3 -3
  470. package/dist/migrations/index.js +3 -3
  471. package/dist/migrations/pending-rebuilds.d.ts +1 -1
  472. package/dist/migrations/pending-rebuilds.js +1 -1
  473. package/dist/migrations/pii-event-backfill.js +4 -1
  474. package/dist/observability/escape-hatch-report.d.ts +2 -1
  475. package/dist/observability/escape-hatch-report.js +9 -2
  476. package/dist/observability/index.d.ts +7 -15
  477. package/dist/observability/index.js +4 -12
  478. package/dist/observability/metric-validator.js +1 -1
  479. package/dist/observability/metrics-handle.d.ts +0 -1
  480. package/dist/observability/metrics-handle.js +2 -15
  481. package/dist/observability/recording-tracer.d.ts +1 -2
  482. package/dist/observability/recording-tracer.js +0 -6
  483. package/dist/observability/sensitive-filter.d.ts +0 -2
  484. package/dist/observability/sensitive-filter.js +0 -29
  485. package/dist/pipeline/active-membership.d.ts +2 -1
  486. package/dist/pipeline/active-membership.js +6 -2
  487. package/dist/pipeline/after-rollback-sink.d.ts +6 -0
  488. package/dist/pipeline/after-rollback-sink.js +32 -0
  489. package/dist/pipeline/append-event-core.d.ts +2 -1
  490. package/dist/pipeline/append-event-core.js +2 -2
  491. package/dist/pipeline/attach-outside-transaction.d.ts +3 -0
  492. package/dist/pipeline/attach-outside-transaction.js +13 -0
  493. package/dist/pipeline/auth-claims-resolver.d.ts +2 -1
  494. package/dist/pipeline/cascade-handler.d.ts +2 -1
  495. package/dist/pipeline/cascade-handler.js +3 -2
  496. package/dist/pipeline/config-accessor-factory.d.ts +1 -1
  497. package/dist/pipeline/config-accessor-factory.js +1 -1
  498. package/dist/pipeline/context-services.d.ts +56 -0
  499. package/dist/pipeline/context-services.js +73 -0
  500. package/dist/pipeline/dispatch-batch.d.ts +2 -1
  501. package/dist/pipeline/dispatch-batch.js +39 -19
  502. package/dist/pipeline/dispatch-query.js +5 -4
  503. package/dist/pipeline/dispatch-scope.d.ts +6 -0
  504. package/dist/pipeline/dispatch-scope.js +27 -0
  505. package/dist/pipeline/dispatch-shared.d.ts +13 -9
  506. package/dist/pipeline/dispatch-shared.js +75 -194
  507. package/dist/pipeline/dispatch-stream.js +8 -4
  508. package/dist/pipeline/dispatch-write.d.ts +2 -1
  509. package/dist/pipeline/dispatch-write.js +10 -8
  510. package/dist/pipeline/dispatcher-utils.d.ts +3 -1
  511. package/dist/pipeline/dispatcher-utils.js +8 -2
  512. package/dist/pipeline/dispatcher.d.ts +3 -2
  513. package/dist/pipeline/dispatcher.js +4 -3
  514. package/dist/pipeline/event-consumer-state.d.ts +0 -1
  515. package/dist/pipeline/event-dispatcher-delivery.d.ts +1 -1
  516. package/dist/pipeline/event-dispatcher-delivery.js +7 -3
  517. package/dist/pipeline/event-dispatcher.d.ts +3 -2
  518. package/dist/pipeline/event-dispatcher.js +13 -12
  519. package/dist/pipeline/event-retention.js +59 -56
  520. package/dist/pipeline/handler-access-error.js +2 -1
  521. package/dist/pipeline/handler-context-auth.d.ts +5 -6
  522. package/dist/pipeline/handler-context-auth.js +7 -4
  523. package/dist/pipeline/handler-context-config.d.ts +2 -5
  524. package/dist/pipeline/handler-context-config.js +2 -2
  525. package/dist/pipeline/handler-context-db.d.ts +32 -7
  526. package/dist/pipeline/handler-context-db.js +26 -17
  527. package/dist/pipeline/handler-context-dispatch.d.ts +14 -6
  528. package/dist/pipeline/handler-context-dispatch.js +18 -5
  529. package/dist/pipeline/handler-context-events.d.ts +22 -38
  530. package/dist/pipeline/handler-context-events.js +42 -35
  531. package/dist/pipeline/handler-context-member-resolution.d.ts +2 -0
  532. package/dist/pipeline/handler-context-member-resolution.js +110 -0
  533. package/dist/pipeline/handler-context-notify.d.ts +3 -2
  534. package/dist/pipeline/handler-context-notify.js +1 -1
  535. package/dist/pipeline/handler-context-observability.d.ts +2 -4
  536. package/dist/pipeline/handler-context-observability.js +7 -5
  537. package/dist/pipeline/handler-context-phase-denials.d.ts +11 -0
  538. package/dist/pipeline/handler-context-phase-denials.js +98 -0
  539. package/dist/pipeline/handler-context-scope.d.ts +7 -10
  540. package/dist/pipeline/handler-context-scope.js +18 -20
  541. package/dist/pipeline/index.d.ts +9 -21
  542. package/dist/pipeline/index.js +5 -7
  543. package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
  544. package/dist/pipeline/irreversible-operation-gate.js +2 -2
  545. package/dist/pipeline/lifecycle-pipeline.d.ts +8 -7
  546. package/dist/pipeline/lifecycle-pipeline.js +9 -15
  547. package/dist/pipeline/member-read-only-transaction.js +11 -3
  548. package/dist/pipeline/member-reader.d.ts +1 -1
  549. package/dist/pipeline/member-reader.js +2 -2
  550. package/dist/pipeline/msp-rebuild.js +5 -3
  551. package/dist/pipeline/multi-stream-apply-context.js +3 -2
  552. package/dist/pipeline/notify-scope.d.ts +2 -1
  553. package/dist/pipeline/pre-handler-gates.d.ts +2 -1
  554. package/dist/pipeline/pre-transaction-reservations.d.ts +3 -3
  555. package/dist/pipeline/pre-transaction-reservations.js +9 -7
  556. package/dist/pipeline/projection-rebuild.js +12 -5
  557. package/dist/pipeline/projection-state.d.ts +0 -6
  558. package/dist/pipeline/projection-state.js +0 -5
  559. package/dist/pipeline/projections-runner.d.ts +2 -1
  560. package/dist/pipeline/projections-runner.js +10 -6
  561. package/dist/pipeline/system-hooks.d.ts +6 -2
  562. package/dist/pipeline/system-hooks.js +61 -10
  563. package/dist/pipeline/system-identity-switch.d.ts +4 -2
  564. package/dist/pipeline/system-identity-switch.js +51 -36
  565. package/dist/pipeline/typed-append-event.d.ts +2 -0
  566. package/dist/pipeline/typed-append-event.js +4 -0
  567. package/dist/pipeline/write-origin.js +2 -2
  568. package/dist/pipeline/write-result-masking.d.ts +1 -1
  569. package/dist/pipeline/write-result-masking.js +13 -10
  570. package/dist/random/index.d.ts +1 -2
  571. package/dist/random/index.js +1 -2
  572. package/dist/rate-limit/bucket.d.ts +2 -1
  573. package/dist/rate-limit/middleware.js +2 -1
  574. package/dist/redis/index.d.ts +3 -4
  575. package/dist/redis/index.js +2 -2
  576. package/dist/schema-cli/apply-command.js +5 -2
  577. package/dist/schema-cli/baseline-command.js +7 -2
  578. package/dist/schema-cli/generate-command.js +7 -9
  579. package/dist/schema-cli/shared.d.ts +4 -0
  580. package/dist/schema-cli/shared.js +21 -2
  581. package/dist/schema-cli/status-command.js +8 -2
  582. package/dist/schema-cli/validate-command.js +52 -4
  583. package/dist/schema-cli.d.ts +0 -1
  584. package/dist/search/configure-tenant-index.d.ts +1 -3
  585. package/dist/search/configure-tenant-index.js +0 -4
  586. package/dist/search/index.d.ts +1 -4
  587. package/dist/search/index.js +0 -2
  588. package/dist/search/meilisearch-adapter-internals.d.ts +8 -0
  589. package/dist/search/meilisearch-adapter-internals.js +9 -0
  590. package/dist/search/meilisearch-adapter.d.ts +1 -8
  591. package/dist/search/meilisearch-adapter.js +6 -7
  592. package/dist/search/meilisearch-peer.d.ts +2 -0
  593. package/dist/search/meilisearch-peer.js +5 -0
  594. package/dist/search/reindex-entity.js +107 -91
  595. package/dist/secrets/index.d.ts +3 -4
  596. package/dist/secrets/index.js +2 -3
  597. package/dist/seeding/index.d.ts +2 -2
  598. package/dist/seeding/index.js +1 -2
  599. package/dist/time/index.d.ts +2 -2
  600. package/dist/time/index.js +1 -1
  601. package/dist/time/tz-context.d.ts +0 -5
  602. package/dist/time/tz-context.js +0 -9
  603. package/dist/ui-types/index.d.ts +8 -11
  604. package/dist/ui-types/index.js +3 -3
  605. package/dist/upgrade-changelog.d.ts +3 -0
  606. package/dist/upgrade-changelog.js +18 -0
  607. package/dist/upgrade-cli-internals.d.ts +8 -0
  608. package/dist/upgrade-cli-internals.js +63 -0
  609. package/dist/upgrade-cli.d.ts +1 -18
  610. package/dist/upgrade-cli.js +29 -137
  611. package/dist/upgrade-marker-parse.d.ts +32 -0
  612. package/dist/upgrade-marker-parse.js +73 -0
  613. package/dist/utils/import-optional-peer.d.ts +6 -0
  614. package/dist/utils/import-optional-peer.js +19 -0
  615. package/dist/utils/index.d.ts +1 -4
  616. package/dist/utils/index.js +1 -4
  617. package/package.json +27 -20
  618. package/src/changes.json +451 -0
  619. package/dist/crypto/request-kms-cache.d.ts +0 -8
  620. package/dist/crypto/request-kms-cache.js +0 -21
  621. package/dist/engine/codemod/index.d.ts +0 -2
  622. package/dist/engine/codemod/index.js +0 -1
  623. package/dist/engine/codemod/pipeline-codemod.d.ts +0 -50
  624. package/dist/engine/codemod/pipeline-codemod.js +0 -536
  625. package/dist/engine/feature-ast/entity-field-types.d.ts +0 -13
  626. package/dist/engine/feature-ast/entity-field-types.js +0 -35
  627. package/dist/engine/feature-ast/extractors/ai-steps.d.ts +0 -6
  628. package/dist/engine/feature-ast/extractors/ai-steps.js +0 -254
  629. package/dist/engine/feature-ast/extractors/events.d.ts +0 -5
  630. package/dist/engine/feature-ast/extractors/events.js +0 -275
  631. package/dist/engine/feature-ast/extractors/handlers.d.ts +0 -24
  632. package/dist/engine/feature-ast/extractors/handlers.js +0 -358
  633. package/dist/engine/feature-ast/extractors/hooks.d.ts +0 -24
  634. package/dist/engine/feature-ast/extractors/hooks.js +0 -248
  635. package/dist/engine/feature-ast/extractors/index.d.ts +0 -14
  636. package/dist/engine/feature-ast/extractors/index.js +0 -13
  637. package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +0 -7
  638. package/dist/engine/feature-ast/extractors/jobs-routes.js +0 -145
  639. package/dist/engine/feature-ast/extractors/projections-screens.d.ts +0 -10
  640. package/dist/engine/feature-ast/extractors/projections-screens.js +0 -195
  641. package/dist/engine/feature-ast/extractors/resolve-import.d.ts +0 -21
  642. package/dist/engine/feature-ast/extractors/resolve-import.js +0 -180
  643. package/dist/engine/feature-ast/extractors/round1.d.ts +0 -10
  644. package/dist/engine/feature-ast/extractors/round1.js +0 -81
  645. package/dist/engine/feature-ast/extractors/round2.d.ts +0 -7
  646. package/dist/engine/feature-ast/extractors/round2.js +0 -191
  647. package/dist/engine/feature-ast/extractors/round3.d.ts +0 -23
  648. package/dist/engine/feature-ast/extractors/round3.js +0 -292
  649. package/dist/engine/feature-ast/extractors/round5.d.ts +0 -9
  650. package/dist/engine/feature-ast/extractors/round5.js +0 -68
  651. package/dist/engine/feature-ast/extractors/round6.d.ts +0 -4
  652. package/dist/engine/feature-ast/extractors/round6.js +0 -17
  653. package/dist/engine/feature-ast/extractors/shared.d.ts +0 -94
  654. package/dist/engine/feature-ast/extractors/shared.js +0 -343
  655. package/dist/engine/feature-ast/index.d.ts +0 -16
  656. package/dist/engine/feature-ast/index.js +0 -10
  657. package/dist/engine/feature-ast/parse.d.ts +0 -31
  658. package/dist/engine/feature-ast/parse.js +0 -483
  659. package/dist/engine/feature-ast/patch.d.ts +0 -210
  660. package/dist/engine/feature-ast/patch.js +0 -610
  661. package/dist/engine/feature-ast/patcher.d.ts +0 -217
  662. package/dist/engine/feature-ast/patcher.js +0 -281
  663. package/dist/engine/feature-ast/pattern-change-schema.d.ts +0 -1476
  664. package/dist/engine/feature-ast/pattern-change-schema.js +0 -1226
  665. package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
  666. package/dist/engine/feature-ast/pattern-id-matchers.js +0 -210
  667. package/dist/engine/feature-ast/patterns.d.ts +0 -318
  668. package/dist/engine/feature-ast/patterns.js +0 -106
  669. package/dist/engine/feature-ast/render.d.ts +0 -47
  670. package/dist/engine/feature-ast/render.js +0 -662
  671. package/dist/engine/feature-ast/source-location.d.ts +0 -17
  672. package/dist/engine/feature-ast/source-location.js +0 -27
  673. package/dist/engine/pattern-library/index.d.ts +0 -2
  674. package/dist/engine/pattern-library/index.js +0 -3
  675. package/dist/engine/pattern-library/library.d.ts +0 -14
  676. package/dist/engine/pattern-library/library.js +0 -93
  677. package/dist/engine/pattern-library/mixed-schemas.d.ts +0 -16
  678. package/dist/engine/pattern-library/mixed-schemas.js +0 -559
  679. package/dist/engine/pattern-library/opaque-schemas.d.ts +0 -7
  680. package/dist/engine/pattern-library/opaque-schemas.js +0 -115
  681. package/dist/engine/pattern-library/shared-fields.d.ts +0 -122
  682. package/dist/engine/pattern-library/shared-fields.js +0 -88
  683. package/dist/engine/pattern-library/static-schemas.d.ts +0 -20
  684. package/dist/engine/pattern-library/static-schemas.js +0 -478
  685. package/dist/engine/pattern-library/types.d.ts +0 -158
  686. package/dist/engine/pattern-library/types.js +0 -36
  687. package/dist/engine/provider-plugin-context.d.ts +0 -3
  688. package/dist/engine/provider-plugin-context.js +0 -28
  689. package/dist/engine/resolve-config-or-param.d.ts +0 -18
  690. package/dist/engine/resolve-config-or-param.js +0 -76
  691. package/src/scripts/codemod/README.md +0 -187
  692. package/src/scripts/codemod/codemod-support.ts +0 -334
  693. package/src/scripts/codemod/collect-source-files.ts +0 -48
  694. package/src/scripts/codemod/crypto-shredding-testing-move.ts +0 -119
  695. package/src/scripts/codemod/db-factory.ts +0 -810
  696. package/src/scripts/codemod/feature-factory.ts +0 -429
  697. package/src/scripts/codemod/feature-layout.ts +0 -424
  698. package/src/scripts/codemod/import-extensions.ts +0 -118
  699. package/src/scripts/codemod/migrate-cross-tenant.ts +0 -328
  700. package/src/scripts/codemod/migrate-db-raw.ts +0 -401
  701. package/src/scripts/codemod/migrate-open-to-all.ts +0 -235
  702. package/src/scripts/codemod/object-form.ts +0 -746
  703. package/src/scripts/codemod/package-merge.ts +0 -299
  704. package/src/scripts/codemod/pii-personal-migration.ts +0 -816
  705. package/src/scripts/codemod/remove-engine-payload-casts.ts +0 -318
  706. package/src/scripts/codemod/s3-imports.ts +0 -236
  707. package/src/scripts/codemod/tenant-db-options.ts +0 -454
  708. package/src/scripts/codemod/testing-injection.ts +0 -215
  709. package/src/scripts/codemod/testing-move-targets.ts +0 -161
  710. package/src/scripts/codemod/testing-move.ts +0 -542
  711. package/src/scripts/codemod/unprocessable-error-details-reason.ts +0 -411
@@ -1,50 +0,0 @@
1
- import { Project } from "ts-morph";
2
- export type CodemodResult = {
3
- readonly filePath: string;
4
- readonly status: "converted" | "skipped" | "error";
5
- readonly reason?: string;
6
- };
7
- export type CodemodReport = {
8
- readonly results: readonly CodemodResult[];
9
- readonly converted: number;
10
- readonly skipped: number;
11
- readonly errors: number;
12
- };
13
- export type CodemodOptions = {
14
- readonly dryRun?: boolean;
15
- readonly verbose?: boolean;
16
- };
17
- export type GuardConfig = {
18
- readonly condition: string;
19
- readonly failureReturn: string;
20
- readonly successReturn: string;
21
- };
22
- export type ParsedHandlerInfo = {
23
- readonly handlerBodyText: string;
24
- readonly isStaticReturn: boolean;
25
- readonly isSimpleExecutorCreate: boolean;
26
- readonly isSimpleExecutorUpdate: boolean;
27
- readonly hasConditionalLogic: boolean;
28
- readonly executorName?: string;
29
- readonly executorCreateVar?: string;
30
- readonly executorCreateArgs?: string[];
31
- readonly executorUpdateVar?: string;
32
- readonly isExpressionBodyCreate: boolean;
33
- readonly isExpressionBodyUpdate: boolean;
34
- readonly expressionBodyArgs: string[] | undefined;
35
- readonly isGuardedCreate: boolean;
36
- readonly guardConfig: GuardConfig | undefined;
37
- };
38
- export declare function analyzeHandlerArrow(arrowText: string): ParsedHandlerInfo;
39
- export declare function generatePerformBlock(analysis: ParsedHandlerInfo, schemaType: string, indent: string): string | null;
40
- export declare function scanForCandidates(rootDir: string): FileAnalysis[];
41
- export type FileAnalysis = {
42
- readonly filePath: string;
43
- readonly pattern: "free-form-write" | "pipeline-write" | "query-handler" | "other";
44
- readonly convertible: boolean;
45
- readonly reason: string;
46
- readonly handlerLine?: number;
47
- };
48
- export declare function analyzeFile(filePath: string): FileAnalysis | null;
49
- export declare function runCodemod(rootDir: string, options?: CodemodOptions): Promise<CodemodReport>;
50
- export declare function convertFile(filePath: string, project?: Project, options?: CodemodOptions): Promise<CodemodResult>;
@@ -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>;