pipework 0.251.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 +11 -0
- package/dist/core/config/load.d.ts +2 -0
- package/dist/core/config/load.d.ts.map +1 -1
- package/dist/core/config/load.js +1 -0
- package/dist/core/config/load.js.map +1 -1
- package/dist/core/config/namespace.d.ts +1 -0
- package/dist/core/config/namespace.d.ts.map +1 -1
- package/dist/core/config/schema.d.ts +2 -0
- package/dist/core/config/schema.d.ts.map +1 -1
- package/dist/core/config/schema.js +1 -0
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/surface/types.d.ts +1 -0
- package/dist/core/surface/types.d.ts.map +1 -1
- package/dist/data/db/namespace.d.ts +3 -0
- package/dist/data/db/namespace.d.ts.map +1 -1
- package/dist/data/db/namespace.js +3 -0
- package/dist/data/db/namespace.js.map +1 -1
- package/dist/data/db/pool.d.ts.map +1 -1
- package/dist/data/db/pool.js +6 -1
- package/dist/data/db/pool.js.map +1 -1
- package/dist/data/db/query-label.d.ts +5 -0
- package/dist/data/db/query-label.d.ts.map +1 -0
- package/dist/data/db/query-label.js +11 -0
- package/dist/data/db/query-label.js.map +1 -0
- package/dist/data/db/query-watch.d.ts +21 -0
- package/dist/data/db/query-watch.d.ts.map +1 -0
- package/dist/data/db/query-watch.js +90 -0
- package/dist/data/db/query-watch.js.map +1 -0
- package/dist/data/query/postgres-js/driver.js +1 -1
- package/dist/data/query/postgres-js/driver.js.map +1 -1
- package/dist/data/query/postgres-js/session.d.ts +5 -1
- package/dist/data/query/postgres-js/session.d.ts.map +1 -1
- package/dist/data/query/postgres-js/session.js +16 -11
- package/dist/data/query/postgres-js/session.js.map +1 -1
- package/dist/data/query/utils.d.ts +2 -0
- package/dist/data/query/utils.d.ts.map +1 -1
- package/dist/data/query/utils.js.map +1 -1
- package/dist/infra/credits/schema.d.ts +1 -1
- package/dist/test/plugin.d.ts.map +1 -1
- package/dist/test/plugin.js +10 -4
- package/dist/test/plugin.js.map +1 -1
- 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,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps a statement observer from widening what a query error serializes.
|
|
3
|
+
*
|
|
4
|
+
* postgres.js defines `stack`/`query`/`parameters`/`args`/`types` on every
|
|
5
|
+
* query error it raises, and makes them ENUMERABLE exactly when its `debug`
|
|
6
|
+
* option is truthy (`connection.js`, `queryError`). Pipework sets `debug` to
|
|
7
|
+
* install a per-statement observer — so, absent this boundary, merely observing
|
|
8
|
+
* statements would start leaking bind parameters into every log drain that
|
|
9
|
+
* serializes errors. Observation must not change what an error exposes.
|
|
10
|
+
*
|
|
11
|
+
* Why this is a closed set rather than a best-effort sweep: enumerability only
|
|
12
|
+
* changes where `debug` is truthy, and only three sites in pipework construct a
|
|
13
|
+
* connection carrying the observer — `createManagedConnection`,
|
|
14
|
+
* `createIsolatedConnection`, and `createSetupConnection`. Every other
|
|
15
|
+
* `postgres()` in the codebase (migrations, CLI, startup validation, reaper,
|
|
16
|
+
* `tap()`) leaves `debug` unset, so its errors keep these fields
|
|
17
|
+
* non-enumerable already and need no treatment.
|
|
18
|
+
*
|
|
19
|
+
* The one gap, deliberate and announced: `ManagedConnection.client` is the
|
|
20
|
+
* sanctioned raw-driver door, and errors from queries issued through it do not
|
|
21
|
+
* pass this boundary. Reading `.client` on an observed connection logs a
|
|
22
|
+
* one-time warning saying so. Wrapping the `Sql` to close that gap was
|
|
23
|
+
* considered and REJECTED: it means proxying a callable tagged-template whose
|
|
24
|
+
* `begin`/`savepoint` hand out fresh client instances needing recursive
|
|
25
|
+
* re-wrapping, on the hottest path in the system — more risk than the narrow,
|
|
26
|
+
* documented gap it would close. Do not "clean this up" by adding one.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* postgres.js properties whose enumerability its `debug` option flips — all
|
|
31
|
+
* five defined in one `Object.defineProperties` call, so requiring the whole
|
|
32
|
+
* set is a precise signature for "this error was decorated by the driver".
|
|
33
|
+
* `stack` is included because an enumerable own `stack` is itself a departure
|
|
34
|
+
* from ordinary Error semantics, and it carries the query origin.
|
|
35
|
+
*/
|
|
36
|
+
const DRIVER_ADDED_FIELDS = ['stack', 'query', 'parameters', 'args', 'types'] as const
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Connections whose `debug` hook exists ONLY to drive a statement observer.
|
|
40
|
+
* Keyed on the options object, which is stable for the lifetime of one
|
|
41
|
+
* `postgres()` client. `logAllQueries` connections are deliberately absent:
|
|
42
|
+
* that mode already opted into verbose errors, and its behavior is unchanged.
|
|
43
|
+
*/
|
|
44
|
+
const observedOptions = new WeakSet<object>()
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The identity a client is tracked under: its options object where it has one,
|
|
48
|
+
* else the client itself. Transaction- and savepoint-scoped clients — the ones
|
|
49
|
+
* postgres.js hands to a `begin`/`savepoint` callback — expose no `options`, so
|
|
50
|
+
* they are tracked directly and marked by `propagateObserved` as they are made.
|
|
51
|
+
*/
|
|
52
|
+
function identity(client: unknown): object | undefined {
|
|
53
|
+
if (client === null || typeof client !== 'object' && typeof client !== 'function') return undefined
|
|
54
|
+
const options = (client as { options?: unknown }).options
|
|
55
|
+
return typeof options === 'object' && options !== null ? options : (client as object)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Records that this client's `debug` hook came from a statement observer alone. */
|
|
59
|
+
export function markObservedConnection(client: unknown): void {
|
|
60
|
+
const key = identity(client)
|
|
61
|
+
if (key !== undefined) observedOptions.add(key)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** True when this client's `debug` hook came from a statement observer alone. */
|
|
65
|
+
export function isObservedConnection(client: unknown): boolean {
|
|
66
|
+
const key = identity(client)
|
|
67
|
+
return key !== undefined && observedOptions.has(key)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Carries observed-ness onto a transaction- or savepoint-scoped client. */
|
|
71
|
+
export function propagateObserved(from: unknown, to: unknown): void {
|
|
72
|
+
if (isObservedConnection(from)) markObservedConnection(to)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Identifies an error postgres.js decorated because `debug` was installed.
|
|
77
|
+
* Keyed on the full set it adds together, so drizzle's own wrapper — which
|
|
78
|
+
* carries `query` and `params` but never `parameters`/`args`/`types` — is left
|
|
79
|
+
* alone. That wrapper's exposure predates this feature and is not ours to
|
|
80
|
+
* change here.
|
|
81
|
+
*/
|
|
82
|
+
function hasDriverAddedFields(err: Error): boolean {
|
|
83
|
+
return DRIVER_ADDED_FIELDS.every(field => {
|
|
84
|
+
const descriptor = Object.getOwnPropertyDescriptor(err, field)
|
|
85
|
+
return descriptor?.enumerable === true
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* postgres.js defines these with `Object.defineProperties` and no descriptor
|
|
91
|
+
* flags, which makes them non-configurable — their enumerability cannot be
|
|
92
|
+
* flipped in place. So the error is rebuilt: same prototype, same own
|
|
93
|
+
* properties and values, with the driver-added four defined non-enumerable.
|
|
94
|
+
* `instanceof`, `message`, `stack`, `code` and every server field survive; only
|
|
95
|
+
* what a serializer walks changes.
|
|
96
|
+
*/
|
|
97
|
+
function withDriverFieldsHidden(err: Error): Error {
|
|
98
|
+
const clone = Object.create(Object.getPrototypeOf(err) as object) as Error
|
|
99
|
+
for (const key of Reflect.ownKeys(err)) {
|
|
100
|
+
const descriptor = Object.getOwnPropertyDescriptor(err, key)!
|
|
101
|
+
const hide = typeof key === 'string' && (DRIVER_ADDED_FIELDS as readonly string[]).includes(key)
|
|
102
|
+
Object.defineProperty(clone, key, hide ? { ...descriptor, enumerable: false, configurable: true } : descriptor)
|
|
103
|
+
}
|
|
104
|
+
return clone
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Returns the error to propagate with the driver-added fields hidden from
|
|
109
|
+
* serialization, following `cause` because the driver error usually arrives
|
|
110
|
+
* wrapped by drizzle. Returns the original untouched when there is nothing to
|
|
111
|
+
* hide.
|
|
112
|
+
*/
|
|
113
|
+
export function withoutDriverAddedFields(err: unknown): unknown {
|
|
114
|
+
if (!(err instanceof Error)) return err
|
|
115
|
+
|
|
116
|
+
const root = hasDriverAddedFields(err) ? withDriverFieldsHidden(err) : err
|
|
117
|
+
|
|
118
|
+
for (let current: Error = root, depth = 0; depth < 8; depth++) {
|
|
119
|
+
const cause: unknown = current.cause
|
|
120
|
+
if (!(cause instanceof Error)) break
|
|
121
|
+
|
|
122
|
+
if (hasDriverAddedFields(cause)) {
|
|
123
|
+
const hidden = withDriverFieldsHidden(cause)
|
|
124
|
+
const descriptor = Object.getOwnPropertyDescriptor(current, 'cause')
|
|
125
|
+
if (descriptor?.writable === true || descriptor?.configurable === true) {
|
|
126
|
+
Object.defineProperty(current, 'cause', { ...descriptor, value: hidden })
|
|
127
|
+
}
|
|
128
|
+
current = hidden
|
|
129
|
+
} else {
|
|
130
|
+
current = cause
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return root
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Runs driver work, hiding the fields postgres.js only exposed because a
|
|
139
|
+
* statement observer is attached. Pure pass-through when the connection is not
|
|
140
|
+
* observed, and never alters the error itself — only what it serializes.
|
|
141
|
+
*/
|
|
142
|
+
export async function throughErrorBoundary<T>(client: unknown, run: () => Promise<T>): Promise<T> {
|
|
143
|
+
if (!isObservedConnection(client)) return run()
|
|
144
|
+
try {
|
|
145
|
+
return await run()
|
|
146
|
+
} catch (err) {
|
|
147
|
+
throw withoutDriverAddedFields(err)
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import pgClient, { type Options, type PostgresType, type Sql } from 'postgres';
|
|
2
|
+
import { parseArrayLiteral } from './array-parser.js';
|
|
3
|
+
import { entityKind } from '../entity.js';
|
|
4
|
+
import { DefaultLogger } from '../logger.js';
|
|
5
|
+
import { PgDatabase } from '../pg-core/db.js';
|
|
6
|
+
import { PgDialect } from '../pg-core/dialect.js';
|
|
7
|
+
import {
|
|
8
|
+
createTableRelationsHelpers,
|
|
9
|
+
extractTablesRelationalConfig,
|
|
10
|
+
type RelationalSchemaConfig,
|
|
11
|
+
type TablesRelationalConfig,
|
|
12
|
+
} from '../relations.js';
|
|
13
|
+
import { type DrizzleConfig, isConfig } from '../utils.js';
|
|
14
|
+
import type { PostgresJsQueryResultHKT } from './session.js';
|
|
15
|
+
import { PostgresJsSession } from './session.js';
|
|
16
|
+
|
|
17
|
+
export class PostgresJsDatabase<
|
|
18
|
+
TSchema extends Record<string, unknown> = Record<string, never>,
|
|
19
|
+
> extends PgDatabase<PostgresJsQueryResultHKT, TSchema> {
|
|
20
|
+
static override readonly [entityKind]: string = 'PostgresJsDatabase';
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const arrayParserInstalled = Symbol('arrayParserInstalled');
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* postgres.js builds each array type's parser as it learns the type (`addArrayType`) and records it in
|
|
27
|
+
* `options.shared.typeArrayMap`, which it reads fresh each time. Watching that map lets us pin our own
|
|
28
|
+
* array parser (unquoted NULL -> null) for every array type, enums and domains included.
|
|
29
|
+
*/
|
|
30
|
+
function installArrayParser(client: Sql): void {
|
|
31
|
+
const shared = (client.options as any).shared as { typeArrayMap?: Record<number, number> } | undefined;
|
|
32
|
+
const parsers = client.options.parsers as Record<number, any>;
|
|
33
|
+
if (!shared?.typeArrayMap || (shared.typeArrayMap as any)[arrayParserInstalled]) return;
|
|
34
|
+
const known = shared.typeArrayMap;
|
|
35
|
+
shared.typeArrayMap = new Proxy(known, {
|
|
36
|
+
get: (target, key, receiver) => (key === arrayParserInstalled ? true : Reflect.get(target, key, receiver)),
|
|
37
|
+
set(target, key, typarray) {
|
|
38
|
+
target[key as any] = typarray;
|
|
39
|
+
const element = parsers[Number(key)];
|
|
40
|
+
const delimiter = typarray === 1020 ? ';' : ',';
|
|
41
|
+
const parse: any = (xs: string) => parseArrayLiteral(xs, element, delimiter);
|
|
42
|
+
parse.array = true;
|
|
43
|
+
// the driver assigns its own parser right after this; keep ours
|
|
44
|
+
Object.defineProperty(parsers, typarray, { get: () => parse, set: () => {}, enumerable: true, configurable: true });
|
|
45
|
+
return true;
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function construct<TSchema extends Record<string, unknown> = Record<string, never>>(
|
|
51
|
+
client: Sql,
|
|
52
|
+
config: DrizzleConfig<TSchema> = {},
|
|
53
|
+
): PostgresJsDatabase<TSchema> & {
|
|
54
|
+
$client: Sql;
|
|
55
|
+
} {
|
|
56
|
+
const transparentParser = (val: any) => val;
|
|
57
|
+
|
|
58
|
+
// Override postgres.js default date parsers: https://github.com/porsager/postgres/discussions/761
|
|
59
|
+
for (const type of ['1184', '1082', '1083', '1114', '1182', '1185', '1115', '1231']) {
|
|
60
|
+
// 1231 (numeric[]) is left to the driver's array parser so a NULL element reads as null, not the text '{..,NULL}'.
|
|
61
|
+
if (type !== '1231') client.options.parsers[type as any] = transparentParser;
|
|
62
|
+
client.options.serializers[type as any] = transparentParser;
|
|
63
|
+
}
|
|
64
|
+
installArrayParser(client);
|
|
65
|
+
client.options.serializers['114'] = transparentParser;
|
|
66
|
+
client.options.serializers['3802'] = transparentParser;
|
|
67
|
+
|
|
68
|
+
const dialect = new PgDialect({ casing: config.casing });
|
|
69
|
+
let logger;
|
|
70
|
+
if (config.logger === true) {
|
|
71
|
+
logger = new DefaultLogger();
|
|
72
|
+
} else if (config.logger !== false) {
|
|
73
|
+
logger = config.logger;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
let schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;
|
|
77
|
+
if (config.schema) {
|
|
78
|
+
const tablesConfig = extractTablesRelationalConfig(
|
|
79
|
+
config.schema,
|
|
80
|
+
createTableRelationsHelpers,
|
|
81
|
+
);
|
|
82
|
+
schema = {
|
|
83
|
+
fullSchema: config.schema,
|
|
84
|
+
schema: tablesConfig.tables,
|
|
85
|
+
tableNamesMap: tablesConfig.tableNamesMap,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const session = new PostgresJsSession(client, dialect, schema, { logger, cache: config.cache, watch: config.statementWatch });
|
|
90
|
+
const db = new PostgresJsDatabase(dialect, session, schema as any) as PostgresJsDatabase<TSchema>;
|
|
91
|
+
(<any> db).$client = client;
|
|
92
|
+
(<any> db).$cache = config.cache;
|
|
93
|
+
if ((<any> db).$cache) {
|
|
94
|
+
(<any> db).$cache['invalidate'] = config.cache?.onMutate;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return db as any;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function drizzle<
|
|
101
|
+
TSchema extends Record<string, unknown> = Record<string, never>,
|
|
102
|
+
TClient extends Sql = Sql,
|
|
103
|
+
>(
|
|
104
|
+
...params: [
|
|
105
|
+
TClient | string,
|
|
106
|
+
] | [
|
|
107
|
+
TClient | string,
|
|
108
|
+
DrizzleConfig<TSchema>,
|
|
109
|
+
] | [
|
|
110
|
+
(
|
|
111
|
+
& DrizzleConfig<TSchema>
|
|
112
|
+
& ({
|
|
113
|
+
connection: string | ({ url?: string } & Options<Record<string, PostgresType>>);
|
|
114
|
+
} | {
|
|
115
|
+
client: TClient;
|
|
116
|
+
})
|
|
117
|
+
),
|
|
118
|
+
]
|
|
119
|
+
): PostgresJsDatabase<TSchema> & {
|
|
120
|
+
$client: TClient;
|
|
121
|
+
} {
|
|
122
|
+
if (typeof params[0] === 'string') {
|
|
123
|
+
const instance = pgClient(params[0] as string);
|
|
124
|
+
|
|
125
|
+
return construct(instance, params[1]) as any;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (isConfig(params[0])) {
|
|
129
|
+
const { connection, client, ...drizzleConfig } = params[0] as {
|
|
130
|
+
connection?: { url?: string } & Options<Record<string, PostgresType>>;
|
|
131
|
+
client?: TClient;
|
|
132
|
+
} & DrizzleConfig<TSchema>;
|
|
133
|
+
|
|
134
|
+
if (client) return construct(client, drizzleConfig) as any;
|
|
135
|
+
|
|
136
|
+
if (typeof connection === 'object' && connection.url !== undefined) {
|
|
137
|
+
const { url, ...config } = connection;
|
|
138
|
+
|
|
139
|
+
const instance = pgClient(url, config);
|
|
140
|
+
return construct(instance, drizzleConfig) as any;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const instance = pgClient(connection);
|
|
144
|
+
return construct(instance, drizzleConfig) as any;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export namespace drizzle {
|
|
151
|
+
export function mock<TSchema extends Record<string, unknown> = Record<string, never>>(
|
|
152
|
+
config?: DrizzleConfig<TSchema>,
|
|
153
|
+
): PostgresJsDatabase<TSchema> & {
|
|
154
|
+
$client: '$client is not available on drizzle.mock()';
|
|
155
|
+
} {
|
|
156
|
+
return construct({
|
|
157
|
+
options: {
|
|
158
|
+
parsers: {},
|
|
159
|
+
serializers: {},
|
|
160
|
+
},
|
|
161
|
+
} as any, config) as any;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import type { Row, RowList, Sql, TransactionSql } from 'postgres';
|
|
2
|
+
import { type Cache, NoopCache } from '../cache/core/index.js';
|
|
3
|
+
import type { WithCacheConfig } from '../cache/core/types.js';
|
|
4
|
+
import { entityKind } from '../entity.js';
|
|
5
|
+
import type { Logger } from '../logger.js';
|
|
6
|
+
import { NoopLogger } from '../logger.js';
|
|
7
|
+
import type { PgDialect } from '../pg-core/dialect.js';
|
|
8
|
+
import { PgTransaction } from '../pg-core/index.js';
|
|
9
|
+
import type { SelectedFieldsOrdered } from '../pg-core/query-builders/select.types.js';
|
|
10
|
+
import type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '../pg-core/session.js';
|
|
11
|
+
import { PgPreparedQuery, PgSession } from '../pg-core/session.js';
|
|
12
|
+
import type { RelationalSchemaConfig, TablesRelationalConfig } from '../relations.js';
|
|
13
|
+
import { fillPlaceholders, type Query } from '../sql/sql.js';
|
|
14
|
+
import { tracer } from '../tracing.js';
|
|
15
|
+
import { type Assume, mapResultRow } from '../utils.js';
|
|
16
|
+
import { propagateObserved, throughErrorBoundary } from './driver-error-boundary.js';
|
|
17
|
+
|
|
18
|
+
/** Wraps one statement's execution; installed by the pool to time it and report it while it runs. */
|
|
19
|
+
export type StatementWatch = <T>(query: string, run: () => Promise<T>) => Promise<T>;
|
|
20
|
+
|
|
21
|
+
function watched<T>(watch: StatementWatch | undefined, query: string, run: () => Promise<T>): Promise<T> {
|
|
22
|
+
return watch === undefined ? run() : watch(query, run);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class PostgresJsPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
|
26
|
+
static override readonly [entityKind]: string = 'PostgresJsPreparedQuery';
|
|
27
|
+
|
|
28
|
+
constructor(
|
|
29
|
+
private client: Sql,
|
|
30
|
+
private queryString: string,
|
|
31
|
+
private params: unknown[],
|
|
32
|
+
private logger: Logger,
|
|
33
|
+
cache: Cache,
|
|
34
|
+
queryMetadata: {
|
|
35
|
+
type: 'select' | 'update' | 'delete' | 'insert';
|
|
36
|
+
tables: string[];
|
|
37
|
+
} | undefined,
|
|
38
|
+
cacheConfig: WithCacheConfig | undefined,
|
|
39
|
+
private fields: SelectedFieldsOrdered | undefined,
|
|
40
|
+
private _isResponseInArrayMode: boolean,
|
|
41
|
+
private customResultMapper?: (rows: unknown[][]) => T['execute'],
|
|
42
|
+
private watch?: StatementWatch,
|
|
43
|
+
) {
|
|
44
|
+
super({ sql: queryString, params }, cache, queryMetadata, cacheConfig);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {
|
|
48
|
+
return tracer.startActiveSpan('drizzle.execute', async (span) => {
|
|
49
|
+
const params = fillPlaceholders(this.params, placeholderValues);
|
|
50
|
+
|
|
51
|
+
span?.setAttributes({
|
|
52
|
+
'drizzle.query.text': this.queryString,
|
|
53
|
+
'drizzle.query.params': JSON.stringify(params),
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
this.logger.logQuery(this.queryString, params);
|
|
57
|
+
|
|
58
|
+
const { fields, queryString: query, client, joinsNotNullableMap, customResultMapper, watch } = this;
|
|
59
|
+
if (!fields && !customResultMapper) {
|
|
60
|
+
return tracer.startActiveSpan('drizzle.driver.execute', () => {
|
|
61
|
+
return throughErrorBoundary(client, () => watched(watch, query, () => this.queryWithCache(query, params, async () => {
|
|
62
|
+
return await client.unsafe(query, params as any[]);
|
|
63
|
+
})));
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const rows = await tracer.startActiveSpan('drizzle.driver.execute', () => {
|
|
68
|
+
span?.setAttributes({
|
|
69
|
+
'drizzle.query.text': query,
|
|
70
|
+
'drizzle.query.params': JSON.stringify(params),
|
|
71
|
+
});
|
|
72
|
+
return throughErrorBoundary(client, () => watched(watch, query, () => this.queryWithCache(query, params, async () => {
|
|
73
|
+
return await client.unsafe(query, params as any[]).values();
|
|
74
|
+
})));
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
return tracer.startActiveSpan('drizzle.mapResponse', () => {
|
|
78
|
+
return customResultMapper
|
|
79
|
+
? customResultMapper(rows)
|
|
80
|
+
: rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
all(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {
|
|
86
|
+
return tracer.startActiveSpan('drizzle.execute', async (span) => {
|
|
87
|
+
const params = fillPlaceholders(this.params, placeholderValues);
|
|
88
|
+
span?.setAttributes({
|
|
89
|
+
'drizzle.query.text': this.queryString,
|
|
90
|
+
'drizzle.query.params': JSON.stringify(params),
|
|
91
|
+
});
|
|
92
|
+
this.logger.logQuery(this.queryString, params);
|
|
93
|
+
return tracer.startActiveSpan('drizzle.driver.execute', () => {
|
|
94
|
+
span?.setAttributes({
|
|
95
|
+
'drizzle.query.text': this.queryString,
|
|
96
|
+
'drizzle.query.params': JSON.stringify(params),
|
|
97
|
+
});
|
|
98
|
+
return throughErrorBoundary(this.client, () => watched(this.watch, this.queryString, () => this.queryWithCache(this.queryString, params, async () => {
|
|
99
|
+
return this.client.unsafe(this.queryString, params as any[]);
|
|
100
|
+
})));
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** @internal */
|
|
106
|
+
isResponseInArrayMode(): boolean {
|
|
107
|
+
return this._isResponseInArrayMode;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface PostgresJsSessionOptions {
|
|
112
|
+
logger?: Logger | undefined;
|
|
113
|
+
cache?: Cache | undefined;
|
|
114
|
+
watch?: StatementWatch | undefined;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export class PostgresJsSession<
|
|
118
|
+
TSQL extends Sql,
|
|
119
|
+
TFullSchema extends Record<string, unknown>,
|
|
120
|
+
TSchema extends TablesRelationalConfig,
|
|
121
|
+
> extends PgSession<PostgresJsQueryResultHKT, TFullSchema, TSchema> {
|
|
122
|
+
static override readonly [entityKind]: string = 'PostgresJsSession';
|
|
123
|
+
|
|
124
|
+
logger: Logger;
|
|
125
|
+
private cache: Cache;
|
|
126
|
+
|
|
127
|
+
constructor(
|
|
128
|
+
public client: TSQL,
|
|
129
|
+
dialect: PgDialect,
|
|
130
|
+
private schema: RelationalSchemaConfig<TSchema> | undefined,
|
|
131
|
+
/** @internal */
|
|
132
|
+
readonly options: PostgresJsSessionOptions = {},
|
|
133
|
+
) {
|
|
134
|
+
super(dialect);
|
|
135
|
+
this.logger = options.logger ?? new NoopLogger();
|
|
136
|
+
this.cache = options.cache ?? new NoopCache();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(
|
|
140
|
+
query: Query,
|
|
141
|
+
fields: SelectedFieldsOrdered | undefined,
|
|
142
|
+
name: string | undefined,
|
|
143
|
+
isResponseInArrayMode: boolean,
|
|
144
|
+
customResultMapper?: (rows: unknown[][]) => T['execute'],
|
|
145
|
+
queryMetadata?: {
|
|
146
|
+
type: 'select' | 'update' | 'delete' | 'insert';
|
|
147
|
+
tables: string[];
|
|
148
|
+
},
|
|
149
|
+
cacheConfig?: WithCacheConfig,
|
|
150
|
+
): PgPreparedQuery<T> {
|
|
151
|
+
return new PostgresJsPreparedQuery(
|
|
152
|
+
this.client,
|
|
153
|
+
query.sql,
|
|
154
|
+
query.params,
|
|
155
|
+
this.logger,
|
|
156
|
+
this.cache,
|
|
157
|
+
queryMetadata,
|
|
158
|
+
cacheConfig,
|
|
159
|
+
fields,
|
|
160
|
+
isResponseInArrayMode,
|
|
161
|
+
customResultMapper,
|
|
162
|
+
this.options.watch,
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
query(query: string, params: unknown[]): Promise<RowList<Row[]>> {
|
|
167
|
+
this.logger.logQuery(query, params);
|
|
168
|
+
return throughErrorBoundary(this.client, () => watched(this.options.watch, query, () => this.client.unsafe(query, params as any[]).values()));
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
queryObjects<T extends Row>(
|
|
172
|
+
query: string,
|
|
173
|
+
params: unknown[],
|
|
174
|
+
): Promise<RowList<T[]>> {
|
|
175
|
+
return throughErrorBoundary(this.client, () => watched(this.options.watch, query, () => this.client.unsafe(query, params as any[])));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
override transaction<T>(
|
|
179
|
+
transaction: (tx: PostgresJsTransaction<TFullSchema, TSchema>) => Promise<T>,
|
|
180
|
+
config?: PgTransactionConfig,
|
|
181
|
+
): Promise<T> {
|
|
182
|
+
return throughErrorBoundary(this.client, () => this.client.begin(async (client) => {
|
|
183
|
+
propagateObserved(this.client, client);
|
|
184
|
+
const session = new PostgresJsSession<Sql, TFullSchema, TSchema>(
|
|
185
|
+
client as unknown as Sql,
|
|
186
|
+
this.dialect,
|
|
187
|
+
this.schema,
|
|
188
|
+
this.options,
|
|
189
|
+
);
|
|
190
|
+
const tx = new PostgresJsTransaction(this.dialect, session, this.schema);
|
|
191
|
+
if (config) {
|
|
192
|
+
await tx.setTransaction(config);
|
|
193
|
+
}
|
|
194
|
+
return transaction(tx);
|
|
195
|
+
})) as Promise<T>;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export class PostgresJsTransaction<
|
|
200
|
+
TFullSchema extends Record<string, unknown>,
|
|
201
|
+
TSchema extends TablesRelationalConfig,
|
|
202
|
+
> extends PgTransaction<PostgresJsQueryResultHKT, TFullSchema, TSchema> {
|
|
203
|
+
static override readonly [entityKind]: string = 'PostgresJsTransaction';
|
|
204
|
+
|
|
205
|
+
constructor(
|
|
206
|
+
dialect: PgDialect,
|
|
207
|
+
/** @internal */
|
|
208
|
+
override readonly session: PostgresJsSession<Sql, TFullSchema, TSchema>,
|
|
209
|
+
schema: RelationalSchemaConfig<TSchema> | undefined,
|
|
210
|
+
nestedIndex = 0,
|
|
211
|
+
) {
|
|
212
|
+
super(dialect, session, schema, nestedIndex);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
override transaction<T>(
|
|
216
|
+
transaction: (tx: PostgresJsTransaction<TFullSchema, TSchema>) => Promise<T>,
|
|
217
|
+
): Promise<T> {
|
|
218
|
+
return throughErrorBoundary(this.session.client, () => (this.session.client as unknown as TransactionSql).savepoint((client) => {
|
|
219
|
+
propagateObserved(this.session.client, client);
|
|
220
|
+
const session = new PostgresJsSession<Sql, TFullSchema, TSchema>(
|
|
221
|
+
client as unknown as Sql,
|
|
222
|
+
this.dialect,
|
|
223
|
+
this.schema,
|
|
224
|
+
this.session.options,
|
|
225
|
+
);
|
|
226
|
+
const tx = new PostgresJsTransaction<TFullSchema, TSchema>(this.dialect, session, this.schema);
|
|
227
|
+
return transaction(tx);
|
|
228
|
+
})) as Promise<T>;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export interface PostgresJsQueryResultHKT extends PgQueryResultHKT {
|
|
233
|
+
type: RowList<Assume<this['row'], Row>[]>;
|
|
234
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { entityKind } from './entity.js';
|
|
2
|
+
import type { AnyColumn } from './column.js';
|
|
3
|
+
import type { Table } from './table.js';
|
|
4
|
+
|
|
5
|
+
export abstract class PrimaryKey {
|
|
6
|
+
static readonly [entityKind]: string = 'PrimaryKey';
|
|
7
|
+
|
|
8
|
+
declare protected $brand: 'PrimaryKey';
|
|
9
|
+
|
|
10
|
+
constructor(readonly table: Table, readonly columns: AnyColumn[]) {}
|
|
11
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { entityKind } from '../entity.js';
|
|
2
|
+
import type { SQL, SQLWrapper } from '../sql/index.js';
|
|
3
|
+
|
|
4
|
+
export abstract class TypedQueryBuilder<TSelection, TResult = unknown, TConfig = unknown> implements SQLWrapper {
|
|
5
|
+
static readonly [entityKind]: string = 'TypedQueryBuilder';
|
|
6
|
+
|
|
7
|
+
declare _: {
|
|
8
|
+
selectedFields: TSelection;
|
|
9
|
+
result: TResult;
|
|
10
|
+
config?: TConfig;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/** @internal */
|
|
14
|
+
getSelectedFields(): TSelection {
|
|
15
|
+
return this._.selectedFields;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
abstract getSQL(): SQL;
|
|
19
|
+
}
|