@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,145 +0,0 @@
1
- import { SyntaxKind } from "ts-morph";
2
- import { sourceLocationFromNode } from "../source-location.js";
3
- import { fail, findFunctionLiteral, isPlainObject, ok, readBooleanProperty, readDataLiteralNode, readNameLiteral, readPropertyKey, } from "./shared.js";
4
- export function isHttpRouteMethod(value) {
5
- return (value === "GET" ||
6
- value === "POST" ||
7
- value === "PUT" ||
8
- value === "PATCH" ||
9
- value === "DELETE" ||
10
- value === "HEAD" ||
11
- value === "OPTIONS");
12
- }
13
- export function extractJob(call, sourceFile) {
14
- const args = call.getArguments();
15
- const first = args[0];
16
- if (!first) {
17
- return fail("job", sourceLocationFromNode(call, sourceFile), "expected at least one argument");
18
- }
19
- const obj = first.asKind(SyntaxKind.ObjectLiteralExpression);
20
- if (obj && args.length === 1) {
21
- const nameInit = obj
22
- .getProperty("name")
23
- ?.asKind(SyntaxKind.PropertyAssignment)
24
- ?.getInitializer()
25
- ?.asKind(SyntaxKind.StringLiteral);
26
- if (!nameInit) {
27
- return fail("job", sourceLocationFromNode(call, sourceFile), "object form requires a string-literal `name` property");
28
- }
29
- const handlerInit = obj
30
- .getProperty("handler")
31
- ?.asKind(SyntaxKind.PropertyAssignment)
32
- ?.getInitializer();
33
- if (!handlerInit) {
34
- return fail("job", sourceLocationFromNode(call, sourceFile), "object form requires a `handler` property");
35
- }
36
- const fn = findFunctionLiteral(handlerInit);
37
- if (!fn) {
38
- return fail("job", sourceLocationFromNode(call, sourceFile), "handler must be an inline arrow function or function expression");
39
- }
40
- const optionsBag = {};
41
- for (const prop of obj.getProperties()) {
42
- const propAssign = prop.asKind(SyntaxKind.PropertyAssignment);
43
- if (!propAssign)
44
- continue;
45
- const key = readPropertyKey(propAssign);
46
- if (key === "name" || key === "handler")
47
- continue;
48
- const init = propAssign.getInitializer();
49
- if (!init)
50
- continue;
51
- const value = readDataLiteralNode(init);
52
- if (value === undefined) {
53
- return fail("job", sourceLocationFromNode(call, sourceFile), `option "${key}" could not be read as a plain value`);
54
- }
55
- optionsBag[key] = value;
56
- }
57
- return ok({
58
- kind: "job",
59
- source: sourceLocationFromNode(call, sourceFile),
60
- jobName: nameInit.getLiteralValue(),
61
- options: optionsBag,
62
- handlerBody: sourceLocationFromNode(fn, sourceFile),
63
- });
64
- }
65
- const jobName = readNameLiteral(first);
66
- if (jobName === undefined) {
67
- return fail("job", sourceLocationFromNode(call, sourceFile), "first argument must be a string literal job name, or an identifier resolving to one (or use the object form)");
68
- }
69
- const optionsArg = args[1];
70
- if (!optionsArg) {
71
- return fail("job", sourceLocationFromNode(call, sourceFile), "expected an options object as second argument");
72
- }
73
- const options = readDataLiteralNode(optionsArg);
74
- if (!isPlainObject(options)) {
75
- return fail("job", sourceLocationFromNode(call, sourceFile), "options could not be read as a plain object");
76
- }
77
- const handlerArg = args[2];
78
- if (!handlerArg) {
79
- return fail("job", sourceLocationFromNode(call, sourceFile), "expected a handler function as third argument");
80
- }
81
- const fn = findFunctionLiteral(handlerArg);
82
- if (!fn) {
83
- return fail("job", sourceLocationFromNode(call, sourceFile), "third argument must be an inline arrow function or function expression");
84
- }
85
- return ok({
86
- kind: "job",
87
- source: sourceLocationFromNode(call, sourceFile),
88
- jobName,
89
- options: options,
90
- handlerBody: sourceLocationFromNode(fn, sourceFile),
91
- });
92
- }
93
- export function extractHttpRoute(call, sourceFile) {
94
- const arg = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
95
- if (!arg) {
96
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "argument must be an inline HttpRouteDefinition object");
97
- }
98
- const methodLiteral = arg
99
- .getProperty("method")
100
- ?.asKind(SyntaxKind.PropertyAssignment)
101
- ?.getInitializer()
102
- ?.asKind(SyntaxKind.StringLiteral);
103
- if (!methodLiteral) {
104
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "method must be a string literal");
105
- }
106
- const methodValue = methodLiteral.getLiteralValue();
107
- if (!isHttpRouteMethod(methodValue)) {
108
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), `method must be one of GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS (got "${methodValue}")`);
109
- }
110
- const pathLiteral = arg
111
- .getProperty("path")
112
- ?.asKind(SyntaxKind.PropertyAssignment)
113
- ?.getInitializer()
114
- ?.asKind(SyntaxKind.StringLiteral);
115
- if (!pathLiteral) {
116
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "path must be a string literal");
117
- }
118
- const handlerInit = arg
119
- .getProperty("handler")
120
- ?.asKind(SyntaxKind.PropertyAssignment)
121
- ?.getInitializer();
122
- if (!handlerInit) {
123
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "missing `handler` property");
124
- }
125
- const fn = findFunctionLiteral(handlerInit);
126
- if (!fn) {
127
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "handler must be an inline arrow function or function expression");
128
- }
129
- // Missing `anonymous` reads as false (the safe side — mounted
130
- // behind the session auth chain, not public) so a source file that predates
131
- // the required field still parses instead of erroring here.
132
- const anonymousValue = readBooleanProperty(arg, "anonymous");
133
- if (anonymousValue === undefined && arg.getProperty("anonymous") !== undefined) {
134
- return fail("httpRoute", sourceLocationFromNode(call, sourceFile), "anonymous must be a boolean literal — a non-literal value would be rewritten to a literal on round-trip");
135
- }
136
- const anonymous = anonymousValue === true;
137
- return ok({
138
- kind: "httpRoute",
139
- source: sourceLocationFromNode(call, sourceFile),
140
- method: methodValue,
141
- path: pathLiteral.getLiteralValue(),
142
- handlerBody: sourceLocationFromNode(fn, sourceFile),
143
- anonymous,
144
- });
145
- }
@@ -1,10 +0,0 @@
1
- import type { CallExpression, Node, SourceFile } from "ts-morph";
2
- import type { MultiStreamProjectionPattern, ProjectionPattern, ScreenPattern } from "../patterns.ts";
3
- import type { SourceLocation } from "../source-location.ts";
4
- import { type ExtractOutput } from "./shared.ts";
5
- export declare function readApplyBodies(defObj: ReturnType<Node["asKind"]>, sourceFile: SourceFile): Record<string, SourceLocation> | undefined;
6
- export declare function extractProjection(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ProjectionPattern>;
7
- export declare function extractMultiStreamProjection(call: CallExpression, sourceFile: SourceFile): ExtractOutput<MultiStreamProjectionPattern>;
8
- export declare function collectScreenOpaqueProps(node: Node, path: string, sourceFile: SourceFile, out: Record<string, SourceLocation>): void;
9
- export declare function readScreenStatic(node: Node): unknown;
10
- export declare function extractScreen(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ScreenPattern>;
@@ -1,195 +0,0 @@
1
- import { SyntaxKind } from "ts-morph";
2
- import { SCREEN_OPAQUE_MARKER } from "../patterns.js";
3
- import { sourceLocationFromNode } from "../source-location.js";
4
- import { fail, findFunctionLiteral, isPlainObject, isRawRefSentinel, ok, readDataLiteralNode, readNameOrRefOrList, readPropertyKey, } from "./shared.js";
5
- export function readApplyBodies(defObj, sourceFile) {
6
- if (!defObj)
7
- return undefined;
8
- const obj = defObj.asKind?.(SyntaxKind.ObjectLiteralExpression);
9
- if (!obj)
10
- return undefined;
11
- const applyObj = obj
12
- .getProperty("apply")
13
- ?.asKind(SyntaxKind.PropertyAssignment)
14
- ?.getInitializer()
15
- ?.asKind(SyntaxKind.ObjectLiteralExpression);
16
- if (!applyObj)
17
- return undefined;
18
- const out = {};
19
- for (const prop of applyObj.getProperties()) {
20
- const propAssign = prop.asKind(SyntaxKind.PropertyAssignment);
21
- if (!propAssign)
22
- return undefined;
23
- const init = propAssign.getInitializer();
24
- if (!init)
25
- return undefined;
26
- const fn = findFunctionLiteral(init);
27
- if (!fn)
28
- return undefined;
29
- out[readPropertyKey(propAssign)] = sourceLocationFromNode(fn, sourceFile);
30
- }
31
- return out;
32
- }
33
- export function extractProjection(call, sourceFile) {
34
- const arg = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
35
- if (!arg) {
36
- return fail("projection", sourceLocationFromNode(call, sourceFile), "argument must be an inline ProjectionDefinition object");
37
- }
38
- const nameLit = arg
39
- .getProperty("name")
40
- ?.asKind(SyntaxKind.PropertyAssignment)
41
- ?.getInitializer()
42
- ?.asKind(SyntaxKind.StringLiteral);
43
- if (!nameLit) {
44
- return fail("projection", sourceLocationFromNode(call, sourceFile), "name must be a string literal");
45
- }
46
- const sourceInit = arg
47
- .getProperty("source")
48
- ?.asKind(SyntaxKind.PropertyAssignment)
49
- ?.getInitializer();
50
- if (!sourceInit) {
51
- return fail("projection", sourceLocationFromNode(call, sourceFile), "missing `source` property");
52
- }
53
- const sourceEntity = readNameOrRefOrList(sourceInit);
54
- if (!sourceEntity) {
55
- return fail("projection", sourceLocationFromNode(call, sourceFile), "source must be a string literal or array of string literals");
56
- }
57
- const applyBodies = readApplyBodies(arg, sourceFile);
58
- if (!applyBodies) {
59
- return fail("projection", sourceLocationFromNode(call, sourceFile), "apply must be an inline object map of event-type → function");
60
- }
61
- return ok({
62
- kind: "projection",
63
- source: sourceLocationFromNode(call, sourceFile),
64
- name: nameLit.getLiteralValue(),
65
- sourceEntity,
66
- applyBodies,
67
- });
68
- }
69
- export function extractMultiStreamProjection(call, sourceFile) {
70
- const arg = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
71
- if (!arg) {
72
- return fail("multiStreamProjection", sourceLocationFromNode(call, sourceFile), "argument must be an inline MultiStreamProjectionDefinition object");
73
- }
74
- const nameLit = arg
75
- .getProperty("name")
76
- ?.asKind(SyntaxKind.PropertyAssignment)
77
- ?.getInitializer()
78
- ?.asKind(SyntaxKind.StringLiteral);
79
- if (!nameLit) {
80
- return fail("multiStreamProjection", sourceLocationFromNode(call, sourceFile), "name must be a string literal");
81
- }
82
- const applyBodies = readApplyBodies(arg, sourceFile);
83
- if (!applyBodies) {
84
- return fail("multiStreamProjection", sourceLocationFromNode(call, sourceFile), "apply must be an inline object map of event-type → function");
85
- }
86
- const errorModeInit = arg
87
- .getProperty("errorMode")
88
- ?.asKind(SyntaxKind.PropertyAssignment)
89
- ?.getInitializer();
90
- const errorMode = errorModeInit ? readDataLiteralNode(errorModeInit) : undefined;
91
- const runInLit = arg
92
- .getProperty("runIn")
93
- ?.asKind(SyntaxKind.PropertyAssignment)
94
- ?.getInitializer()
95
- ?.asKind(SyntaxKind.StringLiteral);
96
- const runIn = runInLit ? runInLit.getLiteralValue() : undefined;
97
- const deliveryLit = arg
98
- .getProperty("delivery")
99
- ?.asKind(SyntaxKind.PropertyAssignment)
100
- ?.getInitializer()
101
- ?.asKind(SyntaxKind.StringLiteral);
102
- const delivery = deliveryLit
103
- ? deliveryLit.getLiteralValue()
104
- : undefined;
105
- return ok({
106
- kind: "multiStreamProjection",
107
- source: sourceLocationFromNode(call, sourceFile),
108
- name: nameLit.getLiteralValue(),
109
- applyBodies,
110
- ...(isPlainObject(errorMode) && { errorMode: errorMode }),
111
- ...(runIn !== undefined && { runIn }),
112
- ...(delivery !== undefined && { delivery }),
113
- });
114
- }
115
- export function collectScreenOpaqueProps(node, path, sourceFile, out) {
116
- const fn = findFunctionLiteral(node);
117
- if (fn) {
118
- out[path] = sourceLocationFromNode(fn, sourceFile);
119
- }
120
- else if (node.isKind(SyntaxKind.ObjectLiteralExpression)) {
121
- for (const prop of node.getProperties()) {
122
- const propAssign = prop.asKind(SyntaxKind.PropertyAssignment);
123
- if (!propAssign)
124
- continue;
125
- const init = propAssign.getInitializer();
126
- if (!init)
127
- continue;
128
- const key = readPropertyKey(propAssign);
129
- const childPath = path ? `${path}.${key}` : key;
130
- collectScreenOpaqueProps(init, childPath, sourceFile, out);
131
- }
132
- }
133
- else if (node.isKind(SyntaxKind.ArrayLiteralExpression)) {
134
- node.getElements().forEach((el, idx) => {
135
- collectScreenOpaqueProps(el, `${path}.${idx}`, sourceFile, out);
136
- });
137
- }
138
- }
139
- export function readScreenStatic(node) {
140
- if (findFunctionLiteral(node))
141
- return SCREEN_OPAQUE_MARKER;
142
- const obj = node.asKind(SyntaxKind.ObjectLiteralExpression);
143
- if (obj) {
144
- const out = {};
145
- for (const prop of obj.getProperties()) {
146
- const propAssign = prop.asKind(SyntaxKind.PropertyAssignment);
147
- if (!propAssign)
148
- continue;
149
- const init = propAssign.getInitializer();
150
- if (!init)
151
- continue;
152
- out[readPropertyKey(propAssign)] = readScreenStatic(init);
153
- }
154
- return out;
155
- }
156
- const arr = node.asKind(SyntaxKind.ArrayLiteralExpression);
157
- if (arr) {
158
- return arr.getElements().map(readScreenStatic);
159
- }
160
- const value = readDataLiteralNode(node);
161
- if (value === undefined)
162
- return SCREEN_OPAQUE_MARKER;
163
- return value;
164
- }
165
- export function extractScreen(call, sourceFile) {
166
- const arg = call.getArguments()[0];
167
- if (!arg) {
168
- return fail("screen", sourceLocationFromNode(call, sourceFile), "expected a ScreenDefinition object as first argument");
169
- }
170
- const obj = arg.asKind(SyntaxKind.ObjectLiteralExpression);
171
- if (!obj) {
172
- const raw = readDataLiteralNode(arg);
173
- if (!isRawRefSentinel(raw)) {
174
- return fail("screen", sourceLocationFromNode(call, sourceFile), "argument must be an inline object literal");
175
- }
176
- return ok({
177
- kind: "screen",
178
- source: sourceLocationFromNode(call, sourceFile),
179
- definition: raw,
180
- opaqueProps: {},
181
- });
182
- }
183
- const opaqueProps = {};
184
- collectScreenOpaqueProps(obj, "", sourceFile, opaqueProps);
185
- const definition = readScreenStatic(obj);
186
- if (!isPlainObject(definition)) {
187
- return fail("screen", sourceLocationFromNode(call, sourceFile), "definition could not be read structurally");
188
- }
189
- return ok({
190
- kind: "screen",
191
- source: sourceLocationFromNode(call, sourceFile),
192
- definition: definition,
193
- opaqueProps: opaqueProps,
194
- });
195
- }
@@ -1,21 +0,0 @@
1
- import type { SourceFile, VariableDeclaration } from "ts-morph";
2
- import { Node } from "ts-morph";
3
- export declare function resolveModuleFile(fromFile: SourceFile, specifier: string, { allowDeclarationFiles }?: {
4
- readonly allowDeclarationFiles?: boolean;
5
- }): SourceFile | undefined;
6
- export declare function findImportBindingForLocalName(sourceFile: SourceFile, localName: string): {
7
- readonly moduleSpecifier: string;
8
- readonly importedName: string;
9
- } | undefined;
10
- /**
11
- * `visited` keys on `${filePath}#${name}`, not path alone — aliasing can
12
- * legally re-export a different name from the same file — and doubles as
13
- * the cycle guard; `depth` backstops pathological non-cyclic chains.
14
- */
15
- export declare function resolveExportedVariable(file: SourceFile, exportedName: string, visited?: Set<string>, depth?: number): VariableDeclaration | undefined;
16
- /**
17
- * Any binding of the same name that is not a plain `const NAME = <init>`
18
- * (parameter, destructuring, loop variable, catch variable) shadows and ends
19
- * the search — it has no statically readable initializer.
20
- */
21
- export declare function findScopedVariableDeclaration(identifier: Node, name: string): VariableDeclaration | undefined;
@@ -1,180 +0,0 @@
1
- import { Node, SyntaxKind, ts } from "ts-morph";
2
- const MODULE_RESOLUTION_OPTIONS = {
3
- moduleResolution: ts.ModuleResolutionKind.Bundler,
4
- module: ts.ModuleKind.ESNext,
5
- target: ts.ScriptTarget.ESNext,
6
- };
7
- const MAX_RESOLUTION_DEPTH = 24;
8
- const DECLARATION_FILES_OK = { allowDeclarationFiles: true };
9
- export function resolveModuleFile(fromFile, specifier, { allowDeclarationFiles = false } = {}) {
10
- const project = fromFile.getProject();
11
- // The project's own host, not ts.sys: it honours an in-memory file system
12
- // (Designer) and exists outside Node.
13
- const resolved = ts.resolveModuleName(specifier, fromFile.getFilePath(), MODULE_RESOLUTION_OPTIONS, project.getModuleResolutionHost());
14
- const resolvedFileName = resolved.resolvedModule?.resolvedFileName;
15
- if (!resolvedFileName)
16
- return undefined;
17
- // A declaration file has no initializers to read. Callers that only need
18
- // `export declare const X: "literal"` types opt in (installed packages
19
- // resolve to dist/*.d.ts through their publishConfig exports).
20
- if (!allowDeclarationFiles && resolvedFileName.endsWith(".d.ts"))
21
- return undefined;
22
- return fromFile.getProject().addSourceFileAtPathIfExists(resolvedFileName);
23
- }
24
- export function findImportBindingForLocalName(sourceFile, localName) {
25
- for (const importDecl of sourceFile.getImportDeclarations()) {
26
- const named = importDecl
27
- .getNamedImports()
28
- .find((ni) => (ni.getAliasNode()?.getText() ?? ni.getName()) === localName);
29
- if (!named)
30
- continue;
31
- return {
32
- moduleSpecifier: importDecl.getModuleSpecifierValue(),
33
- importedName: named.getName(),
34
- };
35
- }
36
- return undefined;
37
- }
38
- /**
39
- * `visited` keys on `${filePath}#${name}`, not path alone — aliasing can
40
- * legally re-export a different name from the same file — and doubles as
41
- * the cycle guard; `depth` backstops pathological non-cyclic chains.
42
- */
43
- export function resolveExportedVariable(file, exportedName, visited = new Set(), depth = 0) {
44
- if (depth > MAX_RESOLUTION_DEPTH)
45
- return undefined;
46
- const key = `${file.getFilePath()}#${exportedName}`;
47
- if (visited.has(key))
48
- return undefined;
49
- visited.add(key);
50
- const directDecl = file.getVariableDeclaration(exportedName);
51
- if (directDecl?.getVariableStatement()?.hasExportKeyword())
52
- return directDecl;
53
- const namedExportMatch = resolveViaNamedExportSpecifier(file, exportedName, visited, depth);
54
- if (namedExportMatch)
55
- return namedExportMatch;
56
- return resolveViaStarExport(file, exportedName, visited, depth);
57
- }
58
- function resolveViaNamedExportSpecifier(file, exportedName, visited, depth) {
59
- for (const exportDecl of file.getExportDeclarations()) {
60
- const specifier = exportDecl
61
- .getNamedExports()
62
- .find((spec) => (spec.getAliasNode()?.getText() ?? spec.getName()) === exportedName);
63
- if (!specifier)
64
- continue;
65
- const originalName = specifier.getName();
66
- if (!exportDecl.hasModuleSpecifier()) {
67
- const resolved = resolveLocalExportBinding(file, originalName, visited, depth);
68
- if (resolved)
69
- return resolved;
70
- continue;
71
- }
72
- const moduleSpecifierValue = exportDecl.getModuleSpecifierValue();
73
- if (!moduleSpecifierValue)
74
- continue;
75
- const target = resolveModuleFile(file, moduleSpecifierValue, DECLARATION_FILES_OK);
76
- if (!target)
77
- continue;
78
- const resolved = resolveExportedVariable(target, originalName, visited, depth + 1);
79
- if (resolved)
80
- return resolved;
81
- }
82
- return undefined;
83
- }
84
- function resolveLocalExportBinding(file, originalName, visited, depth) {
85
- const localDecl = file.getVariableDeclaration(originalName);
86
- if (localDecl)
87
- return localDecl;
88
- const binding = findImportBindingForLocalName(file, originalName);
89
- if (!binding)
90
- return undefined;
91
- const target = resolveModuleFile(file, binding.moduleSpecifier, DECLARATION_FILES_OK);
92
- if (!target)
93
- return undefined;
94
- return resolveExportedVariable(target, binding.importedName, visited, depth + 1);
95
- }
96
- function resolveViaStarExport(file, exportedName, visited, depth) {
97
- for (const exportDecl of file.getExportDeclarations()) {
98
- if (!exportDecl.hasModuleSpecifier())
99
- continue;
100
- if (exportDecl.getNamedExports().length > 0)
101
- continue;
102
- if (exportDecl.getNamespaceExport())
103
- continue; // `export * as ns from "./m"` is not a re-export target.
104
- const moduleSpecifierValue = exportDecl.getModuleSpecifierValue();
105
- if (!moduleSpecifierValue)
106
- continue;
107
- const target = resolveModuleFile(file, moduleSpecifierValue, DECLARATION_FILES_OK);
108
- if (!target)
109
- continue;
110
- const resolved = resolveExportedVariable(target, exportedName, visited, depth + 1);
111
- if (resolved)
112
- return resolved;
113
- }
114
- return undefined;
115
- }
116
- /**
117
- * Any binding of the same name that is not a plain `const NAME = <init>`
118
- * (parameter, destructuring, loop variable, catch variable) shadows and ends
119
- * the search — it has no statically readable initializer.
120
- */
121
- export function findScopedVariableDeclaration(identifier, name) {
122
- for (const ancestor of [identifier, ...identifier.getAncestors()]) {
123
- if (declaresShadowingBinding(ancestor, name))
124
- return undefined;
125
- const statements = getDirectStatements(ancestor);
126
- if (!statements)
127
- continue;
128
- for (const stmt of statements) {
129
- const varStmt = stmt.asKind(SyntaxKind.VariableStatement);
130
- if (!varStmt)
131
- continue;
132
- for (const decl of varStmt.getDeclarationList().getDeclarations()) {
133
- const nameNode = decl.getNameNode();
134
- if (Node.isIdentifier(nameNode)) {
135
- if (nameNode.getText() === name)
136
- return decl;
137
- }
138
- else if (bindingNames(nameNode).includes(name)) {
139
- return undefined;
140
- }
141
- }
142
- }
143
- }
144
- return undefined;
145
- }
146
- function bindingNames(nameNode) {
147
- if (Node.isIdentifier(nameNode))
148
- return [nameNode.getText()];
149
- if (Node.isObjectBindingPattern(nameNode) || Node.isArrayBindingPattern(nameNode)) {
150
- return nameNode
151
- .getElements()
152
- .flatMap((element) => Node.isBindingElement(element) ? bindingNames(element.getNameNode()) : []);
153
- }
154
- return [];
155
- }
156
- function declaresShadowingBinding(node, name) {
157
- if (Node.isParametered(node)) {
158
- return node.getParameters().some((p) => bindingNames(p.getNameNode()).includes(name));
159
- }
160
- if (Node.isForOfStatement(node) || Node.isForInStatement(node) || Node.isForStatement(node)) {
161
- const initializer = node.getInitializer();
162
- return (initializer !== undefined &&
163
- Node.isVariableDeclarationList(initializer) &&
164
- initializer.getDeclarations().some((decl) => bindingNames(decl.getNameNode()).includes(name)));
165
- }
166
- if (Node.isCatchClause(node)) {
167
- const decl = node.getVariableDeclaration();
168
- return decl !== undefined && bindingNames(decl.getNameNode()).includes(name);
169
- }
170
- return false;
171
- }
172
- function getDirectStatements(node) {
173
- const block = node.asKind(SyntaxKind.Block);
174
- if (block)
175
- return block.getStatements();
176
- const sourceFile = node.asKind(SyntaxKind.SourceFile);
177
- if (sourceFile)
178
- return sourceFile.getStatements();
179
- return undefined;
180
- }
@@ -1,10 +0,0 @@
1
- import type { CallExpression, SourceFile } from "ts-morph";
2
- import type { DescribePattern, OptionalRequiresPattern, ReadsConfigPattern, RequiresPattern, SystemScopePattern, ToggleablePattern, UiHintsPattern } from "../patterns.ts";
3
- import { type ExtractOutput } from "./shared.ts";
4
- export declare function extractRequires(call: CallExpression, sourceFile: SourceFile): ExtractOutput<RequiresPattern>;
5
- export declare function extractOptionalRequires(call: CallExpression, sourceFile: SourceFile): ExtractOutput<OptionalRequiresPattern>;
6
- export declare function extractReadsConfig(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ReadsConfigPattern>;
7
- export declare function extractSystemScope(call: CallExpression, sourceFile: SourceFile): ExtractOutput<SystemScopePattern>;
8
- export declare function extractUiHints(call: CallExpression, sourceFile: SourceFile): ExtractOutput<UiHintsPattern>;
9
- export declare function extractDescribe(call: CallExpression, sourceFile: SourceFile): ExtractOutput<DescribePattern>;
10
- export declare function extractToggleable(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ToggleablePattern>;
@@ -1,81 +0,0 @@
1
- import { sourceLocationFromNode } from "../source-location.js";
2
- import { fail, ok, readBooleanProperty, readStringLiteralArgs, readVarargsOrArrayProp, } from "./shared.js";
3
- export function extractRequires(call, sourceFile) {
4
- const names = readVarargsOrArrayProp(call, "features");
5
- if (!names) {
6
- return fail("requires", sourceLocationFromNode(call, sourceFile), "expected positional string literals or { features: string[] }");
7
- }
8
- return ok({
9
- kind: "requires",
10
- source: sourceLocationFromNode(call, sourceFile),
11
- featureNames: names,
12
- });
13
- }
14
- export function extractOptionalRequires(call, sourceFile) {
15
- const names = readVarargsOrArrayProp(call, "features");
16
- if (!names) {
17
- return fail("optionalRequires", sourceLocationFromNode(call, sourceFile), "expected positional string literals or { features: string[] }");
18
- }
19
- return ok({
20
- kind: "optionalRequires",
21
- source: sourceLocationFromNode(call, sourceFile),
22
- featureNames: names,
23
- });
24
- }
25
- export function extractReadsConfig(call, sourceFile) {
26
- const keys = readVarargsOrArrayProp(call, "keys");
27
- if (!keys) {
28
- return fail("readsConfig", sourceLocationFromNode(call, sourceFile), "expected positional string literals or { keys: string[] }");
29
- }
30
- return ok({
31
- kind: "readsConfig",
32
- source: sourceLocationFromNode(call, sourceFile),
33
- qualifiedKeys: keys,
34
- });
35
- }
36
- export function extractSystemScope(call, sourceFile) {
37
- return ok({
38
- kind: "systemScope",
39
- source: sourceLocationFromNode(call, sourceFile),
40
- });
41
- }
42
- export function extractUiHints(call, sourceFile) {
43
- return ok({
44
- kind: "uiHints",
45
- source: sourceLocationFromNode(call, sourceFile),
46
- });
47
- }
48
- export function extractDescribe(call, sourceFile) {
49
- const args = readStringLiteralArgs(call);
50
- const text = args?.[0];
51
- if (text === undefined || args?.length !== 1) {
52
- return fail("describe", sourceLocationFromNode(call, sourceFile), "expected a single string literal");
53
- }
54
- // Mirrors the define-feature boot guard: whitespace-only describes throw
55
- // at boot — the AST path must reject them too, and store the TRIMMED
56
- // text so render output matches the runtime/manifest value.
57
- const trimmed = text.trim();
58
- if (trimmed.length === 0) {
59
- return fail("describe", sourceLocationFromNode(call, sourceFile), "must be a non-empty string");
60
- }
61
- return ok({
62
- kind: "describe",
63
- source: sourceLocationFromNode(call, sourceFile),
64
- text: trimmed,
65
- });
66
- }
67
- export function extractToggleable(call, sourceFile) {
68
- const arg = call.getArguments()[0];
69
- if (!arg) {
70
- return fail("toggleable", sourceLocationFromNode(call, sourceFile), "expected an object argument with a `default` boolean");
71
- }
72
- const defaultValue = readBooleanProperty(arg, "default");
73
- if (defaultValue === undefined) {
74
- return fail("toggleable", sourceLocationFromNode(call, sourceFile), "argument must be `{ default: true | false }`");
75
- }
76
- return ok({
77
- kind: "toggleable",
78
- source: sourceLocationFromNode(call, sourceFile),
79
- default: defaultValue,
80
- });
81
- }
@@ -1,7 +0,0 @@
1
- import type { CallExpression, SourceFile } from "ts-morph";
2
- import type { EntityPattern, NavPattern, RelationPattern, WorkspacePattern } from "../patterns.ts";
3
- import { type ExtractOutput } from "./shared.ts";
4
- export declare function extractEntity(call: CallExpression, sourceFile: SourceFile): ExtractOutput<EntityPattern>;
5
- export declare function extractRelation(call: CallExpression, sourceFile: SourceFile): ExtractOutput<RelationPattern>;
6
- export declare function extractNav(call: CallExpression, sourceFile: SourceFile): ExtractOutput<NavPattern>;
7
- export declare function extractWorkspace(call: CallExpression, sourceFile: SourceFile): ExtractOutput<WorkspacePattern>;