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,230 @@
|
|
|
1
|
+
## Caching with Drizzle
|
|
2
|
+
|
|
3
|
+
By default, Drizzle does not perform any implicit actions with your queries and mapping. There is no cache under the hood—each query is sent directly to your database, and you can actually see it.
|
|
4
|
+
|
|
5
|
+
However, there are cases when you might want to implement a simple caching logic for specific queries or even for all queries. With Drizzle's cache option, you can define how and when the cache is used, how you store and retrieve data, and what actions to take when write statements are executed on the database. It's basically similar to `beforeQuery` hooks, that will be invoked before actual query will be executed. Additionally, Drizzle provides predefined logic for caching. Let's take a look at it.
|
|
6
|
+
|
|
7
|
+
To make cache work you would need to define cache callbacks in drizzle instance or use a predefined ones we have in Drizzle, like a `upstashCache()` that was built together with Upstash team
|
|
8
|
+
|
|
9
|
+
### Cache overview
|
|
10
|
+
|
|
11
|
+
**Using upstash cache with drizzle**
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
const db = drizzle(process.env.DB_URL!, { cache: upstashCache() })
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
You can also define custom logic for your cache behavior. This is an example of our NodeKV implementation for the Drizzle cache test suites
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
const db = drizzle(process.env.DB_URL!, { cache: new TestGlobalCache() })
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import Keyv from 'keyv';
|
|
25
|
+
|
|
26
|
+
export class TestGlobalCache extends Cache {
|
|
27
|
+
private globalTtl: number = 1000;
|
|
28
|
+
// This object will be used to store which query keys were used
|
|
29
|
+
// for a specific table, so we can later use it for invalidation.
|
|
30
|
+
private usedTablesPerKey: Record<string, string[]> = {};
|
|
31
|
+
|
|
32
|
+
constructor(private kv: Keyv = new Keyv()) {
|
|
33
|
+
super();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// For the strategy, we have two options:
|
|
37
|
+
// - 'explicit': The cache is used only when .$withCache() is added to a query.
|
|
38
|
+
// - 'all': All queries are cached globally.
|
|
39
|
+
// The default behavior is 'explicit'.
|
|
40
|
+
override strategy(): 'explicit' | 'all' {
|
|
41
|
+
return 'all';
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// This function accepts query and parameters that cached into key param,
|
|
45
|
+
// allowing you to retrieve response values for this query from the cache.
|
|
46
|
+
override async get(key: string): Promise<any[] | undefined> {
|
|
47
|
+
const res = await this.kv.get(key) ?? undefined;
|
|
48
|
+
return res;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// This function accepts several options to define how cached data will be stored:
|
|
52
|
+
// - 'key': A hashed query and parameters.
|
|
53
|
+
// - 'response': An array of values returned by Drizzle from the database.
|
|
54
|
+
// - 'tables': An array of tables involved in the select queries. This information is needed for cache invalidation.
|
|
55
|
+
//
|
|
56
|
+
// For example, if a query uses the "users" and "posts" tables, you can store this information. Later, when the app executes
|
|
57
|
+
// any mutation statements on these tables, you can remove the corresponding key from the cache.
|
|
58
|
+
// If you're okay with eventual consistency for your queries, you can skip this option.
|
|
59
|
+
override async put(key: string, response: any, tables: string[], config?: CacheConfig): Promise<void> {
|
|
60
|
+
await this.kv.set(key, response, config ? config.ex : this.globalTtl);
|
|
61
|
+
for (const table of tables) {
|
|
62
|
+
const keys = this.usedTablesPerKey[table];
|
|
63
|
+
if (keys === undefined) {
|
|
64
|
+
this.usedTablesPerKey[table] = [key];
|
|
65
|
+
} else {
|
|
66
|
+
keys.push(key);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// This function is called when insert, update, or delete statements are executed.
|
|
72
|
+
// You can either skip this step or invalidate queries that used the affected tables.
|
|
73
|
+
//
|
|
74
|
+
// The function receives an object with two keys:
|
|
75
|
+
// - 'tags': Used for queries labeled with a specific tag, allowing you to invalidate by that tag.
|
|
76
|
+
// - 'tables': The actual tables affected by the insert, update, or delete statements,
|
|
77
|
+
// helping you track which tables have changed since the last cache update.
|
|
78
|
+
override async onMutate(params: { tags: string | string[], tables: string | string[] | Table<any> | Table<any>[]}): Promise<void> {
|
|
79
|
+
const tagsArray = params.tags ? Array.isArray(params.tags) ? params.tags : [params.tags] : [];
|
|
80
|
+
const tablesArray = params.tables ? Array.isArray(params.tables) ? params.tables : [params.tables] : [];
|
|
81
|
+
|
|
82
|
+
const keysToDelete = new Set<string>();
|
|
83
|
+
|
|
84
|
+
for (const table of tablesArray) {
|
|
85
|
+
const tableName = is(table, Table) ? getTableName(table) : table as string;
|
|
86
|
+
const keys = this.usedTablesPerKey[tableName] ?? [];
|
|
87
|
+
for (const key of keys) keysToDelete.add(key);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (keysToDelete.size > 0 || tagsArray.length > 0) {
|
|
91
|
+
for (const tag of tagsArray) {
|
|
92
|
+
await this.kv.delete(tag);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
for (const key of keysToDelete) {
|
|
96
|
+
await this.kv.delete(key);
|
|
97
|
+
for (const table of tablesArray) {
|
|
98
|
+
const tableName = is(table, Table) ? getTableName(table) : table as string;
|
|
99
|
+
this.usedTablesPerKey[tableName] = [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Cache definition
|
|
108
|
+
|
|
109
|
+
**Define cache credentials, but no cache will be used globally for all queries**
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
const db = drizzle(process.env.DB_URL!, { cache: upstashCache({ url: '', token: '' }) })
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Define cache credentials, and the cache will be used globally for all queries**
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
const db = drizzle(process.env.DB_URL!, { cache: upstashCache({ url: '', token: '', global: true }) })
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Define cache credentials with custom config values to be used for all queries, unless overridden**
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
const db = drizzle(process.env.DB_URL!, { cache: upstashCache({ url: '', token: '', global: true, config: {} }) })
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
These are all the possible config values that Drizzle supports with the cache layer
|
|
128
|
+
|
|
129
|
+
```ts
|
|
130
|
+
export type CacheConfig = {
|
|
131
|
+
/**
|
|
132
|
+
* expire time, in seconds (a positive integer)
|
|
133
|
+
*/
|
|
134
|
+
ex?: number;
|
|
135
|
+
/**
|
|
136
|
+
* expire time, in milliseconds (a positive integer).
|
|
137
|
+
*/
|
|
138
|
+
px?: number;
|
|
139
|
+
/**
|
|
140
|
+
* Unix time at which the key will expire, in seconds (a positive integer).
|
|
141
|
+
*/
|
|
142
|
+
exat?: number;
|
|
143
|
+
/**
|
|
144
|
+
* Unix time at which the key will expire, in milliseconds (a positive integer)
|
|
145
|
+
*/
|
|
146
|
+
pxat?: number;
|
|
147
|
+
/**
|
|
148
|
+
* Retain the time to live associated with the key.
|
|
149
|
+
*/
|
|
150
|
+
keepTtl?: boolean;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Cache usage
|
|
156
|
+
|
|
157
|
+
Once you've provided all the necessary instructions to the Drizzle database instance, you can now use the cache with Drizzle
|
|
158
|
+
|
|
159
|
+
**Case 1: Drizzle with global: false option**
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
const db = drizzle(process.env.DB_URL!, { cache: upstashCache({ url: '', token: '' }) })
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
In this case, the current query won't use the cache
|
|
166
|
+
|
|
167
|
+
```ts
|
|
168
|
+
const res = await db.select().from(users)
|
|
169
|
+
|
|
170
|
+
// However, any mutate operation will trigger the onMutate function in the cache
|
|
171
|
+
// and attempt to invalidate queries that used the tables involved in this mutation query.
|
|
172
|
+
await db.insert(users).value({ email: 'cacheman@upstash.com' })
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
If you want the query to actually use the cache, you need to call `.$withCache()`
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
const res = await db.select().from(users).$withCache()
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
`.$withCache` has a set of options you can use to manage and config this specific query strategy
|
|
182
|
+
|
|
183
|
+
```ts
|
|
184
|
+
// rewrite the global config options for this specific query
|
|
185
|
+
.$withCache({ config: {} })
|
|
186
|
+
|
|
187
|
+
// give a query custom cache key instead of hashing query+params under the hood
|
|
188
|
+
.$withCache({ tag: 'custom_key' })
|
|
189
|
+
|
|
190
|
+
// disable autoinvalidation for this query, if you are fine with eventual consstnecy for this specific query
|
|
191
|
+
.$withCache({ autoInvalidate: false })
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Case 2: Drizzle with global: true option**
|
|
195
|
+
|
|
196
|
+
```ts
|
|
197
|
+
const db = drizzle(process.env.DB_URL!, { cache: upstashCache({ url: '', token: '', global: true }) })
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
In this case, the current query will use the cache
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
const res = await db.select().from(users)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
If you want the query to disable cache for some specific query, you need to call `.$withCache(false)`
|
|
207
|
+
|
|
208
|
+
```ts
|
|
209
|
+
// cache is disabled for this query
|
|
210
|
+
const res = await db.select().from(users).$withCache(false)
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
You can also use cache instance from a `db` to force invalidate specific tables or tags you've defined previously
|
|
214
|
+
|
|
215
|
+
```ts
|
|
216
|
+
// Invalidate all queries that use the `users` table. You can do this with the Drizzle instance.
|
|
217
|
+
await db.$cache?.invalidate({ tables: users });
|
|
218
|
+
// or
|
|
219
|
+
await db.$cache?.invalidate({ tables: [users, posts] });
|
|
220
|
+
|
|
221
|
+
// Invalidate all queries that use the `usersTable`. You can do this by using just the table name.
|
|
222
|
+
await db.$cache?.invalidate({ tables: 'usersTable' });
|
|
223
|
+
// or
|
|
224
|
+
await db.$cache?.invalidate({ tables: ['usersTable' , 'postsTable' ] });
|
|
225
|
+
|
|
226
|
+
// You can also invalidate custom tags defined in any previously executed select queries.
|
|
227
|
+
await db.$cache?.invalidate({ tags: 'custom_key' });
|
|
228
|
+
// or
|
|
229
|
+
await db.$cache?.invalidate({ tags: ['custom_key', 'custom_key1'] });
|
|
230
|
+
```
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Column } from './column.js';
|
|
2
|
+
import { entityKind } from './entity.js';
|
|
3
|
+
import { Table } from './table.js';
|
|
4
|
+
import type { Casing } from './utils.js';
|
|
5
|
+
|
|
6
|
+
export function toSnakeCase(input: string) {
|
|
7
|
+
const words = input
|
|
8
|
+
.replace(/['\u2019]/g, '')
|
|
9
|
+
.match(/[\da-z]+|[A-Z]+(?![a-z])|[A-Z][\da-z]+/g) ?? [];
|
|
10
|
+
|
|
11
|
+
return words.map((word) => word.toLowerCase()).join('_');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function toCamelCase(input: string) {
|
|
15
|
+
const words = input
|
|
16
|
+
.replace(/['\u2019]/g, '')
|
|
17
|
+
.match(/[\da-z]+|[A-Z]+(?![a-z])|[A-Z][\da-z]+/g) ?? [];
|
|
18
|
+
|
|
19
|
+
return words.reduce((acc, word, i) => {
|
|
20
|
+
const formattedWord = i === 0 ? word.toLowerCase() : `${word[0]!.toUpperCase()}${word.slice(1)}`;
|
|
21
|
+
return acc + formattedWord;
|
|
22
|
+
}, '');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function noopCase(input: string) {
|
|
26
|
+
return input;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export class CasingCache {
|
|
30
|
+
static readonly [entityKind]: string = 'CasingCache';
|
|
31
|
+
|
|
32
|
+
/** @internal */
|
|
33
|
+
cache: Record<string, string> = {};
|
|
34
|
+
private cachedTables: Record<string, true> = {};
|
|
35
|
+
private convert: (input: string) => string;
|
|
36
|
+
|
|
37
|
+
constructor(casing?: Casing) {
|
|
38
|
+
this.convert = casing === 'snake_case'
|
|
39
|
+
? toSnakeCase
|
|
40
|
+
: casing === 'camelCase'
|
|
41
|
+
? toCamelCase
|
|
42
|
+
: noopCase;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
getColumnCasing(column: Column): string {
|
|
46
|
+
if (!column.keyAsName) return column.name;
|
|
47
|
+
|
|
48
|
+
const schema = column.table[Table.Symbol.Schema] ?? 'public';
|
|
49
|
+
const tableName = column.table[Table.Symbol.OriginalName];
|
|
50
|
+
const key = `${schema}.${tableName}.${column.name}`;
|
|
51
|
+
|
|
52
|
+
if (!this.cache[key]) {
|
|
53
|
+
this.cacheTable(column.table);
|
|
54
|
+
}
|
|
55
|
+
return this.cache[key]!;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private cacheTable(table: Table) {
|
|
59
|
+
const schema = table[Table.Symbol.Schema] ?? 'public';
|
|
60
|
+
const tableName = table[Table.Symbol.OriginalName];
|
|
61
|
+
const tableKey = `${schema}.${tableName}`;
|
|
62
|
+
|
|
63
|
+
if (!this.cachedTables[tableKey]) {
|
|
64
|
+
for (const column of Object.values(table[Table.Symbol.Columns])) {
|
|
65
|
+
const columnKey = `${tableKey}.${column.name}`;
|
|
66
|
+
this.cache[columnKey] = this.convert(column.name);
|
|
67
|
+
}
|
|
68
|
+
this.cachedTables[tableKey] = true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
clearCache() {
|
|
73
|
+
this.cache = {};
|
|
74
|
+
this.cachedTables = {};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** A collation: one identifier (`'en_US.utf8'`, dots included) or a schema-qualified `[schema, name]`. */
|
|
2
|
+
export type CollationName = string | readonly [schema: string, name: string]
|
|
3
|
+
|
|
4
|
+
function quoteIdent(name: string): string {
|
|
5
|
+
return `"${name.replace(/"/g, '""')}"`
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** The collation as SQL text: `"en_US.utf8"` or `"pg_catalog"."C"`. */
|
|
9
|
+
export function quoteCollation(name: CollationName): string {
|
|
10
|
+
return typeof name === 'string' ? quoteIdent(name) : `${quoteIdent(name[0])}.${quoteIdent(name[1])}`
|
|
11
|
+
}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
import { entityKind } from './entity.js';
|
|
2
|
+
import type { Column } from './column.js';
|
|
3
|
+
import type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.js';
|
|
4
|
+
import type { SQL } from './sql/sql.js';
|
|
5
|
+
import type { Assume, Simplify } from './utils.js';
|
|
6
|
+
|
|
7
|
+
export type ColumnDataType =
|
|
8
|
+
| 'string'
|
|
9
|
+
| 'number'
|
|
10
|
+
| 'boolean'
|
|
11
|
+
| 'array'
|
|
12
|
+
| 'json'
|
|
13
|
+
| 'date'
|
|
14
|
+
| 'bigint'
|
|
15
|
+
| 'custom'
|
|
16
|
+
| 'buffer'
|
|
17
|
+
| 'dateDuration'
|
|
18
|
+
| 'duration'
|
|
19
|
+
| 'relDuration'
|
|
20
|
+
| 'localTime'
|
|
21
|
+
| 'localDate'
|
|
22
|
+
| 'localDateTime';
|
|
23
|
+
|
|
24
|
+
export type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'common' | 'gel';
|
|
25
|
+
|
|
26
|
+
export type GeneratedStorageMode = 'virtual' | 'stored';
|
|
27
|
+
|
|
28
|
+
export type GeneratedType = 'always' | 'byDefault';
|
|
29
|
+
|
|
30
|
+
export type GeneratedColumnConfig<TDataType> = {
|
|
31
|
+
as: TDataType | SQL | (() => SQL);
|
|
32
|
+
type?: GeneratedType;
|
|
33
|
+
mode?: GeneratedStorageMode;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export type GeneratedIdentityConfig = {
|
|
37
|
+
sequenceName?: string | undefined;
|
|
38
|
+
sequenceOptions?: PgSequenceOptions;
|
|
39
|
+
type: 'always' | 'byDefault';
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export interface ColumnBuilderBaseConfig<TDataType extends ColumnDataType, TColumnType extends string> {
|
|
43
|
+
name: string;
|
|
44
|
+
dataType: TDataType;
|
|
45
|
+
columnType: TColumnType;
|
|
46
|
+
data: unknown;
|
|
47
|
+
driverParam: unknown;
|
|
48
|
+
enumValues: string[] | undefined;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type MakeColumnConfig<
|
|
52
|
+
T extends ColumnBuilderBaseConfig<ColumnDataType, string>,
|
|
53
|
+
TTableName extends string,
|
|
54
|
+
TData = T extends { $type: infer U } ? U : T['data'],
|
|
55
|
+
> = {
|
|
56
|
+
name: T['name'];
|
|
57
|
+
tableName: TTableName;
|
|
58
|
+
dataType: T['dataType'];
|
|
59
|
+
columnType: T['columnType'];
|
|
60
|
+
data: TData;
|
|
61
|
+
driverParam: T['driverParam'];
|
|
62
|
+
notNull: T extends { notNull: true } ? true : false;
|
|
63
|
+
hasDefault: T extends { hasDefault: true } ? true : false;
|
|
64
|
+
isPrimaryKey: T extends { isPrimaryKey: true } ? true : false;
|
|
65
|
+
isAutoincrement: T extends { isAutoincrement: true } ? true : false;
|
|
66
|
+
hasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;
|
|
67
|
+
enumValues: T['enumValues'];
|
|
68
|
+
baseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, 'common'>
|
|
69
|
+
: never;
|
|
70
|
+
identity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;
|
|
71
|
+
generated: T extends { generated: infer G } ? unknown extends G ? undefined
|
|
72
|
+
: G extends undefined ? undefined
|
|
73
|
+
: G
|
|
74
|
+
: undefined;
|
|
75
|
+
} & {};
|
|
76
|
+
|
|
77
|
+
export type ColumnBuilderTypeConfig<
|
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
79
|
+
T extends ColumnBuilderBaseConfig<ColumnDataType, string>,
|
|
80
|
+
TTypeConfig extends object = object,
|
|
81
|
+
> = Simplify<
|
|
82
|
+
& {
|
|
83
|
+
brand: 'ColumnBuilder';
|
|
84
|
+
name: T['name'];
|
|
85
|
+
dataType: T['dataType'];
|
|
86
|
+
columnType: T['columnType'];
|
|
87
|
+
data: T['data'];
|
|
88
|
+
driverParam: T['driverParam'];
|
|
89
|
+
notNull: T extends { notNull: infer U } ? U : boolean;
|
|
90
|
+
hasDefault: T extends { hasDefault: infer U } ? U : boolean;
|
|
91
|
+
enumValues: T['enumValues'];
|
|
92
|
+
identity: T extends { identity: infer U } ? U : unknown;
|
|
93
|
+
generated: T extends { generated: infer G } ? G extends undefined ? unknown : G : unknown;
|
|
94
|
+
}
|
|
95
|
+
& TTypeConfig
|
|
96
|
+
>;
|
|
97
|
+
|
|
98
|
+
export type ColumnBuilderRuntimeConfig<TData, TRuntimeConfig extends object = object> = {
|
|
99
|
+
name: string;
|
|
100
|
+
keyAsName: boolean;
|
|
101
|
+
notNull: boolean;
|
|
102
|
+
default: TData | SQL | undefined;
|
|
103
|
+
defaultFn: (() => TData | SQL) | undefined;
|
|
104
|
+
onUpdateFn: (() => TData | SQL) | undefined;
|
|
105
|
+
hasDefault: boolean;
|
|
106
|
+
primaryKey: boolean;
|
|
107
|
+
isUnique: boolean;
|
|
108
|
+
uniqueName: string | undefined;
|
|
109
|
+
uniqueType: string | undefined;
|
|
110
|
+
dataType: string;
|
|
111
|
+
columnType: string;
|
|
112
|
+
generated: GeneratedColumnConfig<TData> | undefined;
|
|
113
|
+
generatedIdentity: GeneratedIdentityConfig | undefined;
|
|
114
|
+
collation?: string | undefined;
|
|
115
|
+
} & TRuntimeConfig;
|
|
116
|
+
|
|
117
|
+
export interface ColumnBuilderExtraConfig {
|
|
118
|
+
primaryKeyHasDefault?: boolean;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export type NotNull<T extends ColumnBuilderBase> = T & {
|
|
122
|
+
_: {
|
|
123
|
+
notNull: true;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export type HasDefault<T extends ColumnBuilderBase> = T & {
|
|
128
|
+
_: {
|
|
129
|
+
hasDefault: true;
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
export type IsPrimaryKey<T extends ColumnBuilderBase> = T & {
|
|
134
|
+
_: {
|
|
135
|
+
isPrimaryKey: true;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export type IsAutoincrement<T extends ColumnBuilderBase> = T & {
|
|
140
|
+
_: {
|
|
141
|
+
isAutoincrement: true;
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export type HasRuntimeDefault<T extends ColumnBuilderBase> = T & {
|
|
146
|
+
_: {
|
|
147
|
+
hasRuntimeDefault: true;
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
export type $Type<T extends ColumnBuilderBase, TType> = T & {
|
|
152
|
+
_: {
|
|
153
|
+
$type: TType;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export type HasGenerated<T extends ColumnBuilderBase, TGenerated extends {} = {}> = T & {
|
|
158
|
+
_: {
|
|
159
|
+
hasDefault: true;
|
|
160
|
+
generated: TGenerated;
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
export type IsIdentity<
|
|
165
|
+
T extends ColumnBuilderBase,
|
|
166
|
+
TType extends 'always' | 'byDefault',
|
|
167
|
+
> = T & {
|
|
168
|
+
_: {
|
|
169
|
+
notNull: true;
|
|
170
|
+
hasDefault: true;
|
|
171
|
+
identity: TType;
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
export interface ColumnBuilderBase<
|
|
175
|
+
T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,
|
|
176
|
+
TTypeConfig extends object = object,
|
|
177
|
+
> {
|
|
178
|
+
_: ColumnBuilderTypeConfig<T, TTypeConfig>;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.
|
|
182
|
+
export abstract class ColumnBuilder<
|
|
183
|
+
T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,
|
|
184
|
+
TRuntimeConfig extends object = object,
|
|
185
|
+
TTypeConfig extends object = object,
|
|
186
|
+
TExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,
|
|
187
|
+
> implements ColumnBuilderBase<T, TTypeConfig> {
|
|
188
|
+
static readonly [entityKind]: string = 'ColumnBuilder';
|
|
189
|
+
|
|
190
|
+
declare _: ColumnBuilderTypeConfig<T, TTypeConfig>;
|
|
191
|
+
|
|
192
|
+
protected config: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;
|
|
193
|
+
|
|
194
|
+
constructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {
|
|
195
|
+
this.config = {
|
|
196
|
+
name,
|
|
197
|
+
keyAsName: name === '',
|
|
198
|
+
notNull: false,
|
|
199
|
+
default: undefined,
|
|
200
|
+
hasDefault: false,
|
|
201
|
+
primaryKey: false,
|
|
202
|
+
isUnique: false,
|
|
203
|
+
uniqueName: undefined,
|
|
204
|
+
uniqueType: undefined,
|
|
205
|
+
dataType,
|
|
206
|
+
columnType,
|
|
207
|
+
generated: undefined,
|
|
208
|
+
} as ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```ts
|
|
216
|
+
* const users = pgTable('users', {
|
|
217
|
+
* id: integer('id').$type<UserId>().primaryKey(),
|
|
218
|
+
* details: json('details').$type<UserDetails>().notNull(),
|
|
219
|
+
* });
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
$type<TType>(): $Type<this, TType> {
|
|
223
|
+
return this as $Type<this, TType>;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Adds a `not null` clause to the column definition.
|
|
228
|
+
*
|
|
229
|
+
* Affects the `select` model of the table - columns *without* `not null` will be nullable on select.
|
|
230
|
+
*/
|
|
231
|
+
notNull(): NotNull<this> {
|
|
232
|
+
this.config.notNull = true;
|
|
233
|
+
return this as NotNull<this>;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Adds a `default <value>` clause to the column definition.
|
|
238
|
+
*
|
|
239
|
+
* Affects the `insert` model of the table - columns *with* `default` are optional on insert.
|
|
240
|
+
*
|
|
241
|
+
* If you need to set a dynamic default value, use {@link $defaultFn} instead.
|
|
242
|
+
*/
|
|
243
|
+
default(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {
|
|
244
|
+
this.config.default = value;
|
|
245
|
+
this.config.hasDefault = true;
|
|
246
|
+
return this as HasDefault<this>;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Adds a dynamic default value to the column.
|
|
251
|
+
* The function will be called when the row is inserted, and the returned value will be used as the column value.
|
|
252
|
+
*
|
|
253
|
+
* **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.
|
|
254
|
+
*/
|
|
255
|
+
$defaultFn(
|
|
256
|
+
fn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,
|
|
257
|
+
): HasRuntimeDefault<HasDefault<this>> {
|
|
258
|
+
this.config.defaultFn = fn;
|
|
259
|
+
this.config.hasDefault = true;
|
|
260
|
+
return this as HasRuntimeDefault<HasDefault<this>>;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Alias for {@link $defaultFn}.
|
|
265
|
+
*/
|
|
266
|
+
$default = this.$defaultFn;
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Adds a dynamic update value to the column.
|
|
270
|
+
* The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.
|
|
271
|
+
* If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.
|
|
272
|
+
*
|
|
273
|
+
* **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.
|
|
274
|
+
*/
|
|
275
|
+
$onUpdateFn(
|
|
276
|
+
fn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,
|
|
277
|
+
): HasDefault<this> {
|
|
278
|
+
this.config.onUpdateFn = fn;
|
|
279
|
+
this.config.hasDefault = true;
|
|
280
|
+
return this as HasDefault<this>;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Alias for {@link $onUpdateFn}.
|
|
285
|
+
*/
|
|
286
|
+
$onUpdate = this.$onUpdateFn;
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.
|
|
290
|
+
*
|
|
291
|
+
* In SQLite, `integer primary key` implicitly makes the column auto-incrementing.
|
|
292
|
+
*/
|
|
293
|
+
primaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>
|
|
294
|
+
: IsPrimaryKey<NotNull<this>>
|
|
295
|
+
{
|
|
296
|
+
this.config.primaryKey = true;
|
|
297
|
+
this.config.notNull = true;
|
|
298
|
+
return this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>
|
|
299
|
+
: IsPrimaryKey<NotNull<this>>;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
abstract generatedAlwaysAs(
|
|
303
|
+
as: SQL | T['data'] | (() => SQL),
|
|
304
|
+
config?: Partial<GeneratedColumnConfig<unknown>>,
|
|
305
|
+
): HasGenerated<this, {
|
|
306
|
+
type: 'always';
|
|
307
|
+
}>;
|
|
308
|
+
|
|
309
|
+
/** @internal Sets the name of the column to the key within the table definition if a name was not given. */
|
|
310
|
+
setName(name: string) {
|
|
311
|
+
if (this.config.name !== '') return;
|
|
312
|
+
this.config.name = name;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
export type BuildColumn<
|
|
317
|
+
TTableName extends string,
|
|
318
|
+
TBuilder extends ColumnBuilderBase,
|
|
319
|
+
TDialect extends Dialect,
|
|
320
|
+
> = TDialect extends 'pg' ? PgColumn<
|
|
321
|
+
MakeColumnConfig<TBuilder['_'], TTableName>,
|
|
322
|
+
{},
|
|
323
|
+
Simplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>
|
|
324
|
+
>
|
|
325
|
+
: TDialect extends 'common' ? Column<
|
|
326
|
+
MakeColumnConfig<TBuilder['_'], TTableName>,
|
|
327
|
+
{},
|
|
328
|
+
Simplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>
|
|
329
|
+
>
|
|
330
|
+
: never;
|
|
331
|
+
|
|
332
|
+
export type BuildIndexColumn<
|
|
333
|
+
TDialect extends Dialect,
|
|
334
|
+
> = TDialect extends 'pg' ? ExtraConfigColumn
|
|
335
|
+
: never;
|
|
336
|
+
|
|
337
|
+
// TODO
|
|
338
|
+
// try to make sql as well + indexRaw
|
|
339
|
+
|
|
340
|
+
// optional after everything will be working as expected
|
|
341
|
+
// also try to leave only needed methods for extraConfig
|
|
342
|
+
// make an error if I pass .asc() to fk and so on
|
|
343
|
+
|
|
344
|
+
export type BuildColumns<
|
|
345
|
+
TTableName extends string,
|
|
346
|
+
TConfigMap extends Record<string, ColumnBuilderBase>,
|
|
347
|
+
TDialect extends Dialect,
|
|
348
|
+
> =
|
|
349
|
+
& {
|
|
350
|
+
[Key in keyof TConfigMap]: BuildColumn<TTableName, {
|
|
351
|
+
_:
|
|
352
|
+
& Omit<TConfigMap[Key]['_'], 'name'>
|
|
353
|
+
& { name: TConfigMap[Key]['_']['name'] extends '' ? Assume<Key, string> : TConfigMap[Key]['_']['name'] };
|
|
354
|
+
}, TDialect>;
|
|
355
|
+
}
|
|
356
|
+
& {};
|
|
357
|
+
|
|
358
|
+
export type BuildExtraConfigColumns<
|
|
359
|
+
_TTableName extends string,
|
|
360
|
+
TConfigMap extends Record<string, ColumnBuilderBase>,
|
|
361
|
+
TDialect extends Dialect,
|
|
362
|
+
> =
|
|
363
|
+
& {
|
|
364
|
+
[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;
|
|
365
|
+
}
|
|
366
|
+
& {};
|
|
367
|
+
|
|
368
|
+
export type ChangeColumnTableName<TColumn extends Column, TAlias extends string, TDialect extends Dialect> =
|
|
369
|
+
TDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>
|
|
370
|
+
: never;
|