pipework 0.252.0 → 0.252.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/CHANGELOG.md +5 -0
- package/package.json +4 -3
- package/src/async/jobs/abortable-delay.ts +18 -0
- package/src/async/jobs/claims.ts +52 -0
- package/src/async/jobs/cron.ts +179 -0
- package/src/async/jobs/errors.ts +56 -0
- package/src/async/jobs/exclusion.ts +117 -0
- package/src/async/jobs/execute.ts +219 -0
- package/src/async/jobs/index.ts +10 -0
- package/src/async/jobs/listener.ts +135 -0
- package/src/async/jobs/namespace.ts +20 -0
- package/src/async/jobs/queue-door.ts +44 -0
- package/src/async/jobs/queue.ts +1012 -0
- package/src/async/jobs/run-script.ts +67 -0
- package/src/async/jobs/scheduler.ts +218 -0
- package/src/async/jobs/schedules-table.ts +37 -0
- package/src/async/jobs/serialize-error.ts +48 -0
- package/src/async/jobs/table.ts +191 -0
- package/src/async/pipeline/define.ts +53 -0
- package/src/async/pipeline/errors.ts +35 -0
- package/src/async/pipeline/execute.ts +53 -0
- package/src/async/pipeline/index.ts +13 -0
- package/src/async/pipeline/namespace.ts +12 -0
- package/src/async/pipeline/resume.ts +67 -0
- package/src/async/pipeline/run-steps.ts +98 -0
- package/src/async/pipeline/types.ts +57 -0
- package/src/async/state-machine/define.ts +64 -0
- package/src/async/state-machine/errors.ts +29 -0
- package/src/async/state-machine/index.ts +3 -0
- package/src/async/state-machine/namespace.ts +12 -0
- package/src/async/state-machine/transition.ts +90 -0
- package/src/async/state-machine/types.ts +37 -0
- package/src/async/steps/errors.ts +31 -0
- package/src/async/steps/graph.ts +1214 -0
- package/src/async/steps/hash.ts +40 -0
- package/src/async/steps/index.ts +7 -0
- package/src/async/steps/namespace.ts +7 -0
- package/src/async/steps/table.ts +97 -0
- package/src/async/steps/types.ts +318 -0
- package/src/audit/chain/index.ts +9 -0
- package/src/audit/chain/install.ts +113 -0
- package/src/audit/chain/retire.ts +52 -0
- package/src/audit/chain/verify.ts +257 -0
- package/src/audit/query/cursor.ts +37 -0
- package/src/audit/query/index.ts +9 -0
- package/src/audit/query/query.ts +223 -0
- package/src/audit/schema/audit-record-fields.ts +68 -0
- package/src/audit/schema/audit-record.ts +23 -0
- package/src/auth/auth/audit.ts +31 -0
- package/src/auth/auth/chain.ts +84 -0
- package/src/auth/auth/cookie.ts +136 -0
- package/src/auth/auth/email-links.ts +311 -0
- package/src/auth/auth/guard.ts +128 -0
- package/src/auth/auth/index.ts +18 -0
- package/src/auth/auth/multi-org.ts +337 -0
- package/src/auth/auth/namespace.ts +34 -0
- package/src/auth/auth/parse-expiry.ts +13 -0
- package/src/auth/auth/passwords.ts +110 -0
- package/src/auth/auth/schema.ts +110 -0
- package/src/auth/auth/sessions.ts +565 -0
- package/src/auth/auth/sign-in.ts +156 -0
- package/src/auth/auth/signing-keys.ts +69 -0
- package/src/auth/auth/types.ts +26 -0
- package/src/auth/auth/uuid.ts +10 -0
- package/src/auth/rbac/cache.ts +55 -0
- package/src/auth/rbac/check.ts +30 -0
- package/src/auth/rbac/create.ts +35 -0
- package/src/auth/rbac/index.ts +5 -0
- package/src/auth/rbac/middleware.ts +20 -0
- package/src/auth/rbac/namespace.ts +15 -0
- package/src/auth/rbac/resolve.ts +31 -0
- package/src/auth/rbac/schema.sql +31 -0
- package/src/auth/rbac/seed.ts +67 -0
- package/src/auth/rbac/tables.ts +32 -0
- package/src/auth/rbac/types.ts +65 -0
- package/src/auth/tenant/extract.ts +33 -0
- package/src/auth/tenant/in-tenant.ts +49 -0
- package/src/auth/tenant/index.ts +7 -0
- package/src/auth/tenant/namespace.ts +23 -0
- package/src/auth/tenant/propagate.ts +20 -0
- package/src/auth/tenant/rls.ts +120 -0
- package/src/auth/tenant/scope.ts +33 -0
- package/src/auth/tenant/scoped-db.ts +581 -0
- package/src/auth/tenant/types.ts +14 -0
- package/src/auth/tenant/validate.ts +27 -0
- package/src/cli/commands/add.ts +158 -0
- package/src/cli/commands/alerts.ts +98 -0
- package/src/cli/commands/check.ts +1418 -0
- package/src/cli/commands/codemod.ts +78 -0
- package/src/cli/commands/db.ts +356 -0
- package/src/cli/commands/dev.ts +101 -0
- package/src/cli/commands/generate.ts +75 -0
- package/src/cli/commands/init.ts +36 -0
- package/src/cli/commands/install.ts +28 -0
- package/src/cli/commands/lint.ts +62 -0
- package/src/cli/commands/migrate.ts +132 -0
- package/src/cli/commands/openapi.ts +63 -0
- package/src/cli/commands/remove.ts +72 -0
- package/src/cli/commands/run.ts +50 -0
- package/src/cli/commands/scope.ts +54 -0
- package/src/cli/commands/serve.ts +68 -0
- package/src/cli/commands/shard.ts +31 -0
- package/src/cli/commands/shared/config-pipework-version.ts +28 -0
- package/src/cli/commands/shared/find-config.ts +22 -0
- package/src/cli/commands/shared/load-config.ts +35 -0
- package/src/cli/commands/shared/pnpm-install.ts +95 -0
- package/src/cli/commands/shared/report-removed.ts +8 -0
- package/src/cli/commands/sync.ts +32 -0
- package/src/cli/commands/test.ts +307 -0
- package/src/cli/commands/upgrade.ts +48 -0
- package/src/cli/dev-bootstrap.ts +24 -0
- package/src/cli/errors.ts +10 -0
- package/src/cli/index.ts +303 -0
- package/src/cli/output.ts +17 -0
- package/src/cli/port.ts +15 -0
- package/src/cli/surface-kinds.ts +20 -0
- package/src/client/index.ts +4 -0
- package/src/client/poll.ts +130 -0
- package/src/client/report-fault.ts +119 -0
- package/src/core/config/app-pool.ts +19 -0
- package/src/core/config/aws-env.ts +29 -0
- package/src/core/config/base-dir.ts +24 -0
- package/src/core/config/discover.ts +64 -0
- package/src/core/config/env-resolve.ts +87 -0
- package/src/core/config/env-types.ts +116 -0
- package/src/core/config/env.ts +55 -0
- package/src/core/config/errors.ts +9 -0
- package/src/core/config/import-config.ts +40 -0
- package/src/core/config/index.ts +8 -0
- package/src/core/config/load.ts +417 -0
- package/src/core/config/namespace.ts +14 -0
- package/src/core/config/resolve.ts +195 -0
- package/src/core/config/schema.ts +488 -0
- package/src/core/config/statement-observer.ts +48 -0
- package/src/core/config/ts-inline-hooks.ts +75 -0
- package/src/core/config/ts-register.ts +4 -0
- package/src/core/config/ts-resolve-hooks.ts +101 -0
- package/src/core/errors/base.ts +49 -0
- package/src/core/errors/http.ts +146 -0
- package/src/core/errors/index.ts +2 -0
- package/src/core/errors/namespace.ts +31 -0
- package/src/core/lifecycle/drain.ts +33 -0
- package/src/core/lifecycle/health.ts +72 -0
- package/src/core/lifecycle/index.ts +4 -0
- package/src/core/lifecycle/namespace.ts +7 -0
- package/src/core/lifecycle/startup.ts +102 -0
- package/src/core/lifecycle/types.ts +36 -0
- package/src/core/logging/context.ts +60 -0
- package/src/core/logging/error-chain.ts +68 -0
- package/src/core/logging/index.ts +5 -0
- package/src/core/logging/logger.ts +65 -0
- package/src/core/logging/namespace.ts +16 -0
- package/src/core/logging/proxy.ts +22 -0
- package/src/core/logging/redact-match.ts +24 -0
- package/src/core/logging/types.ts +47 -0
- package/src/core/pipework.ts +566 -0
- package/src/core/runtime/broker.ts +69 -0
- package/src/core/surface/http.ts +133 -0
- package/src/core/surface/index.ts +11 -0
- package/src/core/surface/job-timeout.ts +40 -0
- package/src/core/surface/namespace.ts +13 -0
- package/src/core/surface/script.ts +33 -0
- package/src/core/surface/start.ts +142 -0
- package/src/core/surface/types.ts +225 -0
- package/src/core/surface/validate.ts +88 -0
- package/src/core/surface/worker.ts +528 -0
- package/src/core/validation/connectivity.ts +49 -0
- package/src/core/validation/domain.ts +99 -0
- package/src/core/validation/index.ts +5 -0
- package/src/core/validation/queue-tables.ts +312 -0
- package/src/core/validation/rls-role.ts +138 -0
- package/src/core/validation/startup.ts +51 -0
- package/src/core/validation/surfaces.ts +65 -0
- package/src/core/validation/types.ts +25 -0
- package/src/data/db/advisory-lock.ts +55 -0
- package/src/data/db/aggregates.ts +172 -0
- package/src/data/db/array-elements.ts +111 -0
- package/src/data/db/bulk-set.ts +53 -0
- package/src/data/db/col/index.ts +14 -0
- package/src/data/db/composed.ts +53 -0
- package/src/data/db/db.ts +276 -0
- package/src/data/db/excluded.ts +16 -0
- package/src/data/db/expressions.ts +473 -0
- package/src/data/db/filter.ts +90 -0
- package/src/data/db/function-source.ts +114 -0
- package/src/data/db/identifiers.ts +16 -0
- package/src/data/db/idx/index.ts +9 -0
- package/src/data/db/in-list.ts +49 -0
- package/src/data/db/index.ts +9 -0
- package/src/data/db/insert-split.ts +137 -0
- package/src/data/db/instrumentation.ts +82 -0
- package/src/data/db/maintenance.ts +28 -0
- package/src/data/db/namespace.ts +107 -0
- package/src/data/db/owner-labels.ts +9 -0
- package/src/data/db/pool.ts +187 -0
- package/src/data/db/query-label.ts +13 -0
- package/src/data/db/query-watch.ts +116 -0
- package/src/data/db/raw-client-warning.ts +37 -0
- package/src/data/db/readonly.ts +23 -0
- package/src/data/db/reservation.ts +151 -0
- package/src/data/db/schema-features.ts +14 -0
- package/src/data/db/serializable.ts +83 -0
- package/src/data/db/sql.ts +1 -0
- package/src/data/db/timeouts.ts +76 -0
- package/src/data/db/types.ts +18 -0
- package/src/data/db/unbound.ts +33 -0
- package/src/data/db/values.ts +29 -0
- package/src/data/domain/brand.ts +15 -0
- package/src/data/domain/build-factory.ts +193 -0
- package/src/data/domain/build-schema.ts +161 -0
- package/src/data/domain/build-table.ts +355 -0
- package/src/data/domain/define.ts +239 -0
- package/src/data/domain/external-registry.ts +34 -0
- package/src/data/domain/external.ts +77 -0
- package/src/data/domain/field.ts +279 -0
- package/src/data/domain/index.ts +13 -0
- package/src/data/domain/naming.ts +6 -0
- package/src/data/domain/projections.ts +57 -0
- package/src/data/domain/trace-safe-projection.ts +31 -0
- package/src/data/domain/traits.ts +108 -0
- package/src/data/domain/types.ts +289 -0
- package/src/data/jsonb/composed.ts +18 -0
- package/src/data/jsonb/index.ts +1 -0
- package/src/data/jsonb/namespace.ts +30 -0
- package/src/data/jsonb/query.ts +86 -0
- package/src/data/migrate/append-only-generate.ts +47 -0
- package/src/data/migrate/applied.ts +47 -0
- package/src/data/migrate/apply.ts +309 -0
- package/src/data/migrate/check.ts +119 -0
- package/src/data/migrate/diff.ts +357 -0
- package/src/data/migrate/door-generate.ts +130 -0
- package/src/data/migrate/framework-rls.ts +58 -0
- package/src/data/migrate/generate.ts +201 -0
- package/src/data/migrate/history.ts +215 -0
- package/src/data/migrate/index.ts +9 -0
- package/src/data/migrate/internal-definitions.ts +175 -0
- package/src/data/migrate/post-process.ts +73 -0
- package/src/data/migrate/pragma.ts +73 -0
- package/src/data/migrate/provision-framework.ts +147 -0
- package/src/data/migrate/rls-generate.ts +61 -0
- package/src/data/migrate/run.ts +124 -0
- package/src/data/migrate/safety.ts +167 -0
- package/src/data/migrate/snapshot.ts +368 -0
- package/src/data/migrate/sql-emit.ts +392 -0
- package/src/data/migrate/statements.ts +312 -0
- package/src/data/query/alias.ts +126 -0
- package/src/data/query/batch.ts +8 -0
- package/src/data/query/cache/core/cache.ts +78 -0
- package/src/data/query/cache/core/index.ts +1 -0
- package/src/data/query/cache/core/types.ts +29 -0
- package/src/data/query/cache/readme.md +230 -0
- package/src/data/query/casing.ts +76 -0
- package/src/data/query/collation.ts +11 -0
- package/src/data/query/column-builder.ts +370 -0
- package/src/data/query/column.ts +150 -0
- package/src/data/query/entity.ts +42 -0
- package/src/data/query/errors.ts +33 -0
- package/src/data/query/index.ts +14 -0
- package/src/data/query/logger.ts +47 -0
- package/src/data/query/operations.ts +45 -0
- package/src/data/query/pg-core/alias.ts +12 -0
- package/src/data/query/pg-core/checks.ts +32 -0
- package/src/data/query/pg-core/columns/all.ts +71 -0
- package/src/data/query/pg-core/columns/bigint.ts +110 -0
- package/src/data/query/pg-core/columns/bigserial.ts +128 -0
- package/src/data/query/pg-core/columns/boolean.ts +43 -0
- package/src/data/query/pg-core/columns/char.ts +85 -0
- package/src/data/query/pg-core/columns/cidr.ts +43 -0
- package/src/data/query/pg-core/columns/common.ts +366 -0
- package/src/data/query/pg-core/columns/custom.ts +232 -0
- package/src/data/query/pg-core/columns/date.common.ts +15 -0
- package/src/data/query/pg-core/columns/date.ts +112 -0
- package/src/data/query/pg-core/columns/double-precision.ts +55 -0
- package/src/data/query/pg-core/columns/enum.ts +201 -0
- package/src/data/query/pg-core/columns/index.ts +35 -0
- package/src/data/query/pg-core/columns/inet.ts +43 -0
- package/src/data/query/pg-core/columns/int.common.ts +57 -0
- package/src/data/query/pg-core/columns/integer.ts +53 -0
- package/src/data/query/pg-core/columns/interval.ts +83 -0
- package/src/data/query/pg-core/columns/json.ts +58 -0
- package/src/data/query/pg-core/columns/jsonb.ts +56 -0
- package/src/data/query/pg-core/columns/line.ts +117 -0
- package/src/data/query/pg-core/columns/macaddr.ts +43 -0
- package/src/data/query/pg-core/columns/macaddr8.ts +43 -0
- package/src/data/query/pg-core/columns/numeric.ts +227 -0
- package/src/data/query/pg-core/columns/point.ts +127 -0
- package/src/data/query/pg-core/columns/postgis_extension/geometry.ts +119 -0
- package/src/data/query/pg-core/columns/postgis_extension/utils.ts +47 -0
- package/src/data/query/pg-core/columns/real.ts +58 -0
- package/src/data/query/pg-core/columns/serial.ts +55 -0
- package/src/data/query/pg-core/columns/smallint.ts +53 -0
- package/src/data/query/pg-core/columns/smallserial.ts +60 -0
- package/src/data/query/pg-core/columns/text.ts +67 -0
- package/src/data/query/pg-core/columns/time.ts +72 -0
- package/src/data/query/pg-core/columns/timestamp.ts +163 -0
- package/src/data/query/pg-core/columns/uuid.ts +51 -0
- package/src/data/query/pg-core/columns/varchar.ts +89 -0
- package/src/data/query/pg-core/columns/vector_extension/bit.ts +68 -0
- package/src/data/query/pg-core/columns/vector_extension/halfvec.ts +80 -0
- package/src/data/query/pg-core/columns/vector_extension/sparsevec.ts +67 -0
- package/src/data/query/pg-core/columns/vector_extension/vector.ts +80 -0
- package/src/data/query/pg-core/db.ts +674 -0
- package/src/data/query/pg-core/dialect.ts +1404 -0
- package/src/data/query/pg-core/expressions.ts +25 -0
- package/src/data/query/pg-core/foreign-keys.ts +130 -0
- package/src/data/query/pg-core/index.ts +21 -0
- package/src/data/query/pg-core/indexes.ts +276 -0
- package/src/data/query/pg-core/policies.ts +56 -0
- package/src/data/query/pg-core/primary-keys.ts +62 -0
- package/src/data/query/pg-core/query-builders/count.ts +86 -0
- package/src/data/query/pg-core/query-builders/delete.ts +293 -0
- package/src/data/query/pg-core/query-builders/index.ts +7 -0
- package/src/data/query/pg-core/query-builders/insert.ts +452 -0
- package/src/data/query/pg-core/query-builders/query-builder.ts +123 -0
- package/src/data/query/pg-core/query-builders/query.ts +157 -0
- package/src/data/query/pg-core/query-builders/raw.ts +49 -0
- package/src/data/query/pg-core/query-builders/refresh-materialized-view.ts +108 -0
- package/src/data/query/pg-core/query-builders/select.ts +1346 -0
- package/src/data/query/pg-core/query-builders/select.types.ts +437 -0
- package/src/data/query/pg-core/query-builders/update.ts +626 -0
- package/src/data/query/pg-core/roles.ts +41 -0
- package/src/data/query/pg-core/schema.ts +72 -0
- package/src/data/query/pg-core/sequence.ts +41 -0
- package/src/data/query/pg-core/session.ts +292 -0
- package/src/data/query/pg-core/subquery.ts +46 -0
- package/src/data/query/pg-core/table.ts +252 -0
- package/src/data/query/pg-core/unique-constraint.ts +73 -0
- package/src/data/query/pg-core/utils/array.ts +95 -0
- package/src/data/query/pg-core/utils/index.ts +1 -0
- package/src/data/query/pg-core/utils.ts +104 -0
- package/src/data/query/pg-core/view-base.ts +14 -0
- package/src/data/query/pg-core/view-common.ts +1 -0
- package/src/data/query/pg-core/view.ts +435 -0
- package/src/data/query/pg-core/with-builder.ts +41 -0
- package/src/data/query/postgres-js/README.md +46 -0
- package/src/data/query/postgres-js/array-parser.ts +45 -0
- package/src/data/query/postgres-js/driver-error-boundary.ts +149 -0
- package/src/data/query/postgres-js/driver.ts +163 -0
- package/src/data/query/postgres-js/index.ts +2 -0
- package/src/data/query/postgres-js/session.ts +234 -0
- package/src/data/query/primary-key.ts +11 -0
- package/src/data/query/query-builders/query-builder.ts +19 -0
- package/src/data/query/query-builders/select.types.ts +175 -0
- package/src/data/query/query-promise.ts +35 -0
- package/src/data/query/relations.ts +725 -0
- package/src/data/query/runnable-query.ts +12 -0
- package/src/data/query/selection-proxy.ts +121 -0
- package/src/data/query/session.ts +8 -0
- package/src/data/query/sql/expressions/conditions.ts +741 -0
- package/src/data/query/sql/expressions/index.ts +2 -0
- package/src/data/query/sql/expressions/select.ts +45 -0
- package/src/data/query/sql/functions/aggregate.ts +129 -0
- package/src/data/query/sql/functions/index.ts +2 -0
- package/src/data/query/sql/functions/vector.ts +178 -0
- package/src/data/query/sql/index.ts +3 -0
- package/src/data/query/sql/sql.ts +794 -0
- package/src/data/query/subquery.ts +53 -0
- package/src/data/query/table.ts +208 -0
- package/src/data/query/table.utils.ts +2 -0
- package/src/data/query/tracing-utils.ts +3 -0
- package/src/data/query/tracing.ts +11 -0
- package/src/data/query/utils.ts +357 -0
- package/src/data/query/version.ts +4 -0
- package/src/data/query/view-common.ts +1 -0
- package/src/data/schema/branded.ts +13 -0
- package/src/data/schema/generated/coerce.ts +5 -0
- package/src/data/schema/generated/combinator.ts +6 -0
- package/src/data/schema/generated/encoding.ts +5 -0
- package/src/data/schema/generated/error.ts +6 -0
- package/src/data/schema/generated/format.ts +5 -0
- package/src/data/schema/generated/type-constructor.ts +10 -0
- package/src/data/schema/generated/type.ts +6 -0
- package/src/data/schema/index.ts +6 -0
- package/src/data/schema/json-schema.ts +33 -0
- package/src/data/schema/namespace.ts +55 -0
- package/src/data/schema/parse.ts +39 -0
- package/src/data/schema/types.ts +39 -0
- package/src/data/temporal/append-only.ts +134 -0
- package/src/data/temporal/close.ts +27 -0
- package/src/data/temporal/columns.ts +10 -0
- package/src/data/temporal/definition-queries.ts +70 -0
- package/src/data/temporal/errors.ts +10 -0
- package/src/data/temporal/get-current.ts +22 -0
- package/src/data/temporal/index.ts +9 -0
- package/src/data/temporal/namespace.ts +36 -0
- package/src/data/temporal/query.ts +25 -0
- package/src/data/temporal/resolve.ts +17 -0
- package/src/data/temporal/revise.ts +67 -0
- package/src/data/temporal/types.ts +22 -0
- package/src/data/valve/artifact.ts +33 -0
- package/src/data/valve/contract-diff.ts +21 -0
- package/src/data/valve/cross.ts +57 -0
- package/src/data/valve/crossing-ledger.ts +50 -0
- package/src/data/valve/decision.ts +44 -0
- package/src/data/valve/durable-crossing.ts +52 -0
- package/src/data/valve/execute-crossing.ts +77 -0
- package/src/data/valve/faucet.ts +56 -0
- package/src/data/valve/gate.ts +114 -0
- package/src/data/valve/graph.ts +77 -0
- package/src/data/valve/index.ts +53 -0
- package/src/data/valve/namespace.ts +57 -0
- package/src/data/valve/registry.ts +50 -0
- package/src/data/valve/schema/valve-crossing-fields.ts +23 -0
- package/src/data/valve/schema/valve-crossing.ts +9 -0
- package/src/data/valve/supply.ts +154 -0
- package/src/data/valve/types.ts +143 -0
- package/src/data/vector/columns.ts +27 -0
- package/src/data/vector/index.ts +4 -0
- package/src/data/vector/namespace.ts +33 -0
- package/src/data/vector/query.ts +85 -0
- package/src/data/vector/validate.ts +16 -0
- package/src/data/write/audit/actor.ts +15 -0
- package/src/data/write/audit/audit-columns.ts +18 -0
- package/src/data/write/audit/audit-select.ts +111 -0
- package/src/data/write/audit/bound-transaction.ts +14 -0
- package/src/data/write/audit/cte-compile.ts +32 -0
- package/src/data/write/audit/decode-returning.ts +47 -0
- package/src/data/write/audit/final-select.ts +43 -0
- package/src/data/write/audit/infra-audit.ts +36 -0
- package/src/data/write/audit/primary-key.ts +65 -0
- package/src/data/write/audit/projection.ts +41 -0
- package/src/data/write/audit/read-touches.ts +86 -0
- package/src/data/write/audit/touch-match.ts +78 -0
- package/src/data/write/audit/verb-delete.ts +62 -0
- package/src/data/write/audit/verb-insert.ts +36 -0
- package/src/data/write/audit/verb-select.ts +47 -0
- package/src/data/write/audit/verb-update.ts +60 -0
- package/src/data/write/audit/verb-upsert.ts +104 -0
- package/src/data/write/conflict.ts +43 -0
- package/src/data/write/delete.ts +38 -0
- package/src/data/write/execute.ts +243 -0
- package/src/data/write/index.ts +11 -0
- package/src/data/write/insert.ts +63 -0
- package/src/data/write/state.ts +43 -0
- package/src/data/write/update.ts +54 -0
- package/src/data/write/upsert.ts +58 -0
- package/src/data/write/values.ts +19 -0
- package/src/index.ts +230 -0
- package/src/infra/access-links/code.ts +70 -0
- package/src/infra/access-links/handle.ts +892 -0
- package/src/infra/access-links/index.ts +9 -0
- package/src/infra/access-links/namespace.ts +30 -0
- package/src/infra/access-links/person-check.ts +177 -0
- package/src/infra/access-links/schema.ts +71 -0
- package/src/infra/alerts/async-sources.ts +231 -0
- package/src/infra/alerts/audit.ts +36 -0
- package/src/infra/alerts/beat.ts +123 -0
- package/src/infra/alerts/client-faults.ts +111 -0
- package/src/infra/alerts/faults.ts +156 -0
- package/src/infra/alerts/handle.ts +778 -0
- package/src/infra/alerts/http.ts +192 -0
- package/src/infra/alerts/index.ts +12 -0
- package/src/infra/alerts/infra-sources.ts +180 -0
- package/src/infra/alerts/namespace.ts +81 -0
- package/src/infra/alerts/redact.ts +21 -0
- package/src/infra/alerts/request-faults.ts +41 -0
- package/src/infra/alerts/schema.ts +124 -0
- package/src/infra/alerts/sinks.ts +125 -0
- package/src/infra/alerts/source-options.ts +26 -0
- package/src/infra/alerts/sources.ts +503 -0
- package/src/infra/alerts/subsystem-sources.ts +137 -0
- package/src/infra/audit/emit.ts +87 -0
- package/src/infra/audit/index.ts +2 -0
- package/src/infra/audit/namespace.ts +22 -0
- package/src/infra/audit/schema.sql +35 -0
- package/src/infra/audit/types.ts +18 -0
- package/src/infra/aws/credentials.ts +147 -0
- package/src/infra/aws/sigv4.ts +140 -0
- package/src/infra/cache/create.ts +58 -0
- package/src/infra/cache/entry.ts +81 -0
- package/src/infra/cache/index.ts +4 -0
- package/src/infra/cache/namespace.ts +10 -0
- package/src/infra/cache/tenant.ts +93 -0
- package/src/infra/cache/types.ts +24 -0
- package/src/infra/crawl/audit.ts +35 -0
- package/src/infra/crawl/errors.ts +25 -0
- package/src/infra/crawl/handle.ts +693 -0
- package/src/infra/crawl/index.ts +9 -0
- package/src/infra/crawl/links.ts +160 -0
- package/src/infra/crawl/namespace.ts +36 -0
- package/src/infra/crawl/robots.ts +100 -0
- package/src/infra/crawl/schema.ts +89 -0
- package/src/infra/credit-line/handle.ts +883 -0
- package/src/infra/credit-line/index.ts +6 -0
- package/src/infra/credit-line/namespace.ts +7 -0
- package/src/infra/credit-line/schema.ts +96 -0
- package/src/infra/credits/handle.ts +706 -0
- package/src/infra/credits/index.ts +5 -0
- package/src/infra/credits/namespace.ts +7 -0
- package/src/infra/credits/schema.ts +83 -0
- package/src/infra/email/audit.ts +36 -0
- package/src/infra/email/inbound.ts +622 -0
- package/src/infra/email/index.ts +11 -0
- package/src/infra/email/mail.ts +517 -0
- package/src/infra/email/mime.ts +447 -0
- package/src/infra/email/namespace.ts +22 -0
- package/src/infra/email/providers.ts +111 -0
- package/src/infra/email/schema.ts +96 -0
- package/src/infra/email/sns.ts +200 -0
- package/src/infra/email/unsubscribe.ts +44 -0
- package/src/infra/fetch/address.ts +88 -0
- package/src/infra/fetch/connect-retry.ts +87 -0
- package/src/infra/fetch/handle.ts +329 -0
- package/src/infra/fetch/index.ts +7 -0
- package/src/infra/fetch/namespace.ts +70 -0
- package/src/infra/idempotency/index.ts +3 -0
- package/src/infra/idempotency/middleware.ts +87 -0
- package/src/infra/idempotency/store.ts +92 -0
- package/src/infra/idempotency/types.ts +30 -0
- package/src/infra/join-requests/handle.ts +312 -0
- package/src/infra/join-requests/index.ts +2 -0
- package/src/infra/join-requests/namespace.ts +7 -0
- package/src/infra/join-requests/schema.ts +33 -0
- package/src/infra/outbox/core.ts +165 -0
- package/src/infra/quota/errors.ts +32 -0
- package/src/infra/quota/handle.ts +215 -0
- package/src/infra/quota/index.ts +5 -0
- package/src/infra/quota/namespace.ts +7 -0
- package/src/infra/quota/schema.ts +15 -0
- package/src/infra/storage/backend.ts +34 -0
- package/src/infra/storage/handle.ts +513 -0
- package/src/infra/storage/index.ts +9 -0
- package/src/infra/storage/local.ts +104 -0
- package/src/infra/storage/namespace.ts +13 -0
- package/src/infra/storage/s3.ts +257 -0
- package/src/infra/storage/schema.ts +24 -0
- package/src/infra/support/handle.ts +854 -0
- package/src/infra/support/http.ts +229 -0
- package/src/infra/support/index.ts +7 -0
- package/src/infra/support/namespace.ts +12 -0
- package/src/infra/support/schema.ts +96 -0
- package/src/infra/webhook/inbound.ts +45 -0
- package/src/infra/webhook/index.ts +5 -0
- package/src/infra/webhook/namespace.ts +24 -0
- package/src/infra/webhook/outbound.ts +315 -0
- package/src/infra/webhook/sign.ts +32 -0
- package/src/infra/webhook/verify.ts +82 -0
- package/src/invariants/assert.ts +26 -0
- package/src/invariants/index.ts +1 -0
- package/src/lint/config.ts +56 -0
- package/src/lint/doctrine.ts +163 -0
- package/src/lint/include.ts +97 -0
- package/src/lint/index.ts +3 -0
- package/src/lint/preset.ts +10 -0
- package/src/lint/resolver.ts +218 -0
- package/src/lint/rules/no-reexports.ts +46 -0
- package/src/request/behavior/audited.ts +85 -0
- package/src/request/behavior/cached.ts +62 -0
- package/src/request/behavior/compose.ts +28 -0
- package/src/request/behavior/index.ts +5 -0
- package/src/request/behavior/namespace.ts +16 -0
- package/src/request/behavior/types.ts +26 -0
- package/src/request/behavior/versioned.ts +54 -0
- package/src/request/context/create.ts +103 -0
- package/src/request/context/guard.ts +49 -0
- package/src/request/context/index.ts +4 -0
- package/src/request/context/run-in-transaction.ts +200 -0
- package/src/request/context/store.ts +28 -0
- package/src/request/context/types.ts +50 -0
- package/src/request/di/builder.ts +535 -0
- package/src/request/di/index.ts +8 -0
- package/src/request/di/resolve.ts +271 -0
- package/src/request/di/types.ts +262 -0
- package/src/request/fitting/namespace.ts +7 -0
- package/src/request/fixture/batch.ts +71 -0
- package/src/request/fixture/builder.ts +26 -0
- package/src/request/fixture/errors.ts +10 -0
- package/src/request/fixture/index.ts +8 -0
- package/src/request/fixture/namespace.ts +23 -0
- package/src/request/fixture/paginate.ts +44 -0
- package/src/request/fixture/to-handlers.ts +260 -0
- package/src/request/fixture/types.ts +79 -0
- package/src/request/flow/act-as.ts +78 -0
- package/src/request/flow/namespace.ts +17 -0
- package/src/request/http/error-step.ts +42 -0
- package/src/request/http/file.ts +141 -0
- package/src/request/http/index.ts +4 -0
- package/src/request/http/middleware.ts +141 -0
- package/src/request/http/namespace.ts +5 -0
- package/src/request/http/rate-limit-classes.ts +170 -0
- package/src/request/http/response.ts +82 -0
- package/src/request/http/server.ts +916 -0
- package/src/request/http/sniff.ts +261 -0
- package/src/request/http/types.ts +250 -0
- package/src/request/http/upload.ts +284 -0
- package/src/request/internal/text.ts +6 -0
- package/src/request/openapi/generate.ts +205 -0
- package/src/request/openapi/index.ts +2 -0
- package/src/request/openapi/namespace.ts +7 -0
- package/src/test/auth.ts +13 -0
- package/src/test/auto-setup.ts +45 -0
- package/src/test/context.ts +91 -0
- package/src/test/crawl-fixture.ts +157 -0
- package/src/test/discover-fork.ts +17 -0
- package/src/test/fingerprint.ts +135 -0
- package/src/test/globals.d.ts +7 -0
- package/src/test/index.ts +19 -0
- package/src/test/namespace.ts +87 -0
- package/src/test/plugin.ts +189 -0
- package/src/test/progress.ts +185 -0
- package/src/test/reap-after-run.ts +28 -0
- package/src/test/reap.ts +286 -0
- package/src/test/reset.ts +253 -0
- package/src/test/savepoints.ts +172 -0
- package/src/test/setup.ts +1422 -0
- package/src/test/system-channel.ts +50 -0
- package/src/test/vitest-plugin.ts +142 -0
- package/src/test/vitest-workspace.ts +507 -0
- package/src/test/vitest.ts +333 -0
- package/src/test/watch.ts +105 -0
- package/src/trace/capture/bounded-serializer.ts +146 -0
- package/src/trace/cardinality/analyze.ts +173 -0
- package/src/trace/cardinality/branch-context.ts +214 -0
- package/src/trace/cardinality/check.ts +33 -0
- package/src/trace/cardinality/classify-edge.ts +64 -0
- package/src/trace/cardinality/structural-max.ts +107 -0
- package/src/trace/check/coverage-check.ts +188 -0
- package/src/trace/check/flow-check.ts +103 -0
- package/src/trace/check/flow-step-site.ts +234 -0
- package/src/trace/check/io-pattern.ts +116 -0
- package/src/trace/codemod/add-cardinality.ts +152 -0
- package/src/trace/codemod/run.ts +80 -0
- package/src/trace/entry/child-trace.ts +21 -0
- package/src/trace/entry/close-trace.ts +87 -0
- package/src/trace/entry/finalize-trace.ts +28 -0
- package/src/trace/entry/open-trace.ts +138 -0
- package/src/trace/entry/parent-trace.ts +20 -0
- package/src/trace/entry/parse-traceparent.ts +39 -0
- package/src/trace/entry/process-start.ts +38 -0
- package/src/trace/entry/trace-context.ts +26 -0
- package/src/trace/entry/tracing-enabled.ts +10 -0
- package/src/trace/external/record.ts +195 -0
- package/src/trace/external/report.ts +66 -0
- package/src/trace/namespace.ts +19 -0
- package/src/trace/partition/day.ts +47 -0
- package/src/trace/partition/index.ts +14 -0
- package/src/trace/partition/partition-name.ts +23 -0
- package/src/trace/partition/plan.ts +82 -0
- package/src/trace/partition/schedule.ts +26 -0
- package/src/trace/partition/startup-hook.ts +39 -0
- package/src/trace/partition/sync.ts +154 -0
- package/src/trace/partition/tables.ts +53 -0
- package/src/trace/read/tree.ts +83 -0
- package/src/trace/retain/copy-on-error.ts +76 -0
- package/src/trace/runtime/expire-stale-traces.ts +54 -0
- package/src/trace/runtime/flow-step.ts +147 -0
- package/src/trace/runtime/flush-steps.ts +31 -0
- package/src/trace/runtime/pending-writes.ts +54 -0
- package/src/trace/runtime/step-buffer.ts +298 -0
- package/src/trace/runtime/step-error.ts +21 -0
- package/src/trace/runtime/step-meta.ts +55 -0
- package/src/trace/runtime/thenable.ts +12 -0
- package/src/trace/runtime/truncate-trace.ts +62 -0
- package/src/trace/schema/trace-fields.ts +52 -0
- package/src/trace/schema/trace-retained.ts +22 -0
- package/src/trace/schema/trace-step-fields.ts +44 -0
- package/src/trace/schema/trace-step-retained.ts +25 -0
- package/src/trace/schema/trace-step.ts +18 -0
- package/src/trace/schema/trace.ts +12 -0
- package/src/trace/transformer/apply.ts +79 -0
- package/src/trace/transformer/build-meta-literal.ts +30 -0
- package/src/trace/transformer/find-flow-step-sites.ts +85 -0
- package/src/trace/transformer/inject-flow-step-import.ts +39 -0
- package/src/trace/transformer/transform-error.ts +14 -0
- package/src/trace/transformer/transform-flow-steps.ts +123 -0
- package/src/trace/transformer/wrap-function-declaration.ts +62 -0
- package/src/trace/transformer/wrap-variable-declaration.ts +67 -0
- package/src/workspace/affected.ts +110 -0
- package/src/workspace/changed-files.ts +163 -0
- package/src/workspace/check-deps.ts +213 -0
- package/src/workspace/checksum.ts +20 -0
- package/src/workspace/dependency-graph.ts +67 -0
- package/src/workspace/detect-pipework-copies.ts +93 -0
- package/src/workspace/discover.ts +206 -0
- package/src/workspace/generate.ts +401 -0
- package/src/workspace/index.ts +7 -0
- package/src/workspace/module-imports-pipework.ts +39 -0
- package/src/workspace/module-package-name.ts +12 -0
- package/src/workspace/scrub-git-env.ts +23 -0
- package/src/workspace/source-paths.ts +36 -0
- package/src/workspace/sync.ts +182 -0
- package/dist/REFERENCE.md +0 -1477
- package/dist/infra/access-links/rate-limit.d.ts +0 -10
- package/dist/infra/access-links/rate-limit.d.ts.map +0 -1
- package/dist/infra/access-links/rate-limit.js +0 -28
- package/dist/infra/access-links/rate-limit.js.map +0 -1
- package/dist/infra/email/sigv4.d.ts +0 -24
- package/dist/infra/email/sigv4.d.ts.map +0 -1
- package/dist/infra/email/sigv4.js +0 -55
- package/dist/infra/email/sigv4.js.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '../../column-builder.js';
|
|
2
|
+
import type { ColumnBaseConfig } from '../../column.js';
|
|
3
|
+
import { entityKind } from '../../entity.js';
|
|
4
|
+
import type { AnyPgTable } from '../table.js';
|
|
5
|
+
import { PgColumn, PgColumnBuilder } from './common.js';
|
|
6
|
+
|
|
7
|
+
export type PgBooleanBuilderInitial<TName extends string> = PgBooleanBuilder<{
|
|
8
|
+
name: TName;
|
|
9
|
+
dataType: 'boolean';
|
|
10
|
+
columnType: 'PgBoolean';
|
|
11
|
+
data: boolean;
|
|
12
|
+
driverParam: boolean;
|
|
13
|
+
enumValues: undefined;
|
|
14
|
+
}>;
|
|
15
|
+
|
|
16
|
+
export class PgBooleanBuilder<T extends ColumnBuilderBaseConfig<'boolean', 'PgBoolean'>> extends PgColumnBuilder<T> {
|
|
17
|
+
static override readonly [entityKind]: string = 'PgBooleanBuilder';
|
|
18
|
+
|
|
19
|
+
constructor(name: T['name']) {
|
|
20
|
+
super(name, 'boolean', 'PgBoolean');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** @internal */
|
|
24
|
+
override build<TTableName extends string>(
|
|
25
|
+
table: AnyPgTable<{ name: TTableName }>,
|
|
26
|
+
): PgBoolean<MakeColumnConfig<T, TTableName>> {
|
|
27
|
+
return new PgBoolean<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export class PgBoolean<T extends ColumnBaseConfig<'boolean', 'PgBoolean'>> extends PgColumn<T> {
|
|
32
|
+
static override readonly [entityKind]: string = 'PgBoolean';
|
|
33
|
+
|
|
34
|
+
getSQLType(): string {
|
|
35
|
+
return 'boolean';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function boolean(): PgBooleanBuilderInitial<''>;
|
|
40
|
+
export function boolean<TName extends string>(name: TName): PgBooleanBuilderInitial<TName>;
|
|
41
|
+
export function boolean(name?: string) {
|
|
42
|
+
return new PgBooleanBuilder(name ?? '');
|
|
43
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '../../column-builder.js';
|
|
2
|
+
import type { ColumnBaseConfig } from '../../column.js';
|
|
3
|
+
import { entityKind } from '../../entity.js';
|
|
4
|
+
import type { AnyPgTable } from '../table.js';
|
|
5
|
+
import { getColumnNameAndConfig, type Writable } from '../../utils.js';
|
|
6
|
+
import { PgColumn, PgColumnBuilder } from './common.js';
|
|
7
|
+
|
|
8
|
+
export type PgCharBuilderInitial<
|
|
9
|
+
TName extends string,
|
|
10
|
+
TEnum extends [string, ...string[]],
|
|
11
|
+
TLength extends number | undefined,
|
|
12
|
+
> = PgCharBuilder<{
|
|
13
|
+
name: TName;
|
|
14
|
+
dataType: 'string';
|
|
15
|
+
columnType: 'PgChar';
|
|
16
|
+
data: TEnum[number];
|
|
17
|
+
enumValues: TEnum;
|
|
18
|
+
driverParam: string;
|
|
19
|
+
length: TLength;
|
|
20
|
+
}>;
|
|
21
|
+
|
|
22
|
+
export class PgCharBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgChar'> & { length?: number | undefined }>
|
|
23
|
+
extends PgColumnBuilder<
|
|
24
|
+
T,
|
|
25
|
+
{ length: T['length']; enumValues: T['enumValues'] },
|
|
26
|
+
{ length: T['length'] }
|
|
27
|
+
>
|
|
28
|
+
{
|
|
29
|
+
static override readonly [entityKind]: string = 'PgCharBuilder';
|
|
30
|
+
|
|
31
|
+
constructor(name: T['name'], config: PgCharConfig<T['enumValues'], T['length']>) {
|
|
32
|
+
super(name, 'string', 'PgChar');
|
|
33
|
+
this.config.length = config.length;
|
|
34
|
+
this.config.enumValues = config.enum;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** @internal */
|
|
38
|
+
override build<TTableName extends string>(
|
|
39
|
+
table: AnyPgTable<{ name: TTableName }>,
|
|
40
|
+
): PgChar<MakeColumnConfig<T, TTableName> & { length: T['length'] }> {
|
|
41
|
+
return new PgChar<MakeColumnConfig<T, TTableName> & { length: T['length'] }>(
|
|
42
|
+
table,
|
|
43
|
+
this.config as ColumnBuilderRuntimeConfig<any, any>,
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export class PgChar<T extends ColumnBaseConfig<'string', 'PgChar'> & { length?: number | undefined }>
|
|
49
|
+
extends PgColumn<T, { length: T['length']; enumValues: T['enumValues'] }, { length: T['length'] }>
|
|
50
|
+
{
|
|
51
|
+
static override readonly [entityKind]: string = 'PgChar';
|
|
52
|
+
|
|
53
|
+
readonly length = this.config.length;
|
|
54
|
+
override readonly enumValues = this.config.enumValues;
|
|
55
|
+
|
|
56
|
+
getSQLType(): string {
|
|
57
|
+
return this.length === undefined ? `char` : `char(${this.length})`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface PgCharConfig<
|
|
62
|
+
TEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,
|
|
63
|
+
TLength extends number | undefined = number | undefined,
|
|
64
|
+
> {
|
|
65
|
+
enum?: TEnum;
|
|
66
|
+
length?: TLength;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function char(): PgCharBuilderInitial<'', [string, ...string[]], undefined>;
|
|
70
|
+
export function char<U extends string, T extends Readonly<[U, ...U[]]>, L extends number | undefined>(
|
|
71
|
+
config?: PgCharConfig<T | Writable<T>, L>,
|
|
72
|
+
): PgCharBuilderInitial<'', Writable<T>, L>;
|
|
73
|
+
export function char<
|
|
74
|
+
TName extends string,
|
|
75
|
+
U extends string,
|
|
76
|
+
T extends Readonly<[U, ...U[]]>,
|
|
77
|
+
L extends number | undefined,
|
|
78
|
+
>(
|
|
79
|
+
name: TName,
|
|
80
|
+
config?: PgCharConfig<T | Writable<T>, L>,
|
|
81
|
+
): PgCharBuilderInitial<TName, Writable<T>, L>;
|
|
82
|
+
export function char(a?: string | PgCharConfig, b: PgCharConfig = {}): any {
|
|
83
|
+
const { name, config } = getColumnNameAndConfig<PgCharConfig>(a, b);
|
|
84
|
+
return new PgCharBuilder(name, config as any);
|
|
85
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '../../column-builder.js';
|
|
2
|
+
import type { ColumnBaseConfig } from '../../column.js';
|
|
3
|
+
import { entityKind } from '../../entity.js';
|
|
4
|
+
import type { AnyPgTable } from '../table.js';
|
|
5
|
+
import { PgColumn, PgColumnBuilder } from './common.js';
|
|
6
|
+
|
|
7
|
+
export type PgCidrBuilderInitial<TName extends string> = PgCidrBuilder<{
|
|
8
|
+
name: TName;
|
|
9
|
+
dataType: 'string';
|
|
10
|
+
columnType: 'PgCidr';
|
|
11
|
+
data: string;
|
|
12
|
+
driverParam: string;
|
|
13
|
+
enumValues: undefined;
|
|
14
|
+
}>;
|
|
15
|
+
|
|
16
|
+
export class PgCidrBuilder<T extends ColumnBuilderBaseConfig<'string', 'PgCidr'>> extends PgColumnBuilder<T> {
|
|
17
|
+
static override readonly [entityKind]: string = 'PgCidrBuilder';
|
|
18
|
+
|
|
19
|
+
constructor(name: T['name']) {
|
|
20
|
+
super(name, 'string', 'PgCidr');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** @internal */
|
|
24
|
+
override build<TTableName extends string>(
|
|
25
|
+
table: AnyPgTable<{ name: TTableName }>,
|
|
26
|
+
): PgCidr<MakeColumnConfig<T, TTableName>> {
|
|
27
|
+
return new PgCidr<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export class PgCidr<T extends ColumnBaseConfig<'string', 'PgCidr'>> extends PgColumn<T> {
|
|
32
|
+
static override readonly [entityKind]: string = 'PgCidr';
|
|
33
|
+
|
|
34
|
+
getSQLType(): string {
|
|
35
|
+
return 'cidr';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function cidr(): PgCidrBuilderInitial<''>;
|
|
40
|
+
export function cidr<TName extends string>(name: TName): PgCidrBuilderInitial<TName>;
|
|
41
|
+
export function cidr(name?: string) {
|
|
42
|
+
return new PgCidrBuilder(name ?? '');
|
|
43
|
+
}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ColumnBuilderBase,
|
|
3
|
+
ColumnBuilderBaseConfig,
|
|
4
|
+
ColumnBuilderExtraConfig,
|
|
5
|
+
ColumnBuilderRuntimeConfig,
|
|
6
|
+
ColumnDataType,
|
|
7
|
+
HasGenerated,
|
|
8
|
+
MakeColumnConfig,
|
|
9
|
+
} from '../../column-builder.js';
|
|
10
|
+
import { ColumnBuilder } from '../../column-builder.js';
|
|
11
|
+
import type { ColumnBaseConfig } from '../../column.js';
|
|
12
|
+
import { Column } from '../../column.js';
|
|
13
|
+
import { entityKind, is } from '../../entity.js';
|
|
14
|
+
import type { Simplify, Update } from '../../utils.js';
|
|
15
|
+
|
|
16
|
+
import type { ForeignKey, UpdateDeleteAction } from '../foreign-keys.js';
|
|
17
|
+
import { ForeignKeyBuilder } from '../foreign-keys.js';
|
|
18
|
+
import type { AnyPgTable, PgTable } from '../table.js';
|
|
19
|
+
import type { SQL } from '../../sql/sql.js';
|
|
20
|
+
import { iife } from '../../tracing-utils.js';
|
|
21
|
+
import { quoteCollation, type CollationName } from '../../collation.js';
|
|
22
|
+
import type { PgIndexOpClass } from '../indexes.js';
|
|
23
|
+
import { uniqueKeyName } from '../unique-constraint.js';
|
|
24
|
+
import { makePgArray, parsePgArray } from '../utils/array.js';
|
|
25
|
+
|
|
26
|
+
export interface ReferenceConfig {
|
|
27
|
+
ref: () => PgColumn;
|
|
28
|
+
actions: {
|
|
29
|
+
onUpdate?: UpdateDeleteAction;
|
|
30
|
+
onDelete?: UpdateDeleteAction;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface PgColumnBuilderBase<
|
|
35
|
+
T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,
|
|
36
|
+
TTypeConfig extends object = object,
|
|
37
|
+
> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'pg' }> {}
|
|
38
|
+
|
|
39
|
+
export abstract class PgColumnBuilder<
|
|
40
|
+
T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,
|
|
41
|
+
TRuntimeConfig extends object = object,
|
|
42
|
+
TTypeConfig extends object = object,
|
|
43
|
+
TExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,
|
|
44
|
+
> extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg' }, TExtraConfig>
|
|
45
|
+
implements PgColumnBuilderBase<T, TTypeConfig>
|
|
46
|
+
{
|
|
47
|
+
private foreignKeyConfigs: ReferenceConfig[] = [];
|
|
48
|
+
|
|
49
|
+
static override readonly [entityKind]: string = 'PgColumnBuilder';
|
|
50
|
+
|
|
51
|
+
array<TSize extends number | undefined = undefined>(size?: TSize): PgArrayBuilder<
|
|
52
|
+
& {
|
|
53
|
+
name: T['name'];
|
|
54
|
+
dataType: 'array';
|
|
55
|
+
columnType: 'PgArray';
|
|
56
|
+
data: T['data'][];
|
|
57
|
+
driverParam: T['driverParam'][] | string;
|
|
58
|
+
enumValues: T['enumValues'];
|
|
59
|
+
size: TSize;
|
|
60
|
+
baseBuilder: T;
|
|
61
|
+
}
|
|
62
|
+
& (T extends { notNull: true } ? { notNull: true } : {})
|
|
63
|
+
& (T extends { hasDefault: true } ? { hasDefault: true } : {}),
|
|
64
|
+
T
|
|
65
|
+
> {
|
|
66
|
+
return new PgArrayBuilder(this.config.name, this as PgColumnBuilder<any, any>, size as any);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
references(
|
|
70
|
+
ref: ReferenceConfig['ref'],
|
|
71
|
+
actions: ReferenceConfig['actions'] = {},
|
|
72
|
+
): this {
|
|
73
|
+
this.foreignKeyConfigs.push({ ref, actions });
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
unique(
|
|
78
|
+
name?: string,
|
|
79
|
+
config?: { nulls: 'distinct' | 'not distinct' },
|
|
80
|
+
): this {
|
|
81
|
+
this.config.isUnique = true;
|
|
82
|
+
this.config.uniqueName = name;
|
|
83
|
+
this.config.uniqueType = config?.nulls;
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Declares the column's collation: `"col" text COLLATE "name"` in generated migrations. A string is one identifier (`'en_US.utf8'`); `['pg_catalog', 'C']` is schema-qualified. */
|
|
88
|
+
collate(name: CollationName): this {
|
|
89
|
+
this.config.collation = quoteCollation(name);
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
generatedAlwaysAs(as: SQL | T['data'] | (() => SQL)): HasGenerated<this, {
|
|
94
|
+
type: 'always';
|
|
95
|
+
}> {
|
|
96
|
+
this.config.generated = {
|
|
97
|
+
as,
|
|
98
|
+
type: 'always',
|
|
99
|
+
mode: 'stored',
|
|
100
|
+
};
|
|
101
|
+
return this as HasGenerated<this, {
|
|
102
|
+
type: 'always';
|
|
103
|
+
}>;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** @internal */
|
|
107
|
+
buildForeignKeys(column: PgColumn, table: PgTable): ForeignKey[] {
|
|
108
|
+
return this.foreignKeyConfigs.map(({ ref, actions }) => {
|
|
109
|
+
return iife(
|
|
110
|
+
(ref, actions) => {
|
|
111
|
+
const builder = new ForeignKeyBuilder(() => {
|
|
112
|
+
const foreignColumn = ref();
|
|
113
|
+
return { columns: [column], foreignColumns: [foreignColumn] };
|
|
114
|
+
});
|
|
115
|
+
if (actions.onUpdate) {
|
|
116
|
+
builder.onUpdate(actions.onUpdate);
|
|
117
|
+
}
|
|
118
|
+
if (actions.onDelete) {
|
|
119
|
+
builder.onDelete(actions.onDelete);
|
|
120
|
+
}
|
|
121
|
+
return builder.build(table);
|
|
122
|
+
},
|
|
123
|
+
ref,
|
|
124
|
+
actions,
|
|
125
|
+
);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** @internal */
|
|
130
|
+
abstract build<TTableName extends string>(
|
|
131
|
+
table: AnyPgTable<{ name: TTableName }>,
|
|
132
|
+
): PgColumn<MakeColumnConfig<T, TTableName>>;
|
|
133
|
+
|
|
134
|
+
/** @internal */
|
|
135
|
+
buildExtraConfigColumn<TTableName extends string>(
|
|
136
|
+
table: AnyPgTable<{ name: TTableName }>,
|
|
137
|
+
): ExtraConfigColumn {
|
|
138
|
+
return new ExtraConfigColumn(table, this.config);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// To understand how to use `PgColumn` and `PgColumn`, see `Column` and `AnyColumn` documentation.
|
|
143
|
+
export abstract class PgColumn<
|
|
144
|
+
T extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,
|
|
145
|
+
TRuntimeConfig extends object = {},
|
|
146
|
+
TTypeConfig extends object = {},
|
|
147
|
+
> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg' }> {
|
|
148
|
+
static override readonly [entityKind]: string = 'PgColumn';
|
|
149
|
+
|
|
150
|
+
constructor(
|
|
151
|
+
override readonly table: PgTable,
|
|
152
|
+
config: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>,
|
|
153
|
+
) {
|
|
154
|
+
if (!config.uniqueName) {
|
|
155
|
+
config.uniqueName = uniqueKeyName(table, [config.name]);
|
|
156
|
+
}
|
|
157
|
+
super(table, config);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string | undefined; collation?: string | undefined };
|
|
162
|
+
|
|
163
|
+
export class ExtraConfigColumn<
|
|
164
|
+
T extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,
|
|
165
|
+
> extends PgColumn<T, IndexedExtraConfigType> {
|
|
166
|
+
static override readonly [entityKind]: string = 'ExtraConfigColumn';
|
|
167
|
+
|
|
168
|
+
override getSQLType(): string {
|
|
169
|
+
return this.getSQLType();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
indexConfig: IndexedExtraConfigType = {
|
|
173
|
+
order: this.config.order ?? 'asc',
|
|
174
|
+
nulls: this.config.nulls ?? 'last',
|
|
175
|
+
opClass: this.config.opClass,
|
|
176
|
+
};
|
|
177
|
+
defaultConfig: IndexedExtraConfigType = {
|
|
178
|
+
order: 'asc',
|
|
179
|
+
nulls: 'last',
|
|
180
|
+
opClass: undefined,
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
asc(): Omit<this, 'asc' | 'desc'> {
|
|
184
|
+
this.indexConfig.order = 'asc';
|
|
185
|
+
return this;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
desc(): Omit<this, 'asc' | 'desc'> {
|
|
189
|
+
this.indexConfig.order = 'desc';
|
|
190
|
+
return this;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
nullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'> {
|
|
194
|
+
this.indexConfig.nulls = 'first';
|
|
195
|
+
return this;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
nullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'> {
|
|
199
|
+
this.indexConfig.nulls = 'last';
|
|
200
|
+
return this;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* ### PostgreSQL documentation quote
|
|
205
|
+
*
|
|
206
|
+
* > An operator class with optional parameters can be specified for each column of an index.
|
|
207
|
+
* The operator class identifies the operators to be used by the index for that column.
|
|
208
|
+
* For example, a B-tree index on four-byte integers would use the int4_ops class;
|
|
209
|
+
* this operator class includes comparison functions for four-byte integers.
|
|
210
|
+
* In practice the default operator class for the column's data type is usually sufficient.
|
|
211
|
+
* The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.
|
|
212
|
+
* For example, we might want to sort a complex-number data type either by absolute value or by real part.
|
|
213
|
+
* We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.
|
|
214
|
+
* More information about operator classes check:
|
|
215
|
+
*
|
|
216
|
+
* ### Useful links
|
|
217
|
+
* https://www.postgresql.org/docs/current/sql-createindex.html
|
|
218
|
+
*
|
|
219
|
+
* https://www.postgresql.org/docs/current/indexes-opclass.html
|
|
220
|
+
*
|
|
221
|
+
* https://www.postgresql.org/docs/current/xindex.html
|
|
222
|
+
*
|
|
223
|
+
* ### Additional types
|
|
224
|
+
* If you have the `pg_vector` extension installed in your database, you can use the
|
|
225
|
+
* `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.
|
|
226
|
+
*
|
|
227
|
+
* **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**
|
|
228
|
+
*
|
|
229
|
+
* @param opClass
|
|
230
|
+
* @returns
|
|
231
|
+
*/
|
|
232
|
+
/** The index column's collation: `"col" COLLATE "C"`. A string is one identifier; `['pg_catalog', 'C']` is schema-qualified. */
|
|
233
|
+
collate(name: CollationName): Omit<this, 'collate'> {
|
|
234
|
+
this.indexConfig.collation = quoteCollation(name);
|
|
235
|
+
return this;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
op(opClass: PgIndexOpClass): Omit<this, 'op'> {
|
|
239
|
+
this.indexConfig.opClass = opClass;
|
|
240
|
+
return this;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export class IndexedColumn {
|
|
245
|
+
static readonly [entityKind]: string = 'IndexedColumn';
|
|
246
|
+
constructor(
|
|
247
|
+
name: string | undefined,
|
|
248
|
+
keyAsName: boolean,
|
|
249
|
+
type: string,
|
|
250
|
+
indexConfig: IndexedExtraConfigType,
|
|
251
|
+
) {
|
|
252
|
+
this.name = name;
|
|
253
|
+
this.keyAsName = keyAsName;
|
|
254
|
+
this.type = type;
|
|
255
|
+
this.indexConfig = indexConfig;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
name: string | undefined;
|
|
259
|
+
keyAsName: boolean;
|
|
260
|
+
type: string;
|
|
261
|
+
indexConfig: IndexedExtraConfigType;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
export type AnyPgColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = PgColumn<
|
|
265
|
+
Required<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>
|
|
266
|
+
>;
|
|
267
|
+
|
|
268
|
+
export type PgArrayColumnBuilderBaseConfig = ColumnBuilderBaseConfig<'array', 'PgArray'> & {
|
|
269
|
+
size: number | undefined;
|
|
270
|
+
baseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>;
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
export class PgArrayBuilder<
|
|
274
|
+
T extends PgArrayColumnBuilderBaseConfig,
|
|
275
|
+
TBase extends ColumnBuilderBaseConfig<ColumnDataType, string> | PgArrayColumnBuilderBaseConfig,
|
|
276
|
+
> extends PgColumnBuilder<
|
|
277
|
+
T,
|
|
278
|
+
{
|
|
279
|
+
baseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<
|
|
280
|
+
TBase,
|
|
281
|
+
TBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any> } ? TBaseBuilder
|
|
282
|
+
: never
|
|
283
|
+
>
|
|
284
|
+
: PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>;
|
|
285
|
+
size: T['size'];
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
baseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<
|
|
289
|
+
TBase,
|
|
290
|
+
TBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any> } ? TBaseBuilder
|
|
291
|
+
: never
|
|
292
|
+
>
|
|
293
|
+
: PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>;
|
|
294
|
+
size: T['size'];
|
|
295
|
+
}
|
|
296
|
+
> {
|
|
297
|
+
static override readonly [entityKind] = 'PgArrayBuilder';
|
|
298
|
+
|
|
299
|
+
constructor(
|
|
300
|
+
name: string,
|
|
301
|
+
baseBuilder: PgArrayBuilder<T, TBase>['config']['baseBuilder'],
|
|
302
|
+
size: T['size'],
|
|
303
|
+
) {
|
|
304
|
+
super(name, 'array', 'PgArray');
|
|
305
|
+
this.config.baseBuilder = baseBuilder;
|
|
306
|
+
this.config.size = size;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/** @internal */
|
|
310
|
+
override build<TTableName extends string>(
|
|
311
|
+
table: AnyPgTable<{ name: TTableName }>,
|
|
312
|
+
): PgArray<MakeColumnConfig<T, TTableName> & { size: T['size']; baseBuilder: T['baseBuilder'] }, TBase> {
|
|
313
|
+
const baseColumn = this.config.baseBuilder.build(table);
|
|
314
|
+
return new PgArray<MakeColumnConfig<T, TTableName> & { size: T['size']; baseBuilder: T['baseBuilder'] }, TBase>(
|
|
315
|
+
table as AnyPgTable<{ name: MakeColumnConfig<T, TTableName>['tableName'] }>,
|
|
316
|
+
this.config as ColumnBuilderRuntimeConfig<any, any>,
|
|
317
|
+
baseColumn,
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
export class PgArray<
|
|
323
|
+
T extends ColumnBaseConfig<'array', 'PgArray'> & {
|
|
324
|
+
size: number | undefined;
|
|
325
|
+
baseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>;
|
|
326
|
+
},
|
|
327
|
+
TBase extends ColumnBuilderBaseConfig<ColumnDataType, string>,
|
|
328
|
+
> extends PgColumn<T, {}, { size: T['size']; baseBuilder: T['baseBuilder'] }> {
|
|
329
|
+
readonly size: T['size'];
|
|
330
|
+
|
|
331
|
+
static override readonly [entityKind]: string = 'PgArray';
|
|
332
|
+
|
|
333
|
+
constructor(
|
|
334
|
+
table: AnyPgTable<{ name: T['tableName'] }>,
|
|
335
|
+
config: PgArrayBuilder<T, TBase>['config'],
|
|
336
|
+
readonly baseColumn: PgColumn,
|
|
337
|
+
readonly range?: [number | undefined, number | undefined],
|
|
338
|
+
) {
|
|
339
|
+
super(table, config);
|
|
340
|
+
this.size = config.size;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
getSQLType(): string {
|
|
344
|
+
return `${this.baseColumn.getSQLType()}[${typeof this.size === 'number' ? this.size : ''}]`;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
override mapFromDriverValue(value: unknown[] | string): T['data'] {
|
|
348
|
+
if (typeof value === 'string') {
|
|
349
|
+
// Thank you node-postgres for not parsing enum arrays
|
|
350
|
+
value = parsePgArray(value);
|
|
351
|
+
}
|
|
352
|
+
return value.map((v) => (v === null ? null : this.baseColumn.mapFromDriverValue(v)));
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
override mapToDriverValue(value: unknown[], isNestedArray = false): unknown[] | string {
|
|
356
|
+
const a = value.map((v) =>
|
|
357
|
+
v === null
|
|
358
|
+
? null
|
|
359
|
+
: is(this.baseColumn, PgArray)
|
|
360
|
+
? this.baseColumn.mapToDriverValue(v as unknown[], true)
|
|
361
|
+
: this.baseColumn.mapToDriverValue(v)
|
|
362
|
+
);
|
|
363
|
+
if (isNestedArray) return a;
|
|
364
|
+
return makePgArray(a);
|
|
365
|
+
}
|
|
366
|
+
}
|