@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,7 +0,0 @@
1
- import { type CallExpression } from "ts-morph";
2
- import type { PatternId } from "./patch.ts";
3
- import type { MembersByKind } from "./patterns.ts";
4
- type PatternIdKind = PatternId["kind"];
5
- type PatternIdOfKind = MembersByKind<PatternId>;
6
- export declare function callMatchesId<K extends PatternIdKind>(call: CallExpression, kind: K, id: PatternIdOfKind[K]): boolean;
7
- export {};
@@ -1,210 +0,0 @@
1
- import { SyntaxKind } from "ts-morph";
2
- import { readNameLiteral, readNameOrRef, resolveSameFileObjectLiteral, } from "./extractors/shared.js";
3
- const PATTERN_ID_MATCHERS = {
4
- requires: matchSingletonCall,
5
- optionalRequires: matchSingletonCall,
6
- readsConfig: matchSingletonCall,
7
- systemScope: matchSingletonCall,
8
- toggleable: matchSingletonCall,
9
- describe: matchSingletonCall,
10
- uiHints: matchSingletonCall,
11
- config: matchSingletonCall,
12
- translations: matchSingletonCall,
13
- authClaims: matchSingletonCall,
14
- treeActions: matchSingletonCall,
15
- entity: matchEntityCall,
16
- relation: matchRelationCall,
17
- nav: matchIdPropertyCall,
18
- workspace: matchIdPropertyCall,
19
- screen: matchIdPropertyCall,
20
- writeHandler: matchHandlerCall,
21
- queryHandler: matchHandlerCall,
22
- streamHandler: matchHandlerCall,
23
- hook: matchHookCall,
24
- metric: matchShortNameCall,
25
- secret: matchShortNameCall,
26
- secretNamespace: matchShortNameCall,
27
- claimKey: matchShortNameCall,
28
- referenceData: matchReferenceDataCall,
29
- useExtension: matchUseExtensionCall,
30
- job: matchJobCall,
31
- notification: matchNotificationCall,
32
- httpRoute: matchHttpRouteCall,
33
- projection: matchProjectionCall,
34
- multiStreamProjection: matchProjectionCall,
35
- defineEvent: matchDefineEventCall,
36
- extendsRegistrar: matchExtendsRegistrarCall,
37
- "ai.generate": matchAiStepCall,
38
- "ai.extract": matchAiStepCall,
39
- "ai.classify": matchAiStepCall,
40
- };
41
- export function callMatchesId(call, kind, id) {
42
- return PATTERN_ID_MATCHERS[kind](call, id);
43
- }
44
- // Singletons: kind alone identifies the call.
45
- function matchSingletonCall() {
46
- return true;
47
- }
48
- function matchEntityCall(call, id) {
49
- return (matchFirstArgString(call, id.entityName) || matchObjectProperty(call, "name", id.entityName));
50
- }
51
- // Positional: r.relation(entity, name, def) | Object: { entity, name, ... }
52
- function matchRelationCall(call, id) {
53
- if (matchFirstArgString(call, id.entityName)) {
54
- return matchArgString(call, 1, id.relationName);
55
- }
56
- return (matchObjectProperty(call, "entity", id.entityName) &&
57
- matchObjectProperty(call, "name", id.relationName));
58
- }
59
- function matchIdPropertyCall(call, id) {
60
- return matchObjectProperty(call, "id", id.id);
61
- }
62
- function matchHandlerCall(call, id) {
63
- return (matchFirstArgString(call, id.handlerName) || matchObjectProperty(call, "name", id.handlerName));
64
- }
65
- // Positional: r.hook(type, target, fn) | Object: { type, target }
66
- function matchHookCall(call, id) {
67
- if (typeof id.target === "object") {
68
- return matchHookAllOfCall(call, id.hookType, id.target.allOf);
69
- }
70
- if (matchFirstArgString(call, id.hookType)) {
71
- return matchArgNameOrRef(call, 1, id.target);
72
- }
73
- return (matchObjectProperty(call, "type", id.hookType) && matchObjectProperty(call, "target", id.target));
74
- }
75
- // Entity-wide { allOf } target — only ever appears as the object
76
- // literal { allOf: entity } (positional or nested in the object
77
- // form), never as a bare string, so check both call shapes.
78
- function matchHookAllOfCall(call, hookType, allOfEntity) {
79
- if (matchFirstArgString(call, hookType)) {
80
- return matchAllOfArg(call.getArguments()[1], allOfEntity);
81
- }
82
- return (matchObjectProperty(call, "type", hookType) &&
83
- matchObjectAllOfProperty(call, "target", allOfEntity));
84
- }
85
- function matchShortNameCall(call, id) {
86
- return matchFirstArgString(call, id.shortName) || matchObjectProperty(call, "name", id.shortName);
87
- }
88
- function matchReferenceDataCall(call, id) {
89
- return (matchFirstArgString(call, id.entityName) || matchObjectProperty(call, "entity", id.entityName));
90
- }
91
- // Positional: r.useExtension(name, entity) | Object: { name, entity }
92
- function matchUseExtensionCall(call, id) {
93
- if (matchFirstArgString(call, id.extensionName)) {
94
- return matchArgNameOrRef(call, 1, id.entityName);
95
- }
96
- return (matchObjectProperty(call, "name", id.extensionName) &&
97
- matchObjectProperty(call, "entity", id.entityName));
98
- }
99
- function matchJobCall(call, id) {
100
- return matchFirstArgString(call, id.jobName) || matchObjectProperty(call, "name", id.jobName);
101
- }
102
- function matchNotificationCall(call, id) {
103
- return (matchFirstArgString(call, id.notificationName) ||
104
- matchObjectProperty(call, "name", id.notificationName));
105
- }
106
- // Object form only; positional doesn't apply.
107
- function matchHttpRouteCall(call, id) {
108
- return (matchObjectProperty(call, "method", id.method) && matchObjectProperty(call, "path", id.path));
109
- }
110
- function matchProjectionCall(call, id) {
111
- return matchObjectProperty(call, "name", id.name);
112
- }
113
- function matchDefineEventCall(call, id) {
114
- return matchFirstArgString(call, id.eventName) || matchObjectProperty(call, "name", id.eventName);
115
- }
116
- function matchExtendsRegistrarCall(call, id) {
117
- return matchFirstArgString(call, id.extensionName);
118
- }
119
- function matchAiStepCall(call, id) {
120
- return readAiStepKey(call) === id.stepKey;
121
- }
122
- function readAiStepKey(call) {
123
- const arg = call.getArguments()[0];
124
- if (!arg)
125
- return undefined;
126
- const obj = resolveSameFileObjectLiteral(arg);
127
- if (!obj)
128
- return undefined;
129
- const prop = obj.getProperty("stepKey");
130
- if (!prop)
131
- return undefined;
132
- const assign = prop.asKind(SyntaxKind.PropertyAssignment);
133
- if (assign) {
134
- const init = assign.getInitializer();
135
- if (!init)
136
- return undefined;
137
- return readNameLiteral(init);
138
- }
139
- const shorthand = prop.asKind(SyntaxKind.ShorthandPropertyAssignment);
140
- if (shorthand)
141
- return readNameLiteral(shorthand.getNameNode());
142
- return undefined;
143
- }
144
- // Resolves an argument the same way the extractors do (readNameLiteral):
145
- // a string literal directly, or a bare identifier following its
146
- // declaration (same-file or imported) to a string-literal initializer —
147
- // the dominant naming style in the framework's own bundled-features
148
- // (`r.entity(ENTITY, ...)`, `r.useExtension(EXT_X, ...)`).
149
- //
150
- // Narrow on purpose: every kind's arg-0 (and relation's arg-1) is parsed
151
- // via readNameLiteral, never readNameOrRef (see round2.ts/round3.ts) —
152
- // widening this shared helper to readNameOrRef would let an object-form
153
- // call's first argument (an ObjectLiteralExpression) match here too,
154
- // short-circuiting the object-form branch in callMatchesId. Positions
155
- // where the parser itself accepts an inline `{ name: "..." }` ref use
156
- // `matchArgNameOrRef` below instead.
157
- function matchArgString(call, index, expected) {
158
- const arg = call.getArguments()[index];
159
- if (!arg)
160
- return false;
161
- return readNameLiteral(arg) === expected;
162
- }
163
- // @wrapper-known semantic-alias
164
- function matchFirstArgString(call, expected) {
165
- return matchArgString(call, 0, expected);
166
- }
167
- // Like matchArgString, but via readNameOrRef — for the specific positional
168
- // slots where the parser accepts an inline `{ name: "..." }` object ref in
169
- // addition to a literal/identifier (useExtension's entity arg, hook's
170
- // target arg; see round3.ts:445 / hooks.ts:75). Not a drop-in replacement
171
- // for matchArgString: applying it to an arg-0 position would match an
172
- // object-form call's first (and only) argument, see the comment above.
173
- function matchArgNameOrRef(call, index, expected) {
174
- const arg = call.getArguments()[index];
175
- if (!arg)
176
- return false;
177
- return readNameOrRef(arg) === expected;
178
- }
179
- // Object-form property values are resolved via readNameOrRef, not the
180
- // narrower readNameLiteral — some properties (useExtension's `entity`,
181
- // hook's `target`/`allOf`) accept an inline `{ name: "..." }` ref in the
182
- // parser (see extractors/round3.ts, extractors/hooks.ts), not just a
183
- // literal or identifier. readNameOrRef is a superset of readNameLiteral,
184
- // so this is safe for every other property too.
185
- function matchObjectProperty(call, propName, expected) {
186
- const obj = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
187
- if (!obj)
188
- return false;
189
- const init = obj.getProperty(propName)?.asKind(SyntaxKind.PropertyAssignment)?.getInitializer();
190
- if (!init)
191
- return false;
192
- return readNameOrRef(init) === expected;
193
- }
194
- // Matches an r.hook `{ allOf: entity }` target — as the arg node directly
195
- // (positional call form) or as a nested object property (object call form).
196
- function matchAllOfArg(node, expectedEntity) {
197
- const obj = node?.asKind(SyntaxKind.ObjectLiteralExpression);
198
- const init = obj?.getProperty("allOf")?.asKind(SyntaxKind.PropertyAssignment)?.getInitializer();
199
- if (!init)
200
- return false;
201
- return readNameOrRef(init) === expectedEntity;
202
- }
203
- function matchObjectAllOfProperty(call, propName, expectedEntity) {
204
- const obj = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
205
- const propInit = obj
206
- ?.getProperty(propName)
207
- ?.asKind(SyntaxKind.PropertyAssignment)
208
- ?.getInitializer();
209
- return matchAllOfArg(propInit, expectedEntity);
210
- }
@@ -1,318 +0,0 @@
1
- import type { LifecycleHookType } from "../constants.ts";
2
- import type { ConfigKeyDefinition, ConfigKeyType, JobDefinition, ReferenceDataDef, RunIn, TranslationKeys } from "../types/config.ts";
3
- import type { MetricOptions, SecretNamespaceOptions, SecretOptions } from "../types/feature.ts";
4
- import type { EntityDefinition } from "../types/fields.ts";
5
- import type { AccessRule, AgentHandlerHints, ClaimKeyType, EscapeHatchDeclaration, PayloadRateLimitOption, RateLimitDeclaration } from "../types/handlers.ts";
6
- import type { HookPhase } from "../types/hooks.ts";
7
- import type { HttpRouteMethod } from "../types/http-route.ts";
8
- import type { NavDefinition } from "../types/nav.ts";
9
- import type { MspErrorMode } from "../types/projection.ts";
10
- import type { RelationDefinition } from "../types/relations.ts";
11
- import type { ScreenDefinition } from "../types/screen.ts";
12
- import type { TreeActionDef } from "../types/tree-node.ts";
13
- import type { WorkspaceDefinition } from "../types/workspace.ts";
14
- import type { RawRefSentinel } from "./extractors/shared.ts";
15
- import type { SourceLocation } from "./source-location.ts";
16
- export type EntityPattern = {
17
- readonly kind: "entity";
18
- readonly source: SourceLocation;
19
- readonly entityName: string;
20
- readonly definition: EntityDefinition;
21
- readonly backingTable?: RawRefSentinel;
22
- };
23
- export type RelationPattern = {
24
- readonly kind: "relation";
25
- readonly source: SourceLocation;
26
- readonly entityName: string;
27
- readonly relationName: string;
28
- readonly definition: RelationDefinition;
29
- };
30
- export type NavPattern = {
31
- readonly kind: "nav";
32
- readonly source: SourceLocation;
33
- readonly definition: NavDefinition;
34
- };
35
- export type WorkspacePattern = {
36
- readonly kind: "workspace";
37
- readonly source: SourceLocation;
38
- readonly definition: WorkspaceDefinition;
39
- };
40
- export type ConfigPattern = {
41
- readonly kind: "config";
42
- readonly source: SourceLocation;
43
- readonly keys: Readonly<Record<string, ConfigKeyDefinition<ConfigKeyType>>>;
44
- };
45
- export type TranslationsPattern = {
46
- readonly kind: "translations";
47
- readonly source: SourceLocation;
48
- readonly keys: TranslationKeys;
49
- };
50
- export type RequiresPattern = {
51
- readonly kind: "requires";
52
- readonly source: SourceLocation;
53
- readonly featureNames: readonly string[];
54
- };
55
- export type OptionalRequiresPattern = {
56
- readonly kind: "optionalRequires";
57
- readonly source: SourceLocation;
58
- readonly featureNames: readonly string[];
59
- };
60
- export type SystemScopePattern = {
61
- readonly kind: "systemScope";
62
- readonly source: SourceLocation;
63
- };
64
- export type ToggleablePattern = {
65
- readonly kind: "toggleable";
66
- readonly source: SourceLocation;
67
- readonly default: boolean;
68
- };
69
- export type DescribePattern = {
70
- readonly kind: "describe";
71
- readonly source: SourceLocation;
72
- readonly text: string;
73
- };
74
- export type UiHintsPattern = {
75
- readonly kind: "uiHints";
76
- readonly source: SourceLocation;
77
- };
78
- export type MetricPattern = {
79
- readonly kind: "metric";
80
- readonly source: SourceLocation;
81
- readonly shortName: string;
82
- readonly options: MetricOptions;
83
- };
84
- export type SecretPattern = {
85
- readonly kind: "secret";
86
- readonly source: SourceLocation;
87
- readonly shortName: string;
88
- readonly options: SecretOptions;
89
- };
90
- export type SecretNamespacePattern = {
91
- readonly kind: "secretNamespace";
92
- readonly source: SourceLocation;
93
- readonly shortName: string;
94
- readonly options: SecretNamespaceOptions;
95
- };
96
- export type ClaimKeyPattern = {
97
- readonly kind: "claimKey";
98
- readonly source: SourceLocation;
99
- readonly shortName: string;
100
- readonly claimType: ClaimKeyType;
101
- };
102
- export type ReferenceDataPattern = {
103
- readonly kind: "referenceData";
104
- readonly source: SourceLocation;
105
- readonly entityName: string;
106
- readonly data: ReferenceDataDef["data"];
107
- readonly upsertKey?: string;
108
- };
109
- export type ReadsConfigPattern = {
110
- readonly kind: "readsConfig";
111
- readonly source: SourceLocation;
112
- readonly qualifiedKeys: readonly string[];
113
- };
114
- export type UseExtensionPattern = {
115
- readonly kind: "useExtension";
116
- readonly source: SourceLocation;
117
- readonly extensionName: string;
118
- readonly extensionNameRaw?: string;
119
- readonly entityName: string;
120
- readonly options?: Readonly<Record<string, unknown>>;
121
- };
122
- export type TreeActionsPattern = {
123
- readonly kind: "treeActions";
124
- readonly source: SourceLocation;
125
- readonly definitions: Readonly<Record<string, TreeActionDef>>;
126
- };
127
- export type OpaquePropMap = Readonly<Record<string, SourceLocation>>;
128
- export declare const SCREEN_OPAQUE_MARKER: "$opaque";
129
- export type ScreenOpaqueMarker = typeof SCREEN_OPAQUE_MARKER;
130
- export type ScreenPattern = {
131
- readonly kind: "screen";
132
- readonly source: SourceLocation;
133
- readonly definition: ScreenDefinition;
134
- readonly opaqueProps: OpaquePropMap;
135
- };
136
- export type WriteHandlerPattern = {
137
- readonly kind: "writeHandler";
138
- readonly source: SourceLocation;
139
- readonly handlerName?: string;
140
- readonly schemaSource?: SourceLocation;
141
- readonly handlerBody?: SourceLocation;
142
- readonly access?: AccessRule | RawRefSentinel;
143
- readonly description?: string;
144
- readonly agent?: AgentHandlerHints | RawRefSentinel;
145
- readonly rateLimit?: RateLimitDeclaration | RawRefSentinel;
146
- readonly additionalRateLimits?: readonly PayloadRateLimitOption[] | RawRefSentinel;
147
- readonly unsafeSkipTransitionGuard?: boolean;
148
- readonly escapeHatch?: EscapeHatchDeclaration | RawRefSentinel;
149
- };
150
- export type QueryHandlerPattern = {
151
- readonly kind: "queryHandler";
152
- readonly source: SourceLocation;
153
- readonly handlerName?: string;
154
- readonly schemaSource?: SourceLocation;
155
- readonly handlerBody?: SourceLocation;
156
- readonly access?: AccessRule | RawRefSentinel;
157
- readonly description?: string;
158
- readonly agent?: AgentHandlerHints | RawRefSentinel;
159
- readonly rateLimit?: RateLimitDeclaration | RawRefSentinel;
160
- readonly escapeHatch?: EscapeHatchDeclaration | RawRefSentinel;
161
- };
162
- export type StreamHandlerPattern = {
163
- readonly kind: "streamHandler";
164
- readonly source: SourceLocation;
165
- readonly handlerName?: string;
166
- readonly schemaSource?: SourceLocation;
167
- readonly handlerBody?: SourceLocation;
168
- readonly access?: AccessRule | RawRefSentinel;
169
- readonly rateLimit?: RateLimitDeclaration | RawRefSentinel;
170
- readonly escapeHatch?: EscapeHatchDeclaration | RawRefSentinel;
171
- };
172
- export type HookPattern = {
173
- readonly kind: "hook";
174
- readonly source: SourceLocation;
175
- readonly hookType: LifecycleHookType | "validation";
176
- readonly target: string | readonly string[] | {
177
- readonly allOf: string;
178
- };
179
- readonly fnBody: SourceLocation;
180
- readonly phase?: HookPhase;
181
- readonly escapeHatch?: EscapeHatchDeclaration | RawRefSentinel;
182
- };
183
- export type JobPattern = {
184
- readonly kind: "job";
185
- readonly source: SourceLocation;
186
- readonly jobName: string;
187
- readonly options: Omit<JobDefinition, "name" | "handler">;
188
- readonly handlerBody: SourceLocation;
189
- };
190
- export type NotificationPattern = {
191
- readonly kind: "notification";
192
- readonly source: SourceLocation;
193
- readonly notificationName: string;
194
- readonly trigger?: {
195
- readonly on: string;
196
- };
197
- readonly recipientBody?: SourceLocation;
198
- readonly dataBody?: SourceLocation;
199
- readonly templates?: Readonly<Record<string, SourceLocation>>;
200
- };
201
- export type AuthClaimsPattern = {
202
- readonly kind: "authClaims";
203
- readonly source: SourceLocation;
204
- readonly fnBody: SourceLocation;
205
- };
206
- export type HttpRoutePattern = {
207
- readonly kind: "httpRoute";
208
- readonly source: SourceLocation;
209
- readonly method: HttpRouteMethod;
210
- readonly path: string;
211
- readonly anonymous: boolean;
212
- readonly handlerBody: SourceLocation;
213
- };
214
- export type ProjectionPattern = {
215
- readonly kind: "projection";
216
- readonly source: SourceLocation;
217
- readonly name: string;
218
- readonly sourceEntity: string | readonly string[];
219
- readonly applyBodies: Readonly<Record<string, SourceLocation>>;
220
- };
221
- export type MultiStreamProjectionPattern = {
222
- readonly kind: "multiStreamProjection";
223
- readonly source: SourceLocation;
224
- readonly name: string;
225
- readonly applyBodies: Readonly<Record<string, SourceLocation>>;
226
- readonly errorMode?: MspErrorMode;
227
- readonly runIn?: RunIn;
228
- readonly delivery?: "shared" | "per-instance";
229
- };
230
- export type DefineEventPattern = {
231
- readonly kind: "defineEvent";
232
- readonly source: SourceLocation;
233
- readonly eventName: string;
234
- readonly eventNameRaw?: string;
235
- readonly schemaSource: SourceLocation;
236
- readonly version?: number;
237
- readonly piiFields: SourceLocation;
238
- readonly migrations?: Readonly<Record<string, SourceLocation>>;
239
- };
240
- export type ExtendsRegistrarPattern = {
241
- readonly kind: "extendsRegistrar";
242
- readonly source: SourceLocation;
243
- readonly extensionName: string;
244
- readonly extensionNameRaw?: string;
245
- readonly defBody: SourceLocation;
246
- };
247
- export type UsesApiPattern = {
248
- readonly kind: "usesApi";
249
- readonly source: SourceLocation;
250
- readonly apiName: string;
251
- };
252
- export type ExposesApiPattern = {
253
- readonly kind: "exposesApi";
254
- readonly source: SourceLocation;
255
- readonly apiName: string;
256
- };
257
- export type EnvSchemaPattern = {
258
- readonly kind: "envSchema";
259
- readonly source: SourceLocation;
260
- readonly schemaBody: SourceLocation;
261
- };
262
- /** Live-editable policy defaults for an AI pipeline step instance. */
263
- export type AiStepPolicy = {
264
- readonly enabled: boolean;
265
- readonly providerId?: string;
266
- readonly model?: string;
267
- readonly params: Record<string, unknown>;
268
- };
269
- /** Preserves an unresolvable argument reference across parse → render. */
270
- export type AiStepOpaqueArgs = {
271
- readonly __raw: string;
272
- };
273
- type AiStepCommonPatternFields = {
274
- readonly source: SourceLocation;
275
- /** Whole-args reference when the spec is not an inline/same-file object. */
276
- readonly argsSource?: AiStepOpaqueArgs;
277
- readonly stepKey?: string | AiStepOpaqueArgs;
278
- readonly promptKey?: string | AiStepOpaqueArgs;
279
- readonly promptFallback?: string | AiStepOpaqueArgs;
280
- readonly defaults?: AiStepPolicy | AiStepOpaqueArgs;
281
- readonly paramsSchemaSource?: SourceLocation;
282
- };
283
- export type AiGeneratePattern = AiStepCommonPatternFields & {
284
- readonly kind: "ai.generate";
285
- readonly inputBody?: SourceLocation;
286
- };
287
- export type AiExtractPattern = AiStepCommonPatternFields & {
288
- readonly kind: "ai.extract";
289
- readonly outputSchemaSource?: SourceLocation;
290
- readonly instructionsBody?: SourceLocation;
291
- readonly documentBody?: SourceLocation;
292
- };
293
- export type AiClassifyPattern = AiStepCommonPatternFields & {
294
- readonly kind: "ai.classify";
295
- readonly actions?: readonly {
296
- readonly type: string;
297
- readonly description: string;
298
- }[];
299
- readonly inputBody?: SourceLocation;
300
- };
301
- export type UnknownPattern = {
302
- readonly kind: "unknown";
303
- readonly source: SourceLocation;
304
- readonly methodName: string;
305
- };
306
- export type FeaturePattern = EntityPattern | RelationPattern | NavPattern | WorkspacePattern | ConfigPattern | TranslationsPattern | RequiresPattern | OptionalRequiresPattern | SystemScopePattern | ToggleablePattern | DescribePattern | UiHintsPattern | MetricPattern | SecretPattern | SecretNamespacePattern | ClaimKeyPattern | ReferenceDataPattern | ReadsConfigPattern | UseExtensionPattern | UsesApiPattern | ExposesApiPattern | TreeActionsPattern | ScreenPattern | WriteHandlerPattern | QueryHandlerPattern | StreamHandlerPattern | HookPattern | JobPattern | NotificationPattern | AuthClaimsPattern | HttpRoutePattern | ProjectionPattern | MultiStreamProjectionPattern | DefineEventPattern | ExtendsRegistrarPattern | EnvSchemaPattern | AiGeneratePattern | AiExtractPattern | AiClassifyPattern | UnknownPattern;
307
- export type FeaturePatternKind = FeaturePattern["kind"];
308
- export type MembersByKind<U extends {
309
- readonly kind: string;
310
- }> = {
311
- readonly [K in U["kind"]]: Extract<U, {
312
- readonly kind: K;
313
- }>;
314
- };
315
- export type FeaturePatternOfKind = MembersByKind<FeaturePattern>;
316
- export type Editability = "static" | "mixed" | "opaque";
317
- export declare function getEditability(pattern: FeaturePattern): Editability;
318
- export {};
@@ -1,106 +0,0 @@
1
- // FeaturePattern — typed representation of an `r.*` call inside a
2
- // feature file. The AST visitor (parse.ts) walks the
3
- // `defineFeature(name, (r) => { ... })` setup callback and yields one
4
- // FeaturePattern per recognised call.
5
- //
6
- // **Doc single-source:** THIS file is the canonical pattern reference
7
- // (mirrored into docs/corpus). The FeatureRegistrar JSDoc in
8
- // types/feature.ts stays a short pointer — duplicating semantics there
9
- // has already drifted once; verify any "checks at boot" claim against
10
- // engine/boot-validator/* before writing it down.
11
- //
12
- // **Design principle:**
13
- //
14
- // - Whatever the Designer/AI can edit declaratively → typed static
15
- // fields, reusing the existing engine/types definitions so the
16
- // pattern shape never drifts from the runtime contract.
17
- // - Whatever carries closures/code → SourceLocation pointing at the
18
- // opaque region. The Designer renders that as a read-only code
19
- // block; the AI patcher overwrites the span verbatim.
20
- //
21
- // **Coverage = 100%.** Calls we don't recognise become UnknownPattern
22
- // (the Designer shows "custom call", AI leaves them alone). Custom
23
- // TypeScript code BETWEEN `r.*` calls (helpers, local consts, imports)
24
- // is not extracted — it stays in the file buffer and survives every
25
- // patch unchanged.
26
- //
27
- // **Extension point.** Adding a new r.* API → new pattern type here +
28
- // new extractor in parse.ts. The discriminated union forces every
29
- // consumer (Designer, AI patcher, MCP server) to handle the new kind
30
- // at compile time.
31
- //
32
- // **Naming convention.** Pattern `kind` matches the r.* method name
33
- // 1:1 (e.g. `r.writeHandler` → `kind: "writeHandler"`). No kebab/camel
34
- // translation layer.
35
- //
36
- // **Adding a new FeaturePattern kind — full consumer cascade.** The
37
- // extension-point is wider than just this file + the parser. Update
38
- // ALL of these when introducing a new r.* API, otherwise tests/checks
39
- // catch the drift but the call-site jumps across files:
40
- // 1. patterns.ts (this file): Pattern type + add to FeaturePattern
41
- // union + getEditability switch
42
- // 2. feature-ast/extractors.ts: extract<Kind> function + import in
43
- // patterns-import-block
44
- // 3. feature-ast/parse.ts: dispatcher case + import
45
- // 4. feature-ast/render.ts: render<Kind> function + import + switch
46
- // case
47
- // 5. feature-ast/patch.ts: PatternId variant; if singleton-per-feature
48
- // add to SINGLETON_KINDS; callMatchesId case
49
- // 6. pattern-library/library.ts: <kind>Schema + entry in
50
- // PATTERN_LIBRARY map
51
- // 7. pattern-library/__tests__/library.test.ts: ALL_KINDS array +
52
- // makePlaceholderPattern case
53
- // TS-exhaustiveness catches most omissions automatically (1, 3, 4, 5,
54
- // 7-via-makePlaceholderPattern), but the runtime-checked maps in 6 +
55
- // the ALL_KINDS array in 7 are silent if forgotten — pin them with the
56
- // library.test.ts coverage tests.
57
- // Marker emitted in `ScreenPattern.definition` wherever a closure or
58
- // unresolvable identifier sat in the source. Designer renderers compare
59
- // against this constant to decide "form vs read-only span" — the actual
60
- // SourceLocation lives at the matching path in `opaqueProps`.
61
- export const SCREEN_OPAQUE_MARKER = "$opaque";
62
- const EDITABILITY_BY_KIND = {
63
- entity: "static",
64
- relation: "static",
65
- nav: "static",
66
- workspace: "static",
67
- config: "static",
68
- translations: "static",
69
- requires: "static",
70
- optionalRequires: "static",
71
- systemScope: "static",
72
- toggleable: "static",
73
- describe: "static",
74
- metric: "static",
75
- secret: "static",
76
- secretNamespace: "static",
77
- claimKey: "static",
78
- referenceData: "static",
79
- readsConfig: "static",
80
- useExtension: "static",
81
- usesApi: "static",
82
- exposesApi: "static",
83
- treeActions: "static",
84
- screen: "mixed",
85
- writeHandler: "mixed",
86
- queryHandler: "mixed",
87
- streamHandler: "mixed",
88
- hook: "mixed",
89
- job: "mixed",
90
- notification: "mixed",
91
- httpRoute: "mixed",
92
- projection: "mixed",
93
- multiStreamProjection: "mixed",
94
- defineEvent: "mixed",
95
- "ai.generate": "mixed",
96
- "ai.extract": "mixed",
97
- "ai.classify": "mixed",
98
- authClaims: "opaque",
99
- extendsRegistrar: "opaque",
100
- envSchema: "opaque",
101
- uiHints: "opaque",
102
- unknown: "opaque",
103
- };
104
- export function getEditability(pattern) {
105
- return EDITABILITY_BY_KIND[pattern.kind];
106
- }
@@ -1,47 +0,0 @@
1
- import type { FeaturePattern } from "./patterns.ts";
2
- export declare const FEATURE_FILE_VERSION: 1;
3
- export declare const VERSION_HEADER: string;
4
- /**
5
- * Render a single FeaturePattern back to TypeScript source — a `r.<kind>(...)`
6
- * call in canonical Object-Form. The result is a single statement WITHOUT a
7
- * trailing newline; callers compose statements with their own joiner.
8
- */
9
- export declare function renderPattern(pattern: FeaturePattern): string;
10
- /**
11
- * Render a JSON-compatible value as TypeScript source. Matches what
12
- * `readDataLiteralNode` accepts on the parser side: strings, numbers,
13
- * booleans, null, arrays, plain objects. Unsupported values (functions,
14
- * undefined) throw — they should never reach here for a static pattern.
15
- *
16
- * Keys are quoted only when they are not valid JS identifiers. The
17
- * renderer prefers single-line output for short arrays/objects (≤80
18
- * chars including indent and no nested newlines) and falls back to
19
- * multi-line otherwise — biome-stable in both branches.
20
- */
21
- export declare function renderValue(value: unknown, indent?: number): string;
22
- export type RenderFeatureFileInput = {
23
- readonly featureName: string;
24
- readonly patterns: readonly FeaturePattern[];
25
- /** Extra import lines emitted between the version header and defineFeature.
26
- * Defaults to the minimum: defineFeature + zod. */
27
- readonly imports?: readonly string[];
28
- };
29
- /**
30
- * Render a complete feature-file: schema-version header, imports, the
31
- * defineFeature call wrapping every pattern in source order. The output
32
- * is biome-format-stable so callers can persist it directly.
33
- */
34
- export declare function renderFeatureFile(input: RenderFeatureFileInput): string;
35
- /**
36
- * Prefix every non-empty line of `text` with `prefix`. Re-used from the
37
- * patcher (patch.ts imports this) so indent helpers stay in one place
38
- * — when canonical-form indentation conventions ever change, only this
39
- * function needs to follow.
40
- */
41
- export declare function indent(text: string, prefix: string): string;
42
- /**
43
- * Indentation prefix used inside `defineFeature((r) => { ... })` for
44
- * every top-level r.* statement. Two-space convention matches biome's
45
- * default and the parse-happy-path test fixture.
46
- */
47
- export declare const PATTERN_INDENT = " ";