pipework 0.252.0 → 0.253.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (695) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/infra/support/handle.d.ts +8 -1
  3. package/dist/infra/support/handle.d.ts.map +1 -1
  4. package/dist/infra/support/handle.js +9 -2
  5. package/dist/infra/support/handle.js.map +1 -1
  6. package/dist/infra/support/namespace.d.ts.map +1 -1
  7. package/package.json +4 -3
  8. package/src/async/jobs/abortable-delay.ts +18 -0
  9. package/src/async/jobs/claims.ts +52 -0
  10. package/src/async/jobs/cron.ts +179 -0
  11. package/src/async/jobs/errors.ts +56 -0
  12. package/src/async/jobs/exclusion.ts +117 -0
  13. package/src/async/jobs/execute.ts +219 -0
  14. package/src/async/jobs/index.ts +10 -0
  15. package/src/async/jobs/listener.ts +135 -0
  16. package/src/async/jobs/namespace.ts +20 -0
  17. package/src/async/jobs/queue-door.ts +44 -0
  18. package/src/async/jobs/queue.ts +1012 -0
  19. package/src/async/jobs/run-script.ts +67 -0
  20. package/src/async/jobs/scheduler.ts +218 -0
  21. package/src/async/jobs/schedules-table.ts +37 -0
  22. package/src/async/jobs/serialize-error.ts +48 -0
  23. package/src/async/jobs/table.ts +191 -0
  24. package/src/async/pipeline/define.ts +53 -0
  25. package/src/async/pipeline/errors.ts +35 -0
  26. package/src/async/pipeline/execute.ts +53 -0
  27. package/src/async/pipeline/index.ts +13 -0
  28. package/src/async/pipeline/namespace.ts +12 -0
  29. package/src/async/pipeline/resume.ts +67 -0
  30. package/src/async/pipeline/run-steps.ts +98 -0
  31. package/src/async/pipeline/types.ts +57 -0
  32. package/src/async/state-machine/define.ts +64 -0
  33. package/src/async/state-machine/errors.ts +29 -0
  34. package/src/async/state-machine/index.ts +3 -0
  35. package/src/async/state-machine/namespace.ts +12 -0
  36. package/src/async/state-machine/transition.ts +90 -0
  37. package/src/async/state-machine/types.ts +37 -0
  38. package/src/async/steps/errors.ts +31 -0
  39. package/src/async/steps/graph.ts +1214 -0
  40. package/src/async/steps/hash.ts +40 -0
  41. package/src/async/steps/index.ts +7 -0
  42. package/src/async/steps/namespace.ts +7 -0
  43. package/src/async/steps/table.ts +97 -0
  44. package/src/async/steps/types.ts +318 -0
  45. package/src/audit/chain/index.ts +9 -0
  46. package/src/audit/chain/install.ts +113 -0
  47. package/src/audit/chain/retire.ts +52 -0
  48. package/src/audit/chain/verify.ts +257 -0
  49. package/src/audit/query/cursor.ts +37 -0
  50. package/src/audit/query/index.ts +9 -0
  51. package/src/audit/query/query.ts +223 -0
  52. package/src/audit/schema/audit-record-fields.ts +68 -0
  53. package/src/audit/schema/audit-record.ts +23 -0
  54. package/src/auth/auth/audit.ts +31 -0
  55. package/src/auth/auth/chain.ts +84 -0
  56. package/src/auth/auth/cookie.ts +136 -0
  57. package/src/auth/auth/email-links.ts +311 -0
  58. package/src/auth/auth/guard.ts +128 -0
  59. package/src/auth/auth/index.ts +18 -0
  60. package/src/auth/auth/multi-org.ts +337 -0
  61. package/src/auth/auth/namespace.ts +34 -0
  62. package/src/auth/auth/parse-expiry.ts +13 -0
  63. package/src/auth/auth/passwords.ts +110 -0
  64. package/src/auth/auth/schema.ts +110 -0
  65. package/src/auth/auth/sessions.ts +565 -0
  66. package/src/auth/auth/sign-in.ts +156 -0
  67. package/src/auth/auth/signing-keys.ts +69 -0
  68. package/src/auth/auth/types.ts +26 -0
  69. package/src/auth/auth/uuid.ts +10 -0
  70. package/src/auth/rbac/cache.ts +55 -0
  71. package/src/auth/rbac/check.ts +30 -0
  72. package/src/auth/rbac/create.ts +35 -0
  73. package/src/auth/rbac/index.ts +5 -0
  74. package/src/auth/rbac/middleware.ts +20 -0
  75. package/src/auth/rbac/namespace.ts +15 -0
  76. package/src/auth/rbac/resolve.ts +31 -0
  77. package/src/auth/rbac/schema.sql +31 -0
  78. package/src/auth/rbac/seed.ts +67 -0
  79. package/src/auth/rbac/tables.ts +32 -0
  80. package/src/auth/rbac/types.ts +65 -0
  81. package/src/auth/tenant/extract.ts +33 -0
  82. package/src/auth/tenant/in-tenant.ts +49 -0
  83. package/src/auth/tenant/index.ts +7 -0
  84. package/src/auth/tenant/namespace.ts +23 -0
  85. package/src/auth/tenant/propagate.ts +20 -0
  86. package/src/auth/tenant/rls.ts +120 -0
  87. package/src/auth/tenant/scope.ts +33 -0
  88. package/src/auth/tenant/scoped-db.ts +581 -0
  89. package/src/auth/tenant/types.ts +14 -0
  90. package/src/auth/tenant/validate.ts +27 -0
  91. package/src/cli/commands/add.ts +158 -0
  92. package/src/cli/commands/alerts.ts +98 -0
  93. package/src/cli/commands/check.ts +1418 -0
  94. package/src/cli/commands/codemod.ts +78 -0
  95. package/src/cli/commands/db.ts +356 -0
  96. package/src/cli/commands/dev.ts +101 -0
  97. package/src/cli/commands/generate.ts +75 -0
  98. package/src/cli/commands/init.ts +36 -0
  99. package/src/cli/commands/install.ts +28 -0
  100. package/src/cli/commands/lint.ts +62 -0
  101. package/src/cli/commands/migrate.ts +132 -0
  102. package/src/cli/commands/openapi.ts +63 -0
  103. package/src/cli/commands/remove.ts +72 -0
  104. package/src/cli/commands/run.ts +50 -0
  105. package/src/cli/commands/scope.ts +54 -0
  106. package/src/cli/commands/serve.ts +68 -0
  107. package/src/cli/commands/shard.ts +31 -0
  108. package/src/cli/commands/shared/config-pipework-version.ts +28 -0
  109. package/src/cli/commands/shared/find-config.ts +22 -0
  110. package/src/cli/commands/shared/load-config.ts +35 -0
  111. package/src/cli/commands/shared/pnpm-install.ts +95 -0
  112. package/src/cli/commands/shared/report-removed.ts +8 -0
  113. package/src/cli/commands/sync.ts +32 -0
  114. package/src/cli/commands/test.ts +307 -0
  115. package/src/cli/commands/upgrade.ts +48 -0
  116. package/src/cli/dev-bootstrap.ts +24 -0
  117. package/src/cli/errors.ts +10 -0
  118. package/src/cli/index.ts +303 -0
  119. package/src/cli/output.ts +17 -0
  120. package/src/cli/port.ts +15 -0
  121. package/src/cli/surface-kinds.ts +20 -0
  122. package/src/client/index.ts +4 -0
  123. package/src/client/poll.ts +130 -0
  124. package/src/client/report-fault.ts +119 -0
  125. package/src/core/config/app-pool.ts +19 -0
  126. package/src/core/config/aws-env.ts +29 -0
  127. package/src/core/config/base-dir.ts +24 -0
  128. package/src/core/config/discover.ts +64 -0
  129. package/src/core/config/env-resolve.ts +87 -0
  130. package/src/core/config/env-types.ts +116 -0
  131. package/src/core/config/env.ts +55 -0
  132. package/src/core/config/errors.ts +9 -0
  133. package/src/core/config/import-config.ts +40 -0
  134. package/src/core/config/index.ts +8 -0
  135. package/src/core/config/load.ts +417 -0
  136. package/src/core/config/namespace.ts +14 -0
  137. package/src/core/config/resolve.ts +195 -0
  138. package/src/core/config/schema.ts +488 -0
  139. package/src/core/config/statement-observer.ts +48 -0
  140. package/src/core/config/ts-inline-hooks.ts +75 -0
  141. package/src/core/config/ts-register.ts +4 -0
  142. package/src/core/config/ts-resolve-hooks.ts +101 -0
  143. package/src/core/errors/base.ts +49 -0
  144. package/src/core/errors/http.ts +146 -0
  145. package/src/core/errors/index.ts +2 -0
  146. package/src/core/errors/namespace.ts +31 -0
  147. package/src/core/lifecycle/drain.ts +33 -0
  148. package/src/core/lifecycle/health.ts +72 -0
  149. package/src/core/lifecycle/index.ts +4 -0
  150. package/src/core/lifecycle/namespace.ts +7 -0
  151. package/src/core/lifecycle/startup.ts +102 -0
  152. package/src/core/lifecycle/types.ts +36 -0
  153. package/src/core/logging/context.ts +60 -0
  154. package/src/core/logging/error-chain.ts +68 -0
  155. package/src/core/logging/index.ts +5 -0
  156. package/src/core/logging/logger.ts +65 -0
  157. package/src/core/logging/namespace.ts +16 -0
  158. package/src/core/logging/proxy.ts +22 -0
  159. package/src/core/logging/redact-match.ts +24 -0
  160. package/src/core/logging/types.ts +47 -0
  161. package/src/core/pipework.ts +566 -0
  162. package/src/core/runtime/broker.ts +69 -0
  163. package/src/core/surface/http.ts +133 -0
  164. package/src/core/surface/index.ts +11 -0
  165. package/src/core/surface/job-timeout.ts +40 -0
  166. package/src/core/surface/namespace.ts +13 -0
  167. package/src/core/surface/script.ts +33 -0
  168. package/src/core/surface/start.ts +142 -0
  169. package/src/core/surface/types.ts +225 -0
  170. package/src/core/surface/validate.ts +88 -0
  171. package/src/core/surface/worker.ts +528 -0
  172. package/src/core/validation/connectivity.ts +49 -0
  173. package/src/core/validation/domain.ts +99 -0
  174. package/src/core/validation/index.ts +5 -0
  175. package/src/core/validation/queue-tables.ts +312 -0
  176. package/src/core/validation/rls-role.ts +138 -0
  177. package/src/core/validation/startup.ts +51 -0
  178. package/src/core/validation/surfaces.ts +65 -0
  179. package/src/core/validation/types.ts +25 -0
  180. package/src/data/db/advisory-lock.ts +55 -0
  181. package/src/data/db/aggregates.ts +172 -0
  182. package/src/data/db/array-elements.ts +111 -0
  183. package/src/data/db/bulk-set.ts +53 -0
  184. package/src/data/db/col/index.ts +14 -0
  185. package/src/data/db/composed.ts +53 -0
  186. package/src/data/db/db.ts +276 -0
  187. package/src/data/db/excluded.ts +16 -0
  188. package/src/data/db/expressions.ts +473 -0
  189. package/src/data/db/filter.ts +90 -0
  190. package/src/data/db/function-source.ts +114 -0
  191. package/src/data/db/identifiers.ts +16 -0
  192. package/src/data/db/idx/index.ts +9 -0
  193. package/src/data/db/in-list.ts +49 -0
  194. package/src/data/db/index.ts +9 -0
  195. package/src/data/db/insert-split.ts +137 -0
  196. package/src/data/db/instrumentation.ts +82 -0
  197. package/src/data/db/maintenance.ts +28 -0
  198. package/src/data/db/namespace.ts +107 -0
  199. package/src/data/db/owner-labels.ts +9 -0
  200. package/src/data/db/pool.ts +187 -0
  201. package/src/data/db/query-label.ts +13 -0
  202. package/src/data/db/query-watch.ts +116 -0
  203. package/src/data/db/raw-client-warning.ts +37 -0
  204. package/src/data/db/readonly.ts +23 -0
  205. package/src/data/db/reservation.ts +151 -0
  206. package/src/data/db/schema-features.ts +14 -0
  207. package/src/data/db/serializable.ts +83 -0
  208. package/src/data/db/sql.ts +1 -0
  209. package/src/data/db/timeouts.ts +76 -0
  210. package/src/data/db/types.ts +18 -0
  211. package/src/data/db/unbound.ts +33 -0
  212. package/src/data/db/values.ts +29 -0
  213. package/src/data/domain/brand.ts +15 -0
  214. package/src/data/domain/build-factory.ts +193 -0
  215. package/src/data/domain/build-schema.ts +161 -0
  216. package/src/data/domain/build-table.ts +355 -0
  217. package/src/data/domain/define.ts +239 -0
  218. package/src/data/domain/external-registry.ts +34 -0
  219. package/src/data/domain/external.ts +77 -0
  220. package/src/data/domain/field.ts +279 -0
  221. package/src/data/domain/index.ts +13 -0
  222. package/src/data/domain/naming.ts +6 -0
  223. package/src/data/domain/projections.ts +57 -0
  224. package/src/data/domain/trace-safe-projection.ts +31 -0
  225. package/src/data/domain/traits.ts +108 -0
  226. package/src/data/domain/types.ts +289 -0
  227. package/src/data/jsonb/composed.ts +18 -0
  228. package/src/data/jsonb/index.ts +1 -0
  229. package/src/data/jsonb/namespace.ts +30 -0
  230. package/src/data/jsonb/query.ts +86 -0
  231. package/src/data/migrate/append-only-generate.ts +47 -0
  232. package/src/data/migrate/applied.ts +47 -0
  233. package/src/data/migrate/apply.ts +309 -0
  234. package/src/data/migrate/check.ts +119 -0
  235. package/src/data/migrate/diff.ts +357 -0
  236. package/src/data/migrate/door-generate.ts +130 -0
  237. package/src/data/migrate/framework-rls.ts +58 -0
  238. package/src/data/migrate/generate.ts +201 -0
  239. package/src/data/migrate/history.ts +215 -0
  240. package/src/data/migrate/index.ts +9 -0
  241. package/src/data/migrate/internal-definitions.ts +175 -0
  242. package/src/data/migrate/post-process.ts +73 -0
  243. package/src/data/migrate/pragma.ts +73 -0
  244. package/src/data/migrate/provision-framework.ts +147 -0
  245. package/src/data/migrate/rls-generate.ts +61 -0
  246. package/src/data/migrate/run.ts +124 -0
  247. package/src/data/migrate/safety.ts +167 -0
  248. package/src/data/migrate/snapshot.ts +368 -0
  249. package/src/data/migrate/sql-emit.ts +392 -0
  250. package/src/data/migrate/statements.ts +312 -0
  251. package/src/data/query/alias.ts +126 -0
  252. package/src/data/query/batch.ts +8 -0
  253. package/src/data/query/cache/core/cache.ts +78 -0
  254. package/src/data/query/cache/core/index.ts +1 -0
  255. package/src/data/query/cache/core/types.ts +29 -0
  256. package/src/data/query/cache/readme.md +230 -0
  257. package/src/data/query/casing.ts +76 -0
  258. package/src/data/query/collation.ts +11 -0
  259. package/src/data/query/column-builder.ts +370 -0
  260. package/src/data/query/column.ts +150 -0
  261. package/src/data/query/entity.ts +42 -0
  262. package/src/data/query/errors.ts +33 -0
  263. package/src/data/query/index.ts +14 -0
  264. package/src/data/query/logger.ts +47 -0
  265. package/src/data/query/operations.ts +45 -0
  266. package/src/data/query/pg-core/alias.ts +12 -0
  267. package/src/data/query/pg-core/checks.ts +32 -0
  268. package/src/data/query/pg-core/columns/all.ts +71 -0
  269. package/src/data/query/pg-core/columns/bigint.ts +110 -0
  270. package/src/data/query/pg-core/columns/bigserial.ts +128 -0
  271. package/src/data/query/pg-core/columns/boolean.ts +43 -0
  272. package/src/data/query/pg-core/columns/char.ts +85 -0
  273. package/src/data/query/pg-core/columns/cidr.ts +43 -0
  274. package/src/data/query/pg-core/columns/common.ts +366 -0
  275. package/src/data/query/pg-core/columns/custom.ts +232 -0
  276. package/src/data/query/pg-core/columns/date.common.ts +15 -0
  277. package/src/data/query/pg-core/columns/date.ts +112 -0
  278. package/src/data/query/pg-core/columns/double-precision.ts +55 -0
  279. package/src/data/query/pg-core/columns/enum.ts +201 -0
  280. package/src/data/query/pg-core/columns/index.ts +35 -0
  281. package/src/data/query/pg-core/columns/inet.ts +43 -0
  282. package/src/data/query/pg-core/columns/int.common.ts +57 -0
  283. package/src/data/query/pg-core/columns/integer.ts +53 -0
  284. package/src/data/query/pg-core/columns/interval.ts +83 -0
  285. package/src/data/query/pg-core/columns/json.ts +58 -0
  286. package/src/data/query/pg-core/columns/jsonb.ts +56 -0
  287. package/src/data/query/pg-core/columns/line.ts +117 -0
  288. package/src/data/query/pg-core/columns/macaddr.ts +43 -0
  289. package/src/data/query/pg-core/columns/macaddr8.ts +43 -0
  290. package/src/data/query/pg-core/columns/numeric.ts +227 -0
  291. package/src/data/query/pg-core/columns/point.ts +127 -0
  292. package/src/data/query/pg-core/columns/postgis_extension/geometry.ts +119 -0
  293. package/src/data/query/pg-core/columns/postgis_extension/utils.ts +47 -0
  294. package/src/data/query/pg-core/columns/real.ts +58 -0
  295. package/src/data/query/pg-core/columns/serial.ts +55 -0
  296. package/src/data/query/pg-core/columns/smallint.ts +53 -0
  297. package/src/data/query/pg-core/columns/smallserial.ts +60 -0
  298. package/src/data/query/pg-core/columns/text.ts +67 -0
  299. package/src/data/query/pg-core/columns/time.ts +72 -0
  300. package/src/data/query/pg-core/columns/timestamp.ts +163 -0
  301. package/src/data/query/pg-core/columns/uuid.ts +51 -0
  302. package/src/data/query/pg-core/columns/varchar.ts +89 -0
  303. package/src/data/query/pg-core/columns/vector_extension/bit.ts +68 -0
  304. package/src/data/query/pg-core/columns/vector_extension/halfvec.ts +80 -0
  305. package/src/data/query/pg-core/columns/vector_extension/sparsevec.ts +67 -0
  306. package/src/data/query/pg-core/columns/vector_extension/vector.ts +80 -0
  307. package/src/data/query/pg-core/db.ts +674 -0
  308. package/src/data/query/pg-core/dialect.ts +1404 -0
  309. package/src/data/query/pg-core/expressions.ts +25 -0
  310. package/src/data/query/pg-core/foreign-keys.ts +130 -0
  311. package/src/data/query/pg-core/index.ts +21 -0
  312. package/src/data/query/pg-core/indexes.ts +276 -0
  313. package/src/data/query/pg-core/policies.ts +56 -0
  314. package/src/data/query/pg-core/primary-keys.ts +62 -0
  315. package/src/data/query/pg-core/query-builders/count.ts +86 -0
  316. package/src/data/query/pg-core/query-builders/delete.ts +293 -0
  317. package/src/data/query/pg-core/query-builders/index.ts +7 -0
  318. package/src/data/query/pg-core/query-builders/insert.ts +452 -0
  319. package/src/data/query/pg-core/query-builders/query-builder.ts +123 -0
  320. package/src/data/query/pg-core/query-builders/query.ts +157 -0
  321. package/src/data/query/pg-core/query-builders/raw.ts +49 -0
  322. package/src/data/query/pg-core/query-builders/refresh-materialized-view.ts +108 -0
  323. package/src/data/query/pg-core/query-builders/select.ts +1346 -0
  324. package/src/data/query/pg-core/query-builders/select.types.ts +437 -0
  325. package/src/data/query/pg-core/query-builders/update.ts +626 -0
  326. package/src/data/query/pg-core/roles.ts +41 -0
  327. package/src/data/query/pg-core/schema.ts +72 -0
  328. package/src/data/query/pg-core/sequence.ts +41 -0
  329. package/src/data/query/pg-core/session.ts +292 -0
  330. package/src/data/query/pg-core/subquery.ts +46 -0
  331. package/src/data/query/pg-core/table.ts +252 -0
  332. package/src/data/query/pg-core/unique-constraint.ts +73 -0
  333. package/src/data/query/pg-core/utils/array.ts +95 -0
  334. package/src/data/query/pg-core/utils/index.ts +1 -0
  335. package/src/data/query/pg-core/utils.ts +104 -0
  336. package/src/data/query/pg-core/view-base.ts +14 -0
  337. package/src/data/query/pg-core/view-common.ts +1 -0
  338. package/src/data/query/pg-core/view.ts +435 -0
  339. package/src/data/query/pg-core/with-builder.ts +41 -0
  340. package/src/data/query/postgres-js/README.md +46 -0
  341. package/src/data/query/postgres-js/array-parser.ts +45 -0
  342. package/src/data/query/postgres-js/driver-error-boundary.ts +149 -0
  343. package/src/data/query/postgres-js/driver.ts +163 -0
  344. package/src/data/query/postgres-js/index.ts +2 -0
  345. package/src/data/query/postgres-js/session.ts +234 -0
  346. package/src/data/query/primary-key.ts +11 -0
  347. package/src/data/query/query-builders/query-builder.ts +19 -0
  348. package/src/data/query/query-builders/select.types.ts +175 -0
  349. package/src/data/query/query-promise.ts +35 -0
  350. package/src/data/query/relations.ts +725 -0
  351. package/src/data/query/runnable-query.ts +12 -0
  352. package/src/data/query/selection-proxy.ts +121 -0
  353. package/src/data/query/session.ts +8 -0
  354. package/src/data/query/sql/expressions/conditions.ts +741 -0
  355. package/src/data/query/sql/expressions/index.ts +2 -0
  356. package/src/data/query/sql/expressions/select.ts +45 -0
  357. package/src/data/query/sql/functions/aggregate.ts +129 -0
  358. package/src/data/query/sql/functions/index.ts +2 -0
  359. package/src/data/query/sql/functions/vector.ts +178 -0
  360. package/src/data/query/sql/index.ts +3 -0
  361. package/src/data/query/sql/sql.ts +794 -0
  362. package/src/data/query/subquery.ts +53 -0
  363. package/src/data/query/table.ts +208 -0
  364. package/src/data/query/table.utils.ts +2 -0
  365. package/src/data/query/tracing-utils.ts +3 -0
  366. package/src/data/query/tracing.ts +11 -0
  367. package/src/data/query/utils.ts +357 -0
  368. package/src/data/query/version.ts +4 -0
  369. package/src/data/query/view-common.ts +1 -0
  370. package/src/data/schema/branded.ts +13 -0
  371. package/src/data/schema/generated/coerce.ts +5 -0
  372. package/src/data/schema/generated/combinator.ts +6 -0
  373. package/src/data/schema/generated/encoding.ts +5 -0
  374. package/src/data/schema/generated/error.ts +6 -0
  375. package/src/data/schema/generated/format.ts +5 -0
  376. package/src/data/schema/generated/type-constructor.ts +10 -0
  377. package/src/data/schema/generated/type.ts +6 -0
  378. package/src/data/schema/index.ts +6 -0
  379. package/src/data/schema/json-schema.ts +33 -0
  380. package/src/data/schema/namespace.ts +55 -0
  381. package/src/data/schema/parse.ts +39 -0
  382. package/src/data/schema/types.ts +39 -0
  383. package/src/data/temporal/append-only.ts +134 -0
  384. package/src/data/temporal/close.ts +27 -0
  385. package/src/data/temporal/columns.ts +10 -0
  386. package/src/data/temporal/definition-queries.ts +70 -0
  387. package/src/data/temporal/errors.ts +10 -0
  388. package/src/data/temporal/get-current.ts +22 -0
  389. package/src/data/temporal/index.ts +9 -0
  390. package/src/data/temporal/namespace.ts +36 -0
  391. package/src/data/temporal/query.ts +25 -0
  392. package/src/data/temporal/resolve.ts +17 -0
  393. package/src/data/temporal/revise.ts +67 -0
  394. package/src/data/temporal/types.ts +22 -0
  395. package/src/data/valve/artifact.ts +33 -0
  396. package/src/data/valve/contract-diff.ts +21 -0
  397. package/src/data/valve/cross.ts +57 -0
  398. package/src/data/valve/crossing-ledger.ts +50 -0
  399. package/src/data/valve/decision.ts +44 -0
  400. package/src/data/valve/durable-crossing.ts +52 -0
  401. package/src/data/valve/execute-crossing.ts +77 -0
  402. package/src/data/valve/faucet.ts +56 -0
  403. package/src/data/valve/gate.ts +114 -0
  404. package/src/data/valve/graph.ts +77 -0
  405. package/src/data/valve/index.ts +53 -0
  406. package/src/data/valve/namespace.ts +57 -0
  407. package/src/data/valve/registry.ts +50 -0
  408. package/src/data/valve/schema/valve-crossing-fields.ts +23 -0
  409. package/src/data/valve/schema/valve-crossing.ts +9 -0
  410. package/src/data/valve/supply.ts +154 -0
  411. package/src/data/valve/types.ts +143 -0
  412. package/src/data/vector/columns.ts +27 -0
  413. package/src/data/vector/index.ts +4 -0
  414. package/src/data/vector/namespace.ts +33 -0
  415. package/src/data/vector/query.ts +85 -0
  416. package/src/data/vector/validate.ts +16 -0
  417. package/src/data/write/audit/actor.ts +15 -0
  418. package/src/data/write/audit/audit-columns.ts +18 -0
  419. package/src/data/write/audit/audit-select.ts +111 -0
  420. package/src/data/write/audit/bound-transaction.ts +14 -0
  421. package/src/data/write/audit/cte-compile.ts +32 -0
  422. package/src/data/write/audit/decode-returning.ts +47 -0
  423. package/src/data/write/audit/final-select.ts +43 -0
  424. package/src/data/write/audit/infra-audit.ts +36 -0
  425. package/src/data/write/audit/primary-key.ts +65 -0
  426. package/src/data/write/audit/projection.ts +41 -0
  427. package/src/data/write/audit/read-touches.ts +86 -0
  428. package/src/data/write/audit/touch-match.ts +78 -0
  429. package/src/data/write/audit/verb-delete.ts +62 -0
  430. package/src/data/write/audit/verb-insert.ts +36 -0
  431. package/src/data/write/audit/verb-select.ts +47 -0
  432. package/src/data/write/audit/verb-update.ts +60 -0
  433. package/src/data/write/audit/verb-upsert.ts +104 -0
  434. package/src/data/write/conflict.ts +43 -0
  435. package/src/data/write/delete.ts +38 -0
  436. package/src/data/write/execute.ts +243 -0
  437. package/src/data/write/index.ts +11 -0
  438. package/src/data/write/insert.ts +63 -0
  439. package/src/data/write/state.ts +43 -0
  440. package/src/data/write/update.ts +54 -0
  441. package/src/data/write/upsert.ts +58 -0
  442. package/src/data/write/values.ts +19 -0
  443. package/src/index.ts +230 -0
  444. package/src/infra/access-links/code.ts +70 -0
  445. package/src/infra/access-links/handle.ts +892 -0
  446. package/src/infra/access-links/index.ts +9 -0
  447. package/src/infra/access-links/namespace.ts +30 -0
  448. package/src/infra/access-links/person-check.ts +177 -0
  449. package/src/infra/access-links/schema.ts +71 -0
  450. package/src/infra/alerts/async-sources.ts +231 -0
  451. package/src/infra/alerts/audit.ts +36 -0
  452. package/src/infra/alerts/beat.ts +123 -0
  453. package/src/infra/alerts/client-faults.ts +111 -0
  454. package/src/infra/alerts/faults.ts +156 -0
  455. package/src/infra/alerts/handle.ts +778 -0
  456. package/src/infra/alerts/http.ts +192 -0
  457. package/src/infra/alerts/index.ts +12 -0
  458. package/src/infra/alerts/infra-sources.ts +180 -0
  459. package/src/infra/alerts/namespace.ts +81 -0
  460. package/src/infra/alerts/redact.ts +21 -0
  461. package/src/infra/alerts/request-faults.ts +41 -0
  462. package/src/infra/alerts/schema.ts +124 -0
  463. package/src/infra/alerts/sinks.ts +125 -0
  464. package/src/infra/alerts/source-options.ts +26 -0
  465. package/src/infra/alerts/sources.ts +503 -0
  466. package/src/infra/alerts/subsystem-sources.ts +137 -0
  467. package/src/infra/audit/emit.ts +87 -0
  468. package/src/infra/audit/index.ts +2 -0
  469. package/src/infra/audit/namespace.ts +22 -0
  470. package/src/infra/audit/schema.sql +35 -0
  471. package/src/infra/audit/types.ts +18 -0
  472. package/src/infra/aws/credentials.ts +147 -0
  473. package/src/infra/aws/sigv4.ts +140 -0
  474. package/src/infra/cache/create.ts +58 -0
  475. package/src/infra/cache/entry.ts +81 -0
  476. package/src/infra/cache/index.ts +4 -0
  477. package/src/infra/cache/namespace.ts +10 -0
  478. package/src/infra/cache/tenant.ts +93 -0
  479. package/src/infra/cache/types.ts +24 -0
  480. package/src/infra/crawl/audit.ts +35 -0
  481. package/src/infra/crawl/errors.ts +25 -0
  482. package/src/infra/crawl/handle.ts +693 -0
  483. package/src/infra/crawl/index.ts +9 -0
  484. package/src/infra/crawl/links.ts +160 -0
  485. package/src/infra/crawl/namespace.ts +36 -0
  486. package/src/infra/crawl/robots.ts +100 -0
  487. package/src/infra/crawl/schema.ts +89 -0
  488. package/src/infra/credit-line/handle.ts +883 -0
  489. package/src/infra/credit-line/index.ts +6 -0
  490. package/src/infra/credit-line/namespace.ts +7 -0
  491. package/src/infra/credit-line/schema.ts +96 -0
  492. package/src/infra/credits/handle.ts +706 -0
  493. package/src/infra/credits/index.ts +5 -0
  494. package/src/infra/credits/namespace.ts +7 -0
  495. package/src/infra/credits/schema.ts +83 -0
  496. package/src/infra/email/audit.ts +36 -0
  497. package/src/infra/email/inbound.ts +622 -0
  498. package/src/infra/email/index.ts +11 -0
  499. package/src/infra/email/mail.ts +517 -0
  500. package/src/infra/email/mime.ts +447 -0
  501. package/src/infra/email/namespace.ts +22 -0
  502. package/src/infra/email/providers.ts +111 -0
  503. package/src/infra/email/schema.ts +96 -0
  504. package/src/infra/email/sns.ts +200 -0
  505. package/src/infra/email/unsubscribe.ts +44 -0
  506. package/src/infra/fetch/address.ts +88 -0
  507. package/src/infra/fetch/connect-retry.ts +87 -0
  508. package/src/infra/fetch/handle.ts +329 -0
  509. package/src/infra/fetch/index.ts +7 -0
  510. package/src/infra/fetch/namespace.ts +70 -0
  511. package/src/infra/idempotency/index.ts +3 -0
  512. package/src/infra/idempotency/middleware.ts +87 -0
  513. package/src/infra/idempotency/store.ts +92 -0
  514. package/src/infra/idempotency/types.ts +30 -0
  515. package/src/infra/join-requests/handle.ts +312 -0
  516. package/src/infra/join-requests/index.ts +2 -0
  517. package/src/infra/join-requests/namespace.ts +7 -0
  518. package/src/infra/join-requests/schema.ts +33 -0
  519. package/src/infra/outbox/core.ts +165 -0
  520. package/src/infra/quota/errors.ts +32 -0
  521. package/src/infra/quota/handle.ts +215 -0
  522. package/src/infra/quota/index.ts +5 -0
  523. package/src/infra/quota/namespace.ts +7 -0
  524. package/src/infra/quota/schema.ts +15 -0
  525. package/src/infra/storage/backend.ts +34 -0
  526. package/src/infra/storage/handle.ts +513 -0
  527. package/src/infra/storage/index.ts +9 -0
  528. package/src/infra/storage/local.ts +104 -0
  529. package/src/infra/storage/namespace.ts +13 -0
  530. package/src/infra/storage/s3.ts +257 -0
  531. package/src/infra/storage/schema.ts +24 -0
  532. package/src/infra/support/handle.ts +869 -0
  533. package/src/infra/support/http.ts +229 -0
  534. package/src/infra/support/index.ts +7 -0
  535. package/src/infra/support/namespace.ts +12 -0
  536. package/src/infra/support/schema.ts +96 -0
  537. package/src/infra/webhook/inbound.ts +45 -0
  538. package/src/infra/webhook/index.ts +5 -0
  539. package/src/infra/webhook/namespace.ts +24 -0
  540. package/src/infra/webhook/outbound.ts +315 -0
  541. package/src/infra/webhook/sign.ts +32 -0
  542. package/src/infra/webhook/verify.ts +82 -0
  543. package/src/invariants/assert.ts +26 -0
  544. package/src/invariants/index.ts +1 -0
  545. package/src/lint/config.ts +56 -0
  546. package/src/lint/doctrine.ts +163 -0
  547. package/src/lint/include.ts +97 -0
  548. package/src/lint/index.ts +3 -0
  549. package/src/lint/preset.ts +10 -0
  550. package/src/lint/resolver.ts +218 -0
  551. package/src/lint/rules/no-reexports.ts +46 -0
  552. package/src/request/behavior/audited.ts +85 -0
  553. package/src/request/behavior/cached.ts +62 -0
  554. package/src/request/behavior/compose.ts +28 -0
  555. package/src/request/behavior/index.ts +5 -0
  556. package/src/request/behavior/namespace.ts +16 -0
  557. package/src/request/behavior/types.ts +26 -0
  558. package/src/request/behavior/versioned.ts +54 -0
  559. package/src/request/context/create.ts +103 -0
  560. package/src/request/context/guard.ts +49 -0
  561. package/src/request/context/index.ts +4 -0
  562. package/src/request/context/run-in-transaction.ts +200 -0
  563. package/src/request/context/store.ts +28 -0
  564. package/src/request/context/types.ts +50 -0
  565. package/src/request/di/builder.ts +535 -0
  566. package/src/request/di/index.ts +8 -0
  567. package/src/request/di/resolve.ts +271 -0
  568. package/src/request/di/types.ts +262 -0
  569. package/src/request/fitting/namespace.ts +7 -0
  570. package/src/request/fixture/batch.ts +71 -0
  571. package/src/request/fixture/builder.ts +26 -0
  572. package/src/request/fixture/errors.ts +10 -0
  573. package/src/request/fixture/index.ts +8 -0
  574. package/src/request/fixture/namespace.ts +23 -0
  575. package/src/request/fixture/paginate.ts +44 -0
  576. package/src/request/fixture/to-handlers.ts +260 -0
  577. package/src/request/fixture/types.ts +79 -0
  578. package/src/request/flow/act-as.ts +78 -0
  579. package/src/request/flow/namespace.ts +17 -0
  580. package/src/request/http/error-step.ts +42 -0
  581. package/src/request/http/file.ts +141 -0
  582. package/src/request/http/index.ts +4 -0
  583. package/src/request/http/middleware.ts +141 -0
  584. package/src/request/http/namespace.ts +5 -0
  585. package/src/request/http/rate-limit-classes.ts +170 -0
  586. package/src/request/http/response.ts +82 -0
  587. package/src/request/http/server.ts +916 -0
  588. package/src/request/http/sniff.ts +261 -0
  589. package/src/request/http/types.ts +250 -0
  590. package/src/request/http/upload.ts +284 -0
  591. package/src/request/internal/text.ts +6 -0
  592. package/src/request/openapi/generate.ts +205 -0
  593. package/src/request/openapi/index.ts +2 -0
  594. package/src/request/openapi/namespace.ts +7 -0
  595. package/src/test/auth.ts +13 -0
  596. package/src/test/auto-setup.ts +45 -0
  597. package/src/test/context.ts +91 -0
  598. package/src/test/crawl-fixture.ts +157 -0
  599. package/src/test/discover-fork.ts +17 -0
  600. package/src/test/fingerprint.ts +135 -0
  601. package/src/test/globals.d.ts +7 -0
  602. package/src/test/index.ts +19 -0
  603. package/src/test/namespace.ts +87 -0
  604. package/src/test/plugin.ts +189 -0
  605. package/src/test/progress.ts +185 -0
  606. package/src/test/reap-after-run.ts +28 -0
  607. package/src/test/reap.ts +286 -0
  608. package/src/test/reset.ts +253 -0
  609. package/src/test/savepoints.ts +172 -0
  610. package/src/test/setup.ts +1422 -0
  611. package/src/test/system-channel.ts +50 -0
  612. package/src/test/vitest-plugin.ts +142 -0
  613. package/src/test/vitest-workspace.ts +507 -0
  614. package/src/test/vitest.ts +333 -0
  615. package/src/test/watch.ts +105 -0
  616. package/src/trace/capture/bounded-serializer.ts +146 -0
  617. package/src/trace/cardinality/analyze.ts +173 -0
  618. package/src/trace/cardinality/branch-context.ts +214 -0
  619. package/src/trace/cardinality/check.ts +33 -0
  620. package/src/trace/cardinality/classify-edge.ts +64 -0
  621. package/src/trace/cardinality/structural-max.ts +107 -0
  622. package/src/trace/check/coverage-check.ts +188 -0
  623. package/src/trace/check/flow-check.ts +103 -0
  624. package/src/trace/check/flow-step-site.ts +234 -0
  625. package/src/trace/check/io-pattern.ts +116 -0
  626. package/src/trace/codemod/add-cardinality.ts +152 -0
  627. package/src/trace/codemod/run.ts +80 -0
  628. package/src/trace/entry/child-trace.ts +21 -0
  629. package/src/trace/entry/close-trace.ts +87 -0
  630. package/src/trace/entry/finalize-trace.ts +28 -0
  631. package/src/trace/entry/open-trace.ts +138 -0
  632. package/src/trace/entry/parent-trace.ts +20 -0
  633. package/src/trace/entry/parse-traceparent.ts +39 -0
  634. package/src/trace/entry/process-start.ts +38 -0
  635. package/src/trace/entry/trace-context.ts +26 -0
  636. package/src/trace/entry/tracing-enabled.ts +10 -0
  637. package/src/trace/external/record.ts +195 -0
  638. package/src/trace/external/report.ts +66 -0
  639. package/src/trace/namespace.ts +19 -0
  640. package/src/trace/partition/day.ts +47 -0
  641. package/src/trace/partition/index.ts +14 -0
  642. package/src/trace/partition/partition-name.ts +23 -0
  643. package/src/trace/partition/plan.ts +82 -0
  644. package/src/trace/partition/schedule.ts +26 -0
  645. package/src/trace/partition/startup-hook.ts +39 -0
  646. package/src/trace/partition/sync.ts +154 -0
  647. package/src/trace/partition/tables.ts +53 -0
  648. package/src/trace/read/tree.ts +83 -0
  649. package/src/trace/retain/copy-on-error.ts +76 -0
  650. package/src/trace/runtime/expire-stale-traces.ts +54 -0
  651. package/src/trace/runtime/flow-step.ts +147 -0
  652. package/src/trace/runtime/flush-steps.ts +31 -0
  653. package/src/trace/runtime/pending-writes.ts +54 -0
  654. package/src/trace/runtime/step-buffer.ts +298 -0
  655. package/src/trace/runtime/step-error.ts +21 -0
  656. package/src/trace/runtime/step-meta.ts +55 -0
  657. package/src/trace/runtime/thenable.ts +12 -0
  658. package/src/trace/runtime/truncate-trace.ts +62 -0
  659. package/src/trace/schema/trace-fields.ts +52 -0
  660. package/src/trace/schema/trace-retained.ts +22 -0
  661. package/src/trace/schema/trace-step-fields.ts +44 -0
  662. package/src/trace/schema/trace-step-retained.ts +25 -0
  663. package/src/trace/schema/trace-step.ts +18 -0
  664. package/src/trace/schema/trace.ts +12 -0
  665. package/src/trace/transformer/apply.ts +79 -0
  666. package/src/trace/transformer/build-meta-literal.ts +30 -0
  667. package/src/trace/transformer/find-flow-step-sites.ts +85 -0
  668. package/src/trace/transformer/inject-flow-step-import.ts +39 -0
  669. package/src/trace/transformer/transform-error.ts +14 -0
  670. package/src/trace/transformer/transform-flow-steps.ts +123 -0
  671. package/src/trace/transformer/wrap-function-declaration.ts +62 -0
  672. package/src/trace/transformer/wrap-variable-declaration.ts +67 -0
  673. package/src/workspace/affected.ts +110 -0
  674. package/src/workspace/changed-files.ts +163 -0
  675. package/src/workspace/check-deps.ts +213 -0
  676. package/src/workspace/checksum.ts +20 -0
  677. package/src/workspace/dependency-graph.ts +67 -0
  678. package/src/workspace/detect-pipework-copies.ts +93 -0
  679. package/src/workspace/discover.ts +206 -0
  680. package/src/workspace/generate.ts +401 -0
  681. package/src/workspace/index.ts +7 -0
  682. package/src/workspace/module-imports-pipework.ts +39 -0
  683. package/src/workspace/module-package-name.ts +12 -0
  684. package/src/workspace/scrub-git-env.ts +23 -0
  685. package/src/workspace/source-paths.ts +36 -0
  686. package/src/workspace/sync.ts +182 -0
  687. package/dist/REFERENCE.md +0 -1477
  688. package/dist/infra/access-links/rate-limit.d.ts +0 -10
  689. package/dist/infra/access-links/rate-limit.d.ts.map +0 -1
  690. package/dist/infra/access-links/rate-limit.js +0 -28
  691. package/dist/infra/access-links/rate-limit.js.map +0 -1
  692. package/dist/infra/email/sigv4.d.ts +0 -24
  693. package/dist/infra/email/sigv4.d.ts.map +0 -1
  694. package/dist/infra/email/sigv4.js +0 -55
  695. package/dist/infra/email/sigv4.js.map +0 -1
@@ -0,0 +1,72 @@
1
+ import { entityKind, is } from '../entity.js';
2
+ import { SQL, sql, type SQLWrapper } from '../sql/sql.js';
3
+ import type { NonArray, Writable } from '../utils.js';
4
+ import { type PgEnum, type PgEnumObject, pgEnumObjectWithSchema, pgEnumWithSchema } from './columns/enum.js';
5
+ import { type pgSequence, pgSequenceWithSchema } from './sequence.js';
6
+ import { type PgTableFn, pgTableWithSchema } from './table.js';
7
+ import { type pgMaterializedView, pgMaterializedViewWithSchema, type pgView, pgViewWithSchema } from './view.js';
8
+
9
+ export class PgSchema<TName extends string = string> implements SQLWrapper {
10
+ static readonly [entityKind]: string = 'PgSchema';
11
+ constructor(
12
+ public readonly schemaName: TName,
13
+ ) {}
14
+
15
+ table: PgTableFn<TName> = ((name, columns, extraConfig) => {
16
+ return pgTableWithSchema(name, columns, extraConfig, this.schemaName);
17
+ });
18
+
19
+ view = ((name, columns) => {
20
+ return pgViewWithSchema(name, columns, this.schemaName);
21
+ }) as typeof pgView;
22
+
23
+ materializedView = ((name, columns) => {
24
+ return pgMaterializedViewWithSchema(name, columns, this.schemaName);
25
+ }) as typeof pgMaterializedView;
26
+
27
+ public enum<U extends string, T extends Readonly<[U, ...U[]]>>(
28
+ enumName: string,
29
+ values: T | Writable<T>,
30
+ ): PgEnum<Writable<T>>;
31
+
32
+ public enum<E extends Record<string, string>>(
33
+ enumName: string,
34
+ enumObj: NonArray<E>,
35
+ ): PgEnumObject<E>;
36
+
37
+ public enum(enumName: any, input: any): any {
38
+ return Array.isArray(input)
39
+ ? pgEnumWithSchema(
40
+ enumName,
41
+ [...input] as [string, ...string[]],
42
+ this.schemaName,
43
+ )
44
+ : pgEnumObjectWithSchema(enumName, input, this.schemaName);
45
+ }
46
+
47
+ sequence: typeof pgSequence = ((name, options) => {
48
+ return pgSequenceWithSchema(name, options, this.schemaName);
49
+ });
50
+
51
+ getSQL(): SQL {
52
+ return new SQL([sql.identifier(this.schemaName)]);
53
+ }
54
+
55
+ shouldOmitSQLParens(): boolean {
56
+ return true;
57
+ }
58
+ }
59
+
60
+ export function isPgSchema(obj: unknown): obj is PgSchema {
61
+ return is(obj, PgSchema);
62
+ }
63
+
64
+ export function pgSchema<T extends string>(name: T) {
65
+ if (name === 'public') {
66
+ throw new Error(
67
+ `You can't specify 'public' as schema name. Postgres is using public schema by default. If you want to use 'public' schema, just use pgTable() instead of creating a schema`,
68
+ );
69
+ }
70
+
71
+ return new PgSchema(name);
72
+ }
@@ -0,0 +1,41 @@
1
+ import { entityKind, is } from '../entity.js';
2
+
3
+ export type PgSequenceOptions = {
4
+ increment?: number | string;
5
+ minValue?: number | string;
6
+ maxValue?: number | string;
7
+ startWith?: number | string;
8
+ cache?: number | string;
9
+ cycle?: boolean;
10
+ };
11
+
12
+ export class PgSequence {
13
+ static readonly [entityKind]: string = 'PgSequence';
14
+
15
+ constructor(
16
+ public readonly seqName: string | undefined,
17
+ public readonly seqOptions: PgSequenceOptions | undefined,
18
+ public readonly schema: string | undefined,
19
+ ) {
20
+ }
21
+ }
22
+
23
+ export function pgSequence(
24
+ name: string,
25
+ options?: PgSequenceOptions,
26
+ ): PgSequence {
27
+ return pgSequenceWithSchema(name, options, undefined);
28
+ }
29
+
30
+ /** @internal */
31
+ export function pgSequenceWithSchema(
32
+ name: string,
33
+ options?: PgSequenceOptions,
34
+ schema?: string,
35
+ ): PgSequence {
36
+ return new PgSequence(name, options, schema);
37
+ }
38
+
39
+ export function isPgSequence(obj: unknown): obj is PgSequence {
40
+ return is(obj, PgSequence);
41
+ }
@@ -0,0 +1,292 @@
1
+ import { type Cache, hashQuery, NoopCache } from '../cache/core/cache.js';
2
+ import type { WithCacheConfig } from '../cache/core/types.js';
3
+ import { entityKind, is } from '../entity.js';
4
+ import { DrizzleQueryError, TransactionRollbackError } from '../errors.js';
5
+ import type { TablesRelationalConfig } from '../relations.js';
6
+ import type { PreparedQuery } from '../session.js';
7
+ import { type Query, type SQL, sql } from '../sql/index.js';
8
+ import { tracer } from '../tracing.js';
9
+ import type { NeonAuthToken } from '../utils.js';
10
+ import { PgDatabase } from './db.js';
11
+ import type { PgDialect } from './dialect.js';
12
+ import type { SelectedFieldsOrdered } from './query-builders/select.types.js';
13
+
14
+ export interface PreparedQueryConfig {
15
+ execute: unknown;
16
+ all: unknown;
17
+ values: unknown;
18
+ }
19
+
20
+ export abstract class PgPreparedQuery<T extends PreparedQueryConfig> implements PreparedQuery {
21
+ constructor(
22
+ protected query: Query,
23
+ // cache instance
24
+ private cache: Cache | undefined,
25
+ // per query related metadata
26
+ private queryMetadata: {
27
+ type: 'select' | 'update' | 'delete' | 'insert';
28
+ tables: string[];
29
+ } | undefined,
30
+ // config that was passed through $withCache
31
+ private cacheConfig?: WithCacheConfig,
32
+ ) {
33
+ // it means that no $withCache options were passed and it should be just enabled
34
+ if (cache && cache.strategy() === 'all' && cacheConfig === undefined) {
35
+ this.cacheConfig = { enable: true, autoInvalidate: true };
36
+ }
37
+ if (!this.cacheConfig?.enable) {
38
+ this.cacheConfig = undefined;
39
+ }
40
+ }
41
+
42
+ protected authToken?: NeonAuthToken | undefined;
43
+
44
+ getQuery(): Query {
45
+ return this.query;
46
+ }
47
+
48
+ mapResult(response: unknown, _isFromBatch?: boolean): unknown {
49
+ return response;
50
+ }
51
+
52
+ /** @internal */
53
+ setToken(token?: NeonAuthToken) {
54
+ this.authToken = token;
55
+ return this;
56
+ }
57
+
58
+ static readonly [entityKind]: string = 'PgPreparedQuery';
59
+
60
+ /** @internal */
61
+ joinsNotNullableMap?: Record<string, boolean>;
62
+
63
+ /** @internal */
64
+ protected async queryWithCache<T>(
65
+ queryString: string,
66
+ params: any[],
67
+ query: () => Promise<T>,
68
+ ): Promise<T> {
69
+ if (this.cache === undefined || is(this.cache, NoopCache) || this.queryMetadata === undefined) {
70
+ try {
71
+ return await query();
72
+ } catch (e) {
73
+ throw new DrizzleQueryError(queryString, params, e as Error);
74
+ }
75
+ }
76
+
77
+ // don't do any mutations, if globally is false
78
+ if (this.cacheConfig && !this.cacheConfig.enable) {
79
+ try {
80
+ return await query();
81
+ } catch (e) {
82
+ throw new DrizzleQueryError(queryString, params, e as Error);
83
+ }
84
+ }
85
+
86
+ // For mutate queries, we should query the database, wait for a response, and then perform invalidation
87
+ if (
88
+ (
89
+ this.queryMetadata.type === 'insert' || this.queryMetadata.type === 'update'
90
+ || this.queryMetadata.type === 'delete'
91
+ ) && this.queryMetadata.tables.length > 0
92
+ ) {
93
+ try {
94
+ const [res] = await Promise.all([
95
+ query(),
96
+ this.cache.onMutate({ tables: this.queryMetadata.tables }),
97
+ ]);
98
+ return res;
99
+ } catch (e) {
100
+ throw new DrizzleQueryError(queryString, params, e as Error);
101
+ }
102
+ }
103
+
104
+ // don't do any reads if globally disabled
105
+ if (!this.cacheConfig) {
106
+ try {
107
+ return await query();
108
+ } catch (e) {
109
+ throw new DrizzleQueryError(queryString, params, e as Error);
110
+ }
111
+ }
112
+
113
+ if (this.queryMetadata.type === 'select') {
114
+ const fromCache = await this.cache.get(
115
+ this.cacheConfig.tag ?? await hashQuery(queryString, params),
116
+ this.queryMetadata.tables,
117
+ this.cacheConfig.tag !== undefined,
118
+ this.cacheConfig.autoInvalidate,
119
+ );
120
+ if (fromCache === undefined) {
121
+ let result;
122
+ try {
123
+ result = await query();
124
+ } catch (e) {
125
+ throw new DrizzleQueryError(queryString, params, e as Error);
126
+ }
127
+ // put actual key
128
+ await this.cache.put(
129
+ this.cacheConfig.tag ?? await hashQuery(queryString, params),
130
+ result,
131
+ // make sure we send tables that were used in a query only if user wants to invalidate it on each write
132
+ this.cacheConfig.autoInvalidate ? this.queryMetadata.tables : [],
133
+ this.cacheConfig.tag !== undefined,
134
+ this.cacheConfig.config,
135
+ );
136
+ // put flag if we should invalidate or not
137
+ return result;
138
+ }
139
+
140
+ return fromCache as unknown as T;
141
+ }
142
+ try {
143
+ return await query();
144
+ } catch (e) {
145
+ throw new DrizzleQueryError(queryString, params, e as Error);
146
+ }
147
+ }
148
+
149
+ abstract execute(placeholderValues?: Record<string, unknown>): Promise<T['execute']>;
150
+ /** @internal */
151
+ abstract execute(placeholderValues?: Record<string, unknown>, token?: NeonAuthToken): Promise<T['execute']>;
152
+ /** @internal */
153
+ abstract execute(placeholderValues?: Record<string, unknown>, token?: NeonAuthToken): Promise<T['execute']>;
154
+
155
+ /** @internal */
156
+ abstract all(placeholderValues?: Record<string, unknown>): Promise<T['all']>;
157
+
158
+ /** @internal */
159
+ abstract isResponseInArrayMode(): boolean;
160
+ }
161
+
162
+ export interface PgTransactionConfig {
163
+ isolationLevel?: 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable';
164
+ accessMode?: 'read only' | 'read write';
165
+ deferrable?: boolean;
166
+ }
167
+
168
+ export abstract class PgSession<
169
+ TQueryResult extends PgQueryResultHKT = PgQueryResultHKT,
170
+ TFullSchema extends Record<string, unknown> = Record<string, never>,
171
+ TSchema extends TablesRelationalConfig = Record<string, never>,
172
+ > {
173
+ static readonly [entityKind]: string = 'PgSession';
174
+
175
+ constructor(protected dialect: PgDialect) {}
176
+
177
+ abstract prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(
178
+ query: Query,
179
+ fields: SelectedFieldsOrdered | undefined,
180
+ name: string | undefined,
181
+ isResponseInArrayMode: boolean,
182
+ customResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => T['execute'],
183
+ queryMetadata?: {
184
+ type: 'select' | 'update' | 'delete' | 'insert';
185
+ tables: string[];
186
+ },
187
+ cacheConfig?: WithCacheConfig,
188
+ ): PgPreparedQuery<T>;
189
+
190
+ execute<T>(query: SQL): Promise<T>;
191
+ /** @internal */
192
+ execute<T>(query: SQL, token?: NeonAuthToken): Promise<T>;
193
+ /** @internal */
194
+ execute<T>(query: SQL, token?: NeonAuthToken): Promise<T> {
195
+ return tracer.startActiveSpan('drizzle.operation', () => {
196
+ const prepared = tracer.startActiveSpan('drizzle.prepareQuery', () => {
197
+ return this.prepareQuery<PreparedQueryConfig & { execute: T }>(
198
+ this.dialect.sqlToQuery(query),
199
+ undefined,
200
+ undefined,
201
+ false,
202
+ );
203
+ });
204
+
205
+ return prepared.setToken(token).execute(undefined, token);
206
+ });
207
+ }
208
+
209
+ all<T = unknown>(query: SQL): Promise<T[]> {
210
+ return this.prepareQuery<PreparedQueryConfig & { all: T[] }>(
211
+ this.dialect.sqlToQuery(query),
212
+ undefined,
213
+ undefined,
214
+ false,
215
+ ).all();
216
+ }
217
+
218
+ async count(sql: SQL): Promise<number>;
219
+ /** @internal */
220
+ async count(sql: SQL, token?: NeonAuthToken): Promise<number>;
221
+ /** @internal */
222
+ async count(sql: SQL, token?: NeonAuthToken): Promise<number> {
223
+ const res = await this.execute<[{ count: string }]>(sql, token);
224
+
225
+ return Number(
226
+ res[0]['count'],
227
+ );
228
+ }
229
+
230
+ abstract transaction<T>(
231
+ transaction: (tx: PgTransaction<TQueryResult, TFullSchema, TSchema>) => Promise<T>,
232
+ config?: PgTransactionConfig,
233
+ ): Promise<T>;
234
+ }
235
+
236
+ export abstract class PgTransaction<
237
+ TQueryResult extends PgQueryResultHKT,
238
+ TFullSchema extends Record<string, unknown> = Record<string, never>,
239
+ TSchema extends TablesRelationalConfig = Record<string, never>,
240
+ > extends PgDatabase<TQueryResult, TFullSchema, TSchema> {
241
+ static override readonly [entityKind]: string = 'PgTransaction';
242
+
243
+ constructor(
244
+ dialect: PgDialect,
245
+ session: PgSession<any, any, any>,
246
+ protected schema: {
247
+ fullSchema: Record<string, unknown>;
248
+ schema: TSchema;
249
+ tableNamesMap: Record<string, string>;
250
+ } | undefined,
251
+ protected readonly nestedIndex = 0,
252
+ ) {
253
+ super(dialect, session, schema);
254
+ }
255
+
256
+ rollback(): never {
257
+ throw new TransactionRollbackError();
258
+ }
259
+
260
+ /** @internal */
261
+ getTransactionConfigSQL(config: PgTransactionConfig): SQL {
262
+ const chunks: string[] = [];
263
+ if (config.isolationLevel) {
264
+ chunks.push(`isolation level ${config.isolationLevel}`);
265
+ }
266
+ if (config.accessMode) {
267
+ chunks.push(config.accessMode);
268
+ }
269
+ if (typeof config.deferrable === 'boolean') {
270
+ chunks.push(config.deferrable ? 'deferrable' : 'not deferrable');
271
+ }
272
+ return sql.raw(chunks.join(' '));
273
+ }
274
+
275
+ setTransaction(config: PgTransactionConfig): Promise<void> {
276
+ return this.session.execute(sql`set transaction ${this.getTransactionConfigSQL(config)}`);
277
+ }
278
+
279
+ abstract override transaction<T>(
280
+ transaction: (tx: PgTransaction<TQueryResult, TFullSchema, TSchema>) => Promise<T>,
281
+ ): Promise<T>;
282
+ }
283
+
284
+ export interface PgQueryResultHKT {
285
+ readonly $brand: 'PgQueryResultHKT';
286
+ readonly row: unknown;
287
+ readonly type: unknown;
288
+ }
289
+
290
+ export type PgQueryResultKind<TKind extends PgQueryResultHKT, TRow> = (TKind & {
291
+ readonly row: TRow;
292
+ })['type'];
@@ -0,0 +1,46 @@
1
+ import type { TypedQueryBuilder } from '../query-builders/query-builder.js';
2
+ import type { AddAliasToSelection } from '../query-builders/select.types.js';
3
+ import type { ColumnsSelection, SQL } from '../sql/sql.js';
4
+ import type { Subquery, WithSubquery, WithSubqueryWithoutSelection } from '../subquery.js';
5
+ import type { QueryBuilder } from './query-builders/query-builder.js';
6
+
7
+ export type SubqueryWithSelection<TSelection extends ColumnsSelection, TAlias extends string> =
8
+ & Subquery<TAlias, AddAliasToSelection<TSelection, TAlias, 'pg'>>
9
+ & AddAliasToSelection<TSelection, TAlias, 'pg'>;
10
+
11
+ export type WithSubqueryWithSelection<TSelection extends ColumnsSelection, TAlias extends string> =
12
+ & WithSubquery<TAlias, AddAliasToSelection<TSelection, TAlias, 'pg'>>
13
+ & AddAliasToSelection<TSelection, TAlias, 'pg'>;
14
+
15
+ export interface WithAs<TAlias extends string> {
16
+ <TSelection extends ColumnsSelection>(
17
+ qb: TypedQueryBuilder<TSelection> | ((qb: QueryBuilder) => TypedQueryBuilder<TSelection>),
18
+ ): WithSubqueryWithSelection<TSelection, TAlias>;
19
+ (
20
+ qb: TypedQueryBuilder<undefined> | ((qb: QueryBuilder) => TypedQueryBuilder<undefined>),
21
+ ): WithSubqueryWithoutSelection<TAlias>;
22
+ }
23
+
24
+ export type WithAsSelected<TSelection extends ColumnsSelection, TAlias extends string> = (
25
+ qb: SQL | ((qb: QueryBuilder) => SQL),
26
+ ) => WithSubqueryWithSelection<TSelection, TAlias>;
27
+
28
+ /** `as` is the only step left once a fence is chosen, so a fence cannot be set twice. */
29
+ export interface WithFenced<TAs> {
30
+ as: TAs;
31
+ }
32
+
33
+ export interface WithBuilderResult<TAs> extends WithFenced<TAs> {
34
+ /** Declare the CTE `AS MATERIALIZED`. */
35
+ materialized(): WithFenced<TAs>;
36
+ /** Declare the CTE `AS NOT MATERIALIZED`. */
37
+ notMaterialized(): WithFenced<TAs>;
38
+ }
39
+
40
+ export interface WithBuilder {
41
+ <TAlias extends string>(alias: TAlias): WithBuilderResult<WithAs<TAlias>>;
42
+ <TAlias extends string, TSelection extends ColumnsSelection>(
43
+ alias: TAlias,
44
+ selection: TSelection,
45
+ ): WithBuilderResult<WithAsSelected<TSelection, TAlias>>;
46
+ }
@@ -0,0 +1,252 @@
1
+ import type { BuildColumns, BuildExtraConfigColumns } from '../column-builder.js';
2
+ import { entityKind } from '../entity.js';
3
+ import { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '../table.js';
4
+ import type { CheckBuilder } from './checks.js';
5
+ import { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.js';
6
+ import type { ExtraConfigColumn, PgColumn, PgColumnBuilder, PgColumnBuilderBase } from './columns/common.js';
7
+ import type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.js';
8
+ import type { AnyIndexBuilder } from './indexes.js';
9
+ import type { PgPolicy } from './policies.js';
10
+ import type { PrimaryKeyBuilder } from './primary-keys.js';
11
+ import type { UniqueConstraintBuilder } from './unique-constraint.js';
12
+
13
+ export type PgTableExtraConfigValue =
14
+ | AnyIndexBuilder
15
+ | CheckBuilder
16
+ | ForeignKeyBuilder
17
+ | PrimaryKeyBuilder
18
+ | UniqueConstraintBuilder
19
+ | PgPolicy;
20
+
21
+ export type PgTableExtraConfig = Record<
22
+ string,
23
+ PgTableExtraConfigValue
24
+ >;
25
+
26
+ export type TableConfig = TableConfigBase<PgColumn>;
27
+
28
+ /** @internal */
29
+ export const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');
30
+ /** @internal */
31
+ export const EnableRLS = Symbol.for('drizzle:EnableRLS');
32
+
33
+ export class PgTable<T extends TableConfig = TableConfig> extends Table<T> {
34
+ static override readonly [entityKind]: string = 'PgTable';
35
+
36
+ /** @internal */
37
+ static override readonly Symbol = Object.assign({}, Table.Symbol, {
38
+ InlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,
39
+ EnableRLS: EnableRLS as typeof EnableRLS,
40
+ });
41
+
42
+ /**@internal */
43
+ [InlineForeignKeys]: ForeignKey[] = [];
44
+
45
+ /** @internal */
46
+ [EnableRLS]: boolean = false;
47
+
48
+ /** @internal */
49
+ override [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =
50
+ undefined;
51
+
52
+ /** @internal */
53
+ override [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};
54
+ }
55
+
56
+ export type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;
57
+
58
+ export type PgTableWithColumns<T extends TableConfig> =
59
+ & PgTable<T>
60
+ & {
61
+ [Key in keyof T['columns']]: T['columns'][Key];
62
+ }
63
+ & {
64
+ enableRLS: () => Omit<
65
+ PgTableWithColumns<T>,
66
+ 'enableRLS'
67
+ >;
68
+ };
69
+
70
+ /** @internal */
71
+ export function pgTableWithSchema<
72
+ TTableName extends string,
73
+ TSchemaName extends string | undefined,
74
+ TColumnsMap extends Record<string, PgColumnBuilderBase>,
75
+ >(
76
+ name: TTableName,
77
+ columns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),
78
+ extraConfig:
79
+ | ((self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig | PgTableExtraConfigValue[])
80
+ | undefined,
81
+ schema: TSchemaName,
82
+ baseName = name,
83
+ ): PgTableWithColumns<{
84
+ name: TTableName;
85
+ schema: TSchemaName;
86
+ columns: BuildColumns<TTableName, TColumnsMap, 'pg'>;
87
+ dialect: 'pg';
88
+ }> {
89
+ const rawTable = new PgTable<{
90
+ name: TTableName;
91
+ schema: TSchemaName;
92
+ columns: BuildColumns<TTableName, TColumnsMap, 'pg'>;
93
+ dialect: 'pg';
94
+ }>(name, schema, baseName);
95
+
96
+ const parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;
97
+
98
+ const builtColumns = Object.fromEntries(
99
+ Object.entries(parsedColumns).map(([name, colBuilderBase]) => {
100
+ const colBuilder = colBuilderBase as PgColumnBuilder;
101
+ colBuilder.setName(name);
102
+ const column = colBuilder.build(rawTable);
103
+ rawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));
104
+ return [name, column];
105
+ }),
106
+ ) as unknown as BuildColumns<TTableName, TColumnsMap, 'pg'>;
107
+
108
+ const builtColumnsForExtraConfig = Object.fromEntries(
109
+ Object.entries(parsedColumns).map(([name, colBuilderBase]) => {
110
+ const colBuilder = colBuilderBase as PgColumnBuilder;
111
+ colBuilder.setName(name);
112
+ const column = colBuilder.buildExtraConfigColumn(rawTable);
113
+ return [name, column];
114
+ }),
115
+ ) as unknown as BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>;
116
+
117
+ const table = Object.assign(rawTable, builtColumns);
118
+
119
+ table[Table.Symbol.Columns] = builtColumns;
120
+ table[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;
121
+
122
+ if (extraConfig) {
123
+ table[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;
124
+ }
125
+
126
+ return Object.assign(table, {
127
+ enableRLS: () => {
128
+ table[PgTable.Symbol.EnableRLS] = true;
129
+ return table as PgTableWithColumns<{
130
+ name: TTableName;
131
+ schema: TSchemaName;
132
+ columns: BuildColumns<TTableName, TColumnsMap, 'pg'>;
133
+ dialect: 'pg';
134
+ }>;
135
+ },
136
+ });
137
+ }
138
+
139
+ export interface PgTableFn<TSchema extends string | undefined = undefined> {
140
+ <
141
+ TTableName extends string,
142
+ TColumnsMap extends Record<string, PgColumnBuilderBase>,
143
+ >(
144
+ name: TTableName,
145
+ columns: TColumnsMap,
146
+ extraConfig?: (
147
+ self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,
148
+ ) => PgTableExtraConfigValue[],
149
+ ): PgTableWithColumns<{
150
+ name: TTableName;
151
+ schema: TSchema;
152
+ columns: BuildColumns<TTableName, TColumnsMap, 'pg'>;
153
+ dialect: 'pg';
154
+ }>;
155
+
156
+ <
157
+ TTableName extends string,
158
+ TColumnsMap extends Record<string, PgColumnBuilderBase>,
159
+ >(
160
+ name: TTableName,
161
+ columns: (columnTypes: PgColumnsBuilders) => TColumnsMap,
162
+ extraConfig?: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfigValue[],
163
+ ): PgTableWithColumns<{
164
+ name: TTableName;
165
+ schema: TSchema;
166
+ columns: BuildColumns<TTableName, TColumnsMap, 'pg'>;
167
+ dialect: 'pg';
168
+ }>;
169
+ /**
170
+ * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object
171
+ *
172
+ * @example
173
+ * Deprecated version:
174
+ * ```ts
175
+ * export const users = pgTable("users", {
176
+ * id: integer(),
177
+ * }, (t) => ({
178
+ * idx: index('custom_name').on(t.id)
179
+ * }));
180
+ * ```
181
+ *
182
+ * New API:
183
+ * ```ts
184
+ * export const users = pgTable("users", {
185
+ * id: integer(),
186
+ * }, (t) => [
187
+ * index('custom_name').on(t.id)
188
+ * ]);
189
+ * ```
190
+ */
191
+ <
192
+ TTableName extends string,
193
+ TColumnsMap extends Record<string, PgColumnBuilderBase>,
194
+ >(
195
+ name: TTableName,
196
+ columns: TColumnsMap,
197
+ extraConfig: (
198
+ self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,
199
+ ) => PgTableExtraConfig,
200
+ ): PgTableWithColumns<{
201
+ name: TTableName;
202
+ schema: TSchema;
203
+ columns: BuildColumns<TTableName, TColumnsMap, 'pg'>;
204
+ dialect: 'pg';
205
+ }>;
206
+
207
+ /**
208
+ * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object
209
+ *
210
+ * @example
211
+ * Deprecated version:
212
+ * ```ts
213
+ * export const users = pgTable("users", {
214
+ * id: integer(),
215
+ * }, (t) => ({
216
+ * idx: index('custom_name').on(t.id)
217
+ * }));
218
+ * ```
219
+ *
220
+ * New API:
221
+ * ```ts
222
+ * export const users = pgTable("users", {
223
+ * id: integer(),
224
+ * }, (t) => [
225
+ * index('custom_name').on(t.id)
226
+ * ]);
227
+ * ```
228
+ */
229
+ <
230
+ TTableName extends string,
231
+ TColumnsMap extends Record<string, PgColumnBuilderBase>,
232
+ >(
233
+ name: TTableName,
234
+ columns: (columnTypes: PgColumnsBuilders) => TColumnsMap,
235
+ extraConfig: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig,
236
+ ): PgTableWithColumns<{
237
+ name: TTableName;
238
+ schema: TSchema;
239
+ columns: BuildColumns<TTableName, TColumnsMap, 'pg'>;
240
+ dialect: 'pg';
241
+ }>;
242
+ }
243
+
244
+ export const pgTable: PgTableFn = (name, columns, extraConfig) => {
245
+ return pgTableWithSchema(name, columns, extraConfig, undefined);
246
+ };
247
+
248
+ export function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {
249
+ return (name, columns, extraConfig) => {
250
+ return pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);
251
+ };
252
+ }