@cosmicdrift/kumiko-framework 0.387.0 → 0.389.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 +9 -1
- package/agents/examples/anonymous-access.md +1 -1
- package/agents/examples/apex-landing.md +204 -0
- package/agents/examples/api-worker-split.md +64 -0
- package/agents/examples/app-config.md +14 -0
- package/agents/examples/auth-mfa.md +115 -0
- package/agents/examples/env-composition.md +28 -1
- package/agents/examples/golden-path.md +13 -1
- package/agents/examples/legal-pages.md +1 -1
- package/agents/examples/lifecycle-hooks.md +55 -2
- package/agents/examples/list-table-options.md +466 -0
- package/agents/examples/pdf-audit-export.md +4 -2
- package/agents/examples/prod-boot-options.md +16 -0
- package/agents/examples/rate-limiting.md +48 -0
- package/agents/examples/record-detail-layout.md +692 -0
- package/agents/examples/seed-migration.md +212 -0
- package/agents/examples/state-machine.md +3 -2
- package/agents/examples/tenant-isolation.md +73 -1
- package/agents/examples/wizard-form.md +941 -0
- package/agents/examples/writeform-section.md +548 -0
- package/agents/examples.md +1 -0
- package/agents/features.md +19 -2
- package/agents/widgets.md +2 -0
- package/dist/api/api-constants.d.ts +1 -0
- package/dist/api/api-constants.js +2 -0
- package/dist/api/auth-routes-shared.d.ts +2 -0
- package/dist/api/auth-routes-shared.js +5 -0
- package/dist/api/client-error-route.js +10 -5
- package/dist/api/entity-read-access.d.ts +2 -1
- package/dist/api/entity-read-access.js +14 -0
- package/dist/api/export/export-cells-reference.d.ts +9 -0
- package/dist/api/export/export-cells-reference.js +21 -0
- package/dist/api/export/export-cells.d.ts +11 -0
- package/dist/api/export/export-cells.js +136 -0
- package/dist/api/export/export-ciphertext-guard.d.ts +2 -0
- package/dist/api/export/export-ciphertext-guard.js +27 -0
- package/dist/api/export/export-columns.d.ts +29 -0
- package/dist/api/export/export-columns.js +85 -0
- package/dist/api/export/export-errors.d.ts +4 -0
- package/dist/api/export/export-errors.js +14 -0
- package/dist/api/export/export-route.d.ts +4 -0
- package/dist/api/export/export-route.js +74 -0
- package/dist/api/export/export-rows.d.ts +13 -0
- package/dist/api/export/export-rows.js +62 -0
- package/dist/api/export/export-screen.d.ts +12 -0
- package/dist/api/export/export-screen.js +47 -0
- package/dist/api/export/export-xlsx-writer.d.ts +4 -0
- package/dist/api/export/export-xlsx-writer.js +21 -0
- package/dist/api/extra-route.d.ts +4 -0
- package/dist/api/index.d.ts +3 -1
- package/dist/api/index.js +3 -1
- package/dist/api/pii-leak-guard.d.ts +3 -0
- package/dist/api/pii-leak-guard.js +3 -2
- package/dist/api/request-context.d.ts +1 -1
- package/dist/api/request-context.js +1 -1
- package/dist/api/routes.d.ts +16 -0
- package/dist/api/routes.js +2 -2
- package/dist/api/server-boot-checks.d.ts +10 -0
- package/dist/api/server-boot-checks.js +157 -0
- package/dist/api/server-event-dispatcher.d.ts +26 -0
- package/dist/api/server-event-dispatcher.js +208 -0
- package/dist/api/server-extra-routes.d.ts +11 -0
- package/dist/api/server-extra-routes.js +206 -0
- package/dist/api/server-middleware.d.ts +20 -0
- package/dist/api/server-middleware.js +211 -0
- package/dist/api/server-routes.d.ts +19 -0
- package/dist/api/server-routes.js +299 -0
- package/dist/api/server-websocket-routes.d.ts +4 -0
- package/dist/api/server-websocket-routes.js +108 -0
- package/dist/api/server-wiring.d.ts +32 -0
- package/dist/api/server-wiring.js +238 -0
- package/dist/api/server.d.ts +10 -15
- package/dist/api/server.js +48 -1251
- package/dist/api/session-cookies.js +4 -4
- package/dist/api/sse-route.d.ts +2 -1
- package/dist/api/sse-route.js +27 -13
- package/dist/config/index.d.ts +3 -1
- package/dist/crypto/owner-transition-rekey.d.ts +5 -1
- package/dist/crypto/owner-transition-rekey.js +1 -1
- package/dist/crypto/pg-kms-adapter.d.ts +1 -0
- package/dist/crypto/pg-kms-adapter.js +12 -18
- package/dist/crypto/pii-field-encryption.d.ts +5 -1
- package/dist/crypto/pii-field-encryption.js +3 -1
- package/dist/db/aggregate-sql.d.ts +23 -0
- package/dist/db/aggregate-sql.js +165 -0
- package/dist/db/closed-connection.d.ts +9 -0
- package/dist/db/closed-connection.js +88 -0
- package/dist/db/connection.d.ts +4 -5
- package/dist/db/connection.js +29 -20
- package/dist/db/dialect.js +1 -1
- package/dist/db/distinct-on.d.ts +1 -1
- package/dist/db/driver-row-coercion.d.ts +2 -0
- package/dist/db/driver-row-coercion.js +186 -0
- package/dist/db/driver-value-preparation.d.ts +16 -0
- package/dist/db/driver-value-preparation.js +101 -0
- package/dist/db/entity-field-encryption.d.ts +1 -0
- package/dist/db/entity-field-encryption.js +1 -1
- package/dist/db/entity-table-meta.js +103 -110
- package/dist/db/event-store-executor-context.d.ts +2 -1
- package/dist/db/event-store-executor-read-aggregate-currencies.d.ts +17 -0
- package/dist/db/event-store-executor-read-aggregate-currencies.js +40 -0
- package/dist/db/event-store-executor-read-aggregate.d.ts +8 -0
- package/dist/db/event-store-executor-read-aggregate.js +143 -0
- package/dist/db/event-store-executor-read-filter.d.ts +31 -0
- package/dist/db/event-store-executor-read-filter.js +206 -0
- package/dist/db/event-store-executor-read-paging.d.ts +14 -0
- package/dist/db/event-store-executor-read-paging.js +99 -0
- package/dist/db/event-store-executor-read-rows.d.ts +6 -0
- package/dist/db/event-store-executor-read-rows.js +32 -0
- package/dist/db/event-store-executor-read-search.d.ts +28 -0
- package/dist/db/event-store-executor-read-search.js +221 -0
- package/dist/db/event-store-executor-read-sort.d.ts +41 -0
- package/dist/db/event-store-executor-read-sort.js +130 -0
- package/dist/db/event-store-executor-read-where.d.ts +24 -0
- package/dist/db/event-store-executor-read-where.js +81 -0
- package/dist/db/event-store-executor-read.d.ts +2 -9
- package/dist/db/event-store-executor-read.js +48 -701
- package/dist/db/event-store-executor-write-atomic.d.ts +4 -0
- package/dist/db/event-store-executor-write-atomic.js +41 -0
- package/dist/db/event-store-executor-write-steps.d.ts +17 -0
- package/dist/db/event-store-executor-write-steps.js +95 -0
- package/dist/db/event-store-executor-write.js +405 -509
- package/dist/db/event-store-executor.js +2 -1
- package/dist/db/executor-managed-tables.js +1 -1
- package/dist/db/index.d.ts +7 -3
- package/dist/db/index.js +6 -2
- package/dist/db/list-aggregate-labels.d.ts +14 -0
- package/dist/db/list-aggregate-labels.js +26 -0
- package/dist/db/migrate-generator.js +71 -86
- package/dist/db/migrate-runner.js +7 -4
- package/dist/db/pg-error.js +26 -21
- package/dist/db/queries/backfill-pii.js +3 -6
- package/dist/db/queries/database-now.js +2 -1
- package/dist/db/queries/shadow-swap.js +2 -3
- package/dist/db/query.d.ts +16 -15
- package/dist/db/query.js +76 -804
- package/dist/db/reference-data.js +19 -2
- package/dist/db/statement-timeout.js +2 -1
- package/dist/db/table-builder.js +113 -166
- package/dist/db/table-info.d.ts +10 -0
- package/dist/db/table-info.js +45 -0
- package/dist/db/temporal-value-guards.d.ts +6 -0
- package/dist/db/temporal-value-guards.js +15 -0
- package/dist/db/tenant-db-runner.d.ts +1 -0
- package/dist/db/tenant-db-runner.js +3 -0
- package/dist/db/tenant-db-upsert.d.ts +5 -0
- package/dist/db/tenant-db-upsert.js +91 -0
- package/dist/db/tenant-db.js +50 -10
- package/dist/db/where-clause.d.ts +6 -0
- package/dist/db/where-clause.js +236 -0
- package/dist/derivatives/delete-stored-file.js +2 -1
- package/dist/engine/boot-validator/boot-check.js +1 -1
- package/dist/engine/boot-validator/bundled-lists-table.d.ts +2 -0
- package/dist/engine/boot-validator/bundled-lists-table.js +36 -0
- package/dist/engine/boot-validator/detail-screens.js +2 -2
- package/dist/engine/boot-validator/entity-handler.d.ts +1 -0
- package/dist/engine/boot-validator/entity-handler.js +17 -0
- package/dist/engine/boot-validator/entity-list-aggregate-options.d.ts +3 -0
- package/dist/engine/boot-validator/entity-list-aggregate-options.js +23 -0
- package/dist/engine/boot-validator/form-derivations.js +35 -1
- package/dist/engine/boot-validator/i18n-keys.js +5 -3
- package/dist/engine/boot-validator/index.js +2 -0
- package/dist/engine/boot-validator/list-bulk-actions.d.ts +3 -0
- package/dist/engine/boot-validator/list-bulk-actions.js +49 -0
- package/dist/engine/boot-validator/list-column-layout.d.ts +8 -0
- package/dist/engine/boot-validator/list-column-layout.js +41 -0
- package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +24 -0
- package/dist/engine/boot-validator/list-table-aggregate-options.js +145 -0
- package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +10 -0
- package/dist/engine/boot-validator/list-table-aggregate-query.js +31 -0
- package/dist/engine/boot-validator/list-table-export-options.d.ts +1 -0
- package/dist/engine/boot-validator/list-table-export-options.js +27 -0
- package/dist/engine/boot-validator/list-table-options.d.ts +3 -0
- package/dist/engine/boot-validator/list-table-options.js +77 -0
- package/dist/engine/boot-validator/list-table-reject-unknown-keys.d.ts +1 -0
- package/dist/engine/boot-validator/list-table-reject-unknown-keys.js +7 -0
- package/dist/engine/boot-validator/pii-retention.js +233 -155
- package/dist/engine/boot-validator/projection-list-screens.d.ts +1 -1
- package/dist/engine/boot-validator/projection-list-screens.js +3 -13
- package/dist/engine/boot-validator/related-list-table-rules.d.ts +4 -0
- package/dist/engine/boot-validator/related-list-table-rules.js +42 -0
- package/dist/engine/boot-validator/screens-actions.d.ts +1 -0
- package/dist/engine/boot-validator/screens-actions.js +8 -1
- package/dist/engine/boot-validator/screens-dashboard.js +2 -5
- package/dist/engine/boot-validator/screens-forms.js +2 -6
- package/dist/engine/boot-validator/screens-kind-config-edit.d.ts +3 -0
- package/dist/engine/boot-validator/screens-kind-config-edit.js +88 -0
- package/dist/engine/boot-validator/screens-kind-entity-edit.d.ts +3 -0
- package/dist/engine/boot-validator/screens-kind-entity-edit.js +55 -0
- package/dist/engine/boot-validator/screens-kind-entity-list.d.ts +3 -0
- package/dist/engine/boot-validator/screens-kind-entity-list.js +235 -0
- package/dist/engine/boot-validator/screens-kind-projection-detail.d.ts +3 -0
- package/dist/engine/boot-validator/screens-kind-projection-detail.js +235 -0
- package/dist/engine/boot-validator/screens-kind-projection-list.d.ts +3 -0
- package/dist/engine/boot-validator/screens-kind-projection-list.js +56 -0
- package/dist/engine/boot-validator/screens-kind-secret-mint.d.ts +3 -0
- package/dist/engine/boot-validator/screens-kind-secret-mint.js +28 -0
- package/dist/engine/boot-validator/screens-kind-shared.d.ts +37 -0
- package/dist/engine/boot-validator/screens-kind-shared.js +142 -0
- package/dist/engine/boot-validator/screens-lists.d.ts +2 -1
- package/dist/engine/boot-validator/screens-lists.js +24 -11
- package/dist/engine/boot-validator/screens.d.ts +0 -2
- package/dist/engine/boot-validator/screens.js +99 -860
- package/dist/engine/build-app-schema.d.ts +2 -1
- package/dist/engine/build-app-schema.js +65 -97
- package/dist/engine/build-config-feature-schema.js +6 -1
- package/dist/engine/define-feature.js +13 -2
- package/dist/engine/define-handler.js +1 -0
- package/dist/engine/entity-handlers.d.ts +13 -0
- package/dist/engine/entity-handlers.js +10 -21
- package/dist/engine/entity-list-runtime-options.d.ts +8 -0
- package/dist/engine/entity-list-runtime-options.js +18 -0
- package/dist/engine/feature-ast/extractors/handlers.js +1 -0
- package/dist/engine/feature-ast/extractors/index.d.ts +1 -1
- package/dist/engine/feature-ast/extractors/index.js +1 -1
- package/dist/engine/feature-ast/extractors/round1.d.ts +2 -1
- package/dist/engine/feature-ast/extractors/round1.js +6 -0
- package/dist/engine/feature-ast/extractors/round2.js +25 -6
- package/dist/engine/feature-ast/index.d.ts +1 -1
- package/dist/engine/feature-ast/parse.js +3 -1
- package/dist/engine/feature-ast/patch.d.ts +2 -0
- package/dist/engine/feature-ast/patch.js +5 -182
- package/dist/engine/feature-ast/pattern-change-schema.d.ts +10 -245
- package/dist/engine/feature-ast/pattern-change-schema.js +10 -163
- package/dist/engine/feature-ast/pattern-id-matchers.d.ts +7 -0
- package/dist/engine/feature-ast/pattern-id-matchers.js +211 -0
- package/dist/engine/feature-ast/pattern-id-schema.d.ts +251 -0
- package/dist/engine/feature-ast/pattern-id-schema.js +166 -0
- package/dist/engine/feature-ast/patterns.d.ts +14 -1
- package/dist/engine/feature-ast/patterns.js +44 -51
- package/dist/engine/feature-ast/render.js +52 -87
- package/dist/engine/feature-builder-state.d.ts +1 -0
- package/dist/engine/feature-builder-state.js +1 -0
- package/dist/engine/feature-entity-handlers.js +3 -0
- package/dist/engine/feature-manifest.d.ts +1 -0
- package/dist/engine/feature-manifest.js +1 -0
- package/dist/engine/field-access.d.ts +1 -0
- package/dist/engine/field-access.js +12 -0
- package/dist/engine/form-derivations.js +18 -7
- package/dist/engine/handler-field-references.js +1 -1
- package/dist/engine/index.d.ts +2 -2
- package/dist/engine/index.js +1 -1
- package/dist/engine/pattern-library/library.js +2 -1
- package/dist/engine/pattern-library/static-schemas.d.ts +1 -0
- package/dist/engine/pattern-library/static-schemas.js +9 -0
- package/dist/engine/project-app-schema-for-roles.d.ts +2 -0
- package/dist/engine/project-app-schema-for-roles.js +6 -4
- package/dist/engine/registry-ingest.js +1 -1
- package/dist/engine/schema-builder.js +228 -212
- package/dist/engine/screen-filter-ops.js +2 -0
- package/dist/engine/screen-helpers.js +1 -1
- package/dist/engine/screen-kind.d.ts +7 -0
- package/dist/engine/screen-kind.js +1 -0
- package/dist/engine/strip-disabled-features-from-app-schema.js +58 -17
- package/dist/engine/types/feature.d.ts +1 -0
- package/dist/engine/types/index.d.ts +4 -3
- package/dist/engine/types/screen.d.ts +1 -1
- package/dist/engine/types/screen.js +1 -1
- package/dist/engine/validate-projection-allowlist.js +2 -1
- package/dist/entrypoint/index.d.ts +6 -1
- package/dist/entrypoint/index.js +10 -1
- package/dist/errors/docs-url.d.ts +1 -1
- package/dist/errors/docs-url.js +22 -2
- package/dist/es-ops/context.js +1 -1
- package/dist/event-store/admin-api.js +1 -1
- package/dist/event-store/event-store.d.ts +1 -0
- package/dist/event-store/event-store.js +17 -8
- package/dist/event-store/provenance-append.js +1 -1
- package/dist/files/bind-pending-file-refs.js +3 -3
- package/dist/files/create-file-ref-from-bytes.js +7 -1
- package/dist/files/create-file-ref.d.ts +3 -0
- package/dist/files/create-file-ref.js +11 -2
- package/dist/files/file-handle.js +2 -3
- package/dist/files/file-routes.d.ts +2 -0
- package/dist/files/file-routes.js +40 -10
- package/dist/files/provider-resolver.d.ts +1 -0
- package/dist/files/provider-resolver.js +1 -1
- package/dist/files/record-write-check.d.ts +6 -0
- package/dist/files/record-write-check.js +13 -0
- package/dist/files/resolve-content-type.js +43 -0
- package/dist/files/upload-ledger.d.ts +2 -2
- package/dist/files/upload-ledger.js +11 -4
- package/dist/i18n/required-surface-keys.js +189 -208
- package/dist/internal/stack-support.d.ts +2 -1
- package/dist/internal/stack-support.js +1 -1
- package/dist/internal/testing.js +1 -1
- package/dist/jobs/job-runner-context.d.ts +32 -0
- package/dist/jobs/job-runner-context.js +305 -0
- package/dist/jobs/job-runner-execution.d.ts +7 -0
- package/dist/jobs/job-runner-execution.js +160 -0
- package/dist/jobs/job-runner-gates.d.ts +19 -0
- package/dist/jobs/job-runner-gates.js +198 -0
- package/dist/jobs/job-runner-helpers.d.ts +17 -3
- package/dist/jobs/job-runner-helpers.js +61 -2
- package/dist/jobs/job-runner-scope.d.ts +44 -0
- package/dist/jobs/job-runner-scope.js +102 -0
- package/dist/jobs/job-runner-types.d.ts +12 -0
- package/dist/jobs/job-runner.d.ts +0 -1
- package/dist/jobs/job-runner.js +50 -657
- package/dist/observability/escape-hatch-report.d.ts +3 -0
- package/dist/observability/escape-hatch-report.js +21 -3
- package/dist/pipeline/after-rollback-sink.d.ts +6 -0
- package/dist/pipeline/after-rollback-sink.js +32 -0
- package/dist/pipeline/cascade-handler.js +165 -138
- package/dist/pipeline/dispatch-batch.js +8 -1
- package/dist/pipeline/dispatch-query.js +10 -3
- package/dist/pipeline/dispatch-shared.d.ts +13 -3
- package/dist/pipeline/dispatch-shared.js +62 -710
- package/dist/pipeline/dispatch-write.js +296 -189
- package/dist/pipeline/event-dispatcher-admin.js +2 -1
- package/dist/pipeline/event-dispatcher-delivery.js +6 -6
- package/dist/pipeline/event-dispatcher.d.ts +1 -0
- package/dist/pipeline/event-dispatcher.js +6 -9
- package/dist/pipeline/handler-context-auth.d.ts +9 -0
- package/dist/pipeline/handler-context-auth.js +54 -0
- package/dist/pipeline/handler-context-config.d.ts +14 -0
- package/dist/pipeline/handler-context-config.js +113 -0
- package/dist/pipeline/handler-context-db.d.ts +24 -0
- package/dist/pipeline/handler-context-db.js +149 -0
- package/dist/pipeline/handler-context-dispatch.d.ts +23 -0
- package/dist/pipeline/handler-context-dispatch.js +101 -0
- package/dist/pipeline/handler-context-events.d.ts +41 -0
- package/dist/pipeline/handler-context-events.js +239 -0
- package/dist/pipeline/handler-context-notify.d.ts +12 -0
- package/dist/pipeline/handler-context-notify.js +55 -0
- package/dist/pipeline/handler-context-observability.d.ts +7 -0
- package/dist/pipeline/handler-context-observability.js +21 -0
- package/dist/pipeline/handler-context-scope.d.ts +48 -0
- package/dist/pipeline/handler-context-scope.js +88 -0
- package/dist/pipeline/notify-scope.js +12 -1
- package/dist/pipeline/pre-handler-gates.js +20 -4
- package/dist/pipeline/pre-transaction-reservations.d.ts +1 -0
- package/dist/pipeline/pre-transaction-reservations.js +9 -3
- package/dist/pipeline/projection-rebuild.js +2 -1
- package/dist/pipeline/system-hooks.d.ts +3 -1
- package/dist/pipeline/system-hooks.js +55 -6
- package/dist/pipeline/write-result-masking.js +13 -10
- package/dist/schema-cli/apply-command.d.ts +2 -0
- package/dist/schema-cli/apply-command.js +97 -0
- package/dist/schema-cli/baseline-command.d.ts +2 -0
- package/dist/schema-cli/baseline-command.js +33 -0
- package/dist/schema-cli/generate-command.d.ts +2 -0
- package/dist/schema-cli/generate-command.js +90 -0
- package/dist/schema-cli/shared.d.ts +39 -0
- package/dist/schema-cli/shared.js +95 -0
- package/dist/schema-cli/status-command.d.ts +2 -0
- package/dist/schema-cli/status-command.js +73 -0
- package/dist/schema-cli/validate-boot-input.d.ts +5 -0
- package/dist/schema-cli/validate-boot-input.js +130 -0
- package/dist/schema-cli/validate-command.d.ts +2 -0
- package/dist/schema-cli/validate-command.js +130 -0
- package/dist/schema-cli.d.ts +2 -18
- package/dist/schema-cli.js +47 -604
- package/dist/search/meilisearch-adapter.js +2 -1
- package/dist/search/reindex-entity.js +15 -5
- package/dist/ui-types/index.d.ts +2 -2
- package/dist/ui-types/index.js +1 -1
- package/dist/upgrade-changelog.d.ts +2 -0
- package/dist/upgrade-changelog.js +14 -0
- package/dist/upgrade-cli.d.ts +3 -12
- package/dist/upgrade-cli.js +171 -197
- package/dist/upgrade-marker-parse.d.ts +32 -0
- package/dist/upgrade-marker-parse.js +73 -0
- package/package.json +9 -6
- package/src/changes.json +555 -0
- package/src/scripts/codemod/codemod-support.ts +1 -1
- package/src/scripts/codemod/db-factory.ts +1 -1
- package/src/scripts/codemod/feature-layout.ts +10 -2
- package/src/scripts/codemod/object-form.ts +41 -4
- package/src/scripts/codemod/package-merge.ts +58 -8
- package/src/scripts/codemod/pii-personal-migration.ts +175 -145
- package/src/scripts/codemod/testing-injection.ts +122 -42
- package/src/scripts/codemod/testing-move.ts +29 -7
- package/dist/engine/provider-plugin-context.d.ts +0 -3
- package/dist/engine/provider-plugin-context.js +0 -28
|
@@ -28,6 +28,7 @@ import { describeUnknownFieldType, findUnknownEntityFieldTypes } from "./entity-
|
|
|
28
28
|
import { AGENT_RISK_VALUES } from "./extractors/handlers.js";
|
|
29
29
|
import { isPlainObject, isRawRefSentinel } from "./extractors/shared.js";
|
|
30
30
|
import { SYNTHETIC_LOC } from "./patcher.js";
|
|
31
|
+
import { patternIdSchema } from "./pattern-id-schema.js";
|
|
31
32
|
// Derives an exhaustive literal-value array from a `Record<T, true>` flag
|
|
32
33
|
// map: an added/removed union member fails to compile here instead of
|
|
33
34
|
// silently producing a schema narrower than the runtime type — same
|
|
@@ -332,6 +333,7 @@ const entitySchema = z
|
|
|
332
333
|
source: sourceFieldSchema,
|
|
333
334
|
entityName: z.string(),
|
|
334
335
|
definition: entityDefinitionSchema,
|
|
336
|
+
backingTable: passthroughSchema().optional(),
|
|
335
337
|
})
|
|
336
338
|
.strict();
|
|
337
339
|
const relationSchema = z
|
|
@@ -405,6 +407,12 @@ const describeSchema = z
|
|
|
405
407
|
text: z.string().refine((s) => s.trim().length > 0, { message: "text must be non-empty" }),
|
|
406
408
|
})
|
|
407
409
|
.strict();
|
|
410
|
+
const adoptsBundledListsSchema = z
|
|
411
|
+
.object({
|
|
412
|
+
kind: z.literal("adoptsBundledLists"),
|
|
413
|
+
source: sourceFieldSchema,
|
|
414
|
+
})
|
|
415
|
+
.strict();
|
|
408
416
|
const uiHintsSchema = z
|
|
409
417
|
.object({
|
|
410
418
|
kind: z.literal("uiHints"),
|
|
@@ -727,6 +735,7 @@ export const PATTERN_SCHEMAS_BY_KIND = {
|
|
|
727
735
|
toggleable: toggleableSchema,
|
|
728
736
|
describe: describeSchema,
|
|
729
737
|
uiHints: uiHintsSchema,
|
|
738
|
+
adoptsBundledLists: adoptsBundledListsSchema,
|
|
730
739
|
metric: metricSchema,
|
|
731
740
|
secret: secretSchema,
|
|
732
741
|
secretNamespace: secretNamespaceSchema,
|
|
@@ -769,6 +778,7 @@ export const patternSchema = z.discriminatedUnion("kind", [
|
|
|
769
778
|
toggleableSchema,
|
|
770
779
|
describeSchema,
|
|
771
780
|
uiHintsSchema,
|
|
781
|
+
adoptsBundledListsSchema,
|
|
772
782
|
metricSchema,
|
|
773
783
|
secretSchema,
|
|
774
784
|
secretNamespaceSchema,
|
|
@@ -799,169 +809,6 @@ export const patternSchema = z.discriminatedUnion("kind", [
|
|
|
799
809
|
unknownPatternSchema,
|
|
800
810
|
]);
|
|
801
811
|
// =============================================================================
|
|
802
|
-
// PatternId union
|
|
803
|
-
// =============================================================================
|
|
804
|
-
const patternIdEntitySchema = z
|
|
805
|
-
.object({ kind: z.literal("entity"), entityName: z.string() })
|
|
806
|
-
.strict();
|
|
807
|
-
const patternIdRelationSchema = z
|
|
808
|
-
.object({ kind: z.literal("relation"), entityName: z.string(), relationName: z.string() })
|
|
809
|
-
.strict();
|
|
810
|
-
const patternIdNavSchema = z.object({ kind: z.literal("nav"), id: z.string() }).strict();
|
|
811
|
-
const patternIdWorkspaceSchema = z
|
|
812
|
-
.object({ kind: z.literal("workspace"), id: z.string() })
|
|
813
|
-
.strict();
|
|
814
|
-
const patternIdScreenSchema = z.object({ kind: z.literal("screen"), id: z.string() }).strict();
|
|
815
|
-
const patternIdWriteHandlerSchema = z
|
|
816
|
-
.object({ kind: z.literal("writeHandler"), handlerName: z.string() })
|
|
817
|
-
.strict();
|
|
818
|
-
const patternIdQueryHandlerSchema = z
|
|
819
|
-
.object({ kind: z.literal("queryHandler"), handlerName: z.string() })
|
|
820
|
-
.strict();
|
|
821
|
-
const patternIdStreamHandlerSchema = z
|
|
822
|
-
.object({ kind: z.literal("streamHandler"), handlerName: z.string() })
|
|
823
|
-
.strict();
|
|
824
|
-
const patternIdHookSchema = z
|
|
825
|
-
.object({
|
|
826
|
-
kind: z.literal("hook"),
|
|
827
|
-
hookType: z.string(),
|
|
828
|
-
target: z.union([z.string(), z.object({ allOf: z.string() }).strict()]),
|
|
829
|
-
})
|
|
830
|
-
.strict();
|
|
831
|
-
const patternIdMetricSchema = z
|
|
832
|
-
.object({ kind: z.literal("metric"), shortName: z.string() })
|
|
833
|
-
.strict();
|
|
834
|
-
const patternIdSecretSchema = z
|
|
835
|
-
.object({ kind: z.literal("secret"), shortName: z.string() })
|
|
836
|
-
.strict();
|
|
837
|
-
const patternIdSecretNamespaceSchema = z
|
|
838
|
-
.object({ kind: z.literal("secretNamespace"), shortName: z.string() })
|
|
839
|
-
.strict();
|
|
840
|
-
const patternIdClaimKeySchema = z
|
|
841
|
-
.object({ kind: z.literal("claimKey"), shortName: z.string() })
|
|
842
|
-
.strict();
|
|
843
|
-
const patternIdReferenceDataSchema = z
|
|
844
|
-
.object({ kind: z.literal("referenceData"), entityName: z.string() })
|
|
845
|
-
.strict();
|
|
846
|
-
const patternIdUseExtensionSchema = z
|
|
847
|
-
.object({ kind: z.literal("useExtension"), extensionName: z.string(), entityName: z.string() })
|
|
848
|
-
.strict();
|
|
849
|
-
const patternIdJobSchema = z.object({ kind: z.literal("job"), jobName: z.string() }).strict();
|
|
850
|
-
const patternIdNotificationSchema = z
|
|
851
|
-
.object({ kind: z.literal("notification"), notificationName: z.string() })
|
|
852
|
-
.strict();
|
|
853
|
-
const patternIdHttpRouteSchema = z
|
|
854
|
-
.object({ kind: z.literal("httpRoute"), method: z.string(), path: z.string() })
|
|
855
|
-
.strict();
|
|
856
|
-
const patternIdProjectionSchema = z
|
|
857
|
-
.object({ kind: z.literal("projection"), name: z.string() })
|
|
858
|
-
.strict();
|
|
859
|
-
const patternIdMultiStreamProjectionSchema = z
|
|
860
|
-
.object({ kind: z.literal("multiStreamProjection"), name: z.string() })
|
|
861
|
-
.strict();
|
|
862
|
-
const patternIdDefineEventSchema = z
|
|
863
|
-
.object({ kind: z.literal("defineEvent"), eventName: z.string() })
|
|
864
|
-
.strict();
|
|
865
|
-
const patternIdExtendsRegistrarSchema = z
|
|
866
|
-
.object({ kind: z.literal("extendsRegistrar"), extensionName: z.string() })
|
|
867
|
-
.strict();
|
|
868
|
-
const patternIdAiGenerateSchema = z
|
|
869
|
-
.object({ kind: z.literal("ai.generate"), stepKey: z.string() })
|
|
870
|
-
.strict();
|
|
871
|
-
const patternIdAiExtractSchema = z
|
|
872
|
-
.object({ kind: z.literal("ai.extract"), stepKey: z.string() })
|
|
873
|
-
.strict();
|
|
874
|
-
const patternIdAiClassifySchema = z
|
|
875
|
-
.object({ kind: z.literal("ai.classify"), stepKey: z.string() })
|
|
876
|
-
.strict();
|
|
877
|
-
const patternIdRequiresSchema = z.object({ kind: z.literal("requires") }).strict();
|
|
878
|
-
const patternIdOptionalRequiresSchema = z.object({ kind: z.literal("optionalRequires") }).strict();
|
|
879
|
-
const patternIdReadsConfigSchema = z.object({ kind: z.literal("readsConfig") }).strict();
|
|
880
|
-
const patternIdSystemScopeSchema = z.object({ kind: z.literal("systemScope") }).strict();
|
|
881
|
-
const patternIdToggleableSchema = z.object({ kind: z.literal("toggleable") }).strict();
|
|
882
|
-
const patternIdDescribeSchema = z.object({ kind: z.literal("describe") }).strict();
|
|
883
|
-
const patternIdUiHintsSchema = z.object({ kind: z.literal("uiHints") }).strict();
|
|
884
|
-
const patternIdConfigSchema = z.object({ kind: z.literal("config") }).strict();
|
|
885
|
-
const patternIdTranslationsSchema = z.object({ kind: z.literal("translations") }).strict();
|
|
886
|
-
const patternIdAuthClaimsSchema = z.object({ kind: z.literal("authClaims") }).strict();
|
|
887
|
-
const patternIdTreeActionsSchema = z.object({ kind: z.literal("treeActions") }).strict();
|
|
888
|
-
export const PATTERN_ID_SCHEMAS_BY_KIND = {
|
|
889
|
-
entity: patternIdEntitySchema,
|
|
890
|
-
relation: patternIdRelationSchema,
|
|
891
|
-
nav: patternIdNavSchema,
|
|
892
|
-
workspace: patternIdWorkspaceSchema,
|
|
893
|
-
screen: patternIdScreenSchema,
|
|
894
|
-
writeHandler: patternIdWriteHandlerSchema,
|
|
895
|
-
queryHandler: patternIdQueryHandlerSchema,
|
|
896
|
-
streamHandler: patternIdStreamHandlerSchema,
|
|
897
|
-
hook: patternIdHookSchema,
|
|
898
|
-
metric: patternIdMetricSchema,
|
|
899
|
-
secret: patternIdSecretSchema,
|
|
900
|
-
secretNamespace: patternIdSecretNamespaceSchema,
|
|
901
|
-
claimKey: patternIdClaimKeySchema,
|
|
902
|
-
referenceData: patternIdReferenceDataSchema,
|
|
903
|
-
useExtension: patternIdUseExtensionSchema,
|
|
904
|
-
job: patternIdJobSchema,
|
|
905
|
-
notification: patternIdNotificationSchema,
|
|
906
|
-
httpRoute: patternIdHttpRouteSchema,
|
|
907
|
-
projection: patternIdProjectionSchema,
|
|
908
|
-
multiStreamProjection: patternIdMultiStreamProjectionSchema,
|
|
909
|
-
defineEvent: patternIdDefineEventSchema,
|
|
910
|
-
extendsRegistrar: patternIdExtendsRegistrarSchema,
|
|
911
|
-
"ai.generate": patternIdAiGenerateSchema,
|
|
912
|
-
"ai.extract": patternIdAiExtractSchema,
|
|
913
|
-
"ai.classify": patternIdAiClassifySchema,
|
|
914
|
-
requires: patternIdRequiresSchema,
|
|
915
|
-
optionalRequires: patternIdOptionalRequiresSchema,
|
|
916
|
-
readsConfig: patternIdReadsConfigSchema,
|
|
917
|
-
systemScope: patternIdSystemScopeSchema,
|
|
918
|
-
toggleable: patternIdToggleableSchema,
|
|
919
|
-
describe: patternIdDescribeSchema,
|
|
920
|
-
uiHints: patternIdUiHintsSchema,
|
|
921
|
-
config: patternIdConfigSchema,
|
|
922
|
-
translations: patternIdTranslationsSchema,
|
|
923
|
-
authClaims: patternIdAuthClaimsSchema,
|
|
924
|
-
treeActions: patternIdTreeActionsSchema,
|
|
925
|
-
};
|
|
926
|
-
export const patternIdSchema = z.discriminatedUnion("kind", [
|
|
927
|
-
patternIdEntitySchema,
|
|
928
|
-
patternIdRelationSchema,
|
|
929
|
-
patternIdNavSchema,
|
|
930
|
-
patternIdWorkspaceSchema,
|
|
931
|
-
patternIdScreenSchema,
|
|
932
|
-
patternIdWriteHandlerSchema,
|
|
933
|
-
patternIdQueryHandlerSchema,
|
|
934
|
-
patternIdStreamHandlerSchema,
|
|
935
|
-
patternIdHookSchema,
|
|
936
|
-
patternIdMetricSchema,
|
|
937
|
-
patternIdSecretSchema,
|
|
938
|
-
patternIdSecretNamespaceSchema,
|
|
939
|
-
patternIdClaimKeySchema,
|
|
940
|
-
patternIdReferenceDataSchema,
|
|
941
|
-
patternIdUseExtensionSchema,
|
|
942
|
-
patternIdJobSchema,
|
|
943
|
-
patternIdNotificationSchema,
|
|
944
|
-
patternIdHttpRouteSchema,
|
|
945
|
-
patternIdProjectionSchema,
|
|
946
|
-
patternIdMultiStreamProjectionSchema,
|
|
947
|
-
patternIdDefineEventSchema,
|
|
948
|
-
patternIdExtendsRegistrarSchema,
|
|
949
|
-
patternIdAiGenerateSchema,
|
|
950
|
-
patternIdAiExtractSchema,
|
|
951
|
-
patternIdAiClassifySchema,
|
|
952
|
-
patternIdRequiresSchema,
|
|
953
|
-
patternIdOptionalRequiresSchema,
|
|
954
|
-
patternIdReadsConfigSchema,
|
|
955
|
-
patternIdSystemScopeSchema,
|
|
956
|
-
patternIdToggleableSchema,
|
|
957
|
-
patternIdDescribeSchema,
|
|
958
|
-
patternIdUiHintsSchema,
|
|
959
|
-
patternIdConfigSchema,
|
|
960
|
-
patternIdTranslationsSchema,
|
|
961
|
-
patternIdAuthClaimsSchema,
|
|
962
|
-
patternIdTreeActionsSchema,
|
|
963
|
-
]);
|
|
964
|
-
// =============================================================================
|
|
965
812
|
// Change union — `rationale` is accepted (optional, on every member) and
|
|
966
813
|
// dropped when the final PatternChange is assembled below (plain field
|
|
967
814
|
// selection, not a schema-level transform — see file-header rationale).
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type CallExpression } from "ts-morph";
|
|
2
|
+
import type { PatternId } from "./patch.ts";
|
|
3
|
+
import type { MembersByKind } from "./patterns.ts";
|
|
4
|
+
type PatternIdKind = PatternId["kind"];
|
|
5
|
+
type PatternIdOfKind = MembersByKind<PatternId>;
|
|
6
|
+
export declare function callMatchesId<K extends PatternIdKind>(call: CallExpression, kind: K, id: PatternIdOfKind[K]): boolean;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { SyntaxKind } from "ts-morph";
|
|
2
|
+
import { readNameLiteral, readNameOrRef, resolveSameFileObjectLiteral, } from "./extractors/shared.js";
|
|
3
|
+
const PATTERN_ID_MATCHERS = {
|
|
4
|
+
requires: matchSingletonCall,
|
|
5
|
+
optionalRequires: matchSingletonCall,
|
|
6
|
+
readsConfig: matchSingletonCall,
|
|
7
|
+
systemScope: matchSingletonCall,
|
|
8
|
+
toggleable: matchSingletonCall,
|
|
9
|
+
describe: matchSingletonCall,
|
|
10
|
+
uiHints: matchSingletonCall,
|
|
11
|
+
adoptsBundledLists: matchSingletonCall,
|
|
12
|
+
config: matchSingletonCall,
|
|
13
|
+
translations: matchSingletonCall,
|
|
14
|
+
authClaims: matchSingletonCall,
|
|
15
|
+
treeActions: matchSingletonCall,
|
|
16
|
+
entity: matchEntityCall,
|
|
17
|
+
relation: matchRelationCall,
|
|
18
|
+
nav: matchIdPropertyCall,
|
|
19
|
+
workspace: matchIdPropertyCall,
|
|
20
|
+
screen: matchIdPropertyCall,
|
|
21
|
+
writeHandler: matchHandlerCall,
|
|
22
|
+
queryHandler: matchHandlerCall,
|
|
23
|
+
streamHandler: matchHandlerCall,
|
|
24
|
+
hook: matchHookCall,
|
|
25
|
+
metric: matchShortNameCall,
|
|
26
|
+
secret: matchShortNameCall,
|
|
27
|
+
secretNamespace: matchShortNameCall,
|
|
28
|
+
claimKey: matchShortNameCall,
|
|
29
|
+
referenceData: matchReferenceDataCall,
|
|
30
|
+
useExtension: matchUseExtensionCall,
|
|
31
|
+
job: matchJobCall,
|
|
32
|
+
notification: matchNotificationCall,
|
|
33
|
+
httpRoute: matchHttpRouteCall,
|
|
34
|
+
projection: matchProjectionCall,
|
|
35
|
+
multiStreamProjection: matchProjectionCall,
|
|
36
|
+
defineEvent: matchDefineEventCall,
|
|
37
|
+
extendsRegistrar: matchExtendsRegistrarCall,
|
|
38
|
+
"ai.generate": matchAiStepCall,
|
|
39
|
+
"ai.extract": matchAiStepCall,
|
|
40
|
+
"ai.classify": matchAiStepCall,
|
|
41
|
+
};
|
|
42
|
+
export function callMatchesId(call, kind, id) {
|
|
43
|
+
return PATTERN_ID_MATCHERS[kind](call, id);
|
|
44
|
+
}
|
|
45
|
+
// Singletons: kind alone identifies the call.
|
|
46
|
+
function matchSingletonCall() {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
function matchEntityCall(call, id) {
|
|
50
|
+
return (matchFirstArgString(call, id.entityName) || matchObjectProperty(call, "name", id.entityName));
|
|
51
|
+
}
|
|
52
|
+
// Positional: r.relation(entity, name, def) | Object: { entity, name, ... }
|
|
53
|
+
function matchRelationCall(call, id) {
|
|
54
|
+
if (matchFirstArgString(call, id.entityName)) {
|
|
55
|
+
return matchArgString(call, 1, id.relationName);
|
|
56
|
+
}
|
|
57
|
+
return (matchObjectProperty(call, "entity", id.entityName) &&
|
|
58
|
+
matchObjectProperty(call, "name", id.relationName));
|
|
59
|
+
}
|
|
60
|
+
function matchIdPropertyCall(call, id) {
|
|
61
|
+
return matchObjectProperty(call, "id", id.id);
|
|
62
|
+
}
|
|
63
|
+
function matchHandlerCall(call, id) {
|
|
64
|
+
return (matchFirstArgString(call, id.handlerName) || matchObjectProperty(call, "name", id.handlerName));
|
|
65
|
+
}
|
|
66
|
+
// Positional: r.hook(type, target, fn) | Object: { type, target }
|
|
67
|
+
function matchHookCall(call, id) {
|
|
68
|
+
if (typeof id.target === "object") {
|
|
69
|
+
return matchHookAllOfCall(call, id.hookType, id.target.allOf);
|
|
70
|
+
}
|
|
71
|
+
if (matchFirstArgString(call, id.hookType)) {
|
|
72
|
+
return matchArgNameOrRef(call, 1, id.target);
|
|
73
|
+
}
|
|
74
|
+
return (matchObjectProperty(call, "type", id.hookType) && matchObjectProperty(call, "target", id.target));
|
|
75
|
+
}
|
|
76
|
+
// Entity-wide { allOf } target — only ever appears as the object
|
|
77
|
+
// literal { allOf: entity } (positional or nested in the object
|
|
78
|
+
// form), never as a bare string, so check both call shapes.
|
|
79
|
+
function matchHookAllOfCall(call, hookType, allOfEntity) {
|
|
80
|
+
if (matchFirstArgString(call, hookType)) {
|
|
81
|
+
return matchAllOfArg(call.getArguments()[1], allOfEntity);
|
|
82
|
+
}
|
|
83
|
+
return (matchObjectProperty(call, "type", hookType) &&
|
|
84
|
+
matchObjectAllOfProperty(call, "target", allOfEntity));
|
|
85
|
+
}
|
|
86
|
+
function matchShortNameCall(call, id) {
|
|
87
|
+
return matchFirstArgString(call, id.shortName) || matchObjectProperty(call, "name", id.shortName);
|
|
88
|
+
}
|
|
89
|
+
function matchReferenceDataCall(call, id) {
|
|
90
|
+
return (matchFirstArgString(call, id.entityName) || matchObjectProperty(call, "entity", id.entityName));
|
|
91
|
+
}
|
|
92
|
+
// Positional: r.useExtension(name, entity) | Object: { name, entity }
|
|
93
|
+
function matchUseExtensionCall(call, id) {
|
|
94
|
+
if (matchFirstArgString(call, id.extensionName)) {
|
|
95
|
+
return matchArgNameOrRef(call, 1, id.entityName);
|
|
96
|
+
}
|
|
97
|
+
return (matchObjectProperty(call, "name", id.extensionName) &&
|
|
98
|
+
matchObjectProperty(call, "entity", id.entityName));
|
|
99
|
+
}
|
|
100
|
+
function matchJobCall(call, id) {
|
|
101
|
+
return matchFirstArgString(call, id.jobName) || matchObjectProperty(call, "name", id.jobName);
|
|
102
|
+
}
|
|
103
|
+
function matchNotificationCall(call, id) {
|
|
104
|
+
return (matchFirstArgString(call, id.notificationName) ||
|
|
105
|
+
matchObjectProperty(call, "name", id.notificationName));
|
|
106
|
+
}
|
|
107
|
+
// Object form only; positional doesn't apply.
|
|
108
|
+
function matchHttpRouteCall(call, id) {
|
|
109
|
+
return (matchObjectProperty(call, "method", id.method) && matchObjectProperty(call, "path", id.path));
|
|
110
|
+
}
|
|
111
|
+
function matchProjectionCall(call, id) {
|
|
112
|
+
return matchObjectProperty(call, "name", id.name);
|
|
113
|
+
}
|
|
114
|
+
function matchDefineEventCall(call, id) {
|
|
115
|
+
return matchFirstArgString(call, id.eventName) || matchObjectProperty(call, "name", id.eventName);
|
|
116
|
+
}
|
|
117
|
+
function matchExtendsRegistrarCall(call, id) {
|
|
118
|
+
return matchFirstArgString(call, id.extensionName);
|
|
119
|
+
}
|
|
120
|
+
function matchAiStepCall(call, id) {
|
|
121
|
+
return readAiStepKey(call) === id.stepKey;
|
|
122
|
+
}
|
|
123
|
+
function readAiStepKey(call) {
|
|
124
|
+
const arg = call.getArguments()[0];
|
|
125
|
+
if (!arg)
|
|
126
|
+
return undefined;
|
|
127
|
+
const obj = resolveSameFileObjectLiteral(arg);
|
|
128
|
+
if (!obj)
|
|
129
|
+
return undefined;
|
|
130
|
+
const prop = obj.getProperty("stepKey");
|
|
131
|
+
if (!prop)
|
|
132
|
+
return undefined;
|
|
133
|
+
const assign = prop.asKind(SyntaxKind.PropertyAssignment);
|
|
134
|
+
if (assign) {
|
|
135
|
+
const init = assign.getInitializer();
|
|
136
|
+
if (!init)
|
|
137
|
+
return undefined;
|
|
138
|
+
return readNameLiteral(init);
|
|
139
|
+
}
|
|
140
|
+
const shorthand = prop.asKind(SyntaxKind.ShorthandPropertyAssignment);
|
|
141
|
+
if (shorthand)
|
|
142
|
+
return readNameLiteral(shorthand.getNameNode());
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
// Resolves an argument the same way the extractors do (readNameLiteral):
|
|
146
|
+
// a string literal directly, or a bare identifier following its
|
|
147
|
+
// declaration (same-file or imported) to a string-literal initializer —
|
|
148
|
+
// the dominant naming style in the framework's own bundled-features
|
|
149
|
+
// (`r.entity(ENTITY, ...)`, `r.useExtension(EXT_X, ...)`).
|
|
150
|
+
//
|
|
151
|
+
// Narrow on purpose: every kind's arg-0 (and relation's arg-1) is parsed
|
|
152
|
+
// via readNameLiteral, never readNameOrRef (see round2.ts/round3.ts) —
|
|
153
|
+
// widening this shared helper to readNameOrRef would let an object-form
|
|
154
|
+
// call's first argument (an ObjectLiteralExpression) match here too,
|
|
155
|
+
// short-circuiting the object-form branch in callMatchesId. Positions
|
|
156
|
+
// where the parser itself accepts an inline `{ name: "..." }` ref use
|
|
157
|
+
// `matchArgNameOrRef` below instead.
|
|
158
|
+
function matchArgString(call, index, expected) {
|
|
159
|
+
const arg = call.getArguments()[index];
|
|
160
|
+
if (!arg)
|
|
161
|
+
return false;
|
|
162
|
+
return readNameLiteral(arg) === expected;
|
|
163
|
+
}
|
|
164
|
+
// @wrapper-known semantic-alias
|
|
165
|
+
function matchFirstArgString(call, expected) {
|
|
166
|
+
return matchArgString(call, 0, expected);
|
|
167
|
+
}
|
|
168
|
+
// Like matchArgString, but via readNameOrRef — for the specific positional
|
|
169
|
+
// slots where the parser accepts an inline `{ name: "..." }` object ref in
|
|
170
|
+
// addition to a literal/identifier (useExtension's entity arg, hook's
|
|
171
|
+
// target arg; see round3.ts:445 / hooks.ts:75). Not a drop-in replacement
|
|
172
|
+
// for matchArgString: applying it to an arg-0 position would match an
|
|
173
|
+
// object-form call's first (and only) argument, see the comment above.
|
|
174
|
+
function matchArgNameOrRef(call, index, expected) {
|
|
175
|
+
const arg = call.getArguments()[index];
|
|
176
|
+
if (!arg)
|
|
177
|
+
return false;
|
|
178
|
+
return readNameOrRef(arg) === expected;
|
|
179
|
+
}
|
|
180
|
+
// Object-form property values are resolved via readNameOrRef, not the
|
|
181
|
+
// narrower readNameLiteral — some properties (useExtension's `entity`,
|
|
182
|
+
// hook's `target`/`allOf`) accept an inline `{ name: "..." }` ref in the
|
|
183
|
+
// parser (see extractors/round3.ts, extractors/hooks.ts), not just a
|
|
184
|
+
// literal or identifier. readNameOrRef is a superset of readNameLiteral,
|
|
185
|
+
// so this is safe for every other property too.
|
|
186
|
+
function matchObjectProperty(call, propName, expected) {
|
|
187
|
+
const obj = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
|
|
188
|
+
if (!obj)
|
|
189
|
+
return false;
|
|
190
|
+
const init = obj.getProperty(propName)?.asKind(SyntaxKind.PropertyAssignment)?.getInitializer();
|
|
191
|
+
if (!init)
|
|
192
|
+
return false;
|
|
193
|
+
return readNameOrRef(init) === expected;
|
|
194
|
+
}
|
|
195
|
+
// Matches an r.hook `{ allOf: entity }` target — as the arg node directly
|
|
196
|
+
// (positional call form) or as a nested object property (object call form).
|
|
197
|
+
function matchAllOfArg(node, expectedEntity) {
|
|
198
|
+
const obj = node?.asKind(SyntaxKind.ObjectLiteralExpression);
|
|
199
|
+
const init = obj?.getProperty("allOf")?.asKind(SyntaxKind.PropertyAssignment)?.getInitializer();
|
|
200
|
+
if (!init)
|
|
201
|
+
return false;
|
|
202
|
+
return readNameOrRef(init) === expectedEntity;
|
|
203
|
+
}
|
|
204
|
+
function matchObjectAllOfProperty(call, propName, expectedEntity) {
|
|
205
|
+
const obj = call.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
|
|
206
|
+
const propInit = obj
|
|
207
|
+
?.getProperty(propName)
|
|
208
|
+
?.asKind(SyntaxKind.PropertyAssignment)
|
|
209
|
+
?.getInitializer();
|
|
210
|
+
return matchAllOfArg(propInit, expectedEntity);
|
|
211
|
+
}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
export declare const PATTERN_ID_SCHEMAS_BY_KIND: {
|
|
3
|
+
entity: z.ZodObject<{
|
|
4
|
+
kind: z.ZodLiteral<"entity">;
|
|
5
|
+
entityName: z.ZodString;
|
|
6
|
+
}, z.core.$strict>;
|
|
7
|
+
relation: z.ZodObject<{
|
|
8
|
+
kind: z.ZodLiteral<"relation">;
|
|
9
|
+
entityName: z.ZodString;
|
|
10
|
+
relationName: z.ZodString;
|
|
11
|
+
}, z.core.$strict>;
|
|
12
|
+
nav: z.ZodObject<{
|
|
13
|
+
kind: z.ZodLiteral<"nav">;
|
|
14
|
+
id: z.ZodString;
|
|
15
|
+
}, z.core.$strict>;
|
|
16
|
+
workspace: z.ZodObject<{
|
|
17
|
+
kind: z.ZodLiteral<"workspace">;
|
|
18
|
+
id: z.ZodString;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
screen: z.ZodObject<{
|
|
21
|
+
kind: z.ZodLiteral<"screen">;
|
|
22
|
+
id: z.ZodString;
|
|
23
|
+
}, z.core.$strict>;
|
|
24
|
+
writeHandler: z.ZodObject<{
|
|
25
|
+
kind: z.ZodLiteral<"writeHandler">;
|
|
26
|
+
handlerName: z.ZodString;
|
|
27
|
+
}, z.core.$strict>;
|
|
28
|
+
queryHandler: z.ZodObject<{
|
|
29
|
+
kind: z.ZodLiteral<"queryHandler">;
|
|
30
|
+
handlerName: z.ZodString;
|
|
31
|
+
}, z.core.$strict>;
|
|
32
|
+
streamHandler: z.ZodObject<{
|
|
33
|
+
kind: z.ZodLiteral<"streamHandler">;
|
|
34
|
+
handlerName: z.ZodString;
|
|
35
|
+
}, z.core.$strict>;
|
|
36
|
+
hook: z.ZodObject<{
|
|
37
|
+
kind: z.ZodLiteral<"hook">;
|
|
38
|
+
hookType: z.ZodString;
|
|
39
|
+
target: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
40
|
+
allOf: z.ZodString;
|
|
41
|
+
}, z.core.$strict>]>;
|
|
42
|
+
}, z.core.$strict>;
|
|
43
|
+
metric: z.ZodObject<{
|
|
44
|
+
kind: z.ZodLiteral<"metric">;
|
|
45
|
+
shortName: z.ZodString;
|
|
46
|
+
}, z.core.$strict>;
|
|
47
|
+
secret: z.ZodObject<{
|
|
48
|
+
kind: z.ZodLiteral<"secret">;
|
|
49
|
+
shortName: z.ZodString;
|
|
50
|
+
}, z.core.$strict>;
|
|
51
|
+
secretNamespace: z.ZodObject<{
|
|
52
|
+
kind: z.ZodLiteral<"secretNamespace">;
|
|
53
|
+
shortName: z.ZodString;
|
|
54
|
+
}, z.core.$strict>;
|
|
55
|
+
claimKey: z.ZodObject<{
|
|
56
|
+
kind: z.ZodLiteral<"claimKey">;
|
|
57
|
+
shortName: z.ZodString;
|
|
58
|
+
}, z.core.$strict>;
|
|
59
|
+
referenceData: z.ZodObject<{
|
|
60
|
+
kind: z.ZodLiteral<"referenceData">;
|
|
61
|
+
entityName: z.ZodString;
|
|
62
|
+
}, z.core.$strict>;
|
|
63
|
+
useExtension: z.ZodObject<{
|
|
64
|
+
kind: z.ZodLiteral<"useExtension">;
|
|
65
|
+
extensionName: z.ZodString;
|
|
66
|
+
entityName: z.ZodString;
|
|
67
|
+
}, z.core.$strict>;
|
|
68
|
+
job: z.ZodObject<{
|
|
69
|
+
kind: z.ZodLiteral<"job">;
|
|
70
|
+
jobName: z.ZodString;
|
|
71
|
+
}, z.core.$strict>;
|
|
72
|
+
notification: z.ZodObject<{
|
|
73
|
+
kind: z.ZodLiteral<"notification">;
|
|
74
|
+
notificationName: z.ZodString;
|
|
75
|
+
}, z.core.$strict>;
|
|
76
|
+
httpRoute: z.ZodObject<{
|
|
77
|
+
kind: z.ZodLiteral<"httpRoute">;
|
|
78
|
+
method: z.ZodString;
|
|
79
|
+
path: z.ZodString;
|
|
80
|
+
}, z.core.$strict>;
|
|
81
|
+
projection: z.ZodObject<{
|
|
82
|
+
kind: z.ZodLiteral<"projection">;
|
|
83
|
+
name: z.ZodString;
|
|
84
|
+
}, z.core.$strict>;
|
|
85
|
+
multiStreamProjection: z.ZodObject<{
|
|
86
|
+
kind: z.ZodLiteral<"multiStreamProjection">;
|
|
87
|
+
name: z.ZodString;
|
|
88
|
+
}, z.core.$strict>;
|
|
89
|
+
defineEvent: z.ZodObject<{
|
|
90
|
+
kind: z.ZodLiteral<"defineEvent">;
|
|
91
|
+
eventName: z.ZodString;
|
|
92
|
+
}, z.core.$strict>;
|
|
93
|
+
extendsRegistrar: z.ZodObject<{
|
|
94
|
+
kind: z.ZodLiteral<"extendsRegistrar">;
|
|
95
|
+
extensionName: z.ZodString;
|
|
96
|
+
}, z.core.$strict>;
|
|
97
|
+
"ai.generate": z.ZodObject<{
|
|
98
|
+
kind: z.ZodLiteral<"ai.generate">;
|
|
99
|
+
stepKey: z.ZodString;
|
|
100
|
+
}, z.core.$strict>;
|
|
101
|
+
"ai.extract": z.ZodObject<{
|
|
102
|
+
kind: z.ZodLiteral<"ai.extract">;
|
|
103
|
+
stepKey: z.ZodString;
|
|
104
|
+
}, z.core.$strict>;
|
|
105
|
+
"ai.classify": z.ZodObject<{
|
|
106
|
+
kind: z.ZodLiteral<"ai.classify">;
|
|
107
|
+
stepKey: z.ZodString;
|
|
108
|
+
}, z.core.$strict>;
|
|
109
|
+
requires: z.ZodObject<{
|
|
110
|
+
kind: z.ZodLiteral<"requires">;
|
|
111
|
+
}, z.core.$strict>;
|
|
112
|
+
optionalRequires: z.ZodObject<{
|
|
113
|
+
kind: z.ZodLiteral<"optionalRequires">;
|
|
114
|
+
}, z.core.$strict>;
|
|
115
|
+
readsConfig: z.ZodObject<{
|
|
116
|
+
kind: z.ZodLiteral<"readsConfig">;
|
|
117
|
+
}, z.core.$strict>;
|
|
118
|
+
systemScope: z.ZodObject<{
|
|
119
|
+
kind: z.ZodLiteral<"systemScope">;
|
|
120
|
+
}, z.core.$strict>;
|
|
121
|
+
toggleable: z.ZodObject<{
|
|
122
|
+
kind: z.ZodLiteral<"toggleable">;
|
|
123
|
+
}, z.core.$strict>;
|
|
124
|
+
describe: z.ZodObject<{
|
|
125
|
+
kind: z.ZodLiteral<"describe">;
|
|
126
|
+
}, z.core.$strict>;
|
|
127
|
+
uiHints: z.ZodObject<{
|
|
128
|
+
kind: z.ZodLiteral<"uiHints">;
|
|
129
|
+
}, z.core.$strict>;
|
|
130
|
+
adoptsBundledLists: z.ZodObject<{
|
|
131
|
+
kind: z.ZodLiteral<"adoptsBundledLists">;
|
|
132
|
+
}, z.core.$strict>;
|
|
133
|
+
config: z.ZodObject<{
|
|
134
|
+
kind: z.ZodLiteral<"config">;
|
|
135
|
+
}, z.core.$strict>;
|
|
136
|
+
translations: z.ZodObject<{
|
|
137
|
+
kind: z.ZodLiteral<"translations">;
|
|
138
|
+
}, z.core.$strict>;
|
|
139
|
+
authClaims: z.ZodObject<{
|
|
140
|
+
kind: z.ZodLiteral<"authClaims">;
|
|
141
|
+
}, z.core.$strict>;
|
|
142
|
+
treeActions: z.ZodObject<{
|
|
143
|
+
kind: z.ZodLiteral<"treeActions">;
|
|
144
|
+
}, z.core.$strict>;
|
|
145
|
+
};
|
|
146
|
+
export declare const patternIdSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
147
|
+
kind: z.ZodLiteral<"entity">;
|
|
148
|
+
entityName: z.ZodString;
|
|
149
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
150
|
+
kind: z.ZodLiteral<"relation">;
|
|
151
|
+
entityName: z.ZodString;
|
|
152
|
+
relationName: z.ZodString;
|
|
153
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
154
|
+
kind: z.ZodLiteral<"nav">;
|
|
155
|
+
id: z.ZodString;
|
|
156
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
157
|
+
kind: z.ZodLiteral<"workspace">;
|
|
158
|
+
id: z.ZodString;
|
|
159
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
160
|
+
kind: z.ZodLiteral<"screen">;
|
|
161
|
+
id: z.ZodString;
|
|
162
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
163
|
+
kind: z.ZodLiteral<"writeHandler">;
|
|
164
|
+
handlerName: z.ZodString;
|
|
165
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
166
|
+
kind: z.ZodLiteral<"queryHandler">;
|
|
167
|
+
handlerName: z.ZodString;
|
|
168
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
169
|
+
kind: z.ZodLiteral<"streamHandler">;
|
|
170
|
+
handlerName: z.ZodString;
|
|
171
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
172
|
+
kind: z.ZodLiteral<"hook">;
|
|
173
|
+
hookType: z.ZodString;
|
|
174
|
+
target: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
175
|
+
allOf: z.ZodString;
|
|
176
|
+
}, z.core.$strict>]>;
|
|
177
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
178
|
+
kind: z.ZodLiteral<"metric">;
|
|
179
|
+
shortName: z.ZodString;
|
|
180
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
181
|
+
kind: z.ZodLiteral<"secret">;
|
|
182
|
+
shortName: z.ZodString;
|
|
183
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
184
|
+
kind: z.ZodLiteral<"secretNamespace">;
|
|
185
|
+
shortName: z.ZodString;
|
|
186
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
187
|
+
kind: z.ZodLiteral<"claimKey">;
|
|
188
|
+
shortName: z.ZodString;
|
|
189
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
190
|
+
kind: z.ZodLiteral<"referenceData">;
|
|
191
|
+
entityName: z.ZodString;
|
|
192
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
193
|
+
kind: z.ZodLiteral<"useExtension">;
|
|
194
|
+
extensionName: z.ZodString;
|
|
195
|
+
entityName: z.ZodString;
|
|
196
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
197
|
+
kind: z.ZodLiteral<"job">;
|
|
198
|
+
jobName: z.ZodString;
|
|
199
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
200
|
+
kind: z.ZodLiteral<"notification">;
|
|
201
|
+
notificationName: z.ZodString;
|
|
202
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
203
|
+
kind: z.ZodLiteral<"httpRoute">;
|
|
204
|
+
method: z.ZodString;
|
|
205
|
+
path: z.ZodString;
|
|
206
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
207
|
+
kind: z.ZodLiteral<"projection">;
|
|
208
|
+
name: z.ZodString;
|
|
209
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
210
|
+
kind: z.ZodLiteral<"multiStreamProjection">;
|
|
211
|
+
name: z.ZodString;
|
|
212
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
213
|
+
kind: z.ZodLiteral<"defineEvent">;
|
|
214
|
+
eventName: z.ZodString;
|
|
215
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
216
|
+
kind: z.ZodLiteral<"extendsRegistrar">;
|
|
217
|
+
extensionName: z.ZodString;
|
|
218
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
219
|
+
kind: z.ZodLiteral<"ai.generate">;
|
|
220
|
+
stepKey: z.ZodString;
|
|
221
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
222
|
+
kind: z.ZodLiteral<"ai.extract">;
|
|
223
|
+
stepKey: z.ZodString;
|
|
224
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
225
|
+
kind: z.ZodLiteral<"ai.classify">;
|
|
226
|
+
stepKey: z.ZodString;
|
|
227
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
228
|
+
kind: z.ZodLiteral<"requires">;
|
|
229
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
230
|
+
kind: z.ZodLiteral<"optionalRequires">;
|
|
231
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
232
|
+
kind: z.ZodLiteral<"readsConfig">;
|
|
233
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
234
|
+
kind: z.ZodLiteral<"systemScope">;
|
|
235
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
236
|
+
kind: z.ZodLiteral<"adoptsBundledLists">;
|
|
237
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
238
|
+
kind: z.ZodLiteral<"toggleable">;
|
|
239
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
240
|
+
kind: z.ZodLiteral<"describe">;
|
|
241
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
242
|
+
kind: z.ZodLiteral<"uiHints">;
|
|
243
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
244
|
+
kind: z.ZodLiteral<"config">;
|
|
245
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
246
|
+
kind: z.ZodLiteral<"translations">;
|
|
247
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
248
|
+
kind: z.ZodLiteral<"authClaims">;
|
|
249
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
250
|
+
kind: z.ZodLiteral<"treeActions">;
|
|
251
|
+
}, z.core.$strict>], "kind">;
|