@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
@@ -46,3 +46,21 @@ export function mergeUpgradeSection(existing, section) {
46
46
  const others = sections.filter((candidate) => !candidate.startsWith(prefix));
47
47
  return [header, renderUpgradeSection(section), ...others].join("\n");
48
48
  }
49
+ /** Pure string match on the rendered `- [open] <id> · ` prefix, in every section; each id gets its own resolution. */
50
+ export function syncResolvedManualStatuses(content, resolved) {
51
+ const resolutionById = new Map(resolved.map((entry) => [entry.id, entry.resolution]));
52
+ if (resolutionById.size === 0)
53
+ return content;
54
+ const openPrefix = "- [open] ";
55
+ return content
56
+ .split("\n")
57
+ .map((line) => {
58
+ if (!line.startsWith(openPrefix))
59
+ return line;
60
+ const rest = line.slice(openPrefix.length);
61
+ const idEnd = rest.indexOf(" · ");
62
+ const resolution = idEnd === -1 ? undefined : resolutionById.get(rest.slice(0, idEnd));
63
+ return resolution === undefined ? line : `- [${resolution}] ${rest}`;
64
+ })
65
+ .join("\n");
66
+ }
@@ -0,0 +1,8 @@
1
+ export declare const CODEMOD_SUBDIR = "scripts/codemod";
2
+ export declare const CODEMOD_PACKAGE_NAME = "@cosmicdrift/kumiko-feature-ast";
3
+ export type UpgradeCliOut = {
4
+ readonly log: (line: string) => void;
5
+ readonly err: (line: string) => void;
6
+ };
7
+ export declare function findFeatureChangelogFiles(featuresDir: string): string[];
8
+ export declare function findCodemodScriptsRoot(repoRoot: string): string | null;
@@ -0,0 +1,63 @@
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { propertyOf } from "@cosmicdrift/kumiko-types/type-guards";
4
+ export const CODEMOD_SUBDIR = "scripts/codemod";
5
+ export const CODEMOD_PACKAGE_NAME = "@cosmicdrift/kumiko-feature-ast";
6
+ export function findFeatureChangelogFiles(featuresDir) {
7
+ if (!existsSync(featuresDir))
8
+ return [];
9
+ const files = [];
10
+ const features = readdirSync(featuresDir, { withFileTypes: true })
11
+ .filter((d) => d.isDirectory())
12
+ .map((d) => d.name);
13
+ for (const name of features) {
14
+ // Layout is detected per-package, not guessed from a naming convention:
15
+ // enterprise packages keep changes.json under src/, framework's
16
+ // bundled-features keep it flat. A name-prefix heuristic (e.g. "ai-*")
17
+ // silently drops packages that don't match it.
18
+ const srcLayout = join(featuresDir, name, "src", "changes.json");
19
+ const flatLayout = join(featuresDir, name, "changes.json");
20
+ const changelogPath = existsSync(srcLayout) ? srcLayout : flatLayout;
21
+ if (existsSync(changelogPath))
22
+ files.push(changelogPath);
23
+ }
24
+ return files;
25
+ }
26
+ // Consumer-facing codemod scripts ship inside the published
27
+ // @cosmicdrift/kumiko-feature-ast package (src/scripts/codemod), not at the
28
+ // git repo root — only the installed package path exists in a consumer's
29
+ // node_modules after a plain npm/bun install.
30
+ export function findCodemodScriptsRoot(repoRoot) {
31
+ const local = join(repoRoot, "packages/feature-ast/src");
32
+ if (existsSync(join(local, CODEMOD_SUBDIR))) {
33
+ // If package.json exists, require it to be kumiko-feature-ast so a generic
34
+ // monorepo `packages/feature-ast` cannot shadow the installed package.
35
+ // Missing package.json (test fixtures / incomplete trees) keeps prior behavior.
36
+ const pkgPath = join(repoRoot, "packages/feature-ast/package.json");
37
+ if (existsSync(pkgPath)) {
38
+ try {
39
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
40
+ if (propertyOf(pkg, "name") === CODEMOD_PACKAGE_NAME)
41
+ return local;
42
+ // wrong name → fall through
43
+ }
44
+ catch {
45
+ // unreadable → fall through
46
+ }
47
+ }
48
+ else {
49
+ return local;
50
+ }
51
+ }
52
+ let dir = repoRoot;
53
+ for (let i = 0; i < 10; i++) {
54
+ const nmSrc = join(dir, "node_modules", CODEMOD_PACKAGE_NAME, "src");
55
+ if (existsSync(join(nmSrc, CODEMOD_SUBDIR)))
56
+ return nmSrc;
57
+ const parent = join(dir, "..");
58
+ if (parent === dir)
59
+ break;
60
+ dir = parent;
61
+ }
62
+ return null;
63
+ }
@@ -1,24 +1,7 @@
1
- export type UpgradeCliOut = {
2
- readonly log: (line: string) => void;
3
- readonly err: (line: string) => void;
4
- };
5
- export declare function findFeatureChangelogFiles(featuresDir: string): string[];
1
+ import { type UpgradeCliOut } from "./upgrade-cli-internals.ts";
6
2
  export declare function findPackageChangelogFiles(cwd: string): string[];
7
3
  export declare function findFeaturesDirs(cwd: string): string[];
8
- export declare function findCodemodScriptsRoot(repoRoot: string): string | null;
9
4
  export declare function resolveCodemodScript(repoRoot: string, codemodField: string | undefined): string | null;
10
- export type UpgradeMarkerManual = {
11
- readonly id: string;
12
- readonly version: string;
13
- readonly title: string;
14
- };
15
- export type ManualResolution = "migrated" | "not-applicable";
16
- export type UpgradeMarkerResolvedManual = UpgradeMarkerManual & {
17
- readonly resolution: ManualResolution;
18
- readonly reason: string;
19
- readonly resolvedAt: string;
20
- };
21
- export declare function manualEntryId(version: string, title: string): string;
22
5
  export declare function runUpgradeCli(argv: readonly string[], cwd: string, out: UpgradeCliOut, options?: {
23
6
  readonly repoRoot?: string;
24
7
  }): Promise<number>;
@@ -1,14 +1,13 @@
1
- import { createHash } from "node:crypto";
2
1
  import { existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, statSync, writeFileSync, } from "node:fs";
3
2
  import { dirname, isAbsolute, join, relative, resolve } from "node:path";
4
- import { propertyOf } from "@cosmicdrift/kumiko-types/type-guards";
5
3
  import { getFlag, getStringFlag, parseArgs } from "./arg-parser.js";
6
- import { compareVersions, filterEntriesAfter, parseFeatureChangelog, sortEntries, } from "./engine/index.js";
4
+ import { sortEntries } from "./engine/feature-changelog.js";
5
+ import { compareVersions, filterEntriesAfter, parseFeatureChangelog, } from "./engine/index.js";
7
6
  import { ensureTemporalPolyfill } from "./time/index.js";
8
- import { mergeUpgradeSection } from "./upgrade-changelog.js";
9
- const SEMVER_RE = /^\d+\.\d+\.\d+$/;
7
+ import { mergeUpgradeSection, syncResolvedManualStatuses, } from "./upgrade-changelog.js";
8
+ import { CODEMOD_SUBDIR, findCodemodScriptsRoot, findFeatureChangelogFiles, } from "./upgrade-cli-internals.js";
9
+ import { dedupeManualById, manualEntryId, parseStoredMarker, SEMVER_RE, } from "./upgrade-marker-parse.js";
10
10
  const SEMVER_CORE_RE = /^(\d+\.\d+\.\d+)(?:-[0-9A-Za-z.-]+)?$/;
11
- const CODEMOD_SUBDIR = "scripts/codemod";
12
11
  function readPackageJsonVersion(packageJsonPath) {
13
12
  if (!existsSync(packageJsonPath))
14
13
  return null;
@@ -86,26 +85,6 @@ function readChangelogFile(filePath) {
86
85
  return [];
87
86
  }
88
87
  }
89
- export function findFeatureChangelogFiles(featuresDir) {
90
- if (!existsSync(featuresDir))
91
- return [];
92
- const files = [];
93
- const features = readdirSync(featuresDir, { withFileTypes: true })
94
- .filter((d) => d.isDirectory())
95
- .map((d) => d.name);
96
- for (const name of features) {
97
- // Layout is detected per-package, not guessed from a naming convention:
98
- // enterprise packages keep changes.json under src/, framework's
99
- // bundled-features keep it flat. A name-prefix heuristic (e.g. "ai-*")
100
- // silently drops packages that don't match it.
101
- const srcLayout = join(featuresDir, name, "src", "changes.json");
102
- const flatLayout = join(featuresDir, name, "changes.json");
103
- const changelogPath = existsSync(srcLayout) ? srcLayout : flatLayout;
104
- if (existsSync(changelogPath))
105
- files.push(changelogPath);
106
- }
107
- return files;
108
- }
109
88
  function collectChangelogs(featuresDir) {
110
89
  return findFeatureChangelogFiles(featuresDir).flatMap(readChangelogFile);
111
90
  }
@@ -201,43 +180,9 @@ export function findFeaturesDirs(cwd) {
201
180
  return dirs;
202
181
  }
203
182
  // Consumer-facing codemod scripts ship inside the published
204
- // @cosmicdrift/kumiko-framework package (src/scripts/codemod), not at the
183
+ // @cosmicdrift/kumiko-feature-ast package (src/scripts/codemod), not at the
205
184
  // git repo root — only the installed package path exists in a consumer's
206
185
  // node_modules after a plain npm/bun install.
207
- export function findCodemodScriptsRoot(repoRoot) {
208
- const local = join(repoRoot, "packages/framework/src");
209
- if (existsSync(join(local, CODEMOD_SUBDIR))) {
210
- // If package.json exists, require it to be kumiko-framework so a generic
211
- // monorepo `packages/framework` cannot shadow the installed package.
212
- // Missing package.json (test fixtures / incomplete trees) keeps prior behavior.
213
- const pkgPath = join(repoRoot, "packages/framework/package.json");
214
- if (existsSync(pkgPath)) {
215
- try {
216
- const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
217
- if (propertyOf(pkg, "name") === "@cosmicdrift/kumiko-framework")
218
- return local;
219
- // wrong name → fall through
220
- }
221
- catch {
222
- // unreadable → fall through
223
- }
224
- }
225
- else {
226
- return local;
227
- }
228
- }
229
- let dir = repoRoot;
230
- for (let i = 0; i < 10; i++) {
231
- const nmSrc = join(dir, "node_modules/@cosmicdrift/kumiko-framework/src");
232
- if (existsSync(join(nmSrc, CODEMOD_SUBDIR)))
233
- return nmSrc;
234
- const parent = join(dir, "..");
235
- if (parent === dir)
236
- break;
237
- dir = parent;
238
- }
239
- return null;
240
- }
241
186
  // Resolves a changes.json `codemod` field to an absolute script path,
242
187
  // refusing anything that would escape scripts/codemod/ (path traversal,
243
188
  // absolute paths, symlinks pointing outward) or that isn't a real .ts file.
@@ -304,13 +249,7 @@ function hasCodemod(e) {
304
249
  function needsManualMigration(e) {
305
250
  return !hasCodemod(e) || e.manualAfterCodemod === true;
306
251
  }
307
- const MANUAL_ID_HASH_LENGTH = 8;
308
252
  const MAX_RESOLVE_REASON_LENGTH = 500;
309
- // The hash tells apart entries that share a version (studio has several at 0.341.0).
310
- export function manualEntryId(version, title) {
311
- const hash = createHash("sha256").update(title).digest("hex").slice(0, MANUAL_ID_HASH_LENGTH);
312
- return `${version}:${hash}`;
313
- }
314
253
  // Breaking entries that need hand work carry the id `kumiko-upgrade --resolve` takes.
315
254
  function manualIdOf(entry) {
316
255
  return entry.type === "breaking" && needsManualMigration(entry)
@@ -324,15 +263,6 @@ function toMarkerManual(entry) {
324
263
  title: entry.title,
325
264
  };
326
265
  }
327
- function dedupeManualById(entries) {
328
- const seen = new Set();
329
- return entries.filter((entry) => {
330
- if (seen.has(entry.id))
331
- return false;
332
- seen.add(entry.id);
333
- return true;
334
- });
335
- }
336
266
  // Open manual items survive every marker write until --resolve moves them.
337
267
  function carryOverManual(previous, newManual) {
338
268
  const resolvedIds = new Set(previous.resolvedManual.map((entry) => entry.id));
@@ -360,64 +290,6 @@ function writeUpgradeMarker(targetDir, marker) {
360
290
  writeFileSync(join(dir, "upgrade-state.json"), `${JSON.stringify(marker, null, 2)}\n`, "utf-8");
361
291
  }
362
292
  const NO_CARRY = { codemods: [], pendingManual: [], resolvedManual: [] };
363
- function isRecord(value) {
364
- return typeof value === "object" && value !== null && !Array.isArray(value);
365
- }
366
- function parseManualEntry(value) {
367
- if (!isRecord(value))
368
- return null;
369
- const { id, version, title } = value;
370
- if (typeof version !== "string" || typeof title !== "string")
371
- return null;
372
- return {
373
- id: typeof id === "string" && id.length > 0 ? id : manualEntryId(version, title),
374
- version,
375
- title,
376
- };
377
- }
378
- function parseResolvedEntry(value) {
379
- const base = parseManualEntry(value);
380
- if (base === null || !isRecord(value))
381
- return null;
382
- const { resolution, reason, resolvedAt } = value;
383
- if (resolution !== "migrated" && resolution !== "not-applicable")
384
- return null;
385
- if (typeof reason !== "string" || typeof resolvedAt !== "string")
386
- return null;
387
- return { ...base, resolution, reason, resolvedAt };
388
- }
389
- function parseList(value, parseEntry) {
390
- if (value === undefined)
391
- return [];
392
- if (!Array.isArray(value))
393
- return null;
394
- const parsed = value.map(parseEntry);
395
- return parsed.every((entry) => entry !== null) ? parsed : null;
396
- }
397
- function isMarkerCodemod(value) {
398
- return (isRecord(value) &&
399
- typeof value["version"] === "string" &&
400
- typeof value["codemod"] === "string" &&
401
- typeof value["title"] === "string");
402
- }
403
- function parseStoredMarker(raw) {
404
- if (!isRecord(raw))
405
- return null;
406
- const { version, appliedAt, codemods } = raw;
407
- if (typeof version !== "string" || !SEMVER_RE.test(version))
408
- return null;
409
- const pendingManual = parseList(raw["pendingManual"], parseManualEntry);
410
- const resolvedManual = parseList(raw["resolvedManual"], parseResolvedEntry);
411
- if (pendingManual === null || resolvedManual === null)
412
- return null;
413
- return {
414
- version,
415
- appliedAt: typeof appliedAt === "string" ? appliedAt : Temporal.Now.instant().toString(),
416
- codemods: Array.isArray(codemods) ? codemods.filter(isMarkerCodemod) : [],
417
- pendingManual: dedupeManualById(pendingManual),
418
- resolvedManual: dedupeManualById(resolvedManual),
419
- };
420
- }
421
293
  // A missing marker is a bootstrap app that never ran `--apply`; an
422
294
  // existing but unreadable one must not silently fall back to the installed
423
295
  // version, or a bare `--apply` would skip every codemod in between.
@@ -478,14 +350,15 @@ function manualWithStatus(manualEntries, previous) {
478
350
  function writeUpgradeChangelog(targetDir, bump) {
479
351
  const path = join(targetDir, "CHANGELOG.md");
480
352
  const existing = existsSync(path) ? readFileSync(path, "utf-8") : undefined;
481
- writeFileSync(path, mergeUpgradeSection(existing, {
353
+ const merged = mergeUpgradeSection(existing, {
482
354
  from: bump.from,
483
355
  to: bump.to,
484
356
  date: Temporal.Now.instant().toString().slice(0, 10),
485
357
  breaking: bump.pending.filter((entry) => entry.type === "breaking"),
486
358
  manual: manualWithStatus(bump.manualEntries, bump.previous),
487
359
  codemods: bump.ran,
488
- }), "utf-8");
360
+ });
361
+ writeFileSync(path, syncResolvedManualStatuses(merged, bump.previous.resolvedManual), "utf-8");
489
362
  }
490
363
  // Records the codemods that already wrote files before a later one failed, so
491
364
  // a re-run resumes after them instead of replaying non-idempotent codemods.
@@ -572,7 +445,7 @@ markerVersion, previous, fromVersion, manualDetails) {
572
445
  }
573
446
  const codemodScriptsRoot = findCodemodScriptsRoot(repoRoot);
574
447
  if (codemodScriptsRoot === null) {
575
- out.err(` ✗ could not locate @cosmicdrift/kumiko-framework/src/scripts/codemod — is the framework installed? searched from ${repoRoot} upward`);
448
+ out.err(` ✗ could not locate @cosmicdrift/kumiko-feature-ast/src/scripts/codemod — is @cosmicdrift/kumiko-cli or @cosmicdrift/kumiko-dev-server installed? searched from ${repoRoot} upward`);
576
449
  return 1;
577
450
  }
578
451
  const ran = [];
@@ -697,6 +570,11 @@ function resolveManualMigrations(out, args, targetDir) {
697
570
  ...(remaining.length > 0 && { pendingManual: remaining }),
698
571
  resolvedManual,
699
572
  });
573
+ const changelogPath = join(targetDir, "CHANGELOG.md");
574
+ if (existsSync(changelogPath)) {
575
+ const content = readFileSync(changelogPath, "utf-8");
576
+ writeFileSync(changelogPath, syncResolvedManualStatuses(content, resolvedManual), "utf-8");
577
+ }
700
578
  out.log("");
701
579
  out.log(` ✓ Marked ${newlyResolved.length} manual migration(s) as ${resolution}:`);
702
580
  for (const entry of newlyResolved) {
@@ -862,6 +740,18 @@ function logNonBreakingSection(out, heading, entries, verbose, showCodemod) {
862
740
  }
863
741
  out.log("");
864
742
  }
743
+ function logApplyHint(out, plan) {
744
+ const { markerRead, targetInstalledVersion } = plan;
745
+ const markerBehindInstalled = markerRead.kind === "ok" &&
746
+ targetInstalledVersion !== null &&
747
+ compareVersions(markerRead.version, targetInstalledVersion) < 0;
748
+ // skip: nothing differs between marker and installed version, so there is nothing to record.
749
+ if (plan.pending.length === 0 && !markerBehindInstalled)
750
+ return;
751
+ out.log(" Nothing is recorded yet: the upgrade CHANGELOG and the marker are only");
752
+ out.log(" written by --apply (add --dry-run to preview without writing).");
753
+ out.log("");
754
+ }
865
755
  function reportUpgradeText(out, plan, verbose) {
866
756
  const { pending } = plan;
867
757
  const breaking = pending.filter((e) => e.type === "breaking");
@@ -873,6 +763,7 @@ function reportUpgradeText(out, plan, verbose) {
873
763
  if (pending.length === 0) {
874
764
  out.log(" ✓ Nothing new since your version.");
875
765
  out.log("");
766
+ logApplyHint(out, plan);
876
767
  logOpenManual(out, openManual, manualDetails);
877
768
  return 0;
878
769
  }
@@ -884,6 +775,7 @@ function reportUpgradeText(out, plan, verbose) {
884
775
  out.log(" Run with --verbose for full migration details.");
885
776
  out.log("");
886
777
  }
778
+ logApplyHint(out, plan);
887
779
  logOpenManual(out, openManual, manualDetails);
888
780
  return 0;
889
781
  }
@@ -0,0 +1,32 @@
1
+ export declare const SEMVER_RE: RegExp;
2
+ export type UpgradeMarkerCodemod = {
3
+ readonly version: string;
4
+ readonly codemod: string;
5
+ readonly title: string;
6
+ };
7
+ export type UpgradeMarkerManual = {
8
+ readonly id: string;
9
+ readonly version: string;
10
+ readonly title: string;
11
+ };
12
+ export type ManualResolution = "migrated" | "not-applicable";
13
+ export type UpgradeMarkerResolvedManual = UpgradeMarkerManual & {
14
+ readonly resolution: ManualResolution;
15
+ readonly reason: string;
16
+ readonly resolvedAt: string;
17
+ };
18
+ export declare function manualEntryId(version: string, title: string): string;
19
+ export declare function dedupeManualById<T extends {
20
+ readonly id: string;
21
+ }>(entries: readonly T[]): readonly T[];
22
+ export type MarkerCarry = {
23
+ readonly codemods: readonly UpgradeMarkerCodemod[];
24
+ readonly pendingManual: readonly UpgradeMarkerManual[];
25
+ readonly resolvedManual: readonly UpgradeMarkerResolvedManual[];
26
+ };
27
+ export type StoredMarker = MarkerCarry & {
28
+ readonly version: string;
29
+ readonly appliedAt: string;
30
+ readonly codemods: readonly UpgradeMarkerCodemod[];
31
+ };
32
+ export declare function parseStoredMarker(raw: unknown): StoredMarker | null;
@@ -0,0 +1,73 @@
1
+ import { createHash } from "node:crypto";
2
+ import { isPlainObject } from "@cosmicdrift/kumiko-types/type-guards";
3
+ export const SEMVER_RE = /^\d+\.\d+\.\d+$/;
4
+ const MANUAL_ID_HASH_LENGTH = 8;
5
+ // The hash tells apart entries that share a version (studio has several at 0.341.0).
6
+ export function manualEntryId(version, title) {
7
+ const hash = createHash("sha256").update(title).digest("hex").slice(0, MANUAL_ID_HASH_LENGTH);
8
+ return `${version}:${hash}`;
9
+ }
10
+ export function dedupeManualById(entries) {
11
+ const seen = new Set();
12
+ return entries.filter((entry) => {
13
+ if (seen.has(entry.id))
14
+ return false;
15
+ seen.add(entry.id);
16
+ return true;
17
+ });
18
+ }
19
+ function parseManualEntry(value) {
20
+ if (!isPlainObject(value))
21
+ return null;
22
+ const { id, version, title } = value;
23
+ if (typeof version !== "string" || typeof title !== "string")
24
+ return null;
25
+ return {
26
+ id: typeof id === "string" && id.length > 0 ? id : manualEntryId(version, title),
27
+ version,
28
+ title,
29
+ };
30
+ }
31
+ function parseResolvedEntry(value) {
32
+ const base = parseManualEntry(value);
33
+ if (base === null || !isPlainObject(value))
34
+ return null;
35
+ const { resolution, reason, resolvedAt } = value;
36
+ if (resolution !== "migrated" && resolution !== "not-applicable")
37
+ return null;
38
+ if (typeof reason !== "string" || typeof resolvedAt !== "string")
39
+ return null;
40
+ return { ...base, resolution, reason, resolvedAt };
41
+ }
42
+ function parseList(value, parseEntry) {
43
+ if (value === undefined)
44
+ return [];
45
+ if (!Array.isArray(value))
46
+ return null;
47
+ const parsed = value.map(parseEntry);
48
+ return parsed.every((entry) => entry !== null) ? parsed : null;
49
+ }
50
+ function isMarkerCodemod(value) {
51
+ return (isPlainObject(value) &&
52
+ typeof value["version"] === "string" &&
53
+ typeof value["codemod"] === "string" &&
54
+ typeof value["title"] === "string");
55
+ }
56
+ export function parseStoredMarker(raw) {
57
+ if (!isPlainObject(raw))
58
+ return null;
59
+ const { version, appliedAt, codemods } = raw;
60
+ if (typeof version !== "string" || !SEMVER_RE.test(version))
61
+ return null;
62
+ const pendingManual = parseList(raw["pendingManual"], parseManualEntry);
63
+ const resolvedManual = parseList(raw["resolvedManual"], parseResolvedEntry);
64
+ if (pendingManual === null || resolvedManual === null)
65
+ return null;
66
+ return {
67
+ version,
68
+ appliedAt: typeof appliedAt === "string" ? appliedAt : Temporal.Now.instant().toString(),
69
+ codemods: Array.isArray(codemods) ? codemods.filter(isMarkerCodemod) : [],
70
+ pendingManual: dedupeManualById(pendingManual),
71
+ resolvedManual: dedupeManualById(resolvedManual),
72
+ };
73
+ }
@@ -0,0 +1,6 @@
1
+ export type OptionalPeer = {
2
+ readonly name: string;
3
+ readonly range: string;
4
+ readonly requiredBy: string;
5
+ };
6
+ export declare function importOptionalPeer<T>(peer: OptionalPeer, importer: () => Promise<T>): Promise<T>;
@@ -0,0 +1,19 @@
1
+ import { errorCodeOf } from "@cosmicdrift/kumiko-types/type-guards";
2
+ // Bun and Node both report a missing package as ERR_MODULE_NOT_FOUND with
3
+ // "Cannot find package '<name>' imported from ...". A peer's own missing
4
+ // dependency carries a different name, so it must not be mistaken for the peer.
5
+ function isPeerItselfMissing(error, peerName) {
6
+ return (errorCodeOf(error) === "ERR_MODULE_NOT_FOUND" &&
7
+ error instanceof Error &&
8
+ error.message.includes(`'${peerName}'`));
9
+ }
10
+ export async function importOptionalPeer(peer, importer) {
11
+ try {
12
+ return await importer();
13
+ }
14
+ catch (error) {
15
+ if (!isPeerItselfMissing(error, peer.name))
16
+ throw error;
17
+ throw new Error(`${peer.name} is not installed. ${peer.requiredBy} needs it as a peer dependency: bun add ${peer.name}@${peer.range}`, { cause: error });
18
+ }
19
+ }
@@ -1,9 +1,6 @@
1
1
  export { assertUnreachable } from "./assert.ts";
2
- export { toSnakeCase } from "./case.ts";
3
- export { compareByCodepoint } from "./compare.ts";
4
- export { readPositiveIntEnv } from "./env-parse.ts";
5
2
  export { generateDeterministicId, generateId } from "./ids.ts";
6
3
  export { isPlainObject } from "./is-plain-object.ts";
7
4
  export { parseStringArrayJson } from "./parse-string-array-json.ts";
8
- export { parseJsonOrThrow, parseJsonSafe, stringifyJson } from "./safe-json.ts";
5
+ export { parseJsonOrThrow, parseJsonSafe } from "./safe-json.ts";
9
6
  export { parseRoles } from "./serialization.ts";
@@ -1,9 +1,6 @@
1
1
  export { assertUnreachable } from "./assert.js";
2
- export { toSnakeCase } from "./case.js";
3
- export { compareByCodepoint } from "./compare.js";
4
- export { readPositiveIntEnv } from "./env-parse.js";
5
2
  export { generateDeterministicId, generateId } from "./ids.js";
6
3
  export { isPlainObject } from "./is-plain-object.js";
7
4
  export { parseStringArrayJson } from "./parse-string-array-json.js";
8
- export { parseJsonOrThrow, parseJsonSafe, stringifyJson } from "./safe-json.js";
5
+ export { parseJsonOrThrow, parseJsonSafe } from "./safe-json.js";
9
6
  export { parseRoles } from "./serialization.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-framework",
3
- "version": "0.388.0",
3
+ "version": "0.390.0",
4
4
  "description": "Framework core — engine, pipeline, API, DB, and every other bit that makes Kumiko go.",
5
5
  "license": "MIT",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -25,9 +25,9 @@
25
25
  "type": "module",
26
26
  "kumiko": {
27
27
  "runtime": "runtime",
28
- "bunOnlyExports": [
29
- "./engine/codemod"
30
- ]
28
+ "optionalPeerExports": {
29
+ "./search/meilisearch": "meilisearch"
30
+ }
31
31
  },
32
32
  "exports": {
33
33
  "./compliance": {
@@ -60,10 +60,6 @@
60
60
  "types": "./dist/env/dry-run.d.ts",
61
61
  "default": "./dist/env/dry-run.js"
62
62
  },
63
- "./engine/codemod": {
64
- "types": "./dist/engine/codemod/index.d.ts",
65
- "default": "./dist/engine/codemod/index.js"
66
- },
67
63
  "./errors": {
68
64
  "types": "./dist/errors/index.d.ts",
69
65
  "default": "./dist/errors/index.js"
@@ -176,6 +172,10 @@
176
172
  "types": "./dist/api/request-context.d.ts",
177
173
  "default": "./dist/api/request-context.js"
178
174
  },
175
+ "./internal/row-level-security": {
176
+ "types": "./dist/internal/row-level-security.d.ts",
177
+ "default": "./dist/internal/row-level-security.js"
178
+ },
179
179
  "./internal/stack-support": {
180
180
  "types": "./dist/internal/stack-support.d.ts",
181
181
  "default": "./dist/internal/stack-support.js"
@@ -199,24 +199,32 @@
199
199
  "./package.json": "./package.json"
200
200
  },
201
201
  "dependencies": {
202
- "@cosmicdrift/kumiko-types": "0.388.0",
202
+ "@cosmicdrift/kumiko-types": "0.390.0",
203
203
  "bullmq": "^5.76.7",
204
- "bun-types": "^1.3.13",
205
204
  "hono": "^4.13.1",
206
205
  "i18next": "^26.1.0",
207
206
  "ioredis": "^5.10.1",
208
207
  "jose": "^6.2.3",
209
- "meilisearch": "^0.58.0",
210
208
  "pino": "^10.3.1",
211
- "postgres": "npm:@bender0oo0/postgres@3.4.9-kumiko.2",
212
209
  "temporal-polyfill": "^0.3.2",
213
- "ts-morph": "^28.0.0",
214
210
  "uuid": "^14.0.0",
211
+ "write-excel-file": "^4.1.1",
215
212
  "zod": "^4.4.3"
216
213
  },
214
+ "peerDependencies": {
215
+ "bun-types": "^1.4.4",
216
+ "meilisearch": "^0.58.0"
217
+ },
218
+ "peerDependenciesMeta": {
219
+ "meilisearch": {
220
+ "optional": true
221
+ }
222
+ },
217
223
  "devDependencies": {
218
- "@cosmicdrift/kumiko-testing": "0.388.0",
219
- "bun-types": "^1.3.13",
224
+ "@cosmicdrift/kumiko-testing": "0.390.0",
225
+ "bun-types": "^1.4.4",
226
+ "fflate": "^0.8.2",
227
+ "meilisearch": "^0.58.0",
220
228
  "pino-pretty": "^13.1.3"
221
229
  },
222
230
  "publishConfig": {
@@ -253,10 +261,6 @@
253
261
  "types": "./dist/env/dry-run.d.ts",
254
262
  "default": "./dist/env/dry-run.js"
255
263
  },
256
- "./engine/codemod": {
257
- "types": "./dist/engine/codemod/index.d.ts",
258
- "default": "./dist/engine/codemod/index.js"
259
- },
260
264
  "./errors": {
261
265
  "types": "./dist/errors/index.d.ts",
262
266
  "default": "./dist/errors/index.js"
@@ -369,6 +373,10 @@
369
373
  "types": "./dist/api/request-context.d.ts",
370
374
  "default": "./dist/api/request-context.js"
371
375
  },
376
+ "./internal/row-level-security": {
377
+ "types": "./dist/internal/row-level-security.d.ts",
378
+ "default": "./dist/internal/row-level-security.js"
379
+ },
372
380
  "./internal/stack-support": {
373
381
  "types": "./dist/internal/stack-support.d.ts",
374
382
  "default": "./dist/internal/stack-support.js"
@@ -397,7 +405,6 @@
397
405
  "kumiko-es-tables.json",
398
406
  "presets",
399
407
  "src/changes.json",
400
- "src/scripts/codemod",
401
408
  "README.md",
402
409
  "LICENSE",
403
410
  "AGENTS.md",