@cosmicdrift/kumiko-framework 0.389.0 → 0.390.1
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 +9 -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/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 +3 -3
- package/agents/examples/managed-config.md +4 -4
- package/agents/examples/managed-pages.md +1 -1
- 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 +2 -2
- 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 +4 -4
- package/agents/features.md +1 -1
- package/dist/api/auth-middleware.js +1 -1
- package/dist/api/auth-routes-invite.js +2 -1
- package/dist/api/entity-read-access.d.ts +3 -1
- package/dist/api/export/export-columns.d.ts +3 -1
- package/dist/api/export/export-route.js +3 -2
- package/dist/api/export/export-screen.d.ts +2 -1
- package/dist/api/extra-route.d.ts +3 -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/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.js +7 -3
- 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 +2 -1
- package/dist/api/server-middleware.js +3 -1
- package/dist/api/server-routes.d.ts +2 -1
- package/dist/api/server-wiring.js +6 -4
- package/dist/api/server.d.ts +2 -1
- package/dist/api/sse-route.d.ts +2 -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 +10 -10
- 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.js +6 -1
- 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/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 +3 -1
- package/dist/db/connection.js +15 -5
- 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-value-preparation.js +23 -2
- 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-filter.d.ts +1 -1
- 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.js +8 -7
- package/dist/db/event-store-executor-write-steps.d.ts +3 -2
- package/dist/db/event-store-executor-write.js +7 -4
- package/dist/db/event-store-executor.d.ts +1 -1
- package/dist/db/executor-managed-tables.d.ts +7 -1
- package/dist/db/executor-managed-tables.js +11 -2
- 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 +4 -0
- 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 +11 -0
- 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 +9 -25
- package/dist/db/queries/test-stack.d.ts +4 -1
- package/dist/db/queries/test-stack.js +84 -2
- package/dist/db/query.js +11 -7
- package/dist/db/reference-data.d.ts +1 -1
- package/dist/db/reference-data.js +6 -1
- 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 +6 -0
- package/dist/db/row-level-security-boot-check.js +86 -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/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.d.ts +17 -12
- package/dist/db/tenant-db.js +49 -120
- 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/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 +1 -1
- package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +1 -1
- package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +2 -1
- 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/query-refs.d.ts +2 -1
- package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
- package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
- 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/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 +1 -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 +8 -1
- 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.js +1 -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 +2 -1
- package/dist/engine/handler-field-references.d.ts +0 -4
- package/dist/engine/index.d.ts +57 -54
- package/dist/engine/index.js +22 -27
- 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 +0 -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/template-variables.d.ts +2 -1
- package/dist/engine/transfer-adjacency.d.ts +1 -1
- package/dist/engine/types/index.d.ts +8 -31
- package/dist/engine/types/index.js +2 -10
- package/dist/engine/validation.d.ts +2 -1
- package/dist/entrypoint/index.d.ts +7 -35
- package/dist/entrypoint/index.js +7 -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.js +41 -34
- 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/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 +3 -3
- package/dist/files/create-file-ref.d.ts +3 -2
- package/dist/files/create-file-ref.js +2 -2
- 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 +1 -1
- package/dist/files/file-routes.js +12 -2
- 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 +5 -4
- package/dist/files/provider-resolver.js +4 -4
- 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/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/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 +9 -5
- 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-types.d.ts +2 -1
- package/dist/jobs/job-runner.js +19 -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/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/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 +31 -18
- 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 -198
- 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 +4 -2
- package/dist/pipeline/event-dispatcher.d.ts +2 -2
- package/dist/pipeline/event-dispatcher.js +7 -3
- 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 +13 -7
- package/dist/pipeline/handler-context-dispatch.js +9 -8
- package/dist/pipeline/handler-context-events.d.ts +22 -36
- package/dist/pipeline/handler-context-events.js +36 -31
- 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 +3 -1
- package/dist/pipeline/system-hooks.js +6 -4
- 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/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 +12 -2
- package/dist/schema-cli/shared.js +24 -2
- package/dist/schema-cli/status-command.js +8 -2
- package/dist/schema-cli/validate-command.js +48 -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 +93 -87
- 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 -2
- package/dist/upgrade-changelog.js +12 -8
- package/dist/upgrade-cli-internals.d.ts +8 -0
- package/dist/upgrade-cli-internals.js +63 -0
- package/dist/upgrade-cli.d.ts +2 -9
- package/dist/upgrade-cli.js +28 -70
- 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 +23 -19
- package/src/changes.json +236 -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 -11
- package/dist/engine/feature-ast/extractors/round1.js +0 -87
- 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 -485
- package/dist/engine/feature-ast/patch.d.ts +0 -212
- package/dist/engine/feature-ast/patch.js +0 -611
- 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 -1238
- package/dist/engine/feature-ast/pattern-change-schema.js +0 -1072
- package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
- package/dist/engine/feature-ast/pattern-id-matchers.js +0 -211
- package/dist/engine/feature-ast/pattern-id-schema.d.ts +0 -251
- package/dist/engine/feature-ast/pattern-id-schema.js +0 -166
- package/dist/engine/feature-ast/patterns.d.ts +0 -322
- package/dist/engine/feature-ast/patterns.js +0 -107
- package/dist/engine/feature-ast/render.d.ts +0 -47
- package/dist/engine/feature-ast/render.js +0 -666
- 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 -94
- 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 -21
- package/dist/engine/pattern-library/static-schemas.js +0 -487
- package/dist/engine/pattern-library/types.d.ts +0 -158
- package/dist/engine/pattern-library/types.js +0 -36
- 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
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Exported for unit tests (index-name / primary-key shape) without a live Meili.
|
|
2
|
+
export function meilisearchTenantIndex(prefix, tenantId) {
|
|
3
|
+
return `${prefix}t${tenantId}`;
|
|
4
|
+
}
|
|
5
|
+
// Meilisearch primary-key-ids: alphanumerics, `-`, `_`. UUIDs contain `-` —
|
|
6
|
+
// legal. Replace anything else just in case callers pass unexpected shapes.
|
|
7
|
+
export function meilisearchDocId(entityType, entityId) {
|
|
8
|
+
return `${entityType}_${String(entityId).replace(/[^0-9A-Za-z_-]/g, "_")}`;
|
|
9
|
+
}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type MeilisearchAdapterOptions } from "./meilisearch-adapter-internals.ts";
|
|
2
2
|
import type { SearchAdapter } from "./types.ts";
|
|
3
|
-
export type MeilisearchAdapterOptions = {
|
|
4
|
-
url: string;
|
|
5
|
-
apiKey: string;
|
|
6
|
-
indexPrefix?: string;
|
|
7
|
-
};
|
|
8
|
-
export declare function meilisearchTenantIndex(prefix: string, tenantId: TenantId): string;
|
|
9
|
-
export declare function meilisearchDocId(entityType: string, entityId: EntityId): string;
|
|
10
3
|
export declare function createMeilisearchAdapter(options: MeilisearchAdapterOptions): SearchAdapter;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { errorCodeOf } from "@cosmicdrift/kumiko-types/type-guards";
|
|
2
|
-
import {
|
|
2
|
+
import { importOptionalPeer } from "../utils/import-optional-peer.js";
|
|
3
|
+
import { meilisearchDocId, meilisearchTenantIndex, } from "./meilisearch-adapter-internals.js";
|
|
4
|
+
import { MEILISEARCH_PEER } from "./meilisearch-peer.js";
|
|
5
|
+
// meilisearch is an optional peer; a static import would fail with the runtime's bare
|
|
6
|
+
// "Cannot find package" error instead of naming the peer and how to install it.
|
|
7
|
+
const { ErrorStatusCode, Meilisearch } = await importOptionalPeer(MEILISEARCH_PEER, () => import("meilisearch"));
|
|
3
8
|
// meilisearch's waitTask() RESOLVES (never rejects) once the server task
|
|
4
9
|
// reaches a terminal state, even "failed" — a rejected doc (e.g. an id over
|
|
5
10
|
// Meili's 511-byte limit) otherwise fails silently and the caller thinks
|
|
@@ -50,14 +55,8 @@ function isIndexNotFound(err) {
|
|
|
50
55
|
return errorCodeOf(cause) === ErrorStatusCode.INDEX_NOT_FOUND;
|
|
51
56
|
}
|
|
52
57
|
// Exported for unit tests (index-name / primary-key shape) without a live Meili.
|
|
53
|
-
export function meilisearchTenantIndex(prefix, tenantId) {
|
|
54
|
-
return `${prefix}t${tenantId}`;
|
|
55
|
-
}
|
|
56
58
|
// Meilisearch primary-key-ids: alphanumerics, `-`, `_`. UUIDs contain `-` —
|
|
57
59
|
// legal. Replace anything else just in case callers pass unexpected shapes.
|
|
58
|
-
export function meilisearchDocId(entityType, entityId) {
|
|
59
|
-
return `${entityType}_${String(entityId).replace(/[^0-9A-Za-z_-]/g, "_")}`;
|
|
60
|
-
}
|
|
61
60
|
export function createMeilisearchAdapter(options) {
|
|
62
61
|
const client = new Meilisearch({ host: options.url, apiKey: options.apiKey });
|
|
63
62
|
const prefix = options.indexPrefix ?? "kumiko_";
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { resolveTableName } from "../db/entity-table-meta.js";
|
|
8
8
|
import { executeRawQueryRead } from "../db/queries/raw-sql.js";
|
|
9
9
|
import { runInNewTransaction, runnerCanBeginTransaction } from "../db/query.js";
|
|
10
|
+
import { runInSystemRowLevelSecurityScope } from "../db/row-level-security-scope.js";
|
|
10
11
|
import { buildSearchDocument, decryptSearchableSubjectFields, hasErasedSearchableSubjectField, } from "../pipeline/system-hooks.js";
|
|
11
12
|
import { toSnakeCase } from "../utils/case.js";
|
|
12
13
|
function quoteIdent(name) {
|
|
@@ -40,107 +41,112 @@ async function readBatchWithoutStatementTimeout(db, sqlText, params) {
|
|
|
40
41
|
});
|
|
41
42
|
}
|
|
42
43
|
export async function reindexEntity(db, registry, searchAdapter, entityName, tenantId, options = {}) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
`
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
44
|
+
return runInSystemRowLevelSecurityScope("search reindex reads entity rows of all tenants", async () => {
|
|
45
|
+
const entity = registry.getEntity(entityName);
|
|
46
|
+
if (!entity) {
|
|
47
|
+
throw new Error(`reindexEntity: unknown entity "${entityName}"`);
|
|
48
|
+
}
|
|
49
|
+
const searchableFields = registry.getSearchableFields(entityName);
|
|
50
|
+
const extensions = registry.getSearchPayloadExtensions(entityName);
|
|
51
|
+
if (searchableFields.length === 0 && extensions.length === 0) {
|
|
52
|
+
throw new Error(`reindexEntity: entity "${entityName}" has no searchable fields and no search-payload ` +
|
|
53
|
+
`extensions — nothing to index.`);
|
|
54
|
+
}
|
|
55
|
+
const batchSize = options.batchSize ?? 500;
|
|
56
|
+
const tableName = resolveTableName(entityName, entity, undefined);
|
|
57
|
+
const fieldNames = Object.keys(entity.fields);
|
|
58
|
+
// Soft-deleted rows already left the live index (the .deleted consumer
|
|
59
|
+
// calls searchAdapter.remove()) — resurrecting them here would make
|
|
60
|
+
// erased entities findable again.
|
|
61
|
+
const deletedFilter = entity.softDelete === true ? `AND ${quoteIdent("is_deleted")} IS NOT TRUE` : "";
|
|
62
|
+
const failures = [];
|
|
63
|
+
const result = { scannedRows: 0, indexedRows: 0, wouldIndexRows: 0, failures };
|
|
64
|
+
let lastId;
|
|
65
|
+
// Whether a searchable field lacks a matching read-table column depends
|
|
66
|
+
// only on the table's column set (rowToState/Object.hasOwn), not on any
|
|
67
|
+
// particular row's data — every row from the same SELECT * has the same
|
|
68
|
+
// columns. Check once against the first row instead of every row, so a
|
|
69
|
+
// dropped/never-migrated column fails fast with one clear error instead
|
|
70
|
+
// of one identical failures[] entry per scanned row (1M rows → 1M
|
|
71
|
+
// entries, and the real schema problem is buried in "x failed").
|
|
72
|
+
let uncheckedSchema = true;
|
|
73
|
+
for (;;) {
|
|
74
|
+
// Keyset, not OFFSET: rows deleted or changed while the loop runs must not shift the window.
|
|
75
|
+
const afterLastId = lastId === undefined ? "" : `AND ${quoteIdent("id")} > $3`;
|
|
76
|
+
const rows = await readBatchWithoutStatementTimeout(db, `SELECT * FROM ${quoteIdent(tableName)}
|
|
75
77
|
WHERE ${quoteIdent("tenant_id")} = $1 ${deletedFilter} ${afterLastId}
|
|
76
78
|
ORDER BY ${quoteIdent("id")} ASC
|
|
77
79
|
LIMIT $2`, lastId === undefined ? [tenantId, batchSize] : [tenantId, batchSize, lastId]);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
const docs = [];
|
|
91
|
-
for (const row of rows) {
|
|
92
|
-
result.scannedRows++;
|
|
93
|
-
const entityId = String(row["id"]);
|
|
94
|
-
try {
|
|
95
|
-
const rawState = rowToState(row, fieldNames);
|
|
96
|
-
// `pii + searchable` fields hold ciphertext on the read-table row —
|
|
97
|
-
// decrypt the same way the live write-path consumer does. An
|
|
98
|
-
// erased subject key doesn't throw, it swaps the value for
|
|
99
|
-
// PII_ERASED_SENTINEL (see decryptSearchableSubjectFields) — check
|
|
100
|
-
// for that AFTER decrypting, mirroring the softDelete filter above:
|
|
101
|
-
// resurrecting a crypto-shredded row here would undo
|
|
102
|
-
// purgeSearchDocumentsForSubject and make it findable again.
|
|
103
|
-
const state = await decryptSearchableSubjectFields(entityName, rawState, registry);
|
|
104
|
-
if (hasErasedSearchableSubjectField(entityName, state, registry))
|
|
105
|
-
continue;
|
|
106
|
-
const doc = await buildSearchDocument(entityName, entityId, state, registry);
|
|
107
|
-
if (doc)
|
|
108
|
-
docs.push({ entityId, doc });
|
|
109
|
-
}
|
|
110
|
-
catch (e) {
|
|
111
|
-
result.failures.push({ entityId, reason: e instanceof Error ? e.message : String(e) });
|
|
80
|
+
const [firstRow] = rows;
|
|
81
|
+
if (firstRow === undefined)
|
|
82
|
+
break;
|
|
83
|
+
if (uncheckedSchema) {
|
|
84
|
+
uncheckedSchema = false;
|
|
85
|
+
const sampleState = rowToState(firstRow, fieldNames);
|
|
86
|
+
const unmappedField = searchableFields.find((fieldName) => !(fieldName in sampleState));
|
|
87
|
+
if (unmappedField !== undefined) {
|
|
88
|
+
throw new Error(`reindexEntity: searchable field "${unmappedField}" is not mappable from read-table ` +
|
|
89
|
+
`column ${quoteIdent(tableName)} — likely a dropped/never-migrated column.`);
|
|
90
|
+
}
|
|
112
91
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
92
|
+
const docs = [];
|
|
93
|
+
for (const row of rows) {
|
|
94
|
+
result.scannedRows++;
|
|
95
|
+
const entityId = String(row["id"]);
|
|
116
96
|
try {
|
|
117
|
-
|
|
118
|
-
|
|
97
|
+
const rawState = rowToState(row, fieldNames);
|
|
98
|
+
// `pii + searchable` fields hold ciphertext on the read-table row —
|
|
99
|
+
// decrypt the same way the live write-path consumer does. An
|
|
100
|
+
// erased subject key doesn't throw, it swaps the value for
|
|
101
|
+
// PII_ERASED_SENTINEL (see decryptSearchableSubjectFields) — check
|
|
102
|
+
// for that AFTER decrypting, mirroring the softDelete filter above:
|
|
103
|
+
// resurrecting a crypto-shredded row here would undo
|
|
104
|
+
// purgeSearchDocumentsForSubject and make it findable again.
|
|
105
|
+
const state = await decryptSearchableSubjectFields(entityName, rawState, registry);
|
|
106
|
+
if (hasErasedSearchableSubjectField(entityName, state, registry))
|
|
107
|
+
continue;
|
|
108
|
+
const doc = await buildSearchDocument(entityName, entityId, state, registry);
|
|
109
|
+
if (doc)
|
|
110
|
+
docs.push({ entityId, doc });
|
|
119
111
|
}
|
|
120
112
|
catch (e) {
|
|
121
|
-
|
|
122
|
-
for (const { entityId } of docs)
|
|
123
|
-
result.failures.push({ entityId, reason });
|
|
113
|
+
result.failures.push({ entityId, reason: e instanceof Error ? e.message : String(e) });
|
|
124
114
|
}
|
|
125
115
|
}
|
|
126
|
-
|
|
127
|
-
|
|
116
|
+
if (!options.dryRun && docs.length > 0) {
|
|
117
|
+
if (searchAdapter.indexBatch) {
|
|
128
118
|
try {
|
|
129
|
-
await searchAdapter.
|
|
130
|
-
result.indexedRows
|
|
119
|
+
await searchAdapter.indexBatch(tenantId, docs.map((d) => d.doc));
|
|
120
|
+
result.indexedRows += docs.length;
|
|
131
121
|
}
|
|
132
122
|
catch (e) {
|
|
133
|
-
|
|
123
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
124
|
+
for (const { entityId } of docs)
|
|
125
|
+
result.failures.push({ entityId, reason });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
for (const { entityId, doc } of docs) {
|
|
130
|
+
try {
|
|
131
|
+
await searchAdapter.index(tenantId, doc);
|
|
132
|
+
result.indexedRows++;
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
result.failures.push({
|
|
136
|
+
entityId,
|
|
137
|
+
reason: e instanceof Error ? e.message : String(e),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
134
140
|
}
|
|
135
141
|
}
|
|
136
142
|
}
|
|
143
|
+
else if (options.dryRun) {
|
|
144
|
+
result.wouldIndexRows += docs.length;
|
|
145
|
+
}
|
|
146
|
+
lastId = rows[rows.length - 1]?.["id"];
|
|
147
|
+
if (rows.length < batchSize)
|
|
148
|
+
break;
|
|
137
149
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
lastId = rows[rows.length - 1]?.["id"];
|
|
142
|
-
if (rows.length < batchSize)
|
|
143
|
-
break;
|
|
144
|
-
}
|
|
145
|
-
return result;
|
|
150
|
+
return result;
|
|
151
|
+
});
|
|
146
152
|
}
|
package/dist/secrets/index.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
export { createDekCache, type DekCache,
|
|
1
|
+
export { createDekCache, type DekCache, withDekCache } from "./dek-cache.ts";
|
|
2
2
|
export { derivePurposeSecret } from "./derive-purpose-secret.ts";
|
|
3
|
-
export { createEnvMasterKeyProvider
|
|
3
|
+
export { createEnvMasterKeyProvider } from "./env-master-key-provider.ts";
|
|
4
4
|
export { decryptValue, encryptValue } from "./envelope.ts";
|
|
5
5
|
export { createEnvelopeCipher, type EnvelopeCipher, type EnvelopeCipherOptions, } from "./envelope-cipher.ts";
|
|
6
|
-
export { assertNoSecretLeak } from "./leak-guard.ts";
|
|
7
6
|
export { rewrapDek } from "./rotation.ts";
|
|
8
7
|
export { decodeStoredEnvelope, encodeStoredEnvelope, isStoredEnvelope, type StoredEnvelope, } from "./stored-envelope.ts";
|
|
9
|
-
export {
|
|
8
|
+
export { createSecret, type MasterKeyProvider, type Secret, type SecretsContext, } from "./types.ts";
|
package/dist/secrets/index.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
export { createDekCache, withDekCache } from "./dek-cache.js";
|
|
2
2
|
export { derivePurposeSecret } from "./derive-purpose-secret.js";
|
|
3
|
-
export { createEnvMasterKeyProvider
|
|
3
|
+
export { createEnvMasterKeyProvider } from "./env-master-key-provider.js";
|
|
4
4
|
export { decryptValue, encryptValue } from "./envelope.js";
|
|
5
5
|
export { createEnvelopeCipher, } from "./envelope-cipher.js";
|
|
6
|
-
export { assertNoSecretLeak } from "./leak-guard.js";
|
|
7
6
|
export { rewrapDek } from "./rotation.js";
|
|
8
7
|
export { decodeStoredEnvelope, encodeStoredEnvelope, isStoredEnvelope, } from "./stored-envelope.js";
|
|
9
|
-
export { createSecret,
|
|
8
|
+
export { createSecret, } from "./types.js";
|
package/dist/seeding/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { runEventStoreSeed } from "./entity-seed.ts";
|
|
2
2
|
export { createTestUser, TestUsers, testTenantId, testUserId } from "./seed-users.ts";
|
|
3
|
-
export {
|
|
3
|
+
export type { SeedIfExists } from "./types.ts";
|
package/dist/seeding/index.js
CHANGED
package/dist/time/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { warnIfNonUtcServerTimeZone } from "./boot-tz-warning.ts";
|
|
2
|
-
export type {
|
|
2
|
+
export type { GeoTzProvider } from "./geo-tz.ts";
|
|
3
3
|
export { isValidIanaTimeZone } from "./iana.ts";
|
|
4
4
|
export { instantToLegacyDate, legacyDateToInstant } from "./legacy-date.ts";
|
|
5
5
|
export { ensureTemporalPolyfill, getTemporal } from "./polyfill.ts";
|
|
6
|
-
export {
|
|
6
|
+
export { createTzContext, type TzContext, } from "./tz-context.ts";
|
package/dist/time/index.js
CHANGED
|
@@ -12,4 +12,4 @@ export { warnIfNonUtcServerTimeZone } from "./boot-tz-warning.js";
|
|
|
12
12
|
export { isValidIanaTimeZone } from "./iana.js";
|
|
13
13
|
export { instantToLegacyDate, legacyDateToInstant } from "./legacy-date.js";
|
|
14
14
|
export { ensureTemporalPolyfill, getTemporal } from "./polyfill.js";
|
|
15
|
-
export { createTzContext,
|
|
15
|
+
export { createTzContext, } from "./tz-context.js";
|
|
@@ -6,8 +6,3 @@ export type { Clock, LocatedTimestampJson, TzContext, TzContextOptions, } from "
|
|
|
6
6
|
* buildHandlerContext stays ambient-free.
|
|
7
7
|
*/
|
|
8
8
|
export declare function createTzContext(options?: TzContextOptions): TzContext;
|
|
9
|
-
/**
|
|
10
|
-
* Convenience: ensures the polyfill is loaded AND creates the TzContext in
|
|
11
|
-
* one await. Prefer this in boot code.
|
|
12
|
-
*/
|
|
13
|
-
export declare function createTzContextAsync(options?: TzContextOptions): Promise<TzContext>;
|
package/dist/time/tz-context.js
CHANGED
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
// The pure type contracts (TzContext, TzContextOptions, LocatedTimestampJson)
|
|
19
19
|
// live in @cosmicdrift/kumiko-types/tz-context — only the factories are here.
|
|
20
20
|
import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
|
|
21
|
-
import { ensureTemporalPolyfill } from "./polyfill.js";
|
|
22
21
|
const SYSTEM_CLOCK = {
|
|
23
22
|
now: () => Temporal.Now.instant(), // @wrapper-known semantic-alias
|
|
24
23
|
};
|
|
@@ -72,11 +71,3 @@ export function createTzContext(options = {}) {
|
|
|
72
71
|
},
|
|
73
72
|
};
|
|
74
73
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Convenience: ensures the polyfill is loaded AND creates the TzContext in
|
|
77
|
-
* one await. Prefer this in boot code.
|
|
78
|
-
*/
|
|
79
|
-
export async function createTzContextAsync(options) {
|
|
80
|
-
await ensureTemporalPolyfill();
|
|
81
|
-
return createTzContext(options);
|
|
82
|
-
}
|
package/dist/ui-types/index.d.ts
CHANGED
|
@@ -5,22 +5,19 @@ export type { FormDerivationScreen } from "../engine/form-derivations.ts";
|
|
|
5
5
|
export { applyFormDerivations, isFormDerivationInputMode, isUnusedFallbackOperand, } from "../engine/form-derivations.ts";
|
|
6
6
|
export type { ParsedRefTarget } from "../engine/parse-ref-target.ts";
|
|
7
7
|
export { parseRefTarget } from "../engine/parse-ref-target.ts";
|
|
8
|
-
export
|
|
9
|
-
export {
|
|
10
|
-
export type {
|
|
11
|
-
export type { AccessRule, OpenToAllAccessRule, OpenToAllDeclaration, OpenToAllPersonalData, RoleAccessPersonalData, RoleAccessRule, } from "../engine/types/handlers.ts";
|
|
8
|
+
export { ACTION_FORM_PSEUDO_ENTITY, availableSelectOptions, evalFieldCondition, findUnavailableSelectOptions, isExtensionEditSection, isFieldsEditSection, isFormatSpec, isRecordLocked, isUnchangedValue, isWriteFormEditSection, normalizeEditField, normalizeListColumn, resolveNavParentScreen, sectionFieldSpecs, } from "../engine/screen-helpers.ts";
|
|
9
|
+
export type { EmbeddedDerivedCellDef, EntityDefinition, FieldDefinition, OptionsQueryPayload, SelectOptionTone, TextFieldDef, } from "../engine/types/fields.ts";
|
|
10
|
+
export type { AccessRule } from "../engine/types/handlers.ts";
|
|
12
11
|
export { isOpenToAllGranted, isUiAccessGranted } from "../engine/types/handlers.ts";
|
|
13
12
|
export type { IconKey, NavDefinition, NavIconKey } from "../engine/types/nav.ts";
|
|
14
|
-
export type { ActionFormFooterAction, ActionFormLoad, ActionFormRedirect, ActionFormScreenDefinition, ActionFormSuccessFact, ActionFormSuccessLink, ConfigEditScreenDefinition, CustomScreenDefinition,
|
|
15
|
-
export { MAX_BULK_SELECTION
|
|
13
|
+
export type { ActionFormFooterAction, ActionFormLoad, ActionFormRedirect, ActionFormScreenDefinition, ActionFormSuccessFact, ActionFormSuccessLink, ConfigEditScreenDefinition, CustomScreenDefinition, DashboardChartMarkerKind, DashboardChartPanel, DashboardCurrencyFormat, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardProgressTone, DashboardRefresh, DashboardRelativeTimeParam, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardText, DashboardTextBlock, DashboardTextPanel, DashboardTextParam, DashboardTimeRangeDefinition, EditExtensionSection, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditScreenDefinition, EntityListFacetConfig, EntityListScreenDefinition, FieldAffix, FieldCondition, FieldFillAction, FieldIconKey, FieldRenderer, FormWidth, ListBulkAction, ListColumnSpec, ListEmptyStateSpec, ListFacetSpec, ListSortSpec, ListTableOptions, MetricNavigate, PlatformComponent, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSubtitlePart, RelatedListRowTone, RelatedListToolbarAction, RowAction, RowActionClientAction, RowActionDisplay, RowActionDrawer, RowActionMode, RowActionNavigate, RowActionWriteHandler, RowFieldExtractor, ScreenDefinition, ScreenSlots, SecretMintConfirmStep, SecretMintScreenDefinition, SecretsEditScreenDefinition, ToolbarAction, } from "../engine/types/screen.ts";
|
|
14
|
+
export { MAX_BULK_SELECTION } from "../engine/types/screen.ts";
|
|
16
15
|
export type { TargetRef } from "../engine/types/target-ref.ts";
|
|
17
|
-
export type { TreeAction
|
|
16
|
+
export type { TreeAction } from "../engine/types/tree-node.ts";
|
|
18
17
|
export type { WorkspaceDefinition } from "../engine/types/workspace.ts";
|
|
19
18
|
export { ACTION_FORM_ENTITY, handlerFieldLabelKey, handlerTitleKey, PROJECTION_DETAIL_ENTITY, WRITE_FORM_SECTION_ENTITY, } from "../i18n/required-surface-keys.ts";
|
|
20
19
|
export type { AppSchema, FeatureSchema, QualifiedContentCollection, WorkspaceSchema, } from "./app-schema.ts";
|
|
21
|
-
export
|
|
22
|
-
export { CARD_META_MAX, cardColumnRoles, cardFileDisplayKind } from "./card-column-roles.ts";
|
|
20
|
+
export { CARD_META_MAX, cardColumnRoles } from "./card-column-roles.ts";
|
|
23
21
|
export { type Formality, formalLocaleTag } from "./formality.ts";
|
|
24
|
-
export type { ListRowMetaColumnType, ListRowMetaReference, ReferenceLookupSource, SystemReferenceLabel, } from "./list-row-meta.ts";
|
|
25
22
|
export { LIST_ROW_META_COLUMNS, LIST_ROW_META_REFERENCES, REFERENCE_LOOKUP_SOURCES, SYSTEM_REFERENCE_LABELS, UNRESOLVED_REFERENCE_LABEL_KEYS, } from "./list-row-meta.ts";
|
|
26
|
-
export {
|
|
23
|
+
export { resolveTranslationValue, type TranslationValue, translationValueOtherText, } from "./plural.ts";
|
package/dist/ui-types/index.js
CHANGED
|
@@ -23,11 +23,11 @@ export { NO_WIDGET_FIELD_TYPES } from "@cosmicdrift/kumiko-types/fields";
|
|
|
23
23
|
export { computeDerivedCellValue, roundDerivedCellValue } from "../engine/embedded-derived.js";
|
|
24
24
|
export { applyFormDerivations, isFormDerivationInputMode, isUnusedFallbackOperand, } from "../engine/form-derivations.js";
|
|
25
25
|
export { parseRefTarget } from "../engine/parse-ref-target.js";
|
|
26
|
-
export { ACTION_FORM_PSEUDO_ENTITY, availableSelectOptions, evalFieldCondition,
|
|
26
|
+
export { ACTION_FORM_PSEUDO_ENTITY, availableSelectOptions, evalFieldCondition, findUnavailableSelectOptions, isExtensionEditSection, isFieldsEditSection, isFormatSpec, isRecordLocked, isUnchangedValue, isWriteFormEditSection, normalizeEditField, normalizeListColumn, resolveNavParentScreen, sectionFieldSpecs, } from "../engine/screen-helpers.js";
|
|
27
27
|
export { isOpenToAllGranted, isUiAccessGranted } from "../engine/types/handlers.js";
|
|
28
|
-
export { MAX_BULK_SELECTION
|
|
28
|
+
export { MAX_BULK_SELECTION } from "../engine/types/screen.js";
|
|
29
29
|
export { ACTION_FORM_ENTITY, handlerFieldLabelKey, handlerTitleKey, PROJECTION_DETAIL_ENTITY, WRITE_FORM_SECTION_ENTITY, } from "../i18n/required-surface-keys.js";
|
|
30
|
-
export { CARD_META_MAX, cardColumnRoles
|
|
30
|
+
export { CARD_META_MAX, cardColumnRoles } from "./card-column-roles.js";
|
|
31
31
|
export { formalLocaleTag } from "./formality.js";
|
|
32
32
|
export { LIST_ROW_META_COLUMNS, LIST_ROW_META_REFERENCES, REFERENCE_LOOKUP_SOURCES, SYSTEM_REFERENCE_LABELS, UNRESOLVED_REFERENCE_LABEL_KEYS, } from "./list-row-meta.js";
|
|
33
33
|
export { resolveTranslationValue, translationValueOtherText, } from "./plural.js";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { UpgradeMarkerResolvedManual } from "./upgrade-marker-parse.ts";
|
|
1
2
|
export type UpgradeChangelogManual = {
|
|
2
3
|
readonly id: string;
|
|
3
4
|
readonly version: string;
|
|
@@ -23,5 +24,5 @@ export type UpgradeChangelogSection = {
|
|
|
23
24
|
export declare function renderUpgradeSection(section: UpgradeChangelogSection): string;
|
|
24
25
|
/** Puts the section on top; a section for the same target version is replaced, so a re-run stays idempotent. */
|
|
25
26
|
export declare function mergeUpgradeSection(existing: string | undefined, section: UpgradeChangelogSection): string;
|
|
26
|
-
/** Pure string match on the rendered `- [open] <id> · ` prefix, in every section. */
|
|
27
|
-
export declare function
|
|
27
|
+
/** Pure string match on the rendered `- [open] <id> · ` prefix, in every section; each id gets its own resolution. */
|
|
28
|
+
export declare function syncResolvedManualStatuses(content: string, resolved: readonly Pick<UpgradeMarkerResolvedManual, "id" | "resolution">[]): string;
|
|
@@ -46,17 +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. */
|
|
50
|
-
export function
|
|
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] ";
|
|
51
55
|
return content
|
|
52
56
|
.split("\n")
|
|
53
57
|
.map((line) => {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return 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}`;
|
|
60
64
|
})
|
|
61
65
|
.join("\n");
|
|
62
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,15 +1,8 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export type { ManualResolution, UpgradeMarkerManual, UpgradeMarkerResolvedManual };
|
|
3
|
-
export { manualEntryId };
|
|
4
|
-
export type UpgradeCliOut = {
|
|
5
|
-
readonly log: (line: string) => void;
|
|
6
|
-
readonly err: (line: string) => void;
|
|
7
|
-
};
|
|
8
|
-
export declare function findFeatureChangelogFiles(featuresDir: string): string[];
|
|
1
|
+
import { type UpgradeCliOut } from "./upgrade-cli-internals.ts";
|
|
9
2
|
export declare function findPackageChangelogFiles(cwd: string): string[];
|
|
10
3
|
export declare function findFeaturesDirs(cwd: string): string[];
|
|
11
|
-
export declare function findCodemodScriptsRoot(repoRoot: string): string | null;
|
|
12
4
|
export declare function resolveCodemodScript(repoRoot: string, codemodField: string | undefined): string | null;
|
|
13
5
|
export declare function runUpgradeCli(argv: readonly string[], cwd: string, out: UpgradeCliOut, options?: {
|
|
14
6
|
readonly repoRoot?: string;
|
|
7
|
+
readonly codemodResolveFrom?: string;
|
|
15
8
|
}): Promise<number>;
|