@cosmicdrift/kumiko-framework 0.369.0 → 0.370.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 +14 -1
- package/agents/examples/apex-surface-auth.md +2 -1
- package/agents/examples/app-config.md +98 -0
- package/agents/examples/auth-mfa.md +72 -0
- package/agents/examples/compose-stacks.md +188 -0
- package/agents/examples/env-composition.md +268 -0
- package/agents/examples/host-routing.md +181 -0
- package/agents/examples/legal-pages.md +52 -3
- package/agents/examples/managed-config.md +1 -0
- package/agents/examples/managed-pages.md +1 -0
- package/agents/examples/prod-boot-options.md +180 -0
- package/agents/examples/relations.md +4 -0
- package/agents/examples/secrets-demo.md +4 -2
- package/agents/examples/security-baseline.md +20 -17
- package/agents/examples.md +6 -1
- package/agents/features.md +14 -2
- package/dist/api/anonymous-cookie.d.ts +1 -1
- package/dist/api/anonymous-live-entities.d.ts +1 -1
- package/dist/api/auth-middleware.d.ts +2 -2
- package/dist/api/auth-routes.d.ts +7 -7
- package/dist/api/extra-route.d.ts +2 -2
- package/dist/api/index.d.ts +37 -37
- package/dist/api/jwt.d.ts +1 -1
- package/dist/api/observability-middleware.d.ts +1 -1
- package/dist/api/readiness.d.ts +1 -1
- package/dist/api/redis-sse-broker.d.ts +2 -2
- package/dist/api/request-context.d.ts +1 -1
- package/dist/api/request-id-middleware.d.ts +3 -3
- package/dist/api/route-registrars.d.ts +4 -4
- package/dist/api/routes.d.ts +1 -1
- package/dist/api/server.d.ts +16 -16
- package/dist/api/sse-broker.d.ts +1 -1
- package/dist/api/sse-route.d.ts +1 -1
- package/dist/api/websocket-route.d.ts +3 -3
- package/dist/auth/index.d.ts +2 -2
- package/dist/compliance/duration-spec.d.ts +2 -2
- package/dist/compliance/index.d.ts +6 -6
- package/dist/compliance/profiles.d.ts +1 -1
- package/dist/config/index.d.ts +44 -0
- package/dist/config/index.js +61 -0
- package/dist/crypto/blind-index.d.ts +1 -1
- package/dist/crypto/event-pii.d.ts +1 -1
- package/dist/crypto/in-memory-kms-adapter.d.ts +1 -1
- package/dist/crypto/index.d.ts +11 -11
- package/dist/crypto/is-self-pii-field.d.ts +1 -1
- package/dist/crypto/kms-wiring.d.ts +2 -2
- package/dist/crypto/owner-transition-rekey.d.ts +1 -1
- package/dist/crypto/pg-kms-adapter.d.ts +1 -1
- package/dist/crypto/pii-field-encryption.d.ts +4 -4
- package/dist/crypto/request-kms-cache.d.ts +1 -1
- package/dist/crypto/subject-resolver.d.ts +3 -3
- package/dist/db/apply-entity-event.d.ts +4 -4
- package/dist/db/assert-exists-in.d.ts +4 -4
- package/dist/db/blind-index-cleanup.d.ts +2 -2
- package/dist/db/collect-table-metas.d.ts +2 -2
- package/dist/db/compound-types.d.ts +1 -1
- package/dist/db/config-seed.d.ts +5 -5
- package/dist/db/connection.d.ts +1 -6
- package/dist/db/connection.js +15 -4
- package/dist/db/dialect.d.ts +1 -1
- package/dist/db/eagerload.d.ts +3 -3
- package/dist/db/entity-field-encryption.d.ts +3 -3
- package/dist/db/entity-field-encryption.js +3 -1
- package/dist/db/entity-table-from-registry.d.ts +3 -3
- package/dist/db/entity-table-meta.d.ts +3 -3
- package/dist/db/event-store-executor-context.d.ts +9 -9
- package/dist/db/event-store-executor-read.d.ts +2 -2
- package/dist/db/event-store-executor-write.d.ts +2 -2
- package/dist/db/event-store-executor.d.ts +8 -8
- package/dist/db/feature-table-sources.d.ts +1 -1
- package/dist/db/index.d.ts +39 -39
- package/dist/db/located-timestamp.d.ts +1 -1
- package/dist/db/lock-guard.d.ts +2 -2
- package/dist/db/migrate-generator.d.ts +2 -2
- package/dist/db/migrate-runner.d.ts +1 -1
- package/dist/db/money.d.ts +1 -1
- package/dist/db/parent-ref-clause.d.ts +4 -4
- package/dist/db/projection-registry-binding.d.ts +1 -1
- package/dist/db/queries/advisory-lock.d.ts +1 -1
- package/dist/db/queries/backfill-pii.d.ts +2 -2
- package/dist/db/queries/ddl.d.ts +1 -1
- package/dist/db/queries/entity-read.d.ts +1 -1
- package/dist/db/queries/es-ops.d.ts +1 -1
- package/dist/db/queries/event-consumer.d.ts +2 -2
- package/dist/db/queries/event-store-admin.d.ts +1 -1
- package/dist/db/queries/event-store-transfer.d.ts +1 -1
- package/dist/db/queries/event-store.d.ts +1 -1
- package/dist/db/queries/pii-backfill-state.d.ts +1 -1
- package/dist/db/queries/projection-rebuild.d.ts +1 -1
- package/dist/db/queries/raw-sql.d.ts +1 -1
- package/dist/db/queries/seed-context.d.ts +2 -2
- package/dist/db/queries/shadow-swap.d.ts +3 -3
- package/dist/db/queries/table-ops.d.ts +1 -1
- package/dist/db/queries/test-stack.d.ts +2 -2
- package/dist/db/query.d.ts +3 -3
- package/dist/db/rebuild-marker.d.ts +1 -1
- package/dist/db/reference-data.d.ts +3 -3
- package/dist/db/render-ddl.d.ts +1 -1
- package/dist/db/replay-migration-sql.d.ts +1 -1
- package/dist/db/retired-framework-tables.d.ts +1 -1
- package/dist/db/schema-inspection.d.ts +1 -1
- package/dist/db/table-builder.d.ts +4 -4
- package/dist/db/table-push.d.ts +3 -3
- package/dist/db/tenant-db-runner.d.ts +2 -2
- package/dist/db/tenant-db.d.ts +7 -9
- package/dist/db/tenant-db.js +2 -12
- package/dist/derivatives/derivatives-context.d.ts +3 -3
- package/dist/derivatives/field-variants.d.ts +1 -1
- package/dist/derivatives/index.d.ts +6 -6
- package/dist/engine/access.d.ts +1 -1
- package/dist/engine/active-membership.d.ts +2 -2
- package/dist/engine/boot-validator/access-declarations.d.ts +1 -1
- package/dist/engine/boot-validator/access-roles.d.ts +1 -1
- package/dist/engine/boot-validator/action-wiring.d.ts +1 -1
- package/dist/engine/boot-validator/api-ext.d.ts +1 -1
- package/dist/engine/boot-validator/boot-check.d.ts +1 -1
- package/dist/engine/boot-validator/card-meta-overflow.d.ts +1 -1
- package/dist/engine/boot-validator/config-deps.d.ts +1 -1
- package/dist/engine/boot-validator/detail-screens.d.ts +2 -2
- package/dist/engine/boot-validator/entity-handler.d.ts +1 -1
- package/dist/engine/boot-validator/entity-list-screens.d.ts +1 -1
- package/dist/engine/boot-validator/gdpr-storage.d.ts +1 -1
- package/dist/engine/boot-validator/global-tenancy.d.ts +1 -1
- package/dist/engine/boot-validator/handler-field-references.d.ts +1 -1
- package/dist/engine/boot-validator/i18n-keys.d.ts +1 -1
- package/dist/engine/boot-validator/index.d.ts +7 -7
- package/dist/engine/boot-validator/nav.d.ts +1 -1
- package/dist/engine/boot-validator/ownership.d.ts +2 -2
- package/dist/engine/boot-validator/parent-ref.d.ts +1 -1
- package/dist/engine/boot-validator/pii-retention.d.ts +2 -2
- package/dist/engine/boot-validator/projection-list-screens.d.ts +1 -1
- package/dist/engine/boot-validator/query-output-columns.d.ts +1 -1
- package/dist/engine/boot-validator/query-refs.d.ts +1 -1
- package/dist/engine/boot-validator/record-owned.d.ts +1 -1
- package/dist/engine/boot-validator/screens.d.ts +2 -2
- package/dist/engine/boot-validator/security-baseline.d.ts +1 -1
- package/dist/engine/boot-validator/selector-owner-panels.d.ts +1 -1
- package/dist/engine/boot-validator/transfer-graph.d.ts +2 -2
- package/dist/engine/boot-validator/url-prefill-fields.d.ts +1 -1
- package/dist/engine/boot-validator/workspaces.d.ts +1 -1
- package/dist/engine/boot-validator.d.ts +1 -1
- package/dist/engine/bridge-stub.d.ts +1 -1
- package/dist/engine/build-app-schema.d.ts +2 -2
- package/dist/engine/build-config-feature-schema.d.ts +5 -5
- package/dist/engine/build-target.d.ts +2 -2
- package/dist/engine/changeset-changes.d.ts +1 -1
- package/dist/engine/codemod/index.d.ts +2 -2
- package/dist/engine/config-helpers.d.ts +1 -1
- package/dist/engine/constants.d.ts +1 -1
- package/dist/engine/create-app.d.ts +2 -2
- package/dist/engine/cross-tenant.d.ts +2 -2
- package/dist/engine/dedupe-features.d.ts +1 -1
- package/dist/engine/define-feature.d.ts +1 -1
- package/dist/engine/define-feature.js +2 -2
- package/dist/engine/define-handler.d.ts +4 -4
- package/dist/engine/define-step.d.ts +1 -1
- package/dist/engine/define-workflow.d.ts +2 -2
- package/dist/engine/effective-features.d.ts +1 -1
- package/dist/engine/embedded-derived.d.ts +1 -1
- package/dist/engine/entity-handlers.d.ts +6 -5
- package/dist/engine/entity-handlers.js +6 -3
- package/dist/engine/event-def.d.ts +15 -0
- package/dist/engine/event-def.js +123 -0
- package/dist/engine/event-helpers.d.ts +1 -1
- package/dist/engine/extension-names.d.ts +8 -8
- package/dist/engine/extension-selector-plugins.d.ts +2 -2
- package/dist/engine/extensions/escape-hatch-usage.d.ts +1 -1
- package/dist/engine/extensions/storage-provider.d.ts +1 -1
- package/dist/engine/extensions/tenant-data.d.ts +3 -3
- package/dist/engine/extensions/tenant-resource.d.ts +2 -2
- package/dist/engine/extensions/user-data.d.ts +2 -2
- package/dist/engine/factories.d.ts +1 -1
- package/dist/engine/feature-ast/extractors/ai-steps.d.ts +2 -2
- package/dist/engine/feature-ast/extractors/events.d.ts +2 -2
- package/dist/engine/feature-ast/extractors/handlers.d.ts +4 -4
- package/dist/engine/feature-ast/extractors/hooks.d.ts +5 -5
- package/dist/engine/feature-ast/extractors/index.d.ts +14 -14
- package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +3 -3
- package/dist/engine/feature-ast/extractors/projections-screens.d.ts +3 -3
- package/dist/engine/feature-ast/extractors/round1.d.ts +2 -2
- package/dist/engine/feature-ast/extractors/round2.d.ts +2 -2
- package/dist/engine/feature-ast/extractors/round3.d.ts +4 -4
- package/dist/engine/feature-ast/extractors/round5.d.ts +2 -2
- package/dist/engine/feature-ast/extractors/round6.d.ts +2 -2
- package/dist/engine/feature-ast/extractors/shared.d.ts +2 -2
- package/dist/engine/feature-ast/index.d.ts +16 -16
- package/dist/engine/feature-ast/parse.d.ts +2 -2
- package/dist/engine/feature-ast/patch.d.ts +1 -1
- package/dist/engine/feature-ast/patcher.d.ts +15 -15
- package/dist/engine/feature-ast/pattern-change-schema.d.ts +10 -10
- package/dist/engine/feature-ast/patterns.d.ts +15 -15
- package/dist/engine/feature-ast/render.d.ts +1 -1
- package/dist/engine/feature-builder-state.d.ts +5 -5
- package/dist/engine/feature-config-events-jobs.d.ts +3 -3
- package/dist/engine/feature-config-events-jobs.js +8 -130
- package/dist/engine/feature-entity-handlers.d.ts +4 -4
- package/dist/engine/feature-entity-handlers.js +11 -5
- package/dist/engine/feature-manifest.d.ts +1 -1
- package/dist/engine/feature-ui-extensions.d.ts +7 -7
- package/dist/engine/feature-ui-extensions.js +2 -2
- package/dist/engine/field-access.d.ts +1 -1
- package/dist/engine/field-helpers.d.ts +1 -1
- package/dist/engine/handler-helpers.d.ts +1 -1
- package/dist/engine/index.d.ts +89 -88
- package/dist/engine/index.js +1 -0
- package/dist/engine/instruction-fields.d.ts +1 -1
- package/dist/engine/object-form.d.ts +1 -1
- package/dist/engine/object-form.js +5 -6
- package/dist/engine/ownership.d.ts +3 -3
- package/dist/engine/pattern-library/index.d.ts +2 -2
- package/dist/engine/pattern-library/library.d.ts +2 -2
- package/dist/engine/pattern-library/mixed-schemas.d.ts +1 -1
- package/dist/engine/pattern-library/opaque-schemas.d.ts +1 -1
- package/dist/engine/pattern-library/shared-fields.d.ts +1 -1
- package/dist/engine/pattern-library/static-schemas.d.ts +1 -1
- package/dist/engine/pattern-library/types.d.ts +1 -1
- package/dist/engine/personal-data-fields.d.ts +2 -2
- package/dist/engine/pipeline.d.ts +2 -2
- package/dist/engine/project-app-schema-for-roles.d.ts +1 -1
- package/dist/engine/projection-helpers.d.ts +4 -4
- package/dist/engine/read-claim.d.ts +1 -1
- package/dist/engine/registry-facade.d.ts +2 -2
- package/dist/engine/registry-ingest.d.ts +2 -2
- package/dist/engine/registry-state.d.ts +2 -2
- package/dist/engine/registry-validate.d.ts +3 -3
- package/dist/engine/registry.d.ts +1 -1
- package/dist/engine/resolve-config-or-param.d.ts +2 -2
- package/dist/engine/role-assignment.d.ts +1 -1
- package/dist/engine/run-in.d.ts +1 -1
- package/dist/engine/run-pipeline.d.ts +3 -3
- package/dist/engine/schema-builder.d.ts +1 -1
- package/dist/engine/screen-filter-ops.d.ts +1 -1
- package/dist/engine/screen-helpers.d.ts +2 -2
- package/dist/engine/soft-delete-cleanup.d.ts +2 -2
- package/dist/engine/steps/_event-match.d.ts +1 -1
- package/dist/engine/steps/_no-return-guard.d.ts +1 -1
- package/dist/engine/steps/_read-source.d.ts +4 -4
- package/dist/engine/steps/_resolver-utils.d.ts +1 -1
- package/dist/engine/steps/aggregate-append-event.d.ts +1 -1
- package/dist/engine/steps/aggregate-create.d.ts +2 -2
- package/dist/engine/steps/aggregate-update.d.ts +3 -3
- package/dist/engine/steps/branch.d.ts +1 -1
- package/dist/engine/steps/call-feature.d.ts +2 -2
- package/dist/engine/steps/compute.d.ts +1 -1
- package/dist/engine/steps/for-each.d.ts +1 -1
- package/dist/engine/steps/mail-send.d.ts +1 -1
- package/dist/engine/steps/read-find-many.d.ts +2 -2
- package/dist/engine/steps/read-find-one.d.ts +2 -2
- package/dist/engine/steps/retry.d.ts +1 -1
- package/dist/engine/steps/return.d.ts +2 -2
- package/dist/engine/steps/unsafe-projection-delete.d.ts +2 -2
- package/dist/engine/steps/unsafe-projection-upsert.d.ts +1 -1
- package/dist/engine/steps/wait-for-event.d.ts +1 -1
- package/dist/engine/steps/wait.d.ts +1 -1
- package/dist/engine/steps/webhook-send.d.ts +1 -1
- package/dist/engine/strip-disabled-features-from-app-schema.d.ts +4 -4
- package/dist/engine/system-user.d.ts +2 -2
- package/dist/engine/template-variables.d.ts +1 -1
- package/dist/engine/tier-resolver-extension.d.ts +4 -4
- package/dist/engine/transfer-adjacency.d.ts +1 -1
- package/dist/engine/types/index.d.ts +6 -6
- package/dist/engine/validate-projection-allowlist.d.ts +1 -1
- package/dist/engine/validation.d.ts +1 -1
- package/dist/entrypoint/index.d.ts +12 -12
- package/dist/env/dry-run.d.ts +14 -1
- package/dist/env/dry-run.js +50 -0
- package/dist/env/index.d.ts +54 -16
- package/dist/env/index.js +60 -6
- package/dist/errors/classes.d.ts +3 -3
- package/dist/errors/docs-url.d.ts +1 -1
- package/dist/errors/index.d.ts +18 -18
- package/dist/errors/member-resolution.d.ts +1 -1
- package/dist/errors/serialize.d.ts +2 -2
- package/dist/errors/subject-erased.d.ts +1 -1
- package/dist/errors/to-kumiko-error.d.ts +1 -1
- package/dist/errors/write-error-info.d.ts +1 -1
- package/dist/errors/zod-bridge.d.ts +1 -1
- package/dist/es-ops/context.d.ts +4 -4
- package/dist/es-ops/index.d.ts +4 -4
- package/dist/es-ops/operations-schema.d.ts +1 -1
- package/dist/es-ops/runner.d.ts +3 -3
- package/dist/es-ops/runner.js +9 -1
- package/dist/es-ops/types.d.ts +2 -2
- package/dist/event-store/admin-api.d.ts +3 -3
- package/dist/event-store/archive.d.ts +2 -2
- package/dist/event-store/event-store.d.ts +2 -2
- package/dist/event-store/events-schema.d.ts +1 -1
- package/dist/event-store/index.d.ts +15 -15
- package/dist/event-store/provenance-append.d.ts +3 -3
- package/dist/event-store/rebuild-dead-letter.d.ts +2 -2
- package/dist/event-store/row-to-stored-event.d.ts +2 -2
- package/dist/event-store/snapshot.d.ts +2 -2
- package/dist/event-store/tenant-db-append.d.ts +2 -2
- package/dist/event-store/transfer.d.ts +3 -3
- package/dist/event-store/upcaster-dead-letter.d.ts +2 -2
- package/dist/event-store/upcaster.d.ts +3 -3
- package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -2
- package/dist/files/bind-pending-file-refs.d.ts +3 -3
- package/dist/files/create-file-ref-from-bytes.d.ts +4 -4
- package/dist/files/create-file-ref.d.ts +3 -3
- package/dist/files/dispose-removed-file-refs.d.ts +2 -2
- package/dist/files/feature.d.ts +3 -3
- package/dist/files/file-handle.d.ts +1 -1
- package/dist/files/file-ref-entity.d.ts +1 -1
- package/dist/files/file-ref-table.d.ts +1 -1
- package/dist/files/file-routes.d.ts +5 -5
- package/dist/files/in-memory-provider.d.ts +1 -1
- package/dist/files/index.d.ts +20 -20
- package/dist/files/load-save-file-refs.d.ts +2 -2
- package/dist/files/local-provider.d.ts +1 -1
- package/dist/files/provider-resolver.d.ts +5 -5
- package/dist/files/purge-expired-file-ref-bytes.d.ts +2 -2
- package/dist/files/record-read-check.d.ts +1 -1
- package/dist/files/record-write-check.d.ts +3 -3
- package/dist/files/storage-tracking.d.ts +2 -2
- package/dist/files/types.d.ts +1 -1
- package/dist/files/zip-stream.d.ts +1 -1
- package/dist/i18n/index.d.ts +4 -4
- package/dist/i18n/mail-registry.d.ts +1 -1
- package/dist/i18n/required-surface-keys.d.ts +1 -1
- package/dist/i18n/settings-hub-keys.d.ts +1 -1
- package/dist/internal/stack-support.d.ts +12 -12
- package/dist/internal/testing.d.ts +4 -4
- package/dist/jobs/index.d.ts +2 -2
- package/dist/jobs/job-runner.d.ts +1 -1
- package/dist/jobs/max-per-tenant.d.ts +1 -1
- package/dist/lifecycle/index.d.ts +2 -2
- package/dist/lifecycle/lifecycle.d.ts +1 -1
- package/dist/lifecycle/signal-handlers.d.ts +1 -1
- package/dist/logging/index.d.ts +4 -4
- package/dist/logging/pino-logger.d.ts +1 -1
- package/dist/logging/utils.d.ts +1 -1
- package/dist/migrations/index.d.ts +4 -4
- package/dist/migrations/kumiko-drift.d.ts +1 -1
- package/dist/migrations/pending-rebuilds.d.ts +5 -5
- package/dist/migrations/pii-event-backfill.d.ts +4 -4
- package/dist/migrations/projection-table-index.d.ts +1 -1
- package/dist/observability/console-provider.d.ts +1 -1
- package/dist/observability/context.d.ts +1 -1
- package/dist/observability/escape-hatch-report.d.ts +3 -3
- package/dist/observability/fallback.d.ts +1 -1
- package/dist/observability/index.d.ts +16 -16
- package/dist/observability/metric-validator.d.ts +1 -1
- package/dist/observability/metrics-handle.d.ts +1 -1
- package/dist/observability/metrics-wiring.d.ts +2 -2
- package/dist/observability/noop-provider.d.ts +1 -1
- package/dist/observability/prometheus-meter.d.ts +1 -1
- package/dist/observability/recording-meter.d.ts +1 -1
- package/dist/observability/recording-tracer.d.ts +1 -1
- package/dist/observability/redis-wrapper.d.ts +1 -1
- package/dist/observability/sensitive-filter.d.ts +1 -1
- package/dist/observability/standard-metrics.d.ts +1 -1
- package/dist/pipeline/active-membership.d.ts +4 -4
- package/dist/pipeline/append-event-core.d.ts +3 -3
- package/dist/pipeline/auth-claims-resolver.d.ts +2 -2
- package/dist/pipeline/cascade-handler.d.ts +3 -3
- package/dist/pipeline/dispatch-batch.d.ts +2 -2
- package/dist/pipeline/dispatch-query.d.ts +4 -4
- package/dist/pipeline/dispatch-shared.d.ts +17 -17
- package/dist/pipeline/dispatch-stream.d.ts +2 -2
- package/dist/pipeline/dispatch-write.d.ts +4 -4
- package/dist/pipeline/dispatcher-utils.d.ts +2 -2
- package/dist/pipeline/dispatcher.d.ts +12 -12
- package/dist/pipeline/event-consumer-state.d.ts +1 -1
- package/dist/pipeline/event-dispatcher-admin.d.ts +1 -1
- package/dist/pipeline/event-dispatcher-delivery.d.ts +7 -7
- package/dist/pipeline/event-dispatcher.d.ts +7 -7
- package/dist/pipeline/event-retention.d.ts +1 -1
- package/dist/pipeline/handler-access-error.d.ts +2 -2
- package/dist/pipeline/index.d.ts +42 -42
- package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
- package/dist/pipeline/lifecycle-pipeline.d.ts +2 -2
- package/dist/pipeline/member-read-only-transaction.d.ts +2 -2
- package/dist/pipeline/member-reader.d.ts +5 -5
- package/dist/pipeline/msp-rebuild.d.ts +4 -4
- package/dist/pipeline/multi-stream-apply-context.d.ts +3 -3
- package/dist/pipeline/notify-scope.d.ts +3 -3
- package/dist/pipeline/pending-gap-ranges.d.ts +2 -2
- package/dist/pipeline/pre-handler-gates.d.ts +3 -3
- package/dist/pipeline/pre-transaction-reservations.d.ts +4 -4
- package/dist/pipeline/projection-rebuild.d.ts +3 -3
- package/dist/pipeline/projection-state.d.ts +1 -1
- package/dist/pipeline/projections-runner.d.ts +3 -3
- package/dist/pipeline/projections-runner.js +3 -4
- package/dist/pipeline/system-hooks.d.ts +4 -4
- package/dist/pipeline/system-identity-switch.d.ts +3 -3
- package/dist/pipeline/tenant-timezone-cache.d.ts +1 -1
- package/dist/pipeline/write-origin.d.ts +3 -3
- package/dist/pipeline/write-result-masking.d.ts +2 -2
- package/dist/random/index.d.ts +2 -2
- package/dist/rate-limit/bucket.d.ts +1 -1
- package/dist/rate-limit/index.d.ts +3 -3
- package/dist/rate-limit/middleware.d.ts +3 -3
- package/dist/redis/cache-sync-bus.d.ts +2 -2
- package/dist/redis/cache-sync-topics.d.ts +1 -1
- package/dist/redis/index.d.ts +8 -8
- package/dist/redis/pubsub-signal.d.ts +1 -1
- package/dist/schema-cli.d.ts +1 -1
- package/dist/schema-cli.js +9 -1
- package/dist/search/derive-search-adapter-config.d.ts +2 -2
- package/dist/search/in-memory-adapter.d.ts +1 -1
- package/dist/search/index.d.ts +6 -6
- package/dist/search/meilisearch-adapter.d.ts +2 -2
- package/dist/search/purge-subject.d.ts +4 -4
- package/dist/search/reindex-entity.d.ts +3 -3
- package/dist/secrets/dek-cache.d.ts +1 -1
- package/dist/secrets/env-master-key-provider.d.ts +1 -1
- package/dist/secrets/env-master-key-provider.js +26 -11
- package/dist/secrets/envelope-cipher.d.ts +2 -2
- package/dist/secrets/envelope.d.ts +1 -1
- package/dist/secrets/index.d.ts +9 -9
- package/dist/secrets/rotation.d.ts +1 -1
- package/dist/secrets/stored-envelope.d.ts +1 -1
- package/dist/seeding/entity-seed.d.ts +1 -1
- package/dist/seeding/index.d.ts +3 -3
- package/dist/seeding/seed-users.d.ts +1 -1
- package/dist/time/index.d.ts +6 -6
- package/dist/ui-types/app-schema.d.ts +5 -5
- package/dist/ui-types/index.d.ts +23 -23
- package/dist/upgrade-cli.js +13 -3
- package/dist/utils/index.d.ts +9 -9
- package/package.json +19 -66
- package/presets/biome-app.json +80 -0
- package/presets/tsconfig.app.json +19 -0
- package/src/changes.json +78 -2
- package/src/scripts/codemod/README.md +18 -0
- package/src/scripts/codemod/codemod-support.ts +1 -1
- package/src/scripts/codemod/db-factory.ts +1 -1
- package/src/scripts/codemod/feature-factory.ts +1 -1
- package/src/scripts/codemod/import-extensions.ts +118 -0
- package/src/scripts/codemod/migrate-cross-tenant.ts +2 -2
- package/src/scripts/codemod/migrate-db-raw.ts +1 -1
- package/src/scripts/codemod/migrate-open-to-all.ts +1 -1
- package/src/scripts/codemod/object-form.ts +1 -1
- package/src/scripts/codemod/s3-imports.ts +1 -1
- package/src/scripts/codemod/tenant-db-options.ts +1 -1
- package/src/scripts/codemod/testing-move.ts +2 -2
- package/dist/db/bun-db-deprecated.d.ts +0 -10
- package/dist/db/bun-db-deprecated.js +0 -5
- package/dist/stack/index.d.ts +0 -10
- package/dist/stack/index.js +0 -11
- package/dist/testing/e2e-generator.d.ts +0 -5
- package/dist/testing/e2e-generator.js +0 -5
- package/dist/testing/handler-context.d.ts +0 -5
- package/dist/testing/handler-context.js +0 -5
- package/dist/testing/index.d.ts +0 -10
- package/dist/testing/index.js +0 -10
- package/dist/testing/real-providers.d.ts +0 -5
- package/dist/testing/real-providers.js +0 -5
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { CallExpression, SourceFile } from "ts-morph";
|
|
2
|
-
import type { AccessRule, AgentHandlerHints, AgentRisk, EscapeHatchDeclaration, PayloadRateLimitOption, RateLimitDeclaration } from "../../types/handlers.
|
|
3
|
-
import type { QueryHandlerPattern, StreamHandlerPattern, WriteHandlerPattern } from "../patterns.
|
|
4
|
-
import type { SourceLocation } from "../source-location.
|
|
5
|
-
import { type ExtractOutput, type RawRefSentinel } from "./shared.
|
|
2
|
+
import type { AccessRule, AgentHandlerHints, AgentRisk, EscapeHatchDeclaration, PayloadRateLimitOption, RateLimitDeclaration } from "../../types/handlers.ts";
|
|
3
|
+
import type { QueryHandlerPattern, StreamHandlerPattern, WriteHandlerPattern } from "../patterns.ts";
|
|
4
|
+
import type { SourceLocation } from "../source-location.ts";
|
|
5
|
+
import { type ExtractOutput, type RawRefSentinel } from "./shared.ts";
|
|
6
6
|
export type ParsedHandlerCall = {
|
|
7
7
|
readonly source: SourceLocation;
|
|
8
8
|
readonly handlerName?: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { CallExpression, Node, SourceFile } from "ts-morph";
|
|
2
|
-
import type { LifecycleHookType } from "../../constants.
|
|
3
|
-
import type { AccessRule, EscapeHatchDeclaration, PayloadRateLimitOption, RateLimitDeclaration } from "../../types/handlers.
|
|
4
|
-
import type { HookPhase } from "../../types/hooks.
|
|
5
|
-
import type { AuthClaimsPattern, HookPattern } from "../patterns.
|
|
6
|
-
import { type ExtractOutput, type RawRefSentinel } from "./shared.
|
|
2
|
+
import type { LifecycleHookType } from "../../constants.ts";
|
|
3
|
+
import type { AccessRule, EscapeHatchDeclaration, PayloadRateLimitOption, RateLimitDeclaration } from "../../types/handlers.ts";
|
|
4
|
+
import type { HookPhase } from "../../types/hooks.ts";
|
|
5
|
+
import type { AuthClaimsPattern, HookPattern } from "../patterns.ts";
|
|
6
|
+
import { type ExtractOutput, type RawRefSentinel } from "./shared.ts";
|
|
7
7
|
export type HeaderReadResult<T> = {
|
|
8
8
|
readonly kind: "value";
|
|
9
9
|
readonly value: T;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export { extractAiClassify, extractAiExtract, extractAiGenerate, } from "./ai-steps.
|
|
2
|
-
export { extractDefineEvent, extractNotification, } from "./events.
|
|
3
|
-
export { extractQueryHandler, extractStreamHandler, extractWriteHandler, type ParsedHandlerCall, parseHandlerCall, } from "./handlers.
|
|
4
|
-
export { extractAuthClaims, extractHook, isHookType, readOptionalAccessRule, readOptionalAdditionalRateLimits, readOptionalPhase, readOptionalRateLimit, } from "./hooks.
|
|
5
|
-
export { extractHttpRoute, extractJob, isHttpRouteMethod, } from "./jobs-routes.
|
|
6
|
-
export { collectScreenOpaqueProps, extractMultiStreamProjection, extractProjection, extractScreen, readApplyBodies, readScreenStatic, } from "./projections-screens.
|
|
7
|
-
export { findImportBindingForLocalName, resolveModuleFile, } from "./resolve-import.
|
|
8
|
-
export { extractDescribe, extractOptionalRequires, extractReadsConfig, extractRequires, extractSystemScope, extractToggleable, extractUiHints, } from "./round1.
|
|
9
|
-
export { extractEntity, extractNav, extractRelation, extractWorkspace, } from "./round2.
|
|
10
|
-
export { extractClaimKey, extractConfig, extractMetric, extractReferenceData, extractSecret, extractSecretNamespace, extractTranslations, extractUseExtension, isClaimKeyType, type NamedOptionsResult, readNamedOptions, } from "./round3.
|
|
11
|
-
export { extractBootCheck, extractEnvSchema, extractExposesApi, extractExtendsRegistrar, extractStoreTable, extractUsesApi, } from "./round5.
|
|
12
|
-
export { extractTreeActions } from "./round6.
|
|
13
|
-
export type { ExtractOutput } from "./shared.
|
|
14
|
-
export { fail, findFunctionLiteral, isPlainObject, ok, readBooleanProperty, readDataLiteralNode, readNameOrRef, readNameOrRefOrList, readObjectPropertyInitializer, readPropertyKey, readStringLiteralArgs, readVarargsOrArrayProp, resolveSameFileObjectLiteral, } from "./shared.
|
|
1
|
+
export { extractAiClassify, extractAiExtract, extractAiGenerate, } from "./ai-steps.ts";
|
|
2
|
+
export { extractDefineEvent, extractNotification, } from "./events.ts";
|
|
3
|
+
export { extractQueryHandler, extractStreamHandler, extractWriteHandler, type ParsedHandlerCall, parseHandlerCall, } from "./handlers.ts";
|
|
4
|
+
export { extractAuthClaims, extractHook, isHookType, readOptionalAccessRule, readOptionalAdditionalRateLimits, readOptionalPhase, readOptionalRateLimit, } from "./hooks.ts";
|
|
5
|
+
export { extractHttpRoute, extractJob, isHttpRouteMethod, } from "./jobs-routes.ts";
|
|
6
|
+
export { collectScreenOpaqueProps, extractMultiStreamProjection, extractProjection, extractScreen, readApplyBodies, readScreenStatic, } from "./projections-screens.ts";
|
|
7
|
+
export { findImportBindingForLocalName, resolveModuleFile, } from "./resolve-import.ts";
|
|
8
|
+
export { extractDescribe, extractOptionalRequires, extractReadsConfig, extractRequires, extractSystemScope, extractToggleable, extractUiHints, } from "./round1.ts";
|
|
9
|
+
export { extractEntity, extractNav, extractRelation, extractWorkspace, } from "./round2.ts";
|
|
10
|
+
export { extractClaimKey, extractConfig, extractMetric, extractReferenceData, extractSecret, extractSecretNamespace, extractTranslations, extractUseExtension, isClaimKeyType, type NamedOptionsResult, readNamedOptions, } from "./round3.ts";
|
|
11
|
+
export { extractBootCheck, extractEnvSchema, extractExposesApi, extractExtendsRegistrar, extractStoreTable, extractUsesApi, } from "./round5.ts";
|
|
12
|
+
export { extractTreeActions } from "./round6.ts";
|
|
13
|
+
export type { ExtractOutput } from "./shared.ts";
|
|
14
|
+
export { fail, findFunctionLiteral, isPlainObject, ok, readBooleanProperty, readDataLiteralNode, readNameOrRef, readNameOrRefOrList, readObjectPropertyInitializer, readPropertyKey, readStringLiteralArgs, readVarargsOrArrayProp, resolveSameFileObjectLiteral, } from "./shared.ts";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CallExpression, SourceFile } from "ts-morph";
|
|
2
|
-
import type { HttpRouteMethod } from "../../types/http-route.
|
|
3
|
-
import type { HttpRoutePattern, JobPattern } from "../patterns.
|
|
4
|
-
import { type ExtractOutput } from "./shared.
|
|
2
|
+
import type { HttpRouteMethod } from "../../types/http-route.ts";
|
|
3
|
+
import type { HttpRoutePattern, JobPattern } from "../patterns.ts";
|
|
4
|
+
import { type ExtractOutput } from "./shared.ts";
|
|
5
5
|
export declare function isHttpRouteMethod(value: string): value is HttpRouteMethod;
|
|
6
6
|
export declare function extractJob(call: CallExpression, sourceFile: SourceFile): ExtractOutput<JobPattern>;
|
|
7
7
|
export declare function extractHttpRoute(call: CallExpression, sourceFile: SourceFile): ExtractOutput<HttpRoutePattern>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CallExpression, Node, SourceFile } from "ts-morph";
|
|
2
|
-
import type { MultiStreamProjectionPattern, ProjectionPattern, ScreenPattern } from "../patterns.
|
|
3
|
-
import type { SourceLocation } from "../source-location.
|
|
4
|
-
import { type ExtractOutput } from "./shared.
|
|
2
|
+
import type { MultiStreamProjectionPattern, ProjectionPattern, ScreenPattern } from "../patterns.ts";
|
|
3
|
+
import type { SourceLocation } from "../source-location.ts";
|
|
4
|
+
import { type ExtractOutput } from "./shared.ts";
|
|
5
5
|
export declare function readApplyBodies(defObj: ReturnType<Node["asKind"]>, sourceFile: SourceFile): Record<string, SourceLocation> | undefined;
|
|
6
6
|
export declare function extractProjection(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ProjectionPattern>;
|
|
7
7
|
export declare function extractMultiStreamProjection(call: CallExpression, sourceFile: SourceFile): ExtractOutput<MultiStreamProjectionPattern>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CallExpression, SourceFile } from "ts-morph";
|
|
2
|
-
import type { DescribePattern, OptionalRequiresPattern, ReadsConfigPattern, RequiresPattern, SystemScopePattern, ToggleablePattern, UiHintsPattern } from "../patterns.
|
|
3
|
-
import { type ExtractOutput } from "./shared.
|
|
2
|
+
import type { DescribePattern, OptionalRequiresPattern, ReadsConfigPattern, RequiresPattern, SystemScopePattern, ToggleablePattern, UiHintsPattern } from "../patterns.ts";
|
|
3
|
+
import { type ExtractOutput } from "./shared.ts";
|
|
4
4
|
export declare function extractRequires(call: CallExpression, sourceFile: SourceFile): ExtractOutput<RequiresPattern>;
|
|
5
5
|
export declare function extractOptionalRequires(call: CallExpression, sourceFile: SourceFile): ExtractOutput<OptionalRequiresPattern>;
|
|
6
6
|
export declare function extractReadsConfig(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ReadsConfigPattern>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CallExpression, SourceFile } from "ts-morph";
|
|
2
|
-
import type { EntityPattern, NavPattern, RelationPattern, WorkspacePattern } from "../patterns.
|
|
3
|
-
import { type ExtractOutput } from "./shared.
|
|
2
|
+
import type { EntityPattern, NavPattern, RelationPattern, WorkspacePattern } from "../patterns.ts";
|
|
3
|
+
import { type ExtractOutput } from "./shared.ts";
|
|
4
4
|
export declare function extractEntity(call: CallExpression, sourceFile: SourceFile): ExtractOutput<EntityPattern>;
|
|
5
5
|
export declare function extractRelation(call: CallExpression, sourceFile: SourceFile): ExtractOutput<RelationPattern>;
|
|
6
6
|
export declare function extractNav(call: CallExpression, sourceFile: SourceFile): ExtractOutput<NavPattern>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { CallExpression, SourceFile } from "ts-morph";
|
|
2
|
-
import type { ClaimKeyType } from "../../types/handlers.
|
|
3
|
-
import type { ParseError } from "../parse.
|
|
4
|
-
import type { ClaimKeyPattern, ConfigPattern, MetricPattern, ReferenceDataPattern, SecretNamespacePattern, SecretPattern, TranslationsPattern, UseExtensionPattern } from "../patterns.
|
|
5
|
-
import { type ExtractOutput, type ReadDataLiteralOptions } from "./shared.
|
|
2
|
+
import type { ClaimKeyType } from "../../types/handlers.ts";
|
|
3
|
+
import type { ParseError } from "../parse.ts";
|
|
4
|
+
import type { ClaimKeyPattern, ConfigPattern, MetricPattern, ReferenceDataPattern, SecretNamespacePattern, SecretPattern, TranslationsPattern, UseExtensionPattern } from "../patterns.ts";
|
|
5
|
+
import { type ExtractOutput, type ReadDataLiteralOptions } from "./shared.ts";
|
|
6
6
|
export type NamedOptionsResult = {
|
|
7
7
|
readonly kind: "ok";
|
|
8
8
|
readonly name: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CallExpression, SourceFile } from "ts-morph";
|
|
2
|
-
import type { EnvSchemaPattern, ExposesApiPattern, ExtendsRegistrarPattern, UsesApiPattern } from "../patterns.
|
|
3
|
-
import { type ExtractOutput } from "./shared.
|
|
2
|
+
import type { EnvSchemaPattern, ExposesApiPattern, ExtendsRegistrarPattern, UsesApiPattern } from "../patterns.ts";
|
|
3
|
+
import { type ExtractOutput } from "./shared.ts";
|
|
4
4
|
export declare function extractEnvSchema(call: CallExpression, sourceFile: SourceFile): ExtractOutput<EnvSchemaPattern>;
|
|
5
5
|
export declare function extractExtendsRegistrar(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ExtendsRegistrarPattern>;
|
|
6
6
|
export declare function extractUsesApi(call: CallExpression, sourceFile: SourceFile): ExtractOutput<UsesApiPattern>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { CallExpression, SourceFile } from "ts-morph";
|
|
2
|
-
import type { TreeActionsPattern } from "../patterns.
|
|
3
|
-
import { type ExtractOutput } from "./shared.
|
|
2
|
+
import type { TreeActionsPattern } from "../patterns.ts";
|
|
3
|
+
import { type ExtractOutput } from "./shared.ts";
|
|
4
4
|
export declare function extractTreeActions(call: CallExpression, sourceFile: SourceFile): ExtractOutput<TreeActionsPattern>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CallExpression, ObjectLiteralExpression } from "ts-morph";
|
|
2
2
|
import { Node } from "ts-morph";
|
|
3
|
-
import type { ParseError } from "../parse.
|
|
3
|
+
import type { ParseError } from "../parse.ts";
|
|
4
4
|
export type ExtractOutput<TPattern> = {
|
|
5
5
|
readonly kind: "pattern";
|
|
6
6
|
readonly pattern: TPattern;
|
|
@@ -51,7 +51,7 @@ export declare function readStringOrRaw(node: Node): string | RawRefSentinel | u
|
|
|
51
51
|
* — see #1009).
|
|
52
52
|
*/
|
|
53
53
|
export declare function readStringOrRawArgs(call: CallExpression): readonly (string | RawRefSentinel)[] | undefined;
|
|
54
|
-
export { isPlainObject } from "../../../utils/is-plain-object.
|
|
54
|
+
export { isPlainObject } from "../../../utils/is-plain-object.ts";
|
|
55
55
|
export declare function readPropertyKey(propAssign: import("ts-morph").PropertyAssignment): string;
|
|
56
56
|
/**
|
|
57
57
|
* Resolved name plus, when the source node was an identifier rather than
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
export type { FormFieldLabel, FormFieldSpec, FormInputType, PatternCategory, PatternFormSchema, } from "../pattern-library/index.
|
|
2
|
-
export { getPatternSchema, groupByCategory, PATTERN_LIBRARY } from "../pattern-library/index.
|
|
3
|
-
export type { ParseError, ParseResult } from "./parse.
|
|
4
|
-
export { parseFeatureFile, parseSourceFile } from "./parse.
|
|
5
|
-
export type { HandlerHeaderUpdate, PatternChange, PatternId, QueryHandlerHeaderKey, StreamHandlerHeaderKey, WriteHandlerHeaderKey, } from "./patch.
|
|
6
|
-
export { addPattern, applyChanges, removePattern, replacePattern, SINGLETON_KINDS, updatePattern, } from "./patch.
|
|
7
|
-
export type { AddAuthClaimsArgs, AddClaimKeyArgs, AddConfigArgs, AddDefineEventArgs, AddEntityArgs, AddHookArgs, AddHttpRouteArgs, AddJobArgs, AddMetricArgs, AddMultiStreamProjectionArgs, AddNavArgs, AddNotificationArgs, AddOptionalRequiresArgs, AddProjectionArgs, AddQueryHandlerArgs, AddReadsConfigArgs, AddReferenceDataArgs, AddRelationArgs, AddRequiresArgs, AddScreenArgs, AddSecretArgs, AddStreamHandlerArgs, AddToggleableArgs, AddTranslationsArgs, AddUseExtensionArgs, AddWorkspaceArgs, AddWriteHandlerArgs, FeaturePatcher, } from "./patcher.
|
|
8
|
-
export { createFeaturePatcher } from "./patcher.
|
|
9
|
-
export type { PatternChangeIssue, PatternChangesParseResult } from "./pattern-change-schema.
|
|
10
|
-
export { parsePatternChanges } from "./pattern-change-schema.
|
|
11
|
-
export type { AuthClaimsPattern, ClaimKeyPattern, ConfigPattern, DefineEventPattern, Editability, EntityPattern, ExtendsRegistrarPattern, FeaturePattern, FeaturePatternKind, HookPattern, HttpRoutePattern, JobPattern, MetricPattern, MultiStreamProjectionPattern, NavPattern, NotificationPattern, OptionalRequiresPattern, ProjectionPattern, QueryHandlerPattern, ReadsConfigPattern, ReferenceDataPattern, RelationPattern, RequiresPattern, ScreenPattern, SecretNamespacePattern, SecretPattern, StreamHandlerPattern, SystemScopePattern, ToggleablePattern, TranslationsPattern, UnknownPattern, UseExtensionPattern, WorkspacePattern, WriteHandlerPattern, } from "./patterns.
|
|
12
|
-
export { getEditability } from "./patterns.
|
|
13
|
-
export type { RenderFeatureFileInput } from "./render.
|
|
14
|
-
export { FEATURE_FILE_VERSION, renderFeatureFile, renderPattern, renderValue, VERSION_HEADER, } from "./render.
|
|
15
|
-
export type { SourceLocation, SourcePosition } from "./source-location.
|
|
16
|
-
export { sourceLocationFromNode } from "./source-location.
|
|
1
|
+
export type { FormFieldLabel, FormFieldSpec, FormInputType, PatternCategory, PatternFormSchema, } from "../pattern-library/index.ts";
|
|
2
|
+
export { getPatternSchema, groupByCategory, PATTERN_LIBRARY } from "../pattern-library/index.ts";
|
|
3
|
+
export type { ParseError, ParseResult } from "./parse.ts";
|
|
4
|
+
export { parseFeatureFile, parseSourceFile } from "./parse.ts";
|
|
5
|
+
export type { HandlerHeaderUpdate, PatternChange, PatternId, QueryHandlerHeaderKey, StreamHandlerHeaderKey, WriteHandlerHeaderKey, } from "./patch.ts";
|
|
6
|
+
export { addPattern, applyChanges, removePattern, replacePattern, SINGLETON_KINDS, updatePattern, } from "./patch.ts";
|
|
7
|
+
export type { AddAuthClaimsArgs, AddClaimKeyArgs, AddConfigArgs, AddDefineEventArgs, AddEntityArgs, AddHookArgs, AddHttpRouteArgs, AddJobArgs, AddMetricArgs, AddMultiStreamProjectionArgs, AddNavArgs, AddNotificationArgs, AddOptionalRequiresArgs, AddProjectionArgs, AddQueryHandlerArgs, AddReadsConfigArgs, AddReferenceDataArgs, AddRelationArgs, AddRequiresArgs, AddScreenArgs, AddSecretArgs, AddStreamHandlerArgs, AddToggleableArgs, AddTranslationsArgs, AddUseExtensionArgs, AddWorkspaceArgs, AddWriteHandlerArgs, FeaturePatcher, } from "./patcher.ts";
|
|
8
|
+
export { createFeaturePatcher } from "./patcher.ts";
|
|
9
|
+
export type { PatternChangeIssue, PatternChangesParseResult } from "./pattern-change-schema.ts";
|
|
10
|
+
export { parsePatternChanges } from "./pattern-change-schema.ts";
|
|
11
|
+
export type { AuthClaimsPattern, ClaimKeyPattern, ConfigPattern, DefineEventPattern, Editability, EntityPattern, ExtendsRegistrarPattern, FeaturePattern, FeaturePatternKind, HookPattern, HttpRoutePattern, JobPattern, MetricPattern, MultiStreamProjectionPattern, NavPattern, NotificationPattern, OptionalRequiresPattern, ProjectionPattern, QueryHandlerPattern, ReadsConfigPattern, ReferenceDataPattern, RelationPattern, RequiresPattern, ScreenPattern, SecretNamespacePattern, SecretPattern, StreamHandlerPattern, SystemScopePattern, ToggleablePattern, TranslationsPattern, UnknownPattern, UseExtensionPattern, WorkspacePattern, WriteHandlerPattern, } from "./patterns.ts";
|
|
12
|
+
export { getEditability } from "./patterns.ts";
|
|
13
|
+
export type { RenderFeatureFileInput } from "./render.ts";
|
|
14
|
+
export { FEATURE_FILE_VERSION, renderFeatureFile, renderPattern, renderValue, VERSION_HEADER, } from "./render.ts";
|
|
15
|
+
export type { SourceLocation, SourcePosition } from "./source-location.ts";
|
|
16
|
+
export { sourceLocationFromNode } from "./source-location.ts";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { SourceFile } from "ts-morph";
|
|
2
|
-
import type { FeaturePattern } from "./patterns.
|
|
3
|
-
import { type SourceLocation } from "./source-location.
|
|
2
|
+
import type { FeaturePattern } from "./patterns.ts";
|
|
3
|
+
import { type SourceLocation } from "./source-location.ts";
|
|
4
4
|
export type ParseError = {
|
|
5
5
|
readonly methodName: string;
|
|
6
6
|
readonly source: SourceLocation;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type SourceFile } from "ts-morph";
|
|
2
|
-
import type { FeaturePattern, QueryHandlerPattern, StreamHandlerPattern, WriteHandlerPattern } from "./patterns.
|
|
2
|
+
import type { FeaturePattern, QueryHandlerPattern, StreamHandlerPattern, WriteHandlerPattern } from "./patterns.ts";
|
|
3
3
|
/**
|
|
4
4
|
* Identifier used by replace/remove. Discriminated union: each pattern
|
|
5
5
|
* kind names the property the patcher must match against. Adding a new
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import type { SourceFile } from "ts-morph";
|
|
2
|
-
import type { LifecycleHookType } from "../constants.
|
|
3
|
-
import type { ConfigKeyDefinition, ConfigKeyType, JobDefinition, RunIn, TranslationKeys } from "../types/config.
|
|
4
|
-
import type { MetricOptions, SecretNamespaceOptions, SecretOptions } from "../types/feature.
|
|
5
|
-
import type { EntityDefinition } from "../types/fields.
|
|
6
|
-
import type { AccessRule, ClaimKeyType, EscapeHatchDeclaration, RateLimitOption } from "../types/handlers.
|
|
7
|
-
import type { HookPhase } from "../types/hooks.
|
|
8
|
-
import type { HttpRouteMethod } from "../types/http-route.
|
|
9
|
-
import type { NavDefinition } from "../types/nav.
|
|
10
|
-
import type { MspErrorMode } from "../types/projection.
|
|
11
|
-
import type { RelationDefinition } from "../types/relations.
|
|
12
|
-
import type { ScreenDefinition } from "../types/screen.
|
|
13
|
-
import type { WorkspaceDefinition } from "../types/workspace.
|
|
14
|
-
import { type PatternChange, type PatternId } from "./patch.
|
|
15
|
-
import type { FeaturePattern } from "./patterns.
|
|
16
|
-
import type { SourceLocation } from "./source-location.
|
|
2
|
+
import type { LifecycleHookType } from "../constants.ts";
|
|
3
|
+
import type { ConfigKeyDefinition, ConfigKeyType, JobDefinition, RunIn, TranslationKeys } from "../types/config.ts";
|
|
4
|
+
import type { MetricOptions, SecretNamespaceOptions, SecretOptions } from "../types/feature.ts";
|
|
5
|
+
import type { EntityDefinition } from "../types/fields.ts";
|
|
6
|
+
import type { AccessRule, ClaimKeyType, EscapeHatchDeclaration, RateLimitOption } from "../types/handlers.ts";
|
|
7
|
+
import type { HookPhase } from "../types/hooks.ts";
|
|
8
|
+
import type { HttpRouteMethod } from "../types/http-route.ts";
|
|
9
|
+
import type { NavDefinition } from "../types/nav.ts";
|
|
10
|
+
import type { MspErrorMode } from "../types/projection.ts";
|
|
11
|
+
import type { RelationDefinition } from "../types/relations.ts";
|
|
12
|
+
import type { ScreenDefinition } from "../types/screen.ts";
|
|
13
|
+
import type { WorkspaceDefinition } from "../types/workspace.ts";
|
|
14
|
+
import { type PatternChange, type PatternId } from "./patch.ts";
|
|
15
|
+
import type { FeaturePattern } from "./patterns.ts";
|
|
16
|
+
import type { SourceLocation } from "./source-location.ts";
|
|
17
17
|
export declare const SYNTHETIC_LOC: SourceLocation;
|
|
18
18
|
export declare function rawLoc(raw: string): SourceLocation;
|
|
19
19
|
export type AddEntityArgs = {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
|
-
import type { ConfigKeyDefinition, ConfigKeyType, JobDefinition } from "../types/config.
|
|
3
|
-
import type { MetricOptions, SecretNamespaceOptions, SecretOptions } from "../types/feature.
|
|
4
|
-
import type { EntityDefinition } from "../types/fields.
|
|
5
|
-
import type { NavDefinition } from "../types/nav.
|
|
6
|
-
import type { RelationDefinition } from "../types/relations.
|
|
7
|
-
import type { ScreenDefinition } from "../types/screen.
|
|
8
|
-
import type { TreeActionDef } from "../types/tree-node.
|
|
9
|
-
import type { WorkspaceDefinition } from "../types/workspace.
|
|
10
|
-
import type { PatternChange } from "./patch.
|
|
11
|
-
import type { SourceLocation } from "./source-location.
|
|
2
|
+
import type { ConfigKeyDefinition, ConfigKeyType, JobDefinition } from "../types/config.ts";
|
|
3
|
+
import type { MetricOptions, SecretNamespaceOptions, SecretOptions } from "../types/feature.ts";
|
|
4
|
+
import type { EntityDefinition } from "../types/fields.ts";
|
|
5
|
+
import type { NavDefinition } from "../types/nav.ts";
|
|
6
|
+
import type { RelationDefinition } from "../types/relations.ts";
|
|
7
|
+
import type { ScreenDefinition } from "../types/screen.ts";
|
|
8
|
+
import type { TreeActionDef } from "../types/tree-node.ts";
|
|
9
|
+
import type { WorkspaceDefinition } from "../types/workspace.ts";
|
|
10
|
+
import type { PatternChange } from "./patch.ts";
|
|
11
|
+
import type { SourceLocation } from "./source-location.ts";
|
|
12
12
|
export type PatternChangeIssue = {
|
|
13
13
|
readonly path: string;
|
|
14
14
|
readonly message: string;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import type { LifecycleHookType } from "../constants.
|
|
2
|
-
import type { ConfigKeyDefinition, ConfigKeyType, JobDefinition, ReferenceDataDef, RunIn, TranslationKeys } from "../types/config.
|
|
3
|
-
import type { MetricOptions, SecretNamespaceOptions, SecretOptions } from "../types/feature.
|
|
4
|
-
import type { EntityDefinition } from "../types/fields.
|
|
5
|
-
import type { AccessRule, AgentHandlerHints, ClaimKeyType, EscapeHatchDeclaration, PayloadRateLimitOption, RateLimitDeclaration } from "../types/handlers.
|
|
6
|
-
import type { HookPhase } from "../types/hooks.
|
|
7
|
-
import type { HttpRouteMethod } from "../types/http-route.
|
|
8
|
-
import type { NavDefinition } from "../types/nav.
|
|
9
|
-
import type { MspErrorMode } from "../types/projection.
|
|
10
|
-
import type { RelationDefinition } from "../types/relations.
|
|
11
|
-
import type { ScreenDefinition } from "../types/screen.
|
|
12
|
-
import type { TreeActionDef } from "../types/tree-node.
|
|
13
|
-
import type { WorkspaceDefinition } from "../types/workspace.
|
|
14
|
-
import type { RawRefSentinel } from "./extractors/shared.
|
|
15
|
-
import type { SourceLocation } from "./source-location.
|
|
1
|
+
import type { LifecycleHookType } from "../constants.ts";
|
|
2
|
+
import type { ConfigKeyDefinition, ConfigKeyType, JobDefinition, ReferenceDataDef, RunIn, TranslationKeys } from "../types/config.ts";
|
|
3
|
+
import type { MetricOptions, SecretNamespaceOptions, SecretOptions } from "../types/feature.ts";
|
|
4
|
+
import type { EntityDefinition } from "../types/fields.ts";
|
|
5
|
+
import type { AccessRule, AgentHandlerHints, ClaimKeyType, EscapeHatchDeclaration, PayloadRateLimitOption, RateLimitDeclaration } from "../types/handlers.ts";
|
|
6
|
+
import type { HookPhase } from "../types/hooks.ts";
|
|
7
|
+
import type { HttpRouteMethod } from "../types/http-route.ts";
|
|
8
|
+
import type { NavDefinition } from "../types/nav.ts";
|
|
9
|
+
import type { MspErrorMode } from "../types/projection.ts";
|
|
10
|
+
import type { RelationDefinition } from "../types/relations.ts";
|
|
11
|
+
import type { ScreenDefinition } from "../types/screen.ts";
|
|
12
|
+
import type { TreeActionDef } from "../types/tree-node.ts";
|
|
13
|
+
import type { WorkspaceDefinition } from "../types/workspace.ts";
|
|
14
|
+
import type { RawRefSentinel } from "./extractors/shared.ts";
|
|
15
|
+
import type { SourceLocation } from "./source-location.ts";
|
|
16
16
|
export type EntityPattern = {
|
|
17
17
|
readonly kind: "entity";
|
|
18
18
|
readonly source: SourceLocation;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { WebSocketRouteDefinition } from "@cosmicdrift/kumiko-types/websocket-route";
|
|
2
2
|
import type * as z from "zod";
|
|
3
|
-
import type { HttpRouteDefinition } from "./types/http-route.
|
|
4
|
-
import type { AuthClaimsFn, BootCheckFn, ClaimKeyDefinition, ConfigKeyDefinition, ConfigSeedDef, EntityDefinition, EntityProjectionExtension, EventDef, EventMigrationDef, ExtensionSelectorDef, FeatureMetricDef, JobDefinition, LifecycleHookFn, MultiStreamProjectionDefinition, NotificationDefinition, OwnedFn, PhasedHook, PostDeleteHookFn, PostQueryHookFn, PostSaveHookFn, PreDeleteHookFn, ProjectionDefinition, QueryHandlerDef, ReferenceDataDef, RegistrarExtensionDef, RegistrarExtensionRegistration, RelationDefinition, SearchPayloadContributorFn, SecretKeyDefinition, SecretNamespaceDefinition, StoreTableEntry, StreamHandlerDef, TranslationKeys, TreeActionDef, UiHints, ValidationHookFn, WriteHandlerDef } from "./types/index.
|
|
5
|
-
import type { ContentCollectionDefinition, NavDefinition } from "./types/nav.
|
|
6
|
-
import type { ScreenDefinition } from "./types/screen.
|
|
7
|
-
import type { WorkspaceDefinition } from "./types/workspace.
|
|
3
|
+
import type { HttpRouteDefinition } from "./types/http-route.ts";
|
|
4
|
+
import type { AuthClaimsFn, BootCheckFn, ClaimKeyDefinition, ConfigKeyDefinition, ConfigSeedDef, EntityDefinition, EntityProjectionExtension, EventDef, EventMigrationDef, ExtensionSelectorDef, FeatureMetricDef, JobDefinition, LifecycleHookFn, MultiStreamProjectionDefinition, NotificationDefinition, OwnedFn, PhasedHook, PostDeleteHookFn, PostQueryHookFn, PostSaveHookFn, PreDeleteHookFn, ProjectionDefinition, QueryHandlerDef, ReferenceDataDef, RegistrarExtensionDef, RegistrarExtensionRegistration, RelationDefinition, SearchPayloadContributorFn, SecretKeyDefinition, SecretNamespaceDefinition, StoreTableEntry, StreamHandlerDef, TranslationKeys, TreeActionDef, UiHints, ValidationHookFn, WriteHandlerDef } from "./types/index.ts";
|
|
5
|
+
import type { ContentCollectionDefinition, NavDefinition } from "./types/nav.ts";
|
|
6
|
+
import type { ScreenDefinition } from "./types/screen.ts";
|
|
7
|
+
import type { WorkspaceDefinition } from "./types/workspace.ts";
|
|
8
8
|
export type FeatureBuilderState = {
|
|
9
9
|
requires: string[];
|
|
10
10
|
optionalRequires: string[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type * as z from "zod";
|
|
2
|
-
import {
|
|
3
|
-
import type { FeatureBuilderState } from "./feature-builder-state.
|
|
4
|
-
import type { AuthClaimsFn, ClaimKeyHandle, ClaimKeyType, ConfigKeyDefinition, ConfigKeyHandle, ConfigKeyType, ConfigSeedDef, DeclarativeEventMigration, EventDef, EventPiiStance, EventUpcastFn, JobDefinition, JobHandlerFn, MetricOptions, NameOrRef, NotificationDataFn, NotificationLocalizedTemplate, NotificationRecipientFn, NotificationRecordMapping, NotificationTemplateBody, NotificationTemplateFn, NotificationTemplateMeta, QualifiedEventName, SecretKeyHandle, SecretNamespaceHandle, SecretNamespaceOptions, SecretOptions, TemplateVariables, TranslationsDef } from "./types/index.
|
|
2
|
+
import type { ZodType } from "zod";
|
|
3
|
+
import type { FeatureBuilderState } from "./feature-builder-state.ts";
|
|
4
|
+
import type { AuthClaimsFn, ClaimKeyHandle, ClaimKeyType, ConfigKeyDefinition, ConfigKeyHandle, ConfigKeyType, ConfigSeedDef, DeclarativeEventMigration, EventDef, EventPiiStance, EventUpcastFn, JobDefinition, JobHandlerFn, MetricOptions, NameOrRef, NotificationDataFn, NotificationLocalizedTemplate, NotificationRecipientFn, NotificationRecordMapping, NotificationTemplateBody, NotificationTemplateFn, NotificationTemplateMeta, QualifiedEventName, SecretKeyHandle, SecretNamespaceHandle, SecretNamespaceOptions, SecretOptions, TemplateVariables, TranslationsDef } from "./types/index.ts";
|
|
5
5
|
export declare function buildConfigEventsJobsMethods<TName extends string>(state: FeatureBuilderState, name: TName): {
|
|
6
6
|
config: {
|
|
7
7
|
<T extends ConfigKeyType>(keyName: string, def: ConfigKeyDefinition<T>): ConfigKeyHandle<T>;
|
|
@@ -1,53 +1,10 @@
|
|
|
1
|
-
import { escapeHatchGrantsProblem
|
|
1
|
+
import { escapeHatchGrantsProblem } from "@cosmicdrift/kumiko-types/handlers";
|
|
2
2
|
import { isPlainObject } from "@cosmicdrift/kumiko-types/type-guards";
|
|
3
|
-
import { ZodObject } from "zod";
|
|
4
3
|
import { isValidIanaTimeZone } from "../time/iana.js";
|
|
4
|
+
import { createEventDef } from "./event-def.js";
|
|
5
5
|
import { resolveName } from "./handler-helpers.js";
|
|
6
6
|
import { splitNamedDefinition, unwrapArrayForm } from "./object-form.js";
|
|
7
7
|
import { QnTypes, qn, toKebab } from "./qualified-name.js";
|
|
8
|
-
// A payload field that still holds null/undefined after parsing — the case
|
|
9
|
-
// where an event-PII owner field yields no subject at append time (fw#2776).
|
|
10
|
-
// A `.default(...)` accepts undefined but parses to a value, so it is not
|
|
11
|
-
// absentable.
|
|
12
|
-
function isAbsentable(field) {
|
|
13
|
-
return [null, undefined].some((candidate) => {
|
|
14
|
-
const parsed = field.safeParse(candidate);
|
|
15
|
-
return parsed.success && (parsed.data === null || parsed.data === undefined);
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
const NON_STRING_SCHEMA_TYPES = new Set([
|
|
19
|
-
"number",
|
|
20
|
-
"int",
|
|
21
|
-
"boolean",
|
|
22
|
-
"bigint",
|
|
23
|
-
"date",
|
|
24
|
-
"object",
|
|
25
|
-
"array",
|
|
26
|
-
]);
|
|
27
|
-
// An owner id is resolved through "non-empty string or absent" at append time,
|
|
28
|
-
// so a schema that can never yield a string would make every append throw in
|
|
29
|
-
// prod. Wrappers (optional/nullable/default/...) are looked through.
|
|
30
|
-
function neverYieldsString(field) {
|
|
31
|
-
let current = field;
|
|
32
|
-
for (;;) {
|
|
33
|
-
const def = current._zod.def;
|
|
34
|
-
if (def.innerType === undefined)
|
|
35
|
-
return NON_STRING_SCHEMA_TYPES.has(def.type);
|
|
36
|
-
current = def.innerType;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function assertOwnerFieldYieldsPresentString(args) {
|
|
40
|
-
const { featureName, eventName, field, ownerField, owner } = args;
|
|
41
|
-
if (neverYieldsString(owner)) {
|
|
42
|
-
throw new Error(`[Feature ${featureName}] defineEvent("${eventName}"): piiFields."${field}" is owned by "${ownerField}", whose payload schema is not a string — the subject id must be a non-empty string, so every append would fail. ` +
|
|
43
|
-
`Use a string owner field, or declare whenAbsent ("tenant" | "self" | "plaintext").`);
|
|
44
|
-
}
|
|
45
|
-
if (isAbsentable(owner)) {
|
|
46
|
-
throw new Error(`[Feature ${featureName}] defineEvent("${eventName}"): piiFields."${field}" is owned by "${ownerField}", which the payload schema allows to be null/undefined. ` +
|
|
47
|
-
`Declare what happens then: { personal: { of: "${ownerField}", whenAbsent: "tenant" } } encrypts under the envelope tenant key, ` +
|
|
48
|
-
`whenAbsent: "self" under the event's own record key, whenAbsent: "plaintext" acknowledges that the value ships unencrypted and cannot be crypto-shredded (fw#2776).`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
8
|
// Builds config/secrets/claims/events/jobs/notifications registrar methods.
|
|
52
9
|
export function buildConfigEventsJobsMethods(state, name) {
|
|
53
10
|
function config(arg1, arg2) {
|
|
@@ -89,45 +46,6 @@ export function buildConfigEventsJobsMethods(state, name) {
|
|
|
89
46
|
// Single-key call unwraps its own handle; multi-key returns the record.
|
|
90
47
|
return typeof arg1 === "string" ? handles[arg1] : handles;
|
|
91
48
|
}
|
|
92
|
-
// piiFields misconfiguration is a boot-time error, not a silent
|
|
93
|
-
// plaintext leak: both the pii field and its owner field must exist
|
|
94
|
-
// on the payload schema (checkable when the schema is a ZodObject).
|
|
95
|
-
function validateEventPiiFields(eventName, schema, piiFields) {
|
|
96
|
-
const shape = schema instanceof ZodObject ? schema.shape : undefined;
|
|
97
|
-
for (const [field, spec] of Object.entries(piiFields)) {
|
|
98
|
-
const normalized = normalizeEventPiiSubject(spec);
|
|
99
|
-
// Only the user form names an owner field — tenant/self subjects come
|
|
100
|
-
// from the write-time envelope (tenantId / aggregateType+aggregateId),
|
|
101
|
-
// so there is no owner-field existence or self-reference check for them.
|
|
102
|
-
if (normalized.kind !== "user") {
|
|
103
|
-
if (shape && !(field in shape)) {
|
|
104
|
-
throw new Error(`[Feature ${name}] defineEvent("${eventName}"): piiFields references "${field}" which is not a field of the payload schema.`);
|
|
105
|
-
}
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
if (field === normalized.ownerField) {
|
|
109
|
-
throw new Error(`[Feature ${name}] defineEvent("${eventName}"): piiFields."${field}" cannot use itself as the owner field — the subject id is a plaintext pseudonymous fk, the pii field is the value it owns.`);
|
|
110
|
-
}
|
|
111
|
-
if (normalized.ownerField === "id") {
|
|
112
|
-
throw new Error(`[Feature ${name}] defineEvent("${eventName}"): piiFields."${field}" uses owner field "id" — on entities \`of: "id"\` means record-owned, but on events it would encrypt under a phantom user key that a forget never reaches. Use \`personal: "self"\` for a record-owned event field.`);
|
|
113
|
-
}
|
|
114
|
-
for (const required of [field, normalized.ownerField]) {
|
|
115
|
-
if (shape && !(required in shape)) {
|
|
116
|
-
throw new Error(`[Feature ${name}] defineEvent("${eventName}"): piiFields references "${required}" which is not a field of the payload schema.`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
const owner = shape?.[normalized.ownerField];
|
|
120
|
-
if (normalized.whenAbsent === undefined && owner !== undefined) {
|
|
121
|
-
assertOwnerFieldYieldsPresentString({
|
|
122
|
-
featureName: name,
|
|
123
|
-
eventName,
|
|
124
|
-
field,
|
|
125
|
-
ownerField: normalized.ownerField,
|
|
126
|
-
owner,
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
49
|
// Shared by defineEvent's `migrations` option — each entry registers a
|
|
132
50
|
// single upcast step, same validation/dedup as the old standalone
|
|
133
51
|
// r.eventMigration() call (folded into defineEvent, #1082 step 8).
|
|
@@ -229,53 +147,13 @@ export function buildConfigEventsJobsMethods(state, name) {
|
|
|
229
147
|
state.translations = { ...state.translations, ...def.keys };
|
|
230
148
|
},
|
|
231
149
|
defineEvent: (eventName, schema, options) => {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
const missingStanceError = () => new Error(`[Feature ${name}] defineEvent("${eventName}") must declare an explicit PII stance. Pass { piiFields: { <payloadField>: { personal: { of: "<userIdField>" } } } } for payload fields owned by a user (or { personal: "tenant" } / { personal: "self" } for tenant- or record-scoped subjects), or { piiFields: "none" } when the payload holds none.`);
|
|
236
|
-
if (options === undefined || options.piiFields === undefined) {
|
|
237
|
-
throw missingStanceError();
|
|
238
|
-
}
|
|
239
|
-
const piiFields = options.piiFields;
|
|
240
|
-
// @cast-boundary runtime-guard — an untyped JS caller can hand
|
|
241
|
-
// anything through `piiFields` (including null), so re-check the
|
|
242
|
-
// shape before trusting it as EventPiiStance: `typeof null === "object"`
|
|
243
|
-
// would otherwise pass through to Object.keys(null) below and throw a
|
|
244
|
-
// raw TypeError instead of this guidance message.
|
|
245
|
-
if (piiFields !== "none" && (typeof piiFields !== "object" || piiFields === null)) {
|
|
246
|
-
throw missingStanceError();
|
|
247
|
-
}
|
|
248
|
-
if (piiFields !== "none" && Object.keys(piiFields).length === 0) {
|
|
249
|
-
throw new Error(`[Feature ${name}] defineEvent("${eventName}"): piiFields: {} is not a stance — use piiFields: "none" to declare the payload holds no personal data.`);
|
|
250
|
-
}
|
|
251
|
-
if (piiFields !== "none") {
|
|
252
|
-
validateEventPiiFields(eventName, schema, piiFields);
|
|
253
|
-
}
|
|
254
|
-
// Return the fully-qualified event name so callers can pass it
|
|
255
|
-
// straight to ctx.appendEvent without hand-building the
|
|
256
|
-
// "<feature>:event:<name>" shape. Registry keeps events keyed by
|
|
257
|
-
// short name — qualification is the framework's job, not the feature
|
|
258
|
-
// author's.
|
|
259
|
-
//
|
|
260
|
-
// The runtime kebab-step (`qn(toKebab(feature), …)`) is mirrored at
|
|
261
|
-
// the type-level by `QualifiedEventName<TName, TInner>` so the
|
|
262
|
-
// returned `name` carries the literal qualified shape that the
|
|
263
|
-
// augmented `KumikoEventTypeMap` keys against.
|
|
264
|
-
const qualified = qn(toKebab(name), "event", toKebab(eventName));
|
|
265
|
-
const version = options.version ?? 1;
|
|
266
|
-
if (!Number.isInteger(version) || version < 1) {
|
|
267
|
-
throw new Error(`[Feature ${name}] defineEvent("${eventName}"): version must be a positive integer, got ${String(version)}`);
|
|
268
|
-
}
|
|
269
|
-
// @cast-boundary engine-bridge — runtime-string mirrors the
|
|
270
|
-
// template-literal-type via QualifiedEventName + toKebab. Both
|
|
271
|
-
// sides are tested (CamelToKebab type-tests + scan-events kebab
|
|
272
|
-
// tests), so the cast is a contract, not a typing-loss.
|
|
273
|
-
const def = {
|
|
274
|
-
name: qualified,
|
|
150
|
+
const def = createEventDef({
|
|
151
|
+
feature: name,
|
|
152
|
+
name: eventName,
|
|
275
153
|
schema,
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
};
|
|
154
|
+
piiFields: options?.piiFields,
|
|
155
|
+
...(options?.version !== undefined ? { version: options.version } : {}),
|
|
156
|
+
});
|
|
279
157
|
state.events[eventName] = def;
|
|
280
158
|
for (const m of options.migrations ?? []) {
|
|
281
159
|
registerEventMigration(eventName, m.fromVersion, m.toVersion, m.transform);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type * as z from "zod";
|
|
2
2
|
import type { ZodType } from "zod";
|
|
3
|
-
import { type QueryHandlerDefinition, type StreamHandlerDefinition, type WriteHandlerDefinition } from "./define-handler.
|
|
4
|
-
import type { RegisterEntityCrudOptions } from "./entity-handlers.
|
|
5
|
-
import type { FeatureBuilderState } from "./feature-builder-state.
|
|
6
|
-
import type { AccessRule, EntityDefinition, EntityObjectDefinition, EntityRef, EscapeHatchDeclaration, HandlerRef, KumikoEventTypeMap, NameOrRef, RateLimitDeclaration, RelationDefinition, StreamHandlerFn } from "./types/index.
|
|
3
|
+
import { type QueryHandlerDefinition, type StreamHandlerDefinition, type WriteHandlerDefinition } from "./define-handler.ts";
|
|
4
|
+
import type { RegisterEntityCrudOptions } from "./entity-handlers.ts";
|
|
5
|
+
import type { FeatureBuilderState } from "./feature-builder-state.ts";
|
|
6
|
+
import type { AccessRule, EntityDefinition, EntityObjectDefinition, EntityRef, EscapeHatchDeclaration, HandlerRef, KumikoEventTypeMap, NameOrRef, RateLimitDeclaration, RelationDefinition, StreamHandlerFn } from "./types/index.ts";
|
|
7
7
|
export declare function buildEntityHandlerMethods<TName extends string>(state: FeatureBuilderState, name: TName): {
|
|
8
8
|
entity(definition: EntityObjectDefinition): EntityRef;
|
|
9
9
|
relation(entityRefOrDefinition: NameOrRef | ({
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ENTITY_CONVENTION_QUERY_BRAND } from "@cosmicdrift/kumiko-types/handlers";
|
|
2
2
|
import { toTableName } from "../db/table-builder.js";
|
|
3
3
|
import { isEntityConventionQueryHandler, isPagedQueryHandler, PAGED_QUERY_HANDLER_BRAND, } from "./define-handler.js";
|
|
4
|
-
import { registerCrudHandlers } from "./entity-handlers.js";
|
|
4
|
+
import { assertEscapeHatchAccessIsSystemAdminOnly, registerCrudHandlers, } from "./entity-handlers.js";
|
|
5
5
|
import { resolveName } from "./handler-helpers.js";
|
|
6
|
-
import { isObjectArgument,
|
|
6
|
+
import { isObjectArgument, throwObjectArgumentRequired } from "./object-form.js";
|
|
7
7
|
const CRUD_VERBS = new Set(["create", "update", "delete"]);
|
|
8
8
|
const CRUD_REGISTERED_VERBS = new Set([...CRUD_VERBS, "restore", "list", "detail"]);
|
|
9
9
|
// A silent overwrite would drop framework behaviour that rides on the r.crud
|
|
@@ -84,7 +84,7 @@ export function buildEntityHandlerMethods(state, name) {
|
|
|
84
84
|
const methods = {
|
|
85
85
|
entity(definition) {
|
|
86
86
|
if (!isObjectArgument(definition))
|
|
87
|
-
|
|
87
|
+
throwObjectArgumentRequired(name, "entity");
|
|
88
88
|
const { name: entityName, backingTable, ...entityDefinition } = definition;
|
|
89
89
|
state.entities[entityName] = entityDefinition;
|
|
90
90
|
if (backingTable !== undefined)
|
|
@@ -105,7 +105,7 @@ export function buildEntityHandlerMethods(state, name) {
|
|
|
105
105
|
},
|
|
106
106
|
writeHandler(def) {
|
|
107
107
|
if (!isObjectArgument(def))
|
|
108
|
-
|
|
108
|
+
throwObjectArgumentRequired(name, "writeHandler");
|
|
109
109
|
assertHandlerHasAccess(name, "writeHandler", def.name, def.access);
|
|
110
110
|
assertHandlerNameFree(state, name, "write", def.name);
|
|
111
111
|
state.writeHandlers[def.name] = {
|
|
@@ -144,9 +144,15 @@ export function buildEntityHandlerMethods(state, name) {
|
|
|
144
144
|
},
|
|
145
145
|
queryHandler(def) {
|
|
146
146
|
if (!isObjectArgument(def))
|
|
147
|
-
|
|
147
|
+
throwObjectArgumentRequired(name, "queryHandler");
|
|
148
148
|
assertHandlerHasAccess(name, "queryHandler", def.name, def.access);
|
|
149
149
|
assertHandlerNameFree(state, name, "query", def.name);
|
|
150
|
+
// A generated entity handler checks its escapeHatch when it is built, but a
|
|
151
|
+
// spread of it can add escapeHatch afterwards; the registered object is
|
|
152
|
+
// what the dispatcher trusts, so the check runs on it again.
|
|
153
|
+
if (def.escapeHatch !== undefined && isEntityConventionQueryHandler(def)) {
|
|
154
|
+
assertEscapeHatchAccessIsSystemAdminOnly(def.name, "query", def.access);
|
|
155
|
+
}
|
|
150
156
|
state.queryHandlers[def.name] = {
|
|
151
157
|
name: def.name,
|
|
152
158
|
schema: def.schema,
|