@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.
- package/AGENTS.md +12 -4
- package/README.md +1 -1
- package/agents/examples/apex-surface-auth.md +2 -3
- package/agents/examples/api-worker-split.md +9 -2
- package/agents/examples/auth-claims.md +1 -1
- package/agents/examples/cross-feature-events.md +12 -12
- package/agents/examples/crypto-shredding-hr.md +2 -2
- package/agents/examples/encrypted-tenant-config.md +1 -1
- package/agents/examples/error-contract.md +12 -7
- package/agents/examples/event-sourcing.md +29 -29
- package/agents/examples/files-post-processing.md +10 -8
- package/agents/examples/golden-path.md +13 -1
- package/agents/examples/inbound-mail-triage.md +1 -0
- package/agents/examples/lane-routing.md +2 -1
- package/agents/examples/legal-pages.md +2 -2
- package/agents/examples/lifecycle-hooks.md +55 -2
- package/agents/examples/list-table-options.md +466 -0
- package/agents/examples/managed-config.md +4 -4
- package/agents/examples/managed-pages.md +1 -1
- package/agents/examples/pdf-audit-export.md +4 -2
- package/agents/examples/relations.md +19 -4
- package/agents/examples/search.md +4 -4
- package/agents/examples/secrets-demo.md +9 -6
- package/agents/examples/state-machine.md +5 -4
- package/agents/examples/tenant-isolation.md +73 -1
- package/agents/examples/tenant-settings.md +1 -1
- package/agents/examples/user-data-rights.md +3 -6
- package/agents/examples/workflow-engine.md +53 -47
- package/agents/examples.md +5 -4
- package/agents/features.md +1 -1
- package/agents/widgets.md +1 -0
- package/dist/api/api-constants.d.ts +1 -0
- package/dist/api/api-constants.js +2 -0
- package/dist/api/auth-middleware.js +1 -1
- package/dist/api/auth-routes-invite.js +2 -1
- package/dist/api/auth-routes-shared.d.ts +2 -0
- package/dist/api/auth-routes-shared.js +5 -0
- package/dist/api/client-error-route.js +2 -3
- package/dist/api/entity-read-access.d.ts +4 -1
- package/dist/api/entity-read-access.js +14 -0
- package/dist/api/export/export-cells-reference.d.ts +9 -0
- package/dist/api/export/export-cells-reference.js +21 -0
- package/dist/api/export/export-cells.d.ts +11 -0
- package/dist/api/export/export-cells.js +136 -0
- package/dist/api/export/export-ciphertext-guard.d.ts +2 -0
- package/dist/api/export/export-ciphertext-guard.js +27 -0
- package/dist/api/export/export-columns.d.ts +31 -0
- package/dist/api/export/export-columns.js +85 -0
- package/dist/api/export/export-errors.d.ts +4 -0
- package/dist/api/export/export-errors.js +14 -0
- package/dist/api/export/export-route.d.ts +4 -0
- package/dist/api/export/export-route.js +75 -0
- package/dist/api/export/export-rows.d.ts +13 -0
- package/dist/api/export/export-rows.js +62 -0
- package/dist/api/export/export-screen.d.ts +13 -0
- package/dist/api/export/export-screen.js +47 -0
- package/dist/api/export/export-xlsx-writer.d.ts +4 -0
- package/dist/api/export/export-xlsx-writer.js +21 -0
- package/dist/api/extra-route.d.ts +7 -1
- package/dist/api/index.d.ts +23 -27
- package/dist/api/index.js +13 -15
- package/dist/api/jwt.js +1 -1
- package/dist/api/observability-middleware.d.ts +1 -1
- package/dist/api/observability-middleware.js +2 -1
- package/dist/api/pii-leak-guard.d.ts +3 -0
- package/dist/api/pii-leak-guard.js +3 -2
- package/dist/api/request-context-internals.d.ts +31 -0
- package/dist/api/request-context-internals.js +11 -0
- package/dist/api/request-context-scopes.d.ts +14 -0
- package/dist/api/request-context-scopes.js +69 -0
- package/dist/api/request-context.d.ts +1 -40
- package/dist/api/request-context.js +22 -51
- package/dist/api/request-id-middleware.d.ts +1 -1
- package/dist/api/route-registrars.d.ts +2 -1
- package/dist/api/route-registrars.js +1 -1
- package/dist/api/routes.d.ts +16 -0
- package/dist/api/routes.js +9 -5
- package/dist/api/server-boot-checks.d.ts +1 -1
- package/dist/api/server-boot-checks.js +2 -2
- package/dist/api/server-event-dispatcher.d.ts +6 -1
- package/dist/api/server-event-dispatcher.js +3 -4
- package/dist/api/server-extra-routes.d.ts +1 -1
- package/dist/api/server-extra-routes.js +5 -1
- package/dist/api/server-middleware.js +3 -1
- package/dist/api/server-routes.d.ts +3 -2
- package/dist/api/server-routes.js +8 -2
- package/dist/api/server-wiring.js +8 -4
- package/dist/api/server.d.ts +2 -1
- package/dist/api/sse-route.d.ts +3 -1
- package/dist/api/sse-route.js +11 -1
- package/dist/api/tenant-scoped-secrets.d.ts +2 -0
- package/dist/api/tenant-scoped-secrets.js +13 -0
- package/dist/api/websocket-route.d.ts +1 -1
- package/dist/auth/index.d.ts +0 -1
- package/dist/auth/roles.d.ts +0 -5
- package/dist/compliance/duration-spec.d.ts +0 -1
- package/dist/compliance/duration-spec.js +0 -5
- package/dist/compliance/index.d.ts +4 -4
- package/dist/compliance/index.js +2 -2
- package/dist/compliance/profiles.d.ts +0 -15
- package/dist/compliance/profiles.js +0 -23
- package/dist/config/index.d.ts +11 -9
- package/dist/config/index.js +13 -1
- package/dist/config/internals.d.ts +9 -0
- package/dist/config/internals.js +1 -0
- package/dist/consumer-cli-internals.d.ts +4 -0
- package/dist/consumer-cli-internals.js +1 -0
- package/dist/consumer-cli.d.ts +1 -4
- package/dist/consumer-cli.js +5 -1
- package/dist/crypto/event-pii.js +1 -1
- package/dist/crypto/index.d.ts +8 -9
- package/dist/crypto/index.js +7 -8
- package/dist/crypto/pg-kms-adapter.d.ts +1 -0
- package/dist/crypto/pg-kms-adapter.js +17 -18
- package/dist/db/aggregate-sql.d.ts +2 -0
- package/dist/db/aggregate-sql.js +10 -0
- package/dist/db/apply-entity-event.d.ts +1 -1
- package/dist/db/apply-entity-event.js +15 -47
- package/dist/db/blind-index-cleanup.js +91 -77
- package/dist/db/closed-connection.js +12 -19
- package/dist/db/collect-table-metas.js +1 -1
- package/dist/db/compound-types.d.ts +1 -1
- package/dist/db/compound-types.js +0 -7
- package/dist/db/config-seed.d.ts +2 -1
- package/dist/db/config-seed.js +6 -1
- package/dist/db/connection.d.ts +7 -6
- package/dist/db/connection.js +43 -24
- package/dist/db/cross-tenant-reads.d.ts +1 -1
- package/dist/db/cross-tenant-reads.js +1 -1
- package/dist/db/dialect.d.ts +0 -5
- package/dist/db/dialect.js +0 -3
- package/dist/db/driver-row-coercion.js +4 -4
- package/dist/db/driver-value-preparation.js +6 -4
- package/dist/db/eagerload.d.ts +2 -1
- package/dist/db/entity-field-encryption.d.ts +1 -1
- package/dist/db/entity-table-meta.d.ts +1 -1
- package/dist/db/event-store-executor-context.d.ts +3 -1
- package/dist/db/event-store-executor-context.js +4 -3
- package/dist/db/event-store-executor-read-aggregate-currencies.d.ts +17 -0
- package/dist/db/event-store-executor-read-aggregate-currencies.js +40 -0
- package/dist/db/event-store-executor-read-aggregate.js +36 -5
- package/dist/db/event-store-executor-read-filter.d.ts +1 -1
- package/dist/db/event-store-executor-read-filter.js +6 -3
- package/dist/db/event-store-executor-read-rows.d.ts +2 -1
- package/dist/db/event-store-executor-read-search.d.ts +2 -1
- package/dist/db/event-store-executor-read-sort.d.ts +2 -1
- package/dist/db/event-store-executor-read.js +2 -2
- package/dist/db/event-store-executor-write-atomic.d.ts +4 -0
- package/dist/db/event-store-executor-write-atomic.js +42 -0
- package/dist/db/event-store-executor-write-steps.d.ts +3 -5
- package/dist/db/event-store-executor-write-steps.js +0 -5
- package/dist/db/event-store-executor-write.js +22 -19
- package/dist/db/event-store-executor.d.ts +1 -1
- package/dist/db/event-store-executor.js +2 -1
- package/dist/db/executor-managed-tables.d.ts +7 -1
- package/dist/db/executor-managed-tables.js +12 -3
- package/dist/db/index.d.ts +29 -28
- package/dist/db/index.js +22 -20
- package/dist/db/known-table-names.d.ts +6 -0
- package/dist/db/known-table-names.js +21 -0
- package/dist/db/list-aggregate-labels.d.ts +1 -1
- package/dist/db/located-timestamp.d.ts +1 -1
- package/dist/db/located-timestamp.js +0 -5
- package/dist/db/migrate-generator.d.ts +17 -1
- package/dist/db/migrate-generator.js +50 -20
- package/dist/db/migrate-primary-key.d.ts +12 -0
- package/dist/db/migrate-primary-key.js +45 -0
- package/dist/db/migrate-rls-diff.d.ts +20 -0
- package/dist/db/migrate-rls-diff.js +61 -0
- package/dist/db/migrate-runner.js +7 -3
- package/dist/db/money.d.ts +1 -1
- package/dist/db/money.js +1 -1
- package/dist/db/parent-ref-clause.d.ts +2 -1
- package/dist/db/pg-error.d.ts +2 -0
- package/dist/db/pg-error.js +37 -21
- package/dist/db/queries/backfill-pii.js +3 -6
- package/dist/db/queries/database-now.js +2 -1
- package/dist/db/queries/ddl.d.ts +3 -0
- package/dist/db/queries/ddl.js +34 -1
- package/dist/db/queries/event-store.js +4 -2
- package/dist/db/queries/event-tenants.d.ts +2 -0
- package/dist/db/queries/event-tenants.js +17 -0
- package/dist/db/queries/rebuild-rls-guard.d.ts +2 -0
- package/dist/db/queries/rebuild-rls-guard.js +29 -0
- package/dist/db/queries/rls-boot-catalog.d.ts +16 -0
- package/dist/db/queries/rls-boot-catalog.js +39 -0
- package/dist/db/queries/rls-catalog.d.ts +6 -0
- package/dist/db/queries/rls-catalog.js +82 -0
- package/dist/db/queries/rls-scope.d.ts +3 -0
- package/dist/db/queries/rls-scope.js +17 -0
- package/dist/db/queries/rls-shape.d.ts +10 -0
- package/dist/db/queries/rls-shape.js +42 -0
- package/dist/db/queries/session-advisory-lock.d.ts +2 -0
- package/dist/db/queries/session-advisory-lock.js +23 -0
- package/dist/db/queries/shadow-swap.d.ts +1 -2
- package/dist/db/queries/shadow-swap.js +11 -28
- package/dist/db/queries/test-stack.d.ts +4 -1
- package/dist/db/queries/test-stack.js +83 -2
- package/dist/db/query.d.ts +14 -0
- package/dist/db/query.js +77 -48
- package/dist/db/reference-data.d.ts +1 -1
- package/dist/db/reference-data.js +20 -3
- package/dist/db/render-ddl.d.ts +6 -2
- package/dist/db/render-ddl.js +7 -7
- package/dist/db/render-rls-ddl.d.ts +35 -0
- package/dist/db/render-rls-ddl.js +127 -0
- package/dist/db/replay-migration-sql.d.ts +3 -1
- package/dist/db/replay-migration-sql.js +22 -5
- package/dist/db/replay-rls.d.ts +25 -0
- package/dist/db/replay-rls.js +156 -0
- package/dist/db/row-level-security-boot-check.d.ts +5 -0
- package/dist/db/row-level-security-boot-check.js +85 -0
- package/dist/db/row-level-security-connection.d.ts +3 -0
- package/dist/db/row-level-security-connection.js +213 -0
- package/dist/db/row-level-security-scope.d.ts +33 -0
- package/dist/db/row-level-security-scope.js +127 -0
- package/dist/db/scope-tenant-db-to-tenant.d.ts +3 -0
- package/dist/db/scope-tenant-db-to-tenant.js +14 -0
- package/dist/db/sql-identifier.d.ts +1 -0
- package/dist/db/sql-identifier.js +3 -0
- package/dist/db/statement-timeout.js +2 -1
- package/dist/db/table-builder.d.ts +2 -1
- package/dist/db/table-builder.js +1 -1
- package/dist/db/table-info.js +1 -1
- package/dist/db/table-push.d.ts +11 -2
- package/dist/db/table-push.js +15 -2
- package/dist/db/tenant-db-runner.d.ts +3 -1
- package/dist/db/tenant-db-runner.js +4 -3
- package/dist/db/tenant-db-scoped-rebind.d.ts +10 -0
- package/dist/db/tenant-db-scoped-rebind.js +33 -0
- package/dist/db/tenant-db-statement-runner.d.ts +13 -0
- package/dist/db/tenant-db-statement-runner.js +48 -0
- package/dist/db/tenant-db-upsert.d.ts +5 -0
- package/dist/db/tenant-db-upsert.js +91 -0
- package/dist/db/tenant-db.d.ts +17 -12
- package/dist/db/tenant-db.js +60 -121
- package/dist/db/tenant-id-filter.d.ts +3 -0
- package/dist/db/tenant-id-filter.js +30 -0
- package/dist/db/transaction-serialization.d.ts +6 -0
- package/dist/db/transaction-serialization.js +60 -0
- package/dist/derivatives/delete-stored-file.js +1 -1
- package/dist/derivatives/index.d.ts +2 -5
- package/dist/derivatives/index.js +2 -3
- package/dist/engine/access.d.ts +2 -1
- package/dist/engine/access.js +1 -1
- package/dist/engine/boot-validator/bundled-lists-table.d.ts +2 -0
- package/dist/engine/boot-validator/bundled-lists-table.js +36 -0
- package/dist/engine/boot-validator/entity-handler.d.ts +2 -1
- package/dist/engine/boot-validator/entity-handler.js +1 -1
- package/dist/engine/boot-validator/entity-list-aggregate-options.d.ts +3 -0
- package/dist/engine/boot-validator/entity-list-aggregate-options.js +23 -0
- package/dist/engine/boot-validator/list-bulk-actions.d.ts +3 -0
- package/dist/engine/boot-validator/list-bulk-actions.js +49 -0
- package/dist/engine/boot-validator/list-column-layout.d.ts +8 -0
- package/dist/engine/boot-validator/list-column-layout.js +41 -0
- package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +24 -0
- package/dist/engine/boot-validator/list-table-aggregate-options.js +145 -0
- package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +11 -0
- package/dist/engine/boot-validator/list-table-aggregate-query.js +31 -0
- package/dist/engine/boot-validator/list-table-export-options.d.ts +1 -0
- package/dist/engine/boot-validator/list-table-export-options.js +27 -0
- package/dist/engine/boot-validator/list-table-options.d.ts +3 -0
- package/dist/engine/boot-validator/list-table-options.js +77 -0
- package/dist/engine/boot-validator/list-table-reject-unknown-keys.d.ts +1 -0
- package/dist/engine/boot-validator/list-table-reject-unknown-keys.js +7 -0
- package/dist/engine/boot-validator/nav.d.ts +3 -1
- package/dist/engine/boot-validator/nav.js +1 -1
- package/dist/engine/boot-validator/ownership.d.ts +2 -1
- package/dist/engine/boot-validator/parent-ref.d.ts +2 -1
- package/dist/engine/boot-validator/projection-list-screens.d.ts +2 -1
- package/dist/engine/boot-validator/projection-list-screens.js +3 -13
- package/dist/engine/boot-validator/query-refs.d.ts +2 -1
- package/dist/engine/boot-validator/related-list-table-rules.d.ts +4 -0
- package/dist/engine/boot-validator/related-list-table-rules.js +42 -0
- package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
- package/dist/engine/boot-validator/screens-kind-entity-list.js +7 -0
- package/dist/engine/boot-validator/screens-kind-projection-list.js +4 -0
- package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
- package/dist/engine/boot-validator/screens-lists.js +12 -2
- package/dist/engine/boot-validator/screens.d.ts +2 -1
- package/dist/engine/boot-validator/workspaces.d.ts +3 -1
- package/dist/engine/bridge-stub.d.ts +5 -2
- package/dist/engine/bridge-stub.js +39 -24
- package/dist/engine/build-app-schema.d.ts +2 -1
- package/dist/engine/build-app-schema.js +9 -1
- package/dist/engine/build-config-feature-schema.js +6 -1
- package/dist/engine/config-helpers.d.ts +2 -2
- package/dist/engine/config-helpers.js +0 -9
- package/dist/engine/constants.d.ts +0 -10
- package/dist/engine/constants.js +0 -8
- package/dist/engine/create-app.js +1 -1
- package/dist/engine/define-feature.d.ts +2 -1
- package/dist/engine/define-feature.js +5 -2
- package/dist/engine/define-handler.d.ts +1 -1
- package/dist/engine/define-step.d.ts +0 -1
- package/dist/engine/define-step.js +0 -3
- package/dist/engine/embedded-derived.d.ts +1 -1
- package/dist/engine/entity-handlers.d.ts +2 -1
- package/dist/engine/entity-handlers.js +7 -7
- package/dist/engine/entity-list-runtime-options.js +3 -1
- package/dist/engine/entity-list-searchability.d.ts +2 -1
- package/dist/engine/event-def.d.ts +2 -1
- package/dist/engine/event-helpers.d.ts +3 -1
- package/dist/engine/event-helpers.js +3 -3
- package/dist/engine/extension-names.d.ts +2 -8
- package/dist/engine/extension-names.js +2 -2
- package/dist/engine/extension-selector-plugins.d.ts +1 -1
- package/dist/engine/extensions/storage-provider.d.ts +1 -2
- package/dist/engine/extensions/user-data.d.ts +0 -8
- package/dist/engine/factories.d.ts +2 -1
- package/dist/engine/feature-builder-state.d.ts +9 -1
- package/dist/engine/feature-builder-state.js +1 -0
- package/dist/engine/feature-changelog.d.ts +1 -1
- package/dist/engine/feature-config-events-jobs.d.ts +4 -1
- package/dist/engine/feature-entity-handlers.d.ts +5 -1
- package/dist/engine/feature-manifest.d.ts +1 -0
- package/dist/engine/feature-manifest.js +2 -1
- package/dist/engine/feature-ui-extensions.d.ts +7 -1
- package/dist/engine/feature-ui-extensions.js +6 -4
- package/dist/engine/field-access.d.ts +3 -1
- package/dist/engine/field-access.js +12 -0
- package/dist/engine/handler-field-references.d.ts +0 -4
- package/dist/engine/index.d.ts +58 -55
- package/dist/engine/index.js +23 -28
- package/dist/engine/instruction-fields.d.ts +1 -1
- package/dist/engine/personal-data-fields.d.ts +1 -1
- package/dist/engine/qualified-name.d.ts +0 -1
- package/dist/engine/read-claim.d.ts +2 -1
- package/dist/engine/registry-facade.js +0 -3
- package/dist/engine/registry-ingest.d.ts +2 -1
- package/dist/engine/registry-ingest.js +1 -2
- package/dist/engine/registry-state.d.ts +12 -2
- package/dist/engine/registry-state.js +2 -3
- package/dist/engine/registry-validate.d.ts +3 -1
- package/dist/engine/registry-validate.js +7 -7
- package/dist/engine/run-in.d.ts +1 -1
- package/dist/engine/run-in.js +0 -1
- package/dist/engine/schema-builder.d.ts +1 -1
- package/dist/engine/schema-builder.js +1 -1
- package/dist/engine/screen-filter-ops.d.ts +2 -1
- package/dist/engine/screen-filter-ops.js +2 -5
- package/dist/engine/soft-delete-cleanup.d.ts +1 -1
- package/dist/engine/soft-delete-cleanup.js +4 -4
- package/dist/engine/state-machine.js +2 -1
- package/dist/engine/steps/_read-source.js +1 -1
- package/dist/engine/steps/aggregate-append-event.js +2 -2
- package/dist/engine/steps/call-feature.js +2 -2
- package/dist/engine/steps/mail-send.js +1 -1
- package/dist/engine/steps/retry.js +1 -1
- package/dist/engine/steps/wait-for-event.js +1 -1
- package/dist/engine/steps/wait.js +1 -1
- package/dist/engine/steps/webhook-send.js +1 -1
- package/dist/engine/strip-disabled-features-from-app-schema.js +7 -3
- package/dist/engine/template-variables.d.ts +2 -1
- package/dist/engine/transfer-adjacency.d.ts +1 -1
- package/dist/engine/types/feature.d.ts +1 -0
- package/dist/engine/types/index.d.ts +8 -30
- package/dist/engine/types/index.js +2 -10
- package/dist/engine/types/screen.d.ts +1 -1
- package/dist/engine/types/screen.js +1 -1
- package/dist/engine/validation.d.ts +2 -1
- package/dist/entrypoint/index.d.ts +9 -35
- package/dist/entrypoint/index.js +10 -1
- package/dist/entrypoint/internals.d.ts +40 -0
- package/dist/entrypoint/internals.js +1 -0
- package/dist/entrypoint/row-level-security-mode-check.d.ts +3 -0
- package/dist/entrypoint/row-level-security-mode-check.js +19 -0
- package/dist/env/dry-run-internals.d.ts +10 -0
- package/dist/env/dry-run-internals.js +1 -0
- package/dist/env/dry-run.d.ts +1 -10
- package/dist/env/dry-run.js +2 -1
- package/dist/env/index.d.ts +1 -85
- package/dist/env/index.js +6 -50
- package/dist/env/internals.d.ts +87 -0
- package/dist/env/internals.js +53 -0
- package/dist/errors/classes.js +2 -2
- package/dist/errors/index.d.ts +5 -14
- package/dist/errors/index.js +4 -9
- package/dist/errors/member-resolution.js +1 -1
- package/dist/errors/reasons.d.ts +0 -1
- package/dist/errors/reasons.js +7 -7
- package/dist/errors/serialize.d.ts +0 -18
- package/dist/errors/serialize.js +0 -27
- package/dist/es-ops/index.d.ts +4 -4
- package/dist/es-ops/index.js +2 -2
- package/dist/es-ops/operations-schema.d.ts +1 -1
- package/dist/es-ops/types.d.ts +4 -5
- package/dist/event-store/admin-api-internals.d.ts +14 -0
- package/dist/event-store/admin-api-internals.js +1 -0
- package/dist/event-store/admin-api.d.ts +1 -14
- package/dist/event-store/admin-api.js +11 -6
- package/dist/event-store/archive.js +4 -2
- package/dist/event-store/errors.js +2 -2
- package/dist/event-store/event-store.d.ts +1 -0
- package/dist/event-store/event-store.js +42 -32
- package/dist/event-store/events-schema.js +4 -1
- package/dist/event-store/index.d.ts +11 -13
- package/dist/event-store/index.js +7 -9
- package/dist/event-store/provenance-append.js +1 -1
- package/dist/event-store/rebuild-dead-letter.js +4 -2
- package/dist/event-store/snapshot.js +4 -3
- package/dist/event-store/stream-scope.d.ts +2 -0
- package/dist/event-store/stream-scope.js +6 -0
- package/dist/event-store/upcaster-dead-letter.js +4 -2
- package/dist/event-store/upcaster.d.ts +2 -1
- package/dist/files/action-form-upload.d.ts +2 -1
- package/dist/files/action-form-upload.js +1 -1
- package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -1
- package/dist/files/assert-file-refs-belong-to-tenant.js +1 -1
- package/dist/files/bind-pending-file-refs.d.ts +2 -1
- package/dist/files/bind-pending-file-refs.js +2 -1
- package/dist/files/bind-referenced-files.write.js +1 -1
- package/dist/files/create-file-ref-from-bytes.d.ts +6 -3
- package/dist/files/create-file-ref-from-bytes.js +6 -3
- package/dist/files/create-file-ref.d.ts +6 -2
- package/dist/files/create-file-ref.js +13 -4
- package/dist/files/dispose-removed-file-refs.d.ts +2 -1
- package/dist/files/dispose-removed-file-refs.js +1 -1
- package/dist/files/feature.js +2 -2
- package/dist/files/file-handle.js +1 -1
- package/dist/files/file-routes.d.ts +3 -1
- package/dist/files/file-routes.js +41 -4
- package/dist/files/index.d.ts +11 -13
- package/dist/files/index.js +5 -7
- package/dist/files/load-save-file-refs.d.ts +2 -1
- package/dist/files/load-save-file-refs.js +1 -1
- package/dist/files/provider-resolver.d.ts +6 -4
- package/dist/files/provider-resolver.js +5 -5
- package/dist/files/record-write-check.d.ts +6 -0
- package/dist/files/record-write-check.js +13 -0
- package/dist/files/storage-tracking.js +4 -2
- package/dist/files/sweep-orphaned-uploads.d.ts +1 -1
- package/dist/files/sweep-orphaned-uploads.js +1 -1
- package/dist/files/upload-ledger.d.ts +2 -2
- package/dist/files/upload-ledger.js +4 -4
- package/dist/i18n/index.d.ts +2 -8
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/internals.d.ts +7 -0
- package/dist/i18n/internals.js +1 -0
- package/dist/i18n/required-surface-keys.d.ts +4 -1
- package/dist/i18n/required-surface-keys.js +7 -2
- package/dist/internal/row-level-security.d.ts +3 -0
- package/dist/internal/row-level-security.js +3 -0
- package/dist/internal/stack-support.d.ts +1 -1
- package/dist/internal/stack-support.js +1 -1
- package/dist/internal/testing.d.ts +1 -0
- package/dist/internal/testing.js +10 -6
- package/dist/jobs/index.d.ts +1 -1
- package/dist/jobs/job-append-event.d.ts +12 -0
- package/dist/jobs/job-append-event.js +30 -0
- package/dist/jobs/job-runner-context.d.ts +2 -2
- package/dist/jobs/job-runner-context.js +46 -16
- package/dist/jobs/job-runner-execution.d.ts +1 -1
- package/dist/jobs/job-runner-execution.js +6 -4
- package/dist/jobs/job-runner-gates.d.ts +1 -1
- package/dist/jobs/job-runner-gates.js +0 -1
- package/dist/jobs/job-runner-helpers.d.ts +11 -4
- package/dist/jobs/job-runner-helpers.js +10 -1
- package/dist/jobs/job-runner-scope.d.ts +5 -2
- package/dist/jobs/job-runner-scope.js +6 -6
- package/dist/jobs/job-runner-types.d.ts +2 -1
- package/dist/jobs/job-runner.js +22 -6
- package/dist/jobs/max-per-tenant.d.ts +1 -1
- package/dist/logging/index.d.ts +1 -2
- package/dist/logging/index.js +1 -1
- package/dist/logging/pino-logger.js +1 -1
- package/dist/logging/utils.d.ts +1 -0
- package/dist/logging/utils.js +6 -0
- package/dist/migrations/index.d.ts +3 -3
- package/dist/migrations/index.js +3 -3
- package/dist/migrations/pending-rebuilds.d.ts +1 -1
- package/dist/migrations/pending-rebuilds.js +1 -1
- package/dist/migrations/pii-event-backfill.js +4 -1
- package/dist/observability/escape-hatch-report.d.ts +2 -1
- package/dist/observability/escape-hatch-report.js +9 -2
- package/dist/observability/index.d.ts +7 -15
- package/dist/observability/index.js +4 -12
- package/dist/observability/metric-validator.js +1 -1
- package/dist/observability/metrics-handle.d.ts +0 -1
- package/dist/observability/metrics-handle.js +2 -15
- package/dist/observability/recording-tracer.d.ts +1 -2
- package/dist/observability/recording-tracer.js +0 -6
- package/dist/observability/sensitive-filter.d.ts +0 -2
- package/dist/observability/sensitive-filter.js +0 -29
- package/dist/pipeline/active-membership.d.ts +2 -1
- package/dist/pipeline/active-membership.js +6 -2
- package/dist/pipeline/after-rollback-sink.d.ts +6 -0
- package/dist/pipeline/after-rollback-sink.js +32 -0
- package/dist/pipeline/append-event-core.d.ts +2 -1
- package/dist/pipeline/append-event-core.js +2 -2
- package/dist/pipeline/attach-outside-transaction.d.ts +3 -0
- package/dist/pipeline/attach-outside-transaction.js +13 -0
- package/dist/pipeline/auth-claims-resolver.d.ts +2 -1
- package/dist/pipeline/cascade-handler.d.ts +2 -1
- package/dist/pipeline/cascade-handler.js +3 -2
- package/dist/pipeline/config-accessor-factory.d.ts +1 -1
- package/dist/pipeline/config-accessor-factory.js +1 -1
- package/dist/pipeline/context-services.d.ts +56 -0
- package/dist/pipeline/context-services.js +73 -0
- package/dist/pipeline/dispatch-batch.d.ts +2 -1
- package/dist/pipeline/dispatch-batch.js +39 -19
- package/dist/pipeline/dispatch-query.js +5 -4
- package/dist/pipeline/dispatch-scope.d.ts +6 -0
- package/dist/pipeline/dispatch-scope.js +27 -0
- package/dist/pipeline/dispatch-shared.d.ts +13 -9
- package/dist/pipeline/dispatch-shared.js +75 -194
- package/dist/pipeline/dispatch-stream.js +8 -4
- package/dist/pipeline/dispatch-write.d.ts +2 -1
- package/dist/pipeline/dispatch-write.js +10 -8
- package/dist/pipeline/dispatcher-utils.d.ts +3 -1
- package/dist/pipeline/dispatcher-utils.js +8 -2
- package/dist/pipeline/dispatcher.d.ts +3 -2
- package/dist/pipeline/dispatcher.js +4 -3
- package/dist/pipeline/event-consumer-state.d.ts +0 -1
- package/dist/pipeline/event-dispatcher-delivery.d.ts +1 -1
- package/dist/pipeline/event-dispatcher-delivery.js +7 -3
- package/dist/pipeline/event-dispatcher.d.ts +3 -2
- package/dist/pipeline/event-dispatcher.js +13 -12
- package/dist/pipeline/event-retention.js +59 -56
- package/dist/pipeline/handler-access-error.js +2 -1
- package/dist/pipeline/handler-context-auth.d.ts +5 -6
- package/dist/pipeline/handler-context-auth.js +7 -4
- package/dist/pipeline/handler-context-config.d.ts +2 -5
- package/dist/pipeline/handler-context-config.js +2 -2
- package/dist/pipeline/handler-context-db.d.ts +32 -7
- package/dist/pipeline/handler-context-db.js +26 -17
- package/dist/pipeline/handler-context-dispatch.d.ts +14 -6
- package/dist/pipeline/handler-context-dispatch.js +18 -5
- package/dist/pipeline/handler-context-events.d.ts +22 -38
- package/dist/pipeline/handler-context-events.js +42 -35
- package/dist/pipeline/handler-context-member-resolution.d.ts +2 -0
- package/dist/pipeline/handler-context-member-resolution.js +110 -0
- package/dist/pipeline/handler-context-notify.d.ts +3 -2
- package/dist/pipeline/handler-context-notify.js +1 -1
- package/dist/pipeline/handler-context-observability.d.ts +2 -4
- package/dist/pipeline/handler-context-observability.js +7 -5
- package/dist/pipeline/handler-context-phase-denials.d.ts +11 -0
- package/dist/pipeline/handler-context-phase-denials.js +98 -0
- package/dist/pipeline/handler-context-scope.d.ts +7 -10
- package/dist/pipeline/handler-context-scope.js +18 -20
- package/dist/pipeline/index.d.ts +9 -21
- package/dist/pipeline/index.js +5 -7
- package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
- package/dist/pipeline/irreversible-operation-gate.js +2 -2
- package/dist/pipeline/lifecycle-pipeline.d.ts +8 -7
- package/dist/pipeline/lifecycle-pipeline.js +9 -15
- package/dist/pipeline/member-read-only-transaction.js +11 -3
- package/dist/pipeline/member-reader.d.ts +1 -1
- package/dist/pipeline/member-reader.js +2 -2
- package/dist/pipeline/msp-rebuild.js +5 -3
- package/dist/pipeline/multi-stream-apply-context.js +3 -2
- package/dist/pipeline/notify-scope.d.ts +2 -1
- package/dist/pipeline/pre-handler-gates.d.ts +2 -1
- package/dist/pipeline/pre-transaction-reservations.d.ts +3 -3
- package/dist/pipeline/pre-transaction-reservations.js +9 -7
- package/dist/pipeline/projection-rebuild.js +12 -5
- package/dist/pipeline/projection-state.d.ts +0 -6
- package/dist/pipeline/projection-state.js +0 -5
- package/dist/pipeline/projections-runner.d.ts +2 -1
- package/dist/pipeline/projections-runner.js +10 -6
- package/dist/pipeline/system-hooks.d.ts +6 -2
- package/dist/pipeline/system-hooks.js +61 -10
- package/dist/pipeline/system-identity-switch.d.ts +4 -2
- package/dist/pipeline/system-identity-switch.js +51 -36
- package/dist/pipeline/typed-append-event.d.ts +2 -0
- package/dist/pipeline/typed-append-event.js +4 -0
- package/dist/pipeline/write-origin.js +2 -2
- package/dist/pipeline/write-result-masking.d.ts +1 -1
- package/dist/pipeline/write-result-masking.js +13 -10
- package/dist/random/index.d.ts +1 -2
- package/dist/random/index.js +1 -2
- package/dist/rate-limit/bucket.d.ts +2 -1
- package/dist/rate-limit/middleware.js +2 -1
- package/dist/redis/index.d.ts +3 -4
- package/dist/redis/index.js +2 -2
- package/dist/schema-cli/apply-command.js +5 -2
- package/dist/schema-cli/baseline-command.js +7 -2
- package/dist/schema-cli/generate-command.js +7 -9
- package/dist/schema-cli/shared.d.ts +4 -0
- package/dist/schema-cli/shared.js +21 -2
- package/dist/schema-cli/status-command.js +8 -2
- package/dist/schema-cli/validate-command.js +52 -4
- package/dist/schema-cli.d.ts +0 -1
- package/dist/search/configure-tenant-index.d.ts +1 -3
- package/dist/search/configure-tenant-index.js +0 -4
- package/dist/search/index.d.ts +1 -4
- package/dist/search/index.js +0 -2
- package/dist/search/meilisearch-adapter-internals.d.ts +8 -0
- package/dist/search/meilisearch-adapter-internals.js +9 -0
- package/dist/search/meilisearch-adapter.d.ts +1 -8
- package/dist/search/meilisearch-adapter.js +6 -7
- package/dist/search/meilisearch-peer.d.ts +2 -0
- package/dist/search/meilisearch-peer.js +5 -0
- package/dist/search/reindex-entity.js +107 -91
- package/dist/secrets/index.d.ts +3 -4
- package/dist/secrets/index.js +2 -3
- package/dist/seeding/index.d.ts +2 -2
- package/dist/seeding/index.js +1 -2
- package/dist/time/index.d.ts +2 -2
- package/dist/time/index.js +1 -1
- package/dist/time/tz-context.d.ts +0 -5
- package/dist/time/tz-context.js +0 -9
- package/dist/ui-types/index.d.ts +8 -11
- package/dist/ui-types/index.js +3 -3
- package/dist/upgrade-changelog.d.ts +3 -0
- package/dist/upgrade-changelog.js +18 -0
- package/dist/upgrade-cli-internals.d.ts +8 -0
- package/dist/upgrade-cli-internals.js +63 -0
- package/dist/upgrade-cli.d.ts +1 -18
- package/dist/upgrade-cli.js +29 -137
- package/dist/upgrade-marker-parse.d.ts +32 -0
- package/dist/upgrade-marker-parse.js +73 -0
- package/dist/utils/import-optional-peer.d.ts +6 -0
- package/dist/utils/import-optional-peer.js +19 -0
- package/dist/utils/index.d.ts +1 -4
- package/dist/utils/index.js +1 -4
- package/package.json +27 -20
- package/src/changes.json +451 -0
- package/dist/crypto/request-kms-cache.d.ts +0 -8
- package/dist/crypto/request-kms-cache.js +0 -21
- package/dist/engine/codemod/index.d.ts +0 -2
- package/dist/engine/codemod/index.js +0 -1
- package/dist/engine/codemod/pipeline-codemod.d.ts +0 -50
- package/dist/engine/codemod/pipeline-codemod.js +0 -536
- package/dist/engine/feature-ast/entity-field-types.d.ts +0 -13
- package/dist/engine/feature-ast/entity-field-types.js +0 -35
- package/dist/engine/feature-ast/extractors/ai-steps.d.ts +0 -6
- package/dist/engine/feature-ast/extractors/ai-steps.js +0 -254
- package/dist/engine/feature-ast/extractors/events.d.ts +0 -5
- package/dist/engine/feature-ast/extractors/events.js +0 -275
- package/dist/engine/feature-ast/extractors/handlers.d.ts +0 -24
- package/dist/engine/feature-ast/extractors/handlers.js +0 -358
- package/dist/engine/feature-ast/extractors/hooks.d.ts +0 -24
- package/dist/engine/feature-ast/extractors/hooks.js +0 -248
- package/dist/engine/feature-ast/extractors/index.d.ts +0 -14
- package/dist/engine/feature-ast/extractors/index.js +0 -13
- package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +0 -7
- package/dist/engine/feature-ast/extractors/jobs-routes.js +0 -145
- package/dist/engine/feature-ast/extractors/projections-screens.d.ts +0 -10
- package/dist/engine/feature-ast/extractors/projections-screens.js +0 -195
- package/dist/engine/feature-ast/extractors/resolve-import.d.ts +0 -21
- package/dist/engine/feature-ast/extractors/resolve-import.js +0 -180
- package/dist/engine/feature-ast/extractors/round1.d.ts +0 -10
- package/dist/engine/feature-ast/extractors/round1.js +0 -81
- package/dist/engine/feature-ast/extractors/round2.d.ts +0 -7
- package/dist/engine/feature-ast/extractors/round2.js +0 -191
- package/dist/engine/feature-ast/extractors/round3.d.ts +0 -23
- package/dist/engine/feature-ast/extractors/round3.js +0 -292
- package/dist/engine/feature-ast/extractors/round5.d.ts +0 -9
- package/dist/engine/feature-ast/extractors/round5.js +0 -68
- package/dist/engine/feature-ast/extractors/round6.d.ts +0 -4
- package/dist/engine/feature-ast/extractors/round6.js +0 -17
- package/dist/engine/feature-ast/extractors/shared.d.ts +0 -94
- package/dist/engine/feature-ast/extractors/shared.js +0 -343
- package/dist/engine/feature-ast/index.d.ts +0 -16
- package/dist/engine/feature-ast/index.js +0 -10
- package/dist/engine/feature-ast/parse.d.ts +0 -31
- package/dist/engine/feature-ast/parse.js +0 -483
- package/dist/engine/feature-ast/patch.d.ts +0 -210
- package/dist/engine/feature-ast/patch.js +0 -610
- package/dist/engine/feature-ast/patcher.d.ts +0 -217
- package/dist/engine/feature-ast/patcher.js +0 -281
- package/dist/engine/feature-ast/pattern-change-schema.d.ts +0 -1476
- package/dist/engine/feature-ast/pattern-change-schema.js +0 -1226
- package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
- package/dist/engine/feature-ast/pattern-id-matchers.js +0 -210
- package/dist/engine/feature-ast/patterns.d.ts +0 -318
- package/dist/engine/feature-ast/patterns.js +0 -106
- package/dist/engine/feature-ast/render.d.ts +0 -47
- package/dist/engine/feature-ast/render.js +0 -662
- package/dist/engine/feature-ast/source-location.d.ts +0 -17
- package/dist/engine/feature-ast/source-location.js +0 -27
- package/dist/engine/pattern-library/index.d.ts +0 -2
- package/dist/engine/pattern-library/index.js +0 -3
- package/dist/engine/pattern-library/library.d.ts +0 -14
- package/dist/engine/pattern-library/library.js +0 -93
- package/dist/engine/pattern-library/mixed-schemas.d.ts +0 -16
- package/dist/engine/pattern-library/mixed-schemas.js +0 -559
- package/dist/engine/pattern-library/opaque-schemas.d.ts +0 -7
- package/dist/engine/pattern-library/opaque-schemas.js +0 -115
- package/dist/engine/pattern-library/shared-fields.d.ts +0 -122
- package/dist/engine/pattern-library/shared-fields.js +0 -88
- package/dist/engine/pattern-library/static-schemas.d.ts +0 -20
- package/dist/engine/pattern-library/static-schemas.js +0 -478
- package/dist/engine/pattern-library/types.d.ts +0 -158
- package/dist/engine/pattern-library/types.js +0 -36
- package/dist/engine/provider-plugin-context.d.ts +0 -3
- package/dist/engine/provider-plugin-context.js +0 -28
- package/dist/engine/resolve-config-or-param.d.ts +0 -18
- package/dist/engine/resolve-config-or-param.js +0 -76
- package/src/scripts/codemod/README.md +0 -187
- package/src/scripts/codemod/codemod-support.ts +0 -334
- package/src/scripts/codemod/collect-source-files.ts +0 -48
- package/src/scripts/codemod/crypto-shredding-testing-move.ts +0 -119
- package/src/scripts/codemod/db-factory.ts +0 -810
- package/src/scripts/codemod/feature-factory.ts +0 -429
- package/src/scripts/codemod/feature-layout.ts +0 -424
- package/src/scripts/codemod/import-extensions.ts +0 -118
- package/src/scripts/codemod/migrate-cross-tenant.ts +0 -328
- package/src/scripts/codemod/migrate-db-raw.ts +0 -401
- package/src/scripts/codemod/migrate-open-to-all.ts +0 -235
- package/src/scripts/codemod/object-form.ts +0 -746
- package/src/scripts/codemod/package-merge.ts +0 -299
- package/src/scripts/codemod/pii-personal-migration.ts +0 -816
- package/src/scripts/codemod/remove-engine-payload-casts.ts +0 -318
- package/src/scripts/codemod/s3-imports.ts +0 -236
- package/src/scripts/codemod/tenant-db-options.ts +0 -454
- package/src/scripts/codemod/testing-injection.ts +0 -215
- package/src/scripts/codemod/testing-move-targets.ts +0 -161
- package/src/scripts/codemod/testing-move.ts +0 -542
- 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
|
+
}
|
package/dist/upgrade-cli.d.ts
CHANGED
|
@@ -1,24 +1,7 @@
|
|
|
1
|
-
|
|
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>;
|
package/dist/upgrade-cli.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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-
|
|
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
|
-
|
|
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
|
-
})
|
|
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-
|
|
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,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
|
+
}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -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
|
|
5
|
+
export { parseJsonOrThrow, parseJsonSafe } from "./safe-json.ts";
|
|
9
6
|
export { parseRoles } from "./serialization.ts";
|
package/dist/utils/index.js
CHANGED
|
@@ -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
|
|
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.
|
|
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
|
-
"
|
|
29
|
-
"./
|
|
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.
|
|
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.
|
|
219
|
-
"bun-types": "^1.
|
|
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",
|