@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
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { SyntaxKind } from "ts-morph";
|
|
2
|
-
import { describeUnknownFieldType, findUnknownEntityFieldTypes } from "../entity-field-types.js";
|
|
3
|
-
import { sourceLocationFromNode } from "../source-location.js";
|
|
4
|
-
import { fail, isPlainObject, isRawRefSentinel, ok, readDataLiteralNode, readNameLiteral, readNameOrRef, } from "./shared.js";
|
|
5
|
-
function readBackingTableRef(property) {
|
|
6
|
-
const initializer = property.asKind(SyntaxKind.PropertyAssignment)?.getInitializer() ??
|
|
7
|
-
property.asKind(SyntaxKind.ShorthandPropertyAssignment)?.getNameNode();
|
|
8
|
-
const reference = initializer ? readDataLiteralNode(initializer) : undefined;
|
|
9
|
-
return isRawRefSentinel(reference) ? reference : undefined;
|
|
10
|
-
}
|
|
11
|
-
// `{ name: "x", ...xEntity }` — the definition is a reference the parser cannot
|
|
12
|
-
// inline, so it is kept as a raw-ref sentinel and re-rendered as the same spread.
|
|
13
|
-
// `backingTable` is runtime wiring (a table identifier), not part of the
|
|
14
|
-
// definition data, so it is carried next to the definition and skipped by the shape check.
|
|
15
|
-
function readSpreadOnlyDefinition(obj) {
|
|
16
|
-
const isBackingTable = (property) => {
|
|
17
|
-
const name = property.asKind(SyntaxKind.PropertyAssignment)?.getName() ??
|
|
18
|
-
property.asKind(SyntaxKind.ShorthandPropertyAssignment)?.getName();
|
|
19
|
-
return name === "backingTable";
|
|
20
|
-
};
|
|
21
|
-
const allProperties = obj.getProperties();
|
|
22
|
-
const properties = allProperties.filter((property) => !isBackingTable(property));
|
|
23
|
-
const spread = properties.length === 2 ? properties[1]?.asKind(SyntaxKind.SpreadAssignment) : undefined;
|
|
24
|
-
if (!spread)
|
|
25
|
-
return undefined;
|
|
26
|
-
const reference = readDataLiteralNode(spread.getExpression());
|
|
27
|
-
if (!isRawRefSentinel(reference))
|
|
28
|
-
return undefined;
|
|
29
|
-
const backingTableProperty = allProperties.find(isBackingTable);
|
|
30
|
-
const backingTable = backingTableProperty ? readBackingTableRef(backingTableProperty) : undefined;
|
|
31
|
-
// A backingTable that is not a plain reference cannot be re-rendered; fall back to the data reader.
|
|
32
|
-
if (backingTableProperty && !backingTable)
|
|
33
|
-
return undefined;
|
|
34
|
-
return { definition: reference, backingTable };
|
|
35
|
-
}
|
|
36
|
-
export function extractEntity(call, sourceFile) {
|
|
37
|
-
const args = call.getArguments();
|
|
38
|
-
const first = args[0];
|
|
39
|
-
if (!first) {
|
|
40
|
-
return fail("entity", sourceLocationFromNode(call, sourceFile), "expected at least one argument");
|
|
41
|
-
}
|
|
42
|
-
const obj = first.asKind(SyntaxKind.ObjectLiteralExpression);
|
|
43
|
-
if (obj && args.length === 1) {
|
|
44
|
-
const nameInit = obj
|
|
45
|
-
.getProperty("name")
|
|
46
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
47
|
-
?.getInitializer()
|
|
48
|
-
?.asKind(SyntaxKind.StringLiteral);
|
|
49
|
-
if (!nameInit) {
|
|
50
|
-
return fail("entity", sourceLocationFromNode(call, sourceFile), "object form requires a string-literal `name` property");
|
|
51
|
-
}
|
|
52
|
-
const spreadOnly = readSpreadOnlyDefinition(obj);
|
|
53
|
-
const definition = spreadOnly?.definition ?? readDataLiteralNode(obj);
|
|
54
|
-
if (!isPlainObject(definition)) {
|
|
55
|
-
return fail("entity", sourceLocationFromNode(call, sourceFile), "definition could not be read as a plain object (contains functions or identifiers)");
|
|
56
|
-
}
|
|
57
|
-
const { name: _name, ...defWithoutName } = definition;
|
|
58
|
-
const unknownTypes = findUnknownEntityFieldTypes(defWithoutName);
|
|
59
|
-
const firstUnknown = unknownTypes[0];
|
|
60
|
-
if (firstUnknown) {
|
|
61
|
-
return fail("entity", sourceLocationFromNode(call, sourceFile), `definition.fields.${firstUnknown.fieldName}.type: ${describeUnknownFieldType(firstUnknown)}`);
|
|
62
|
-
}
|
|
63
|
-
return ok({
|
|
64
|
-
kind: "entity",
|
|
65
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
66
|
-
entityName: nameInit.getLiteralValue(),
|
|
67
|
-
// Field-type membership is checked above; the cast is the extractor's
|
|
68
|
-
// existing narrowing contract (readDataLiteralNode returns unknown).
|
|
69
|
-
definition: defWithoutName,
|
|
70
|
-
...(spreadOnly?.backingTable && { backingTable: spreadOnly.backingTable }),
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
const entityName = readNameLiteral(first);
|
|
74
|
-
if (entityName === undefined) {
|
|
75
|
-
return fail("entity", sourceLocationFromNode(call, sourceFile), "first argument must be a string literal name, or an identifier resolving to one (or use the object form)");
|
|
76
|
-
}
|
|
77
|
-
const defArg = args[1];
|
|
78
|
-
if (!defArg) {
|
|
79
|
-
return fail("entity", sourceLocationFromNode(call, sourceFile), "expected a definition object as second argument");
|
|
80
|
-
}
|
|
81
|
-
const definition = readDataLiteralNode(defArg);
|
|
82
|
-
if (!isPlainObject(definition)) {
|
|
83
|
-
return fail("entity", sourceLocationFromNode(call, sourceFile), "definition could not be read as a plain object (contains functions or identifiers)");
|
|
84
|
-
}
|
|
85
|
-
const unknownTypes = findUnknownEntityFieldTypes(definition);
|
|
86
|
-
const firstUnknown = unknownTypes[0];
|
|
87
|
-
if (firstUnknown) {
|
|
88
|
-
return fail("entity", sourceLocationFromNode(call, sourceFile), `definition.fields.${firstUnknown.fieldName}.type: ${describeUnknownFieldType(firstUnknown)}`);
|
|
89
|
-
}
|
|
90
|
-
return ok({
|
|
91
|
-
kind: "entity",
|
|
92
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
93
|
-
entityName,
|
|
94
|
-
definition: definition,
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
export function extractRelation(call, sourceFile) {
|
|
98
|
-
const args = call.getArguments();
|
|
99
|
-
const first = args[0];
|
|
100
|
-
if (!first) {
|
|
101
|
-
return fail("relation", sourceLocationFromNode(call, sourceFile), "expected at least one argument");
|
|
102
|
-
}
|
|
103
|
-
const obj = first.asKind(SyntaxKind.ObjectLiteralExpression);
|
|
104
|
-
if (obj && args.length === 1) {
|
|
105
|
-
const entityInit = obj
|
|
106
|
-
.getProperty("entity")
|
|
107
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
108
|
-
?.getInitializer();
|
|
109
|
-
if (!entityInit) {
|
|
110
|
-
return fail("relation", sourceLocationFromNode(call, sourceFile), "object form requires an `entity` property");
|
|
111
|
-
}
|
|
112
|
-
const entityName = readNameOrRef(entityInit);
|
|
113
|
-
if (!entityName) {
|
|
114
|
-
return fail("relation", sourceLocationFromNode(call, sourceFile), '`entity` must be a string literal or `{ name: "..." }` ref');
|
|
115
|
-
}
|
|
116
|
-
const nameInit = obj
|
|
117
|
-
.getProperty("name")
|
|
118
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
119
|
-
?.getInitializer()
|
|
120
|
-
?.asKind(SyntaxKind.StringLiteral);
|
|
121
|
-
if (!nameInit) {
|
|
122
|
-
return fail("relation", sourceLocationFromNode(call, sourceFile), "object form requires a string-literal `name` property");
|
|
123
|
-
}
|
|
124
|
-
const definition = readDataLiteralNode(obj);
|
|
125
|
-
if (!isPlainObject(definition)) {
|
|
126
|
-
return fail("relation", sourceLocationFromNode(call, sourceFile), "definition could not be read as a plain object");
|
|
127
|
-
}
|
|
128
|
-
const { entity: _e, name: _n, ...defWithoutCarriers } = definition;
|
|
129
|
-
return ok({
|
|
130
|
-
kind: "relation",
|
|
131
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
132
|
-
entityName,
|
|
133
|
-
relationName: nameInit.getLiteralValue(),
|
|
134
|
-
definition: defWithoutCarriers,
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
const entityName = readNameOrRef(first);
|
|
138
|
-
if (!entityName) {
|
|
139
|
-
return fail("relation", sourceLocationFromNode(call, sourceFile), 'first argument must be a string literal or an inline { name: "..." } object (or use the object form)');
|
|
140
|
-
}
|
|
141
|
-
const relationNameArg = args[1];
|
|
142
|
-
const relationName = relationNameArg && readNameLiteral(relationNameArg);
|
|
143
|
-
if (!relationName) {
|
|
144
|
-
return fail("relation", sourceLocationFromNode(call, sourceFile), "second argument must be a string literal relation name, or an identifier resolving to one");
|
|
145
|
-
}
|
|
146
|
-
const defArg = args[2];
|
|
147
|
-
if (!defArg) {
|
|
148
|
-
return fail("relation", sourceLocationFromNode(call, sourceFile), "expected a definition object as third argument");
|
|
149
|
-
}
|
|
150
|
-
const definition = readDataLiteralNode(defArg);
|
|
151
|
-
if (!isPlainObject(definition)) {
|
|
152
|
-
return fail("relation", sourceLocationFromNode(call, sourceFile), "definition could not be read as a plain object");
|
|
153
|
-
}
|
|
154
|
-
return ok({
|
|
155
|
-
kind: "relation",
|
|
156
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
157
|
-
entityName,
|
|
158
|
-
relationName,
|
|
159
|
-
definition: definition,
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
export function extractNav(call, sourceFile) {
|
|
163
|
-
const arg = call.getArguments()[0];
|
|
164
|
-
if (!arg) {
|
|
165
|
-
return fail("nav", sourceLocationFromNode(call, sourceFile), "expected a NavDefinition object as first argument");
|
|
166
|
-
}
|
|
167
|
-
const definition = readDataLiteralNode(arg);
|
|
168
|
-
if (!isPlainObject(definition)) {
|
|
169
|
-
return fail("nav", sourceLocationFromNode(call, sourceFile), "definition could not be read as a plain object");
|
|
170
|
-
}
|
|
171
|
-
return ok({
|
|
172
|
-
kind: "nav",
|
|
173
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
174
|
-
definition: definition,
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
export function extractWorkspace(call, sourceFile) {
|
|
178
|
-
const arg = call.getArguments()[0];
|
|
179
|
-
if (!arg) {
|
|
180
|
-
return fail("workspace", sourceLocationFromNode(call, sourceFile), "expected a WorkspaceDefinition object as first argument");
|
|
181
|
-
}
|
|
182
|
-
const definition = readDataLiteralNode(arg);
|
|
183
|
-
if (!isPlainObject(definition)) {
|
|
184
|
-
return fail("workspace", sourceLocationFromNode(call, sourceFile), "definition could not be read as a plain object");
|
|
185
|
-
}
|
|
186
|
-
return ok({
|
|
187
|
-
kind: "workspace",
|
|
188
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
189
|
-
definition: definition,
|
|
190
|
-
});
|
|
191
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { CallExpression, SourceFile } from "ts-morph";
|
|
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
|
-
export type NamedOptionsResult = {
|
|
7
|
-
readonly kind: "ok";
|
|
8
|
-
readonly name: string;
|
|
9
|
-
readonly options: Record<string, unknown>;
|
|
10
|
-
} | {
|
|
11
|
-
readonly kind: "error";
|
|
12
|
-
readonly error: ParseError;
|
|
13
|
-
};
|
|
14
|
-
export declare function readNamedOptions(call: CallExpression, sourceFile: SourceFile, methodName: string, readOptions?: ReadDataLiteralOptions): NamedOptionsResult;
|
|
15
|
-
export declare function extractConfig(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ConfigPattern>;
|
|
16
|
-
export declare function extractTranslations(call: CallExpression, sourceFile: SourceFile): ExtractOutput<TranslationsPattern>;
|
|
17
|
-
export declare function extractMetric(call: CallExpression, sourceFile: SourceFile): ExtractOutput<MetricPattern>;
|
|
18
|
-
export declare function extractSecret(call: CallExpression, sourceFile: SourceFile): ExtractOutput<SecretPattern>;
|
|
19
|
-
export declare function extractSecretNamespace(call: CallExpression, sourceFile: SourceFile): ExtractOutput<SecretNamespacePattern>;
|
|
20
|
-
export declare function isClaimKeyType(value: unknown): value is ClaimKeyType;
|
|
21
|
-
export declare function extractClaimKey(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ClaimKeyPattern>;
|
|
22
|
-
export declare function extractReferenceData(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ReferenceDataPattern>;
|
|
23
|
-
export declare function extractUseExtension(call: CallExpression, sourceFile: SourceFile): ExtractOutput<UseExtensionPattern>;
|
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { SyntaxKind } from "ts-morph";
|
|
2
|
-
import { sourceLocationFromNode } from "../source-location.js";
|
|
3
|
-
import { fail, isPlainObject, ok, readDataLiteralNode, readNameLiteral, readNameLiteralRef, readNameOrRef, } from "./shared.js";
|
|
4
|
-
export function readNamedOptions(call, sourceFile, methodName, readOptions = {}) {
|
|
5
|
-
const args = call.getArguments();
|
|
6
|
-
const first = args[0];
|
|
7
|
-
if (!first) {
|
|
8
|
-
return fail(methodName, sourceLocationFromNode(call, sourceFile), "expected at least one argument");
|
|
9
|
-
}
|
|
10
|
-
const obj = first.asKind(SyntaxKind.ObjectLiteralExpression);
|
|
11
|
-
if (obj && args.length === 1) {
|
|
12
|
-
const nameInit = obj
|
|
13
|
-
.getProperty("name")
|
|
14
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
15
|
-
?.getInitializer()
|
|
16
|
-
?.asKind(SyntaxKind.StringLiteral);
|
|
17
|
-
if (!nameInit) {
|
|
18
|
-
return fail(methodName, sourceLocationFromNode(call, sourceFile), "object form requires a string-literal `name` property");
|
|
19
|
-
}
|
|
20
|
-
const data = readDataLiteralNode(obj, readOptions);
|
|
21
|
-
if (!isPlainObject(data)) {
|
|
22
|
-
return fail(methodName, sourceLocationFromNode(call, sourceFile), "argument could not be read as a plain object");
|
|
23
|
-
}
|
|
24
|
-
const { name: _name, ...optionsWithoutName } = data;
|
|
25
|
-
return { kind: "ok", name: nameInit.getLiteralValue(), options: optionsWithoutName };
|
|
26
|
-
}
|
|
27
|
-
const name = readNameLiteral(first);
|
|
28
|
-
if (name === undefined) {
|
|
29
|
-
return fail(methodName, sourceLocationFromNode(call, sourceFile), "first argument must be a string literal name, or an identifier resolving to one (or use the object form)");
|
|
30
|
-
}
|
|
31
|
-
const optionsArg = args[1];
|
|
32
|
-
if (!optionsArg) {
|
|
33
|
-
return fail(methodName, sourceLocationFromNode(call, sourceFile), "expected an options object as second argument");
|
|
34
|
-
}
|
|
35
|
-
const options = readDataLiteralNode(optionsArg, readOptions);
|
|
36
|
-
if (!isPlainObject(options)) {
|
|
37
|
-
return fail(methodName, sourceLocationFromNode(call, sourceFile), "options could not be read as a plain object");
|
|
38
|
-
}
|
|
39
|
-
return { kind: "ok", name, options };
|
|
40
|
-
}
|
|
41
|
-
export function extractConfig(call, sourceFile) {
|
|
42
|
-
const arg = call.getArguments()[0];
|
|
43
|
-
if (!arg) {
|
|
44
|
-
return fail("config", sourceLocationFromNode(call, sourceFile), "expected `{ keys: { ... } }` as first argument");
|
|
45
|
-
}
|
|
46
|
-
const obj = readDataLiteralNode(arg);
|
|
47
|
-
if (!isPlainObject(obj)) {
|
|
48
|
-
return fail("config", sourceLocationFromNode(call, sourceFile), "argument could not be read as a plain object");
|
|
49
|
-
}
|
|
50
|
-
const keys = obj["keys"];
|
|
51
|
-
if (!isPlainObject(keys)) {
|
|
52
|
-
return fail("config", sourceLocationFromNode(call, sourceFile), "missing or non-object `keys` property");
|
|
53
|
-
}
|
|
54
|
-
return ok({
|
|
55
|
-
kind: "config",
|
|
56
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
57
|
-
keys: keys,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
export function extractTranslations(call, sourceFile) {
|
|
61
|
-
const arg = call.getArguments()[0];
|
|
62
|
-
if (!arg) {
|
|
63
|
-
return fail("translations", sourceLocationFromNode(call, sourceFile), "expected `{ keys: { ... } }` as first argument");
|
|
64
|
-
}
|
|
65
|
-
const obj = readDataLiteralNode(arg);
|
|
66
|
-
if (!isPlainObject(obj)) {
|
|
67
|
-
return fail("translations", sourceLocationFromNode(call, sourceFile), "argument could not be read as a plain object");
|
|
68
|
-
}
|
|
69
|
-
const keys = obj["keys"];
|
|
70
|
-
if (!isPlainObject(keys)) {
|
|
71
|
-
return fail("translations", sourceLocationFromNode(call, sourceFile), "missing or non-object `keys` property");
|
|
72
|
-
}
|
|
73
|
-
return ok({
|
|
74
|
-
kind: "translations",
|
|
75
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
76
|
-
keys: keys,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
export function extractMetric(call, sourceFile) {
|
|
80
|
-
const parsed = readNamedOptions(call, sourceFile, "metric");
|
|
81
|
-
if (parsed.kind === "error")
|
|
82
|
-
return parsed;
|
|
83
|
-
return ok({
|
|
84
|
-
kind: "metric",
|
|
85
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
86
|
-
shortName: parsed.name,
|
|
87
|
-
options: parsed.options,
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
export function extractSecret(call, sourceFile) {
|
|
91
|
-
const parsed = readNamedOptions(call, sourceFile, "secret", { functionValuesAsRaw: true });
|
|
92
|
-
if (parsed.kind === "error")
|
|
93
|
-
return parsed;
|
|
94
|
-
return ok({
|
|
95
|
-
kind: "secret",
|
|
96
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
97
|
-
shortName: parsed.name,
|
|
98
|
-
options: parsed.options,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
export function extractSecretNamespace(call, sourceFile) {
|
|
102
|
-
const parsed = readNamedOptions(call, sourceFile, "secretNamespace");
|
|
103
|
-
if (parsed.kind === "error")
|
|
104
|
-
return parsed;
|
|
105
|
-
return ok({
|
|
106
|
-
kind: "secretNamespace",
|
|
107
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
108
|
-
shortName: parsed.name,
|
|
109
|
-
options: parsed.options,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
export function isClaimKeyType(value) {
|
|
113
|
-
return (value === "string" ||
|
|
114
|
-
value === "number" ||
|
|
115
|
-
value === "boolean" ||
|
|
116
|
-
value === "string[]" ||
|
|
117
|
-
value === "object");
|
|
118
|
-
}
|
|
119
|
-
export function extractClaimKey(call, sourceFile) {
|
|
120
|
-
const parsed = readNamedOptions(call, sourceFile, "claimKey");
|
|
121
|
-
if (parsed.kind === "error")
|
|
122
|
-
return parsed;
|
|
123
|
-
const claimType = parsed.options["type"];
|
|
124
|
-
if (!isClaimKeyType(claimType)) {
|
|
125
|
-
return fail("claimKey", sourceLocationFromNode(call, sourceFile), 'type must be one of "string" | "number" | "boolean" | "string[]" | "object"');
|
|
126
|
-
}
|
|
127
|
-
return ok({
|
|
128
|
-
kind: "claimKey",
|
|
129
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
130
|
-
shortName: parsed.name,
|
|
131
|
-
claimType,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
export function extractReferenceData(call, sourceFile) {
|
|
135
|
-
const args = call.getArguments();
|
|
136
|
-
const first = args[0];
|
|
137
|
-
if (!first) {
|
|
138
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), "expected at least one argument");
|
|
139
|
-
}
|
|
140
|
-
const obj = first.asKind(SyntaxKind.ObjectLiteralExpression);
|
|
141
|
-
if (obj && args.length === 1) {
|
|
142
|
-
const entityInit = obj
|
|
143
|
-
.getProperty("entity")
|
|
144
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
145
|
-
?.getInitializer();
|
|
146
|
-
if (!entityInit) {
|
|
147
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), "object form requires an `entity` property");
|
|
148
|
-
}
|
|
149
|
-
const entityName = readNameOrRef(entityInit);
|
|
150
|
-
if (!entityName) {
|
|
151
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), '`entity` must be a string literal or `{ name: "..." }` ref');
|
|
152
|
-
}
|
|
153
|
-
const dataInit = obj
|
|
154
|
-
.getProperty("data")
|
|
155
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
156
|
-
?.getInitializer();
|
|
157
|
-
if (!dataInit) {
|
|
158
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), "object form requires a `data` property");
|
|
159
|
-
}
|
|
160
|
-
const data = readDataLiteralNode(dataInit);
|
|
161
|
-
if (!Array.isArray(data) || !data.every(isPlainObject)) {
|
|
162
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), "data must be an array of plain objects");
|
|
163
|
-
}
|
|
164
|
-
let upsertKey;
|
|
165
|
-
const upsertKeyInit = obj
|
|
166
|
-
.getProperty("upsertKey")
|
|
167
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
168
|
-
?.getInitializer()
|
|
169
|
-
?.asKind(SyntaxKind.StringLiteral);
|
|
170
|
-
if (upsertKeyInit) {
|
|
171
|
-
upsertKey = upsertKeyInit.getLiteralValue();
|
|
172
|
-
}
|
|
173
|
-
return ok({
|
|
174
|
-
kind: "referenceData",
|
|
175
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
176
|
-
entityName,
|
|
177
|
-
data: data,
|
|
178
|
-
...(upsertKey !== undefined && { upsertKey }),
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
const entityName = readNameOrRef(first);
|
|
182
|
-
if (!entityName) {
|
|
183
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), 'first argument must be a string literal or an inline { name: "..." } object (or use the object form)');
|
|
184
|
-
}
|
|
185
|
-
const dataArg = args[1];
|
|
186
|
-
if (!dataArg) {
|
|
187
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), "expected a data array as second argument");
|
|
188
|
-
}
|
|
189
|
-
const data = readDataLiteralNode(dataArg);
|
|
190
|
-
if (!Array.isArray(data) || !data.every(isPlainObject)) {
|
|
191
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), "data must be an array of plain objects");
|
|
192
|
-
}
|
|
193
|
-
let upsertKey;
|
|
194
|
-
const optionsArg = args[2];
|
|
195
|
-
if (optionsArg) {
|
|
196
|
-
const options = readDataLiteralNode(optionsArg);
|
|
197
|
-
if (!isPlainObject(options)) {
|
|
198
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), "options could not be read as a plain object");
|
|
199
|
-
}
|
|
200
|
-
if (options["upsertKey"] !== undefined) {
|
|
201
|
-
if (typeof options["upsertKey"] !== "string") {
|
|
202
|
-
return fail("referenceData", sourceLocationFromNode(call, sourceFile), "upsertKey must be a string when provided");
|
|
203
|
-
}
|
|
204
|
-
upsertKey = options["upsertKey"];
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return ok({
|
|
208
|
-
kind: "referenceData",
|
|
209
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
210
|
-
entityName,
|
|
211
|
-
data: data,
|
|
212
|
-
...(upsertKey !== undefined && { upsertKey }),
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
const USE_EXTENSION_READ_OPTIONS = { functionValuesAsRaw: true };
|
|
216
|
-
export function extractUseExtension(call, sourceFile) {
|
|
217
|
-
const args = call.getArguments();
|
|
218
|
-
const first = args[0];
|
|
219
|
-
if (!first) {
|
|
220
|
-
return fail("useExtension", sourceLocationFromNode(call, sourceFile), "expected at least one argument");
|
|
221
|
-
}
|
|
222
|
-
const obj = first.asKind(SyntaxKind.ObjectLiteralExpression);
|
|
223
|
-
if (obj && args.length === 1) {
|
|
224
|
-
const nameInit = obj
|
|
225
|
-
.getProperty("name")
|
|
226
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
227
|
-
?.getInitializer()
|
|
228
|
-
?.asKind(SyntaxKind.StringLiteral);
|
|
229
|
-
if (!nameInit) {
|
|
230
|
-
return fail("useExtension", sourceLocationFromNode(call, sourceFile), "object form requires a string-literal `name` property");
|
|
231
|
-
}
|
|
232
|
-
const entityInit = obj
|
|
233
|
-
.getProperty("entity")
|
|
234
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
235
|
-
?.getInitializer();
|
|
236
|
-
if (!entityInit) {
|
|
237
|
-
return fail("useExtension", sourceLocationFromNode(call, sourceFile), "object form requires an `entity` property");
|
|
238
|
-
}
|
|
239
|
-
const entityName = readNameOrRef(entityInit);
|
|
240
|
-
if (!entityName) {
|
|
241
|
-
return fail("useExtension", sourceLocationFromNode(call, sourceFile), '`entity` must be a string literal or `{ name: "..." }` ref');
|
|
242
|
-
}
|
|
243
|
-
let options;
|
|
244
|
-
const optionsInit = obj
|
|
245
|
-
.getProperty("options")
|
|
246
|
-
?.asKind(SyntaxKind.PropertyAssignment)
|
|
247
|
-
?.getInitializer();
|
|
248
|
-
if (optionsInit) {
|
|
249
|
-
const parsed = readDataLiteralNode(optionsInit, USE_EXTENSION_READ_OPTIONS);
|
|
250
|
-
if (!isPlainObject(parsed)) {
|
|
251
|
-
return fail("useExtension", sourceLocationFromNode(call, sourceFile), "options could not be read as a plain object");
|
|
252
|
-
}
|
|
253
|
-
options = parsed;
|
|
254
|
-
}
|
|
255
|
-
return ok({
|
|
256
|
-
kind: "useExtension",
|
|
257
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
258
|
-
extensionName: nameInit.getLiteralValue(),
|
|
259
|
-
entityName,
|
|
260
|
-
...(options !== undefined && { options }),
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
const extensionNameRef = readNameLiteralRef(first);
|
|
264
|
-
if (extensionNameRef === undefined) {
|
|
265
|
-
return fail("useExtension", sourceLocationFromNode(call, sourceFile), "first argument must be a string literal extension name, or an identifier resolving to one (or use the object form)");
|
|
266
|
-
}
|
|
267
|
-
const entityRefArg = args[1];
|
|
268
|
-
if (!entityRefArg) {
|
|
269
|
-
return fail("useExtension", sourceLocationFromNode(call, sourceFile), "expected an entity reference as second argument");
|
|
270
|
-
}
|
|
271
|
-
const entityName = readNameOrRef(entityRefArg);
|
|
272
|
-
if (!entityName) {
|
|
273
|
-
return fail("useExtension", sourceLocationFromNode(call, sourceFile), 'second argument must be a string literal or an inline { name: "..." } object');
|
|
274
|
-
}
|
|
275
|
-
const optionsArg = args[2];
|
|
276
|
-
let options;
|
|
277
|
-
if (optionsArg) {
|
|
278
|
-
const parsed = readDataLiteralNode(optionsArg, USE_EXTENSION_READ_OPTIONS);
|
|
279
|
-
if (!isPlainObject(parsed)) {
|
|
280
|
-
return fail("useExtension", sourceLocationFromNode(call, sourceFile), "options could not be read as a plain object");
|
|
281
|
-
}
|
|
282
|
-
options = parsed;
|
|
283
|
-
}
|
|
284
|
-
return ok({
|
|
285
|
-
kind: "useExtension",
|
|
286
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
287
|
-
extensionName: extensionNameRef.value,
|
|
288
|
-
...(extensionNameRef.raw !== undefined && { extensionNameRaw: extensionNameRef.raw }),
|
|
289
|
-
entityName,
|
|
290
|
-
...(options !== undefined && { options }),
|
|
291
|
-
});
|
|
292
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { CallExpression, SourceFile } from "ts-morph";
|
|
2
|
-
import type { EnvSchemaPattern, ExposesApiPattern, ExtendsRegistrarPattern, UsesApiPattern } from "../patterns.ts";
|
|
3
|
-
import { type ExtractOutput } from "./shared.ts";
|
|
4
|
-
export declare function extractEnvSchema(call: CallExpression, sourceFile: SourceFile): ExtractOutput<EnvSchemaPattern>;
|
|
5
|
-
export declare function extractExtendsRegistrar(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ExtendsRegistrarPattern>;
|
|
6
|
-
export declare function extractUsesApi(call: CallExpression, sourceFile: SourceFile): ExtractOutput<UsesApiPattern>;
|
|
7
|
-
export declare function extractExposesApi(call: CallExpression, sourceFile: SourceFile): ExtractOutput<ExposesApiPattern>;
|
|
8
|
-
export declare function extractStoreTable(call: CallExpression, sourceFile: SourceFile): ExtractOutput<never>;
|
|
9
|
-
export declare function extractBootCheck(call: CallExpression, sourceFile: SourceFile): ExtractOutput<never>;
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { sourceLocationFromNode } from "../source-location.js";
|
|
2
|
-
import { fail, ok, readNameLiteral, readNameLiteralRef } from "./shared.js";
|
|
3
|
-
export function extractEnvSchema(call, sourceFile) {
|
|
4
|
-
const arg = call.getArguments()[0];
|
|
5
|
-
if (!arg) {
|
|
6
|
-
return fail("envSchema", sourceLocationFromNode(call, sourceFile), "expected a single Zod-object schema argument (e.g. z.object({...}))");
|
|
7
|
-
}
|
|
8
|
-
return ok({
|
|
9
|
-
kind: "envSchema",
|
|
10
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
11
|
-
schemaBody: sourceLocationFromNode(arg, sourceFile),
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
export function extractExtendsRegistrar(call, sourceFile) {
|
|
15
|
-
const args = call.getArguments();
|
|
16
|
-
const first = args[0];
|
|
17
|
-
const extensionNameRef = first && readNameLiteralRef(first);
|
|
18
|
-
if (!extensionNameRef) {
|
|
19
|
-
return fail("extendsRegistrar", sourceLocationFromNode(call, sourceFile), "first argument must be a string literal extension name, or an identifier resolving to one");
|
|
20
|
-
}
|
|
21
|
-
const defArg = args[1];
|
|
22
|
-
if (!defArg) {
|
|
23
|
-
return fail("extendsRegistrar", sourceLocationFromNode(call, sourceFile), "expected a definition argument");
|
|
24
|
-
}
|
|
25
|
-
return ok({
|
|
26
|
-
kind: "extendsRegistrar",
|
|
27
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
28
|
-
extensionName: extensionNameRef.value,
|
|
29
|
-
...(extensionNameRef.raw !== undefined && { extensionNameRaw: extensionNameRef.raw }),
|
|
30
|
-
defBody: sourceLocationFromNode(defArg, sourceFile),
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
export function extractUsesApi(call, sourceFile) {
|
|
34
|
-
const arg = call.getArguments()[0];
|
|
35
|
-
const apiName = arg && readNameLiteral(arg);
|
|
36
|
-
if (!apiName) {
|
|
37
|
-
return fail("usesApi", sourceLocationFromNode(call, sourceFile), 'expected a single string-literal API name (e.g. "sessions.revokeAllForUser"), or an identifier resolving to one');
|
|
38
|
-
}
|
|
39
|
-
return ok({
|
|
40
|
-
kind: "usesApi",
|
|
41
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
42
|
-
apiName,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
export function extractExposesApi(call, sourceFile) {
|
|
46
|
-
const arg = call.getArguments()[0];
|
|
47
|
-
const apiName = arg && readNameLiteral(arg);
|
|
48
|
-
if (!apiName) {
|
|
49
|
-
return fail("exposesApi", sourceLocationFromNode(call, sourceFile), 'expected a single string-literal API name (e.g. "sessions.revokeAllForUser"), or an identifier resolving to one');
|
|
50
|
-
}
|
|
51
|
-
return ok({
|
|
52
|
-
kind: "exposesApi",
|
|
53
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
54
|
-
apiName,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
export function extractStoreTable(call, sourceFile) {
|
|
58
|
-
// The meta argument is always a factory call (defineUnmanagedTable /
|
|
59
|
-
// deriveEntityTableMeta) or a captured identifier — never an inline literal,
|
|
60
|
-
// so there is nothing to extract statically. A clean ParseError (not
|
|
61
|
-
// UnknownPattern) marks it design-time-unreadable, like entity-by-identifier.
|
|
62
|
-
return fail("storeTable", sourceLocationFromNode(call, sourceFile), "storeTable meta is a factory/identifier argument, not a static literal");
|
|
63
|
-
}
|
|
64
|
-
export function extractBootCheck(call, sourceFile) {
|
|
65
|
-
// The argument is a runtime closure over the composed feature list —
|
|
66
|
-
// nothing to extract statically, so a clean ParseError like storeTable.
|
|
67
|
-
return fail("bootCheck", sourceLocationFromNode(call, sourceFile), "bootCheck takes a runtime closure, not a static literal");
|
|
68
|
-
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { CallExpression, SourceFile } from "ts-morph";
|
|
2
|
-
import type { TreeActionsPattern } from "../patterns.ts";
|
|
3
|
-
import { type ExtractOutput } from "./shared.ts";
|
|
4
|
-
export declare function extractTreeActions(call: CallExpression, sourceFile: SourceFile): ExtractOutput<TreeActionsPattern>;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { sourceLocationFromNode } from "../source-location.js";
|
|
2
|
-
import { fail, isPlainObject, ok, readDataLiteralNode } from "./shared.js";
|
|
3
|
-
export function extractTreeActions(call, sourceFile) {
|
|
4
|
-
const arg = call.getArguments()[0];
|
|
5
|
-
if (!arg) {
|
|
6
|
-
return fail("treeActions", sourceLocationFromNode(call, sourceFile), "expected an action-map object literal as first argument");
|
|
7
|
-
}
|
|
8
|
-
const definitions = readDataLiteralNode(arg);
|
|
9
|
-
if (!isPlainObject(definitions)) {
|
|
10
|
-
return fail("treeActions", sourceLocationFromNode(call, sourceFile), "action-map could not be read as a plain object");
|
|
11
|
-
}
|
|
12
|
-
return ok({
|
|
13
|
-
kind: "treeActions",
|
|
14
|
-
source: sourceLocationFromNode(call, sourceFile),
|
|
15
|
-
definitions: definitions,
|
|
16
|
-
});
|
|
17
|
-
}
|