pipework 0.252.0 → 0.252.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/package.json +4 -3
  3. package/src/async/jobs/abortable-delay.ts +18 -0
  4. package/src/async/jobs/claims.ts +52 -0
  5. package/src/async/jobs/cron.ts +179 -0
  6. package/src/async/jobs/errors.ts +56 -0
  7. package/src/async/jobs/exclusion.ts +117 -0
  8. package/src/async/jobs/execute.ts +219 -0
  9. package/src/async/jobs/index.ts +10 -0
  10. package/src/async/jobs/listener.ts +135 -0
  11. package/src/async/jobs/namespace.ts +20 -0
  12. package/src/async/jobs/queue-door.ts +44 -0
  13. package/src/async/jobs/queue.ts +1012 -0
  14. package/src/async/jobs/run-script.ts +67 -0
  15. package/src/async/jobs/scheduler.ts +218 -0
  16. package/src/async/jobs/schedules-table.ts +37 -0
  17. package/src/async/jobs/serialize-error.ts +48 -0
  18. package/src/async/jobs/table.ts +191 -0
  19. package/src/async/pipeline/define.ts +53 -0
  20. package/src/async/pipeline/errors.ts +35 -0
  21. package/src/async/pipeline/execute.ts +53 -0
  22. package/src/async/pipeline/index.ts +13 -0
  23. package/src/async/pipeline/namespace.ts +12 -0
  24. package/src/async/pipeline/resume.ts +67 -0
  25. package/src/async/pipeline/run-steps.ts +98 -0
  26. package/src/async/pipeline/types.ts +57 -0
  27. package/src/async/state-machine/define.ts +64 -0
  28. package/src/async/state-machine/errors.ts +29 -0
  29. package/src/async/state-machine/index.ts +3 -0
  30. package/src/async/state-machine/namespace.ts +12 -0
  31. package/src/async/state-machine/transition.ts +90 -0
  32. package/src/async/state-machine/types.ts +37 -0
  33. package/src/async/steps/errors.ts +31 -0
  34. package/src/async/steps/graph.ts +1214 -0
  35. package/src/async/steps/hash.ts +40 -0
  36. package/src/async/steps/index.ts +7 -0
  37. package/src/async/steps/namespace.ts +7 -0
  38. package/src/async/steps/table.ts +97 -0
  39. package/src/async/steps/types.ts +318 -0
  40. package/src/audit/chain/index.ts +9 -0
  41. package/src/audit/chain/install.ts +113 -0
  42. package/src/audit/chain/retire.ts +52 -0
  43. package/src/audit/chain/verify.ts +257 -0
  44. package/src/audit/query/cursor.ts +37 -0
  45. package/src/audit/query/index.ts +9 -0
  46. package/src/audit/query/query.ts +223 -0
  47. package/src/audit/schema/audit-record-fields.ts +68 -0
  48. package/src/audit/schema/audit-record.ts +23 -0
  49. package/src/auth/auth/audit.ts +31 -0
  50. package/src/auth/auth/chain.ts +84 -0
  51. package/src/auth/auth/cookie.ts +136 -0
  52. package/src/auth/auth/email-links.ts +311 -0
  53. package/src/auth/auth/guard.ts +128 -0
  54. package/src/auth/auth/index.ts +18 -0
  55. package/src/auth/auth/multi-org.ts +337 -0
  56. package/src/auth/auth/namespace.ts +34 -0
  57. package/src/auth/auth/parse-expiry.ts +13 -0
  58. package/src/auth/auth/passwords.ts +110 -0
  59. package/src/auth/auth/schema.ts +110 -0
  60. package/src/auth/auth/sessions.ts +565 -0
  61. package/src/auth/auth/sign-in.ts +156 -0
  62. package/src/auth/auth/signing-keys.ts +69 -0
  63. package/src/auth/auth/types.ts +26 -0
  64. package/src/auth/auth/uuid.ts +10 -0
  65. package/src/auth/rbac/cache.ts +55 -0
  66. package/src/auth/rbac/check.ts +30 -0
  67. package/src/auth/rbac/create.ts +35 -0
  68. package/src/auth/rbac/index.ts +5 -0
  69. package/src/auth/rbac/middleware.ts +20 -0
  70. package/src/auth/rbac/namespace.ts +15 -0
  71. package/src/auth/rbac/resolve.ts +31 -0
  72. package/src/auth/rbac/schema.sql +31 -0
  73. package/src/auth/rbac/seed.ts +67 -0
  74. package/src/auth/rbac/tables.ts +32 -0
  75. package/src/auth/rbac/types.ts +65 -0
  76. package/src/auth/tenant/extract.ts +33 -0
  77. package/src/auth/tenant/in-tenant.ts +49 -0
  78. package/src/auth/tenant/index.ts +7 -0
  79. package/src/auth/tenant/namespace.ts +23 -0
  80. package/src/auth/tenant/propagate.ts +20 -0
  81. package/src/auth/tenant/rls.ts +120 -0
  82. package/src/auth/tenant/scope.ts +33 -0
  83. package/src/auth/tenant/scoped-db.ts +581 -0
  84. package/src/auth/tenant/types.ts +14 -0
  85. package/src/auth/tenant/validate.ts +27 -0
  86. package/src/cli/commands/add.ts +158 -0
  87. package/src/cli/commands/alerts.ts +98 -0
  88. package/src/cli/commands/check.ts +1418 -0
  89. package/src/cli/commands/codemod.ts +78 -0
  90. package/src/cli/commands/db.ts +356 -0
  91. package/src/cli/commands/dev.ts +101 -0
  92. package/src/cli/commands/generate.ts +75 -0
  93. package/src/cli/commands/init.ts +36 -0
  94. package/src/cli/commands/install.ts +28 -0
  95. package/src/cli/commands/lint.ts +62 -0
  96. package/src/cli/commands/migrate.ts +132 -0
  97. package/src/cli/commands/openapi.ts +63 -0
  98. package/src/cli/commands/remove.ts +72 -0
  99. package/src/cli/commands/run.ts +50 -0
  100. package/src/cli/commands/scope.ts +54 -0
  101. package/src/cli/commands/serve.ts +68 -0
  102. package/src/cli/commands/shard.ts +31 -0
  103. package/src/cli/commands/shared/config-pipework-version.ts +28 -0
  104. package/src/cli/commands/shared/find-config.ts +22 -0
  105. package/src/cli/commands/shared/load-config.ts +35 -0
  106. package/src/cli/commands/shared/pnpm-install.ts +95 -0
  107. package/src/cli/commands/shared/report-removed.ts +8 -0
  108. package/src/cli/commands/sync.ts +32 -0
  109. package/src/cli/commands/test.ts +307 -0
  110. package/src/cli/commands/upgrade.ts +48 -0
  111. package/src/cli/dev-bootstrap.ts +24 -0
  112. package/src/cli/errors.ts +10 -0
  113. package/src/cli/index.ts +303 -0
  114. package/src/cli/output.ts +17 -0
  115. package/src/cli/port.ts +15 -0
  116. package/src/cli/surface-kinds.ts +20 -0
  117. package/src/client/index.ts +4 -0
  118. package/src/client/poll.ts +130 -0
  119. package/src/client/report-fault.ts +119 -0
  120. package/src/core/config/app-pool.ts +19 -0
  121. package/src/core/config/aws-env.ts +29 -0
  122. package/src/core/config/base-dir.ts +24 -0
  123. package/src/core/config/discover.ts +64 -0
  124. package/src/core/config/env-resolve.ts +87 -0
  125. package/src/core/config/env-types.ts +116 -0
  126. package/src/core/config/env.ts +55 -0
  127. package/src/core/config/errors.ts +9 -0
  128. package/src/core/config/import-config.ts +40 -0
  129. package/src/core/config/index.ts +8 -0
  130. package/src/core/config/load.ts +417 -0
  131. package/src/core/config/namespace.ts +14 -0
  132. package/src/core/config/resolve.ts +195 -0
  133. package/src/core/config/schema.ts +488 -0
  134. package/src/core/config/statement-observer.ts +48 -0
  135. package/src/core/config/ts-inline-hooks.ts +75 -0
  136. package/src/core/config/ts-register.ts +4 -0
  137. package/src/core/config/ts-resolve-hooks.ts +101 -0
  138. package/src/core/errors/base.ts +49 -0
  139. package/src/core/errors/http.ts +146 -0
  140. package/src/core/errors/index.ts +2 -0
  141. package/src/core/errors/namespace.ts +31 -0
  142. package/src/core/lifecycle/drain.ts +33 -0
  143. package/src/core/lifecycle/health.ts +72 -0
  144. package/src/core/lifecycle/index.ts +4 -0
  145. package/src/core/lifecycle/namespace.ts +7 -0
  146. package/src/core/lifecycle/startup.ts +102 -0
  147. package/src/core/lifecycle/types.ts +36 -0
  148. package/src/core/logging/context.ts +60 -0
  149. package/src/core/logging/error-chain.ts +68 -0
  150. package/src/core/logging/index.ts +5 -0
  151. package/src/core/logging/logger.ts +65 -0
  152. package/src/core/logging/namespace.ts +16 -0
  153. package/src/core/logging/proxy.ts +22 -0
  154. package/src/core/logging/redact-match.ts +24 -0
  155. package/src/core/logging/types.ts +47 -0
  156. package/src/core/pipework.ts +566 -0
  157. package/src/core/runtime/broker.ts +69 -0
  158. package/src/core/surface/http.ts +133 -0
  159. package/src/core/surface/index.ts +11 -0
  160. package/src/core/surface/job-timeout.ts +40 -0
  161. package/src/core/surface/namespace.ts +13 -0
  162. package/src/core/surface/script.ts +33 -0
  163. package/src/core/surface/start.ts +142 -0
  164. package/src/core/surface/types.ts +225 -0
  165. package/src/core/surface/validate.ts +88 -0
  166. package/src/core/surface/worker.ts +528 -0
  167. package/src/core/validation/connectivity.ts +49 -0
  168. package/src/core/validation/domain.ts +99 -0
  169. package/src/core/validation/index.ts +5 -0
  170. package/src/core/validation/queue-tables.ts +312 -0
  171. package/src/core/validation/rls-role.ts +138 -0
  172. package/src/core/validation/startup.ts +51 -0
  173. package/src/core/validation/surfaces.ts +65 -0
  174. package/src/core/validation/types.ts +25 -0
  175. package/src/data/db/advisory-lock.ts +55 -0
  176. package/src/data/db/aggregates.ts +172 -0
  177. package/src/data/db/array-elements.ts +111 -0
  178. package/src/data/db/bulk-set.ts +53 -0
  179. package/src/data/db/col/index.ts +14 -0
  180. package/src/data/db/composed.ts +53 -0
  181. package/src/data/db/db.ts +276 -0
  182. package/src/data/db/excluded.ts +16 -0
  183. package/src/data/db/expressions.ts +473 -0
  184. package/src/data/db/filter.ts +90 -0
  185. package/src/data/db/function-source.ts +114 -0
  186. package/src/data/db/identifiers.ts +16 -0
  187. package/src/data/db/idx/index.ts +9 -0
  188. package/src/data/db/in-list.ts +49 -0
  189. package/src/data/db/index.ts +9 -0
  190. package/src/data/db/insert-split.ts +137 -0
  191. package/src/data/db/instrumentation.ts +82 -0
  192. package/src/data/db/maintenance.ts +28 -0
  193. package/src/data/db/namespace.ts +107 -0
  194. package/src/data/db/owner-labels.ts +9 -0
  195. package/src/data/db/pool.ts +187 -0
  196. package/src/data/db/query-label.ts +13 -0
  197. package/src/data/db/query-watch.ts +116 -0
  198. package/src/data/db/raw-client-warning.ts +37 -0
  199. package/src/data/db/readonly.ts +23 -0
  200. package/src/data/db/reservation.ts +151 -0
  201. package/src/data/db/schema-features.ts +14 -0
  202. package/src/data/db/serializable.ts +83 -0
  203. package/src/data/db/sql.ts +1 -0
  204. package/src/data/db/timeouts.ts +76 -0
  205. package/src/data/db/types.ts +18 -0
  206. package/src/data/db/unbound.ts +33 -0
  207. package/src/data/db/values.ts +29 -0
  208. package/src/data/domain/brand.ts +15 -0
  209. package/src/data/domain/build-factory.ts +193 -0
  210. package/src/data/domain/build-schema.ts +161 -0
  211. package/src/data/domain/build-table.ts +355 -0
  212. package/src/data/domain/define.ts +239 -0
  213. package/src/data/domain/external-registry.ts +34 -0
  214. package/src/data/domain/external.ts +77 -0
  215. package/src/data/domain/field.ts +279 -0
  216. package/src/data/domain/index.ts +13 -0
  217. package/src/data/domain/naming.ts +6 -0
  218. package/src/data/domain/projections.ts +57 -0
  219. package/src/data/domain/trace-safe-projection.ts +31 -0
  220. package/src/data/domain/traits.ts +108 -0
  221. package/src/data/domain/types.ts +289 -0
  222. package/src/data/jsonb/composed.ts +18 -0
  223. package/src/data/jsonb/index.ts +1 -0
  224. package/src/data/jsonb/namespace.ts +30 -0
  225. package/src/data/jsonb/query.ts +86 -0
  226. package/src/data/migrate/append-only-generate.ts +47 -0
  227. package/src/data/migrate/applied.ts +47 -0
  228. package/src/data/migrate/apply.ts +309 -0
  229. package/src/data/migrate/check.ts +119 -0
  230. package/src/data/migrate/diff.ts +357 -0
  231. package/src/data/migrate/door-generate.ts +130 -0
  232. package/src/data/migrate/framework-rls.ts +58 -0
  233. package/src/data/migrate/generate.ts +201 -0
  234. package/src/data/migrate/history.ts +215 -0
  235. package/src/data/migrate/index.ts +9 -0
  236. package/src/data/migrate/internal-definitions.ts +175 -0
  237. package/src/data/migrate/post-process.ts +73 -0
  238. package/src/data/migrate/pragma.ts +73 -0
  239. package/src/data/migrate/provision-framework.ts +147 -0
  240. package/src/data/migrate/rls-generate.ts +61 -0
  241. package/src/data/migrate/run.ts +124 -0
  242. package/src/data/migrate/safety.ts +167 -0
  243. package/src/data/migrate/snapshot.ts +368 -0
  244. package/src/data/migrate/sql-emit.ts +392 -0
  245. package/src/data/migrate/statements.ts +312 -0
  246. package/src/data/query/alias.ts +126 -0
  247. package/src/data/query/batch.ts +8 -0
  248. package/src/data/query/cache/core/cache.ts +78 -0
  249. package/src/data/query/cache/core/index.ts +1 -0
  250. package/src/data/query/cache/core/types.ts +29 -0
  251. package/src/data/query/cache/readme.md +230 -0
  252. package/src/data/query/casing.ts +76 -0
  253. package/src/data/query/collation.ts +11 -0
  254. package/src/data/query/column-builder.ts +370 -0
  255. package/src/data/query/column.ts +150 -0
  256. package/src/data/query/entity.ts +42 -0
  257. package/src/data/query/errors.ts +33 -0
  258. package/src/data/query/index.ts +14 -0
  259. package/src/data/query/logger.ts +47 -0
  260. package/src/data/query/operations.ts +45 -0
  261. package/src/data/query/pg-core/alias.ts +12 -0
  262. package/src/data/query/pg-core/checks.ts +32 -0
  263. package/src/data/query/pg-core/columns/all.ts +71 -0
  264. package/src/data/query/pg-core/columns/bigint.ts +110 -0
  265. package/src/data/query/pg-core/columns/bigserial.ts +128 -0
  266. package/src/data/query/pg-core/columns/boolean.ts +43 -0
  267. package/src/data/query/pg-core/columns/char.ts +85 -0
  268. package/src/data/query/pg-core/columns/cidr.ts +43 -0
  269. package/src/data/query/pg-core/columns/common.ts +366 -0
  270. package/src/data/query/pg-core/columns/custom.ts +232 -0
  271. package/src/data/query/pg-core/columns/date.common.ts +15 -0
  272. package/src/data/query/pg-core/columns/date.ts +112 -0
  273. package/src/data/query/pg-core/columns/double-precision.ts +55 -0
  274. package/src/data/query/pg-core/columns/enum.ts +201 -0
  275. package/src/data/query/pg-core/columns/index.ts +35 -0
  276. package/src/data/query/pg-core/columns/inet.ts +43 -0
  277. package/src/data/query/pg-core/columns/int.common.ts +57 -0
  278. package/src/data/query/pg-core/columns/integer.ts +53 -0
  279. package/src/data/query/pg-core/columns/interval.ts +83 -0
  280. package/src/data/query/pg-core/columns/json.ts +58 -0
  281. package/src/data/query/pg-core/columns/jsonb.ts +56 -0
  282. package/src/data/query/pg-core/columns/line.ts +117 -0
  283. package/src/data/query/pg-core/columns/macaddr.ts +43 -0
  284. package/src/data/query/pg-core/columns/macaddr8.ts +43 -0
  285. package/src/data/query/pg-core/columns/numeric.ts +227 -0
  286. package/src/data/query/pg-core/columns/point.ts +127 -0
  287. package/src/data/query/pg-core/columns/postgis_extension/geometry.ts +119 -0
  288. package/src/data/query/pg-core/columns/postgis_extension/utils.ts +47 -0
  289. package/src/data/query/pg-core/columns/real.ts +58 -0
  290. package/src/data/query/pg-core/columns/serial.ts +55 -0
  291. package/src/data/query/pg-core/columns/smallint.ts +53 -0
  292. package/src/data/query/pg-core/columns/smallserial.ts +60 -0
  293. package/src/data/query/pg-core/columns/text.ts +67 -0
  294. package/src/data/query/pg-core/columns/time.ts +72 -0
  295. package/src/data/query/pg-core/columns/timestamp.ts +163 -0
  296. package/src/data/query/pg-core/columns/uuid.ts +51 -0
  297. package/src/data/query/pg-core/columns/varchar.ts +89 -0
  298. package/src/data/query/pg-core/columns/vector_extension/bit.ts +68 -0
  299. package/src/data/query/pg-core/columns/vector_extension/halfvec.ts +80 -0
  300. package/src/data/query/pg-core/columns/vector_extension/sparsevec.ts +67 -0
  301. package/src/data/query/pg-core/columns/vector_extension/vector.ts +80 -0
  302. package/src/data/query/pg-core/db.ts +674 -0
  303. package/src/data/query/pg-core/dialect.ts +1404 -0
  304. package/src/data/query/pg-core/expressions.ts +25 -0
  305. package/src/data/query/pg-core/foreign-keys.ts +130 -0
  306. package/src/data/query/pg-core/index.ts +21 -0
  307. package/src/data/query/pg-core/indexes.ts +276 -0
  308. package/src/data/query/pg-core/policies.ts +56 -0
  309. package/src/data/query/pg-core/primary-keys.ts +62 -0
  310. package/src/data/query/pg-core/query-builders/count.ts +86 -0
  311. package/src/data/query/pg-core/query-builders/delete.ts +293 -0
  312. package/src/data/query/pg-core/query-builders/index.ts +7 -0
  313. package/src/data/query/pg-core/query-builders/insert.ts +452 -0
  314. package/src/data/query/pg-core/query-builders/query-builder.ts +123 -0
  315. package/src/data/query/pg-core/query-builders/query.ts +157 -0
  316. package/src/data/query/pg-core/query-builders/raw.ts +49 -0
  317. package/src/data/query/pg-core/query-builders/refresh-materialized-view.ts +108 -0
  318. package/src/data/query/pg-core/query-builders/select.ts +1346 -0
  319. package/src/data/query/pg-core/query-builders/select.types.ts +437 -0
  320. package/src/data/query/pg-core/query-builders/update.ts +626 -0
  321. package/src/data/query/pg-core/roles.ts +41 -0
  322. package/src/data/query/pg-core/schema.ts +72 -0
  323. package/src/data/query/pg-core/sequence.ts +41 -0
  324. package/src/data/query/pg-core/session.ts +292 -0
  325. package/src/data/query/pg-core/subquery.ts +46 -0
  326. package/src/data/query/pg-core/table.ts +252 -0
  327. package/src/data/query/pg-core/unique-constraint.ts +73 -0
  328. package/src/data/query/pg-core/utils/array.ts +95 -0
  329. package/src/data/query/pg-core/utils/index.ts +1 -0
  330. package/src/data/query/pg-core/utils.ts +104 -0
  331. package/src/data/query/pg-core/view-base.ts +14 -0
  332. package/src/data/query/pg-core/view-common.ts +1 -0
  333. package/src/data/query/pg-core/view.ts +435 -0
  334. package/src/data/query/pg-core/with-builder.ts +41 -0
  335. package/src/data/query/postgres-js/README.md +46 -0
  336. package/src/data/query/postgres-js/array-parser.ts +45 -0
  337. package/src/data/query/postgres-js/driver-error-boundary.ts +149 -0
  338. package/src/data/query/postgres-js/driver.ts +163 -0
  339. package/src/data/query/postgres-js/index.ts +2 -0
  340. package/src/data/query/postgres-js/session.ts +234 -0
  341. package/src/data/query/primary-key.ts +11 -0
  342. package/src/data/query/query-builders/query-builder.ts +19 -0
  343. package/src/data/query/query-builders/select.types.ts +175 -0
  344. package/src/data/query/query-promise.ts +35 -0
  345. package/src/data/query/relations.ts +725 -0
  346. package/src/data/query/runnable-query.ts +12 -0
  347. package/src/data/query/selection-proxy.ts +121 -0
  348. package/src/data/query/session.ts +8 -0
  349. package/src/data/query/sql/expressions/conditions.ts +741 -0
  350. package/src/data/query/sql/expressions/index.ts +2 -0
  351. package/src/data/query/sql/expressions/select.ts +45 -0
  352. package/src/data/query/sql/functions/aggregate.ts +129 -0
  353. package/src/data/query/sql/functions/index.ts +2 -0
  354. package/src/data/query/sql/functions/vector.ts +178 -0
  355. package/src/data/query/sql/index.ts +3 -0
  356. package/src/data/query/sql/sql.ts +794 -0
  357. package/src/data/query/subquery.ts +53 -0
  358. package/src/data/query/table.ts +208 -0
  359. package/src/data/query/table.utils.ts +2 -0
  360. package/src/data/query/tracing-utils.ts +3 -0
  361. package/src/data/query/tracing.ts +11 -0
  362. package/src/data/query/utils.ts +357 -0
  363. package/src/data/query/version.ts +4 -0
  364. package/src/data/query/view-common.ts +1 -0
  365. package/src/data/schema/branded.ts +13 -0
  366. package/src/data/schema/generated/coerce.ts +5 -0
  367. package/src/data/schema/generated/combinator.ts +6 -0
  368. package/src/data/schema/generated/encoding.ts +5 -0
  369. package/src/data/schema/generated/error.ts +6 -0
  370. package/src/data/schema/generated/format.ts +5 -0
  371. package/src/data/schema/generated/type-constructor.ts +10 -0
  372. package/src/data/schema/generated/type.ts +6 -0
  373. package/src/data/schema/index.ts +6 -0
  374. package/src/data/schema/json-schema.ts +33 -0
  375. package/src/data/schema/namespace.ts +55 -0
  376. package/src/data/schema/parse.ts +39 -0
  377. package/src/data/schema/types.ts +39 -0
  378. package/src/data/temporal/append-only.ts +134 -0
  379. package/src/data/temporal/close.ts +27 -0
  380. package/src/data/temporal/columns.ts +10 -0
  381. package/src/data/temporal/definition-queries.ts +70 -0
  382. package/src/data/temporal/errors.ts +10 -0
  383. package/src/data/temporal/get-current.ts +22 -0
  384. package/src/data/temporal/index.ts +9 -0
  385. package/src/data/temporal/namespace.ts +36 -0
  386. package/src/data/temporal/query.ts +25 -0
  387. package/src/data/temporal/resolve.ts +17 -0
  388. package/src/data/temporal/revise.ts +67 -0
  389. package/src/data/temporal/types.ts +22 -0
  390. package/src/data/valve/artifact.ts +33 -0
  391. package/src/data/valve/contract-diff.ts +21 -0
  392. package/src/data/valve/cross.ts +57 -0
  393. package/src/data/valve/crossing-ledger.ts +50 -0
  394. package/src/data/valve/decision.ts +44 -0
  395. package/src/data/valve/durable-crossing.ts +52 -0
  396. package/src/data/valve/execute-crossing.ts +77 -0
  397. package/src/data/valve/faucet.ts +56 -0
  398. package/src/data/valve/gate.ts +114 -0
  399. package/src/data/valve/graph.ts +77 -0
  400. package/src/data/valve/index.ts +53 -0
  401. package/src/data/valve/namespace.ts +57 -0
  402. package/src/data/valve/registry.ts +50 -0
  403. package/src/data/valve/schema/valve-crossing-fields.ts +23 -0
  404. package/src/data/valve/schema/valve-crossing.ts +9 -0
  405. package/src/data/valve/supply.ts +154 -0
  406. package/src/data/valve/types.ts +143 -0
  407. package/src/data/vector/columns.ts +27 -0
  408. package/src/data/vector/index.ts +4 -0
  409. package/src/data/vector/namespace.ts +33 -0
  410. package/src/data/vector/query.ts +85 -0
  411. package/src/data/vector/validate.ts +16 -0
  412. package/src/data/write/audit/actor.ts +15 -0
  413. package/src/data/write/audit/audit-columns.ts +18 -0
  414. package/src/data/write/audit/audit-select.ts +111 -0
  415. package/src/data/write/audit/bound-transaction.ts +14 -0
  416. package/src/data/write/audit/cte-compile.ts +32 -0
  417. package/src/data/write/audit/decode-returning.ts +47 -0
  418. package/src/data/write/audit/final-select.ts +43 -0
  419. package/src/data/write/audit/infra-audit.ts +36 -0
  420. package/src/data/write/audit/primary-key.ts +65 -0
  421. package/src/data/write/audit/projection.ts +41 -0
  422. package/src/data/write/audit/read-touches.ts +86 -0
  423. package/src/data/write/audit/touch-match.ts +78 -0
  424. package/src/data/write/audit/verb-delete.ts +62 -0
  425. package/src/data/write/audit/verb-insert.ts +36 -0
  426. package/src/data/write/audit/verb-select.ts +47 -0
  427. package/src/data/write/audit/verb-update.ts +60 -0
  428. package/src/data/write/audit/verb-upsert.ts +104 -0
  429. package/src/data/write/conflict.ts +43 -0
  430. package/src/data/write/delete.ts +38 -0
  431. package/src/data/write/execute.ts +243 -0
  432. package/src/data/write/index.ts +11 -0
  433. package/src/data/write/insert.ts +63 -0
  434. package/src/data/write/state.ts +43 -0
  435. package/src/data/write/update.ts +54 -0
  436. package/src/data/write/upsert.ts +58 -0
  437. package/src/data/write/values.ts +19 -0
  438. package/src/index.ts +230 -0
  439. package/src/infra/access-links/code.ts +70 -0
  440. package/src/infra/access-links/handle.ts +892 -0
  441. package/src/infra/access-links/index.ts +9 -0
  442. package/src/infra/access-links/namespace.ts +30 -0
  443. package/src/infra/access-links/person-check.ts +177 -0
  444. package/src/infra/access-links/schema.ts +71 -0
  445. package/src/infra/alerts/async-sources.ts +231 -0
  446. package/src/infra/alerts/audit.ts +36 -0
  447. package/src/infra/alerts/beat.ts +123 -0
  448. package/src/infra/alerts/client-faults.ts +111 -0
  449. package/src/infra/alerts/faults.ts +156 -0
  450. package/src/infra/alerts/handle.ts +778 -0
  451. package/src/infra/alerts/http.ts +192 -0
  452. package/src/infra/alerts/index.ts +12 -0
  453. package/src/infra/alerts/infra-sources.ts +180 -0
  454. package/src/infra/alerts/namespace.ts +81 -0
  455. package/src/infra/alerts/redact.ts +21 -0
  456. package/src/infra/alerts/request-faults.ts +41 -0
  457. package/src/infra/alerts/schema.ts +124 -0
  458. package/src/infra/alerts/sinks.ts +125 -0
  459. package/src/infra/alerts/source-options.ts +26 -0
  460. package/src/infra/alerts/sources.ts +503 -0
  461. package/src/infra/alerts/subsystem-sources.ts +137 -0
  462. package/src/infra/audit/emit.ts +87 -0
  463. package/src/infra/audit/index.ts +2 -0
  464. package/src/infra/audit/namespace.ts +22 -0
  465. package/src/infra/audit/schema.sql +35 -0
  466. package/src/infra/audit/types.ts +18 -0
  467. package/src/infra/aws/credentials.ts +147 -0
  468. package/src/infra/aws/sigv4.ts +140 -0
  469. package/src/infra/cache/create.ts +58 -0
  470. package/src/infra/cache/entry.ts +81 -0
  471. package/src/infra/cache/index.ts +4 -0
  472. package/src/infra/cache/namespace.ts +10 -0
  473. package/src/infra/cache/tenant.ts +93 -0
  474. package/src/infra/cache/types.ts +24 -0
  475. package/src/infra/crawl/audit.ts +35 -0
  476. package/src/infra/crawl/errors.ts +25 -0
  477. package/src/infra/crawl/handle.ts +693 -0
  478. package/src/infra/crawl/index.ts +9 -0
  479. package/src/infra/crawl/links.ts +160 -0
  480. package/src/infra/crawl/namespace.ts +36 -0
  481. package/src/infra/crawl/robots.ts +100 -0
  482. package/src/infra/crawl/schema.ts +89 -0
  483. package/src/infra/credit-line/handle.ts +883 -0
  484. package/src/infra/credit-line/index.ts +6 -0
  485. package/src/infra/credit-line/namespace.ts +7 -0
  486. package/src/infra/credit-line/schema.ts +96 -0
  487. package/src/infra/credits/handle.ts +706 -0
  488. package/src/infra/credits/index.ts +5 -0
  489. package/src/infra/credits/namespace.ts +7 -0
  490. package/src/infra/credits/schema.ts +83 -0
  491. package/src/infra/email/audit.ts +36 -0
  492. package/src/infra/email/inbound.ts +622 -0
  493. package/src/infra/email/index.ts +11 -0
  494. package/src/infra/email/mail.ts +517 -0
  495. package/src/infra/email/mime.ts +447 -0
  496. package/src/infra/email/namespace.ts +22 -0
  497. package/src/infra/email/providers.ts +111 -0
  498. package/src/infra/email/schema.ts +96 -0
  499. package/src/infra/email/sns.ts +200 -0
  500. package/src/infra/email/unsubscribe.ts +44 -0
  501. package/src/infra/fetch/address.ts +88 -0
  502. package/src/infra/fetch/connect-retry.ts +87 -0
  503. package/src/infra/fetch/handle.ts +329 -0
  504. package/src/infra/fetch/index.ts +7 -0
  505. package/src/infra/fetch/namespace.ts +70 -0
  506. package/src/infra/idempotency/index.ts +3 -0
  507. package/src/infra/idempotency/middleware.ts +87 -0
  508. package/src/infra/idempotency/store.ts +92 -0
  509. package/src/infra/idempotency/types.ts +30 -0
  510. package/src/infra/join-requests/handle.ts +312 -0
  511. package/src/infra/join-requests/index.ts +2 -0
  512. package/src/infra/join-requests/namespace.ts +7 -0
  513. package/src/infra/join-requests/schema.ts +33 -0
  514. package/src/infra/outbox/core.ts +165 -0
  515. package/src/infra/quota/errors.ts +32 -0
  516. package/src/infra/quota/handle.ts +215 -0
  517. package/src/infra/quota/index.ts +5 -0
  518. package/src/infra/quota/namespace.ts +7 -0
  519. package/src/infra/quota/schema.ts +15 -0
  520. package/src/infra/storage/backend.ts +34 -0
  521. package/src/infra/storage/handle.ts +513 -0
  522. package/src/infra/storage/index.ts +9 -0
  523. package/src/infra/storage/local.ts +104 -0
  524. package/src/infra/storage/namespace.ts +13 -0
  525. package/src/infra/storage/s3.ts +257 -0
  526. package/src/infra/storage/schema.ts +24 -0
  527. package/src/infra/support/handle.ts +854 -0
  528. package/src/infra/support/http.ts +229 -0
  529. package/src/infra/support/index.ts +7 -0
  530. package/src/infra/support/namespace.ts +12 -0
  531. package/src/infra/support/schema.ts +96 -0
  532. package/src/infra/webhook/inbound.ts +45 -0
  533. package/src/infra/webhook/index.ts +5 -0
  534. package/src/infra/webhook/namespace.ts +24 -0
  535. package/src/infra/webhook/outbound.ts +315 -0
  536. package/src/infra/webhook/sign.ts +32 -0
  537. package/src/infra/webhook/verify.ts +82 -0
  538. package/src/invariants/assert.ts +26 -0
  539. package/src/invariants/index.ts +1 -0
  540. package/src/lint/config.ts +56 -0
  541. package/src/lint/doctrine.ts +163 -0
  542. package/src/lint/include.ts +97 -0
  543. package/src/lint/index.ts +3 -0
  544. package/src/lint/preset.ts +10 -0
  545. package/src/lint/resolver.ts +218 -0
  546. package/src/lint/rules/no-reexports.ts +46 -0
  547. package/src/request/behavior/audited.ts +85 -0
  548. package/src/request/behavior/cached.ts +62 -0
  549. package/src/request/behavior/compose.ts +28 -0
  550. package/src/request/behavior/index.ts +5 -0
  551. package/src/request/behavior/namespace.ts +16 -0
  552. package/src/request/behavior/types.ts +26 -0
  553. package/src/request/behavior/versioned.ts +54 -0
  554. package/src/request/context/create.ts +103 -0
  555. package/src/request/context/guard.ts +49 -0
  556. package/src/request/context/index.ts +4 -0
  557. package/src/request/context/run-in-transaction.ts +200 -0
  558. package/src/request/context/store.ts +28 -0
  559. package/src/request/context/types.ts +50 -0
  560. package/src/request/di/builder.ts +535 -0
  561. package/src/request/di/index.ts +8 -0
  562. package/src/request/di/resolve.ts +271 -0
  563. package/src/request/di/types.ts +262 -0
  564. package/src/request/fitting/namespace.ts +7 -0
  565. package/src/request/fixture/batch.ts +71 -0
  566. package/src/request/fixture/builder.ts +26 -0
  567. package/src/request/fixture/errors.ts +10 -0
  568. package/src/request/fixture/index.ts +8 -0
  569. package/src/request/fixture/namespace.ts +23 -0
  570. package/src/request/fixture/paginate.ts +44 -0
  571. package/src/request/fixture/to-handlers.ts +260 -0
  572. package/src/request/fixture/types.ts +79 -0
  573. package/src/request/flow/act-as.ts +78 -0
  574. package/src/request/flow/namespace.ts +17 -0
  575. package/src/request/http/error-step.ts +42 -0
  576. package/src/request/http/file.ts +141 -0
  577. package/src/request/http/index.ts +4 -0
  578. package/src/request/http/middleware.ts +141 -0
  579. package/src/request/http/namespace.ts +5 -0
  580. package/src/request/http/rate-limit-classes.ts +170 -0
  581. package/src/request/http/response.ts +82 -0
  582. package/src/request/http/server.ts +916 -0
  583. package/src/request/http/sniff.ts +261 -0
  584. package/src/request/http/types.ts +250 -0
  585. package/src/request/http/upload.ts +284 -0
  586. package/src/request/internal/text.ts +6 -0
  587. package/src/request/openapi/generate.ts +205 -0
  588. package/src/request/openapi/index.ts +2 -0
  589. package/src/request/openapi/namespace.ts +7 -0
  590. package/src/test/auth.ts +13 -0
  591. package/src/test/auto-setup.ts +45 -0
  592. package/src/test/context.ts +91 -0
  593. package/src/test/crawl-fixture.ts +157 -0
  594. package/src/test/discover-fork.ts +17 -0
  595. package/src/test/fingerprint.ts +135 -0
  596. package/src/test/globals.d.ts +7 -0
  597. package/src/test/index.ts +19 -0
  598. package/src/test/namespace.ts +87 -0
  599. package/src/test/plugin.ts +189 -0
  600. package/src/test/progress.ts +185 -0
  601. package/src/test/reap-after-run.ts +28 -0
  602. package/src/test/reap.ts +286 -0
  603. package/src/test/reset.ts +253 -0
  604. package/src/test/savepoints.ts +172 -0
  605. package/src/test/setup.ts +1422 -0
  606. package/src/test/system-channel.ts +50 -0
  607. package/src/test/vitest-plugin.ts +142 -0
  608. package/src/test/vitest-workspace.ts +507 -0
  609. package/src/test/vitest.ts +333 -0
  610. package/src/test/watch.ts +105 -0
  611. package/src/trace/capture/bounded-serializer.ts +146 -0
  612. package/src/trace/cardinality/analyze.ts +173 -0
  613. package/src/trace/cardinality/branch-context.ts +214 -0
  614. package/src/trace/cardinality/check.ts +33 -0
  615. package/src/trace/cardinality/classify-edge.ts +64 -0
  616. package/src/trace/cardinality/structural-max.ts +107 -0
  617. package/src/trace/check/coverage-check.ts +188 -0
  618. package/src/trace/check/flow-check.ts +103 -0
  619. package/src/trace/check/flow-step-site.ts +234 -0
  620. package/src/trace/check/io-pattern.ts +116 -0
  621. package/src/trace/codemod/add-cardinality.ts +152 -0
  622. package/src/trace/codemod/run.ts +80 -0
  623. package/src/trace/entry/child-trace.ts +21 -0
  624. package/src/trace/entry/close-trace.ts +87 -0
  625. package/src/trace/entry/finalize-trace.ts +28 -0
  626. package/src/trace/entry/open-trace.ts +138 -0
  627. package/src/trace/entry/parent-trace.ts +20 -0
  628. package/src/trace/entry/parse-traceparent.ts +39 -0
  629. package/src/trace/entry/process-start.ts +38 -0
  630. package/src/trace/entry/trace-context.ts +26 -0
  631. package/src/trace/entry/tracing-enabled.ts +10 -0
  632. package/src/trace/external/record.ts +195 -0
  633. package/src/trace/external/report.ts +66 -0
  634. package/src/trace/namespace.ts +19 -0
  635. package/src/trace/partition/day.ts +47 -0
  636. package/src/trace/partition/index.ts +14 -0
  637. package/src/trace/partition/partition-name.ts +23 -0
  638. package/src/trace/partition/plan.ts +82 -0
  639. package/src/trace/partition/schedule.ts +26 -0
  640. package/src/trace/partition/startup-hook.ts +39 -0
  641. package/src/trace/partition/sync.ts +154 -0
  642. package/src/trace/partition/tables.ts +53 -0
  643. package/src/trace/read/tree.ts +83 -0
  644. package/src/trace/retain/copy-on-error.ts +76 -0
  645. package/src/trace/runtime/expire-stale-traces.ts +54 -0
  646. package/src/trace/runtime/flow-step.ts +147 -0
  647. package/src/trace/runtime/flush-steps.ts +31 -0
  648. package/src/trace/runtime/pending-writes.ts +54 -0
  649. package/src/trace/runtime/step-buffer.ts +298 -0
  650. package/src/trace/runtime/step-error.ts +21 -0
  651. package/src/trace/runtime/step-meta.ts +55 -0
  652. package/src/trace/runtime/thenable.ts +12 -0
  653. package/src/trace/runtime/truncate-trace.ts +62 -0
  654. package/src/trace/schema/trace-fields.ts +52 -0
  655. package/src/trace/schema/trace-retained.ts +22 -0
  656. package/src/trace/schema/trace-step-fields.ts +44 -0
  657. package/src/trace/schema/trace-step-retained.ts +25 -0
  658. package/src/trace/schema/trace-step.ts +18 -0
  659. package/src/trace/schema/trace.ts +12 -0
  660. package/src/trace/transformer/apply.ts +79 -0
  661. package/src/trace/transformer/build-meta-literal.ts +30 -0
  662. package/src/trace/transformer/find-flow-step-sites.ts +85 -0
  663. package/src/trace/transformer/inject-flow-step-import.ts +39 -0
  664. package/src/trace/transformer/transform-error.ts +14 -0
  665. package/src/trace/transformer/transform-flow-steps.ts +123 -0
  666. package/src/trace/transformer/wrap-function-declaration.ts +62 -0
  667. package/src/trace/transformer/wrap-variable-declaration.ts +67 -0
  668. package/src/workspace/affected.ts +110 -0
  669. package/src/workspace/changed-files.ts +163 -0
  670. package/src/workspace/check-deps.ts +213 -0
  671. package/src/workspace/checksum.ts +20 -0
  672. package/src/workspace/dependency-graph.ts +67 -0
  673. package/src/workspace/detect-pipework-copies.ts +93 -0
  674. package/src/workspace/discover.ts +206 -0
  675. package/src/workspace/generate.ts +401 -0
  676. package/src/workspace/index.ts +7 -0
  677. package/src/workspace/module-imports-pipework.ts +39 -0
  678. package/src/workspace/module-package-name.ts +12 -0
  679. package/src/workspace/scrub-git-env.ts +23 -0
  680. package/src/workspace/source-paths.ts +36 -0
  681. package/src/workspace/sync.ts +182 -0
  682. package/dist/REFERENCE.md +0 -1477
  683. package/dist/infra/access-links/rate-limit.d.ts +0 -10
  684. package/dist/infra/access-links/rate-limit.d.ts.map +0 -1
  685. package/dist/infra/access-links/rate-limit.js +0 -28
  686. package/dist/infra/access-links/rate-limit.js.map +0 -1
  687. package/dist/infra/email/sigv4.d.ts +0 -24
  688. package/dist/infra/email/sigv4.d.ts.map +0 -1
  689. package/dist/infra/email/sigv4.js +0 -55
  690. package/dist/infra/email/sigv4.js.map +0 -1
@@ -0,0 +1,794 @@
1
+ import type { CasingCache } from '../casing.js';
2
+ import { entityKind, is } from '../entity.js';
3
+ import { isPgEnum } from '../pg-core/columns/enum.js';
4
+ import type { SelectResult } from '../query-builders/select.types.js';
5
+ import { Subquery } from '../subquery.js';
6
+ import { tracer } from '../tracing.js';
7
+ import type { Assume, Equal } from '../utils.js';
8
+ import { ViewBaseConfig } from '../view-common.js';
9
+ import type { AnyColumn } from '../column.js';
10
+ import { Column } from '../column.js';
11
+ import { IsAlias, Table } from '../table.js';
12
+
13
+ /**
14
+ * This class is used to indicate a primitive param value that is used in `sql` tag.
15
+ * It is only used on type level and is never instantiated at runtime.
16
+ * If you see a value of this type in the code, its runtime value is actually the primitive param value.
17
+ */
18
+ export class FakePrimitiveParam {
19
+ static readonly [entityKind]: string = 'FakePrimitiveParam';
20
+ }
21
+
22
+ export type Chunk =
23
+ | string
24
+ | Table
25
+ | View
26
+ | AnyColumn
27
+ | Name
28
+ | Param
29
+ | Placeholder
30
+ | SQL;
31
+
32
+ export interface BuildQueryConfig {
33
+ casing: CasingCache;
34
+ escapeName(name: string): string;
35
+ escapeParam(num: number, value: unknown): string;
36
+ escapeString(str: string): string;
37
+ prepareTyping?: (encoder: DriverValueEncoder<unknown, unknown>) => QueryTypingsValue;
38
+ paramStartIndex?: { value: number };
39
+ inlineParams?: boolean;
40
+ invokeSource?: 'indexes' | undefined;
41
+ }
42
+
43
+ export type QueryTypingsValue = 'json' | 'decimal' | 'time' | 'timestamp' | 'uuid' | 'date' | 'none';
44
+
45
+ export interface Query {
46
+ sql: string;
47
+ params: unknown[];
48
+ }
49
+
50
+ export interface QueryWithTypings extends Query {
51
+ typings?: QueryTypingsValue[];
52
+ }
53
+
54
+ /**
55
+ * Any value that implements the `getSQL` method. The implementations include:
56
+ * - `Table`
57
+ * - `Column`
58
+ * - `View`
59
+ * - `Subquery`
60
+ * - `SQL`
61
+ * - `SQL.Aliased`
62
+ * - `Placeholder`
63
+ * - `Param`
64
+ */
65
+ export interface SQLWrapper {
66
+ getSQL(): SQL;
67
+ shouldOmitSQLParens?(): boolean;
68
+ }
69
+
70
+ export function isSQLWrapper(value: unknown): value is SQLWrapper {
71
+ return value !== null && value !== undefined && typeof (value as any).getSQL === 'function';
72
+ }
73
+
74
+ /**
75
+ * One unit of work for the iterative query builder: a chunk plus the
76
+ * `inlineParams` setting that was in force where it was encountered.
77
+ *
78
+ * Nested `SQL` fragments can turn on parameter inlining for their own subtree
79
+ * (`.inlineParams()`), so the flag travels with the chunk rather than living in
80
+ * a single config for the whole traversal.
81
+ */
82
+ interface BuildFrame {
83
+ chunk: SQLChunk;
84
+ inlineParams: boolean;
85
+ }
86
+
87
+ export class StringChunk implements SQLWrapper {
88
+ static readonly [entityKind]: string = 'StringChunk';
89
+
90
+ readonly value: string[];
91
+
92
+ constructor(value: string | string[]) {
93
+ this.value = Array.isArray(value) ? value : [value];
94
+ }
95
+
96
+ getSQL(): SQL<unknown> {
97
+ return new SQL([this]);
98
+ }
99
+ }
100
+
101
+ export class SQL<T = unknown> implements SQLWrapper {
102
+ static readonly [entityKind]: string = 'SQL';
103
+
104
+ declare _: {
105
+ brand: 'SQL';
106
+ type: T;
107
+ };
108
+
109
+ /** @internal */
110
+ decoder: DriverValueDecoder<T, any> = noopDecoder;
111
+ private shouldInlineParams = false;
112
+
113
+ /** @internal */
114
+ usedTables: string[] = [];
115
+
116
+ constructor(readonly queryChunks: SQLChunk[]) {
117
+ for (const chunk of queryChunks) {
118
+ if (is(chunk, Table)) {
119
+ const schemaName = chunk[Table.Symbol.Schema];
120
+
121
+ this.usedTables.push(
122
+ schemaName === undefined
123
+ ? chunk[Table.Symbol.Name]
124
+ : schemaName + '.' + chunk[Table.Symbol.Name],
125
+ );
126
+ }
127
+ }
128
+ }
129
+
130
+ append(query: SQL): this {
131
+ this.queryChunks.push(...query.queryChunks);
132
+ return this;
133
+ }
134
+
135
+ toQuery(config: BuildQueryConfig): QueryWithTypings {
136
+ return tracer.startActiveSpan('drizzle.buildSQL', (span) => {
137
+ const query = this.buildQueryFromSourceParams(this.queryChunks, config);
138
+ span?.setAttributes({
139
+ 'drizzle.query.text': query.sql,
140
+ 'drizzle.query.params': JSON.stringify(query.params),
141
+ });
142
+ return query;
143
+ });
144
+ }
145
+
146
+ buildQueryFromSourceParams(chunks: SQLChunk[], _config: BuildQueryConfig): Query {
147
+ const config = Object.assign({}, _config, {
148
+ inlineParams: _config.inlineParams || this.shouldInlineParams,
149
+ paramStartIndex: _config.paramStartIndex || { value: 0 },
150
+ });
151
+
152
+ const {
153
+ casing,
154
+ escapeName,
155
+ escapeParam,
156
+ prepareTyping,
157
+ inlineParams,
158
+ paramStartIndex,
159
+ } = config;
160
+
161
+ // Traversal is iterative, not recursive: composed queries nest one `SQL`
162
+ // per fragment, so folding N fragments together produces depth-N nesting
163
+ // and self-recursion here blows the stack well before Postgres would
164
+ // object to the query. The work stack keeps depth off the call stack, and
165
+ // collecting the text in an array joined once at the end keeps the string
166
+ // work linear instead of quadratic.
167
+ const stack: BuildFrame[] = [];
168
+ const pushChunks = (source: SQLChunk[], frameInlineParams: boolean): void => {
169
+ for (let i = source.length - 1; i >= 0; i--) {
170
+ stack.push({ chunk: source[i]!, inlineParams: frameInlineParams });
171
+ }
172
+ };
173
+
174
+ const sqlParts: string[] = [];
175
+ const params: unknown[] = [];
176
+ let typings: QueryTypingsValue[] | undefined;
177
+ const pushTyping = (typing: QueryTypingsValue): void => {
178
+ if (!typings) {
179
+ typings = [];
180
+ }
181
+ typings.push(typing);
182
+ };
183
+
184
+ pushChunks(chunks, inlineParams ?? false);
185
+
186
+ while (stack.length > 0) {
187
+ const frame = stack.pop()!;
188
+ const chunk = frame.chunk;
189
+ const frameInlineParams = frame.inlineParams;
190
+
191
+ if (is(chunk, StringChunk)) {
192
+ sqlParts.push(chunk.value.join(''));
193
+ continue;
194
+ }
195
+
196
+ if (is(chunk, Name)) {
197
+ sqlParts.push(escapeName(chunk.value));
198
+ continue;
199
+ }
200
+
201
+ if (chunk === undefined) {
202
+ continue;
203
+ }
204
+
205
+ if (Array.isArray(chunk)) {
206
+ const expanded: SQLChunk[] = [new StringChunk('(')];
207
+ for (const [i, p] of chunk.entries()) {
208
+ expanded.push(p);
209
+ if (i < chunk.length - 1) {
210
+ expanded.push(new StringChunk(', '));
211
+ }
212
+ }
213
+ expanded.push(new StringChunk(')'));
214
+ pushChunks(expanded, frameInlineParams);
215
+ continue;
216
+ }
217
+
218
+ if (is(chunk, SQL)) {
219
+ pushChunks(chunk.queryChunks, frameInlineParams || chunk.shouldInlineParams);
220
+ continue;
221
+ }
222
+
223
+ if (is(chunk, Table)) {
224
+ const schemaName = chunk[Table.Symbol.Schema];
225
+ const tableName = chunk[Table.Symbol.Name];
226
+ sqlParts.push(
227
+ schemaName === undefined || chunk[IsAlias]
228
+ ? escapeName(tableName)
229
+ : escapeName(schemaName) + '.' + escapeName(tableName),
230
+ );
231
+ continue;
232
+ }
233
+
234
+ if (is(chunk, Column)) {
235
+ const columnName = casing.getColumnCasing(chunk);
236
+ if (_config.invokeSource === 'indexes') {
237
+ sqlParts.push(escapeName(columnName));
238
+ continue;
239
+ }
240
+
241
+ const schemaName = chunk.table[Table.Symbol.Schema];
242
+ sqlParts.push(
243
+ chunk.table[IsAlias] || schemaName === undefined
244
+ ? escapeName(chunk.table[Table.Symbol.Name]) + '.' + escapeName(columnName)
245
+ : escapeName(schemaName) + '.' + escapeName(chunk.table[Table.Symbol.Name]) + '.'
246
+ + escapeName(columnName),
247
+ );
248
+ continue;
249
+ }
250
+
251
+ if (is(chunk, View)) {
252
+ const schemaName = chunk[ViewBaseConfig].schema;
253
+ const viewName = chunk[ViewBaseConfig].name;
254
+ sqlParts.push(
255
+ schemaName === undefined || chunk[ViewBaseConfig].isAlias
256
+ ? escapeName(viewName)
257
+ : escapeName(schemaName) + '.' + escapeName(viewName),
258
+ );
259
+ continue;
260
+ }
261
+
262
+ if (is(chunk, Param)) {
263
+ if (is(chunk.value, Placeholder)) {
264
+ sqlParts.push(escapeParam(paramStartIndex.value++, chunk));
265
+ params.push(chunk);
266
+ pushTyping('none');
267
+ continue;
268
+ }
269
+
270
+ const mappedValue = chunk.value === null ? null : chunk.encoder.mapToDriverValue(chunk.value);
271
+
272
+ if (is(mappedValue, SQL)) {
273
+ stack.push({ chunk: mappedValue, inlineParams: frameInlineParams });
274
+ continue;
275
+ }
276
+
277
+ if (frameInlineParams) {
278
+ sqlParts.push(this.mapInlineParam(mappedValue, config));
279
+ continue;
280
+ }
281
+
282
+ sqlParts.push(escapeParam(paramStartIndex.value++, mappedValue));
283
+ params.push(mappedValue);
284
+ pushTyping(prepareTyping ? prepareTyping(chunk.encoder) : 'none');
285
+ continue;
286
+ }
287
+
288
+ if (is(chunk, Placeholder)) {
289
+ sqlParts.push(escapeParam(paramStartIndex.value++, chunk));
290
+ params.push(chunk);
291
+ pushTyping('none');
292
+ continue;
293
+ }
294
+
295
+ if (is(chunk, SQL.Aliased) && chunk.fieldAlias !== undefined) {
296
+ sqlParts.push(escapeName(chunk.fieldAlias));
297
+ continue;
298
+ }
299
+
300
+ if (is(chunk, Subquery)) {
301
+ if (chunk._.isWith) {
302
+ sqlParts.push(escapeName(chunk._.alias));
303
+ continue;
304
+ }
305
+ pushChunks([
306
+ new StringChunk('('),
307
+ chunk._.sql,
308
+ new StringChunk(') '),
309
+ new Name(chunk._.alias),
310
+ ], frameInlineParams);
311
+ continue;
312
+ }
313
+
314
+ if (isPgEnum(chunk)) {
315
+ sqlParts.push(
316
+ chunk.schema
317
+ ? escapeName(chunk.schema) + '.' + escapeName(chunk.enumName)
318
+ : escapeName(chunk.enumName),
319
+ );
320
+ continue;
321
+ }
322
+
323
+ if (isSQLWrapper(chunk)) {
324
+ if (chunk.shouldOmitSQLParens?.()) {
325
+ stack.push({ chunk: chunk.getSQL(), inlineParams: frameInlineParams });
326
+ } else {
327
+ pushChunks([
328
+ new StringChunk('('),
329
+ chunk.getSQL(),
330
+ new StringChunk(')'),
331
+ ], frameInlineParams);
332
+ }
333
+ continue;
334
+ }
335
+
336
+ if (frameInlineParams) {
337
+ sqlParts.push(this.mapInlineParam(chunk, config));
338
+ continue;
339
+ }
340
+
341
+ sqlParts.push(escapeParam(paramStartIndex.value++, chunk));
342
+ params.push(chunk);
343
+ pushTyping('none');
344
+ }
345
+
346
+ const query: QueryWithTypings = { sql: sqlParts.join(''), params };
347
+ if (typings) {
348
+ query.typings = typings;
349
+ }
350
+ return query;
351
+ }
352
+
353
+ private mapInlineParam(
354
+ chunk: unknown,
355
+ { escapeString }: BuildQueryConfig,
356
+ ): string {
357
+ if (chunk === null) {
358
+ return 'null';
359
+ }
360
+ if (typeof chunk === 'number' || typeof chunk === 'boolean') {
361
+ return chunk.toString();
362
+ }
363
+ if (typeof chunk === 'string') {
364
+ return escapeString(chunk);
365
+ }
366
+ if (typeof chunk === 'object') {
367
+ const mappedValueAsString = chunk.toString();
368
+ if (mappedValueAsString === '[object Object]') {
369
+ return escapeString(JSON.stringify(chunk));
370
+ }
371
+ return escapeString(mappedValueAsString);
372
+ }
373
+ throw new Error('Unexpected param value: ' + chunk);
374
+ }
375
+
376
+ getSQL(): SQL {
377
+ return this;
378
+ }
379
+
380
+ as(alias: string): SQL.Aliased<T>;
381
+ /**
382
+ * @deprecated
383
+ * Use ``sql<DataType>`query`.as(alias)`` instead.
384
+ */
385
+ as<TData>(): SQL<TData>;
386
+ /**
387
+ * @deprecated
388
+ * Use ``sql<DataType>`query`.as(alias)`` instead.
389
+ */
390
+ as<TData>(alias: string): SQL.Aliased<TData>;
391
+ as(alias?: string): SQL<T> | SQL.Aliased<T> {
392
+ // TODO: remove with deprecated overloads
393
+ if (alias === undefined) {
394
+ return this;
395
+ }
396
+
397
+ return new SQL.Aliased(this, alias);
398
+ }
399
+
400
+ mapWith<
401
+ TDecoder extends
402
+ | DriverValueDecoder<any, any>
403
+ | DriverValueDecoder<any, any>['mapFromDriverValue'],
404
+ >(decoder: TDecoder): SQL<GetDecoderResult<TDecoder>> {
405
+ this.decoder = typeof decoder === 'function' ? { mapFromDriverValue: decoder } : decoder;
406
+ return this as SQL<GetDecoderResult<TDecoder>>;
407
+ }
408
+
409
+ inlineParams(): this {
410
+ this.shouldInlineParams = true;
411
+ return this;
412
+ }
413
+
414
+ /**
415
+ * This method is used to conditionally include a part of the query.
416
+ *
417
+ * @param condition - Condition to check
418
+ * @returns itself if the condition is `true`, otherwise `undefined`
419
+ */
420
+ if(condition: any | undefined): this | undefined {
421
+ return condition ? this : undefined;
422
+ }
423
+ }
424
+
425
+ export type GetDecoderResult<T> = T extends Column ? T['_']['data'] : T extends
426
+ | DriverValueDecoder<infer TData, any>
427
+ | DriverValueDecoder<infer TData, any>['mapFromDriverValue'] ? TData
428
+ : never;
429
+
430
+ /**
431
+ * Any DB name (table, column, index etc.)
432
+ */
433
+ export class Name implements SQLWrapper {
434
+ static readonly [entityKind]: string = 'Name';
435
+
436
+ protected brand!: 'Name';
437
+
438
+ constructor(readonly value: string) {}
439
+
440
+ getSQL(): SQL<unknown> {
441
+ return new SQL([this]);
442
+ }
443
+ }
444
+
445
+ /**
446
+ * Any DB name (table, column, index etc.)
447
+ * @deprecated Use `sql.identifier` instead.
448
+ */
449
+ export function name(value: string): Name {
450
+ return new Name(value);
451
+ }
452
+
453
+ export interface DriverValueDecoder<TData, TDriverParam> {
454
+ mapFromDriverValue(value: TDriverParam): TData;
455
+ }
456
+
457
+ export interface DriverValueEncoder<TData, TDriverParam> {
458
+ mapToDriverValue(value: TData): TDriverParam | SQL;
459
+ }
460
+
461
+ export function isDriverValueEncoder(value: unknown): value is DriverValueEncoder<any, any> {
462
+ return typeof value === 'object' && value !== null && 'mapToDriverValue' in value
463
+ && typeof (value as any).mapToDriverValue === 'function';
464
+ }
465
+
466
+ export const noopDecoder: DriverValueDecoder<any, any> = {
467
+ mapFromDriverValue: (value) => value,
468
+ };
469
+
470
+ export const noopEncoder: DriverValueEncoder<any, any> = {
471
+ mapToDriverValue: (value) => value,
472
+ };
473
+
474
+ export interface DriverValueMapper<TData, TDriverParam>
475
+ extends DriverValueDecoder<TData, TDriverParam>, DriverValueEncoder<TData, TDriverParam>
476
+ {}
477
+
478
+ export const noopMapper: DriverValueMapper<any, any> = {
479
+ ...noopDecoder,
480
+ ...noopEncoder,
481
+ };
482
+
483
+ /** Parameter value that is optionally bound to an encoder (for example, a column). */
484
+ export class Param<TDataType = unknown, TDriverParamType = TDataType> implements SQLWrapper {
485
+ static readonly [entityKind]: string = 'Param';
486
+
487
+ protected brand!: 'BoundParamValue';
488
+
489
+ /**
490
+ * @param value - Parameter value
491
+ * @param encoder - Encoder to convert the value to a driver parameter
492
+ */
493
+ constructor(
494
+ readonly value: TDataType,
495
+ readonly encoder: DriverValueEncoder<TDataType, TDriverParamType> = noopEncoder,
496
+ ) {}
497
+
498
+ getSQL(): SQL<unknown> {
499
+ return new SQL([this]);
500
+ }
501
+ }
502
+
503
+ /** @deprecated Use `sql.param` instead. */
504
+ export function param<TData, TDriver>(
505
+ value: TData,
506
+ encoder?: DriverValueEncoder<TData, TDriver>,
507
+ ): Param<TData, TDriver> {
508
+ return new Param(value, encoder);
509
+ }
510
+
511
+ /**
512
+ * Anything that can be passed to the `` sql`...` `` tagged function.
513
+ */
514
+ export type SQLChunk =
515
+ | StringChunk
516
+ | SQLChunk[]
517
+ | SQLWrapper
518
+ | SQL
519
+ | Table
520
+ | View
521
+ | Subquery
522
+ | AnyColumn
523
+ | Param
524
+ | Name
525
+ | undefined
526
+ | FakePrimitiveParam
527
+ | Placeholder;
528
+
529
+ export function sql<T>(strings: TemplateStringsArray, ...params: any[]): SQL<T>;
530
+ /*
531
+ The type of `params` is specified as `SQLChunk[]`, but that's slightly incorrect -
532
+ in runtime, users won't pass `FakePrimitiveParam` instances as `params` - they will pass primitive values
533
+ which will be wrapped in `Param`. That's why the overload specifies `params` as `any[]` and not as `SQLSourceParam[]`.
534
+ This type is used to make our lives easier and the type checker happy.
535
+ */
536
+ export function sql(strings: TemplateStringsArray, ...params: SQLChunk[]): SQL {
537
+ const queryChunks: SQLChunk[] = [];
538
+ if (params.length > 0 || (strings.length > 0 && strings[0] !== '')) {
539
+ queryChunks.push(new StringChunk(strings[0]!));
540
+ }
541
+ for (const [paramIndex, param] of params.entries()) {
542
+ queryChunks.push(param, new StringChunk(strings[paramIndex + 1]!));
543
+ }
544
+
545
+ return new SQL(queryChunks);
546
+ }
547
+
548
+ export namespace sql {
549
+ export function empty(): SQL {
550
+ return new SQL([]);
551
+ }
552
+
553
+ /** @deprecated - use `sql.join()` */
554
+ export function fromList(list: SQLChunk[]): SQL {
555
+ return new SQL(list);
556
+ }
557
+
558
+ /**
559
+ * Convenience function to create an SQL query from a raw string.
560
+ * @param str The raw SQL query string.
561
+ */
562
+ export function raw(str: string): SQL {
563
+ return new SQL([new StringChunk(str)]);
564
+ }
565
+
566
+ /**
567
+ * Membership test for a JS list: `col ${sql.inList(xs)}` renders `= ANY(...)`, so an empty list
568
+ * matches nothing instead of the syntax error `IN ()`. Values travel as one jsonb parameter and
569
+ * are read as text; `cast` names the element type (`'uuid'`, `'int'`, `'timestamptz'`).
570
+ * @example
571
+ * ```ts
572
+ * sql`SELECT * FROM t WHERE id ${sql.inList(ids, 'uuid')}`
573
+ * ```
574
+ */
575
+ export function inList(values: readonly unknown[], cast: string = 'text'): SQL {
576
+ if (!/^[a-z_][a-z0-9_]*(\([0-9, ]+\))?$/i.test(cast)) {
577
+ throw new Error(`[pipework] sql.inList: cast "${cast}" is not a plain type name.\n`);
578
+ }
579
+ const json = JSON.stringify(values.map((v) => (v === null ? null : typeof v === 'string' ? v : v instanceof Date ? v.toISOString() : typeof v === 'object' ? JSON.stringify(v) : String(v))));
580
+ return new SQL([
581
+ new StringChunk('= ANY(ARRAY(SELECT jsonb_array_elements_text('),
582
+ new Param(json),
583
+ new StringChunk(`::jsonb))::${cast}[])`),
584
+ ]);
585
+ }
586
+
587
+ /**
588
+ * Join a list of SQL chunks with a separator.
589
+ * @example
590
+ * ```ts
591
+ * const query = sql.join([sql`a`, sql`b`, sql`c`]);
592
+ * // sql`abc`
593
+ * ```
594
+ * @example
595
+ * ```ts
596
+ * const query = sql.join([sql`a`, sql`b`, sql`c`], sql`, `);
597
+ * // sql`a, b, c`
598
+ * ```
599
+ */
600
+ export function join(chunks: SQLChunk[], separator?: SQLChunk): SQL {
601
+ const result: SQLChunk[] = [];
602
+ for (const [i, chunk] of chunks.entries()) {
603
+ if (i > 0 && separator !== undefined) {
604
+ result.push(separator);
605
+ }
606
+ result.push(chunk);
607
+ }
608
+ return new SQL(result);
609
+ }
610
+
611
+ /**
612
+ * Create a SQL chunk that represents a DB identifier (table, column, index etc.).
613
+ * When used in a query, the identifier will be escaped based on the DB engine.
614
+ * For example, in PostgreSQL, identifiers are escaped with double quotes.
615
+ *
616
+ * **WARNING: This function does not offer any protection against SQL injections, so you must validate any user input beforehand.**
617
+ *
618
+ * @example ```ts
619
+ * const query = sql`SELECT * FROM ${sql.identifier('my-table')}`;
620
+ * // 'SELECT * FROM "my-table"'
621
+ * ```
622
+ */
623
+ export function identifier(value: string): Name {
624
+ return new Name(value);
625
+ }
626
+
627
+ export function placeholder<TName extends string>(name: TName): Placeholder<TName> {
628
+ return new Placeholder(name);
629
+ }
630
+
631
+ export function param<TData, TDriver>(
632
+ value: TData,
633
+ encoder?: DriverValueEncoder<TData, TDriver>,
634
+ ): Param<TData, TDriver> {
635
+ return new Param(value, encoder);
636
+ }
637
+ }
638
+
639
+ export namespace SQL {
640
+ export class Aliased<T = unknown> implements SQLWrapper {
641
+ static readonly [entityKind]: string = 'SQL.Aliased';
642
+
643
+ declare _: {
644
+ brand: 'SQL.Aliased';
645
+ type: T;
646
+ };
647
+
648
+ /** @internal */
649
+ isSelectionField = false;
650
+
651
+ constructor(
652
+ readonly sql: SQL,
653
+ readonly fieldAlias: string,
654
+ ) {}
655
+
656
+ getSQL(): SQL {
657
+ return this.sql;
658
+ }
659
+
660
+ /** @internal */
661
+ clone() {
662
+ return new Aliased(this.sql, this.fieldAlias);
663
+ }
664
+ }
665
+ }
666
+
667
+ export class Placeholder<TName extends string = string, TValue = any> implements SQLWrapper {
668
+ static readonly [entityKind]: string = 'Placeholder';
669
+
670
+ declare protected: TValue;
671
+
672
+ constructor(readonly name: TName) {}
673
+
674
+ getSQL(): SQL {
675
+ return new SQL([this]);
676
+ }
677
+ }
678
+
679
+ /** @deprecated Use `sql.placeholder` instead. */
680
+ export function placeholder<TName extends string>(name: TName): Placeholder<TName> {
681
+ return new Placeholder(name);
682
+ }
683
+
684
+ export function fillPlaceholders(params: unknown[], values: Record<string, unknown>): unknown[] {
685
+ return params.map((p) => {
686
+ if (is(p, Placeholder)) {
687
+ if (!(p.name in values)) {
688
+ throw new Error(`No value for placeholder "${p.name}" was provided`);
689
+ }
690
+
691
+ return values[p.name];
692
+ }
693
+
694
+ if (is(p, Param) && is(p.value, Placeholder)) {
695
+ if (!(p.value.name in values)) {
696
+ throw new Error(`No value for placeholder "${p.value.name}" was provided`);
697
+ }
698
+
699
+ return p.encoder.mapToDriverValue(values[p.value.name]);
700
+ }
701
+
702
+ return p;
703
+ });
704
+ }
705
+
706
+ export type ColumnsSelection = Record<string, unknown>;
707
+
708
+ const IsDrizzleView = Symbol.for('drizzle:IsDrizzleView');
709
+
710
+ export abstract class View<
711
+ TName extends string = string,
712
+ TExisting extends boolean = boolean,
713
+ TSelection extends ColumnsSelection = ColumnsSelection,
714
+ > implements SQLWrapper {
715
+ static readonly [entityKind]: string = 'View';
716
+
717
+ declare _: {
718
+ brand: 'View';
719
+ viewBrand: string;
720
+ name: TName;
721
+ existing: TExisting;
722
+ selectedFields: TSelection;
723
+ };
724
+
725
+ /** @internal */
726
+ [ViewBaseConfig]: {
727
+ name: TName;
728
+ originalName: TName;
729
+ schema: string | undefined;
730
+ selectedFields: ColumnsSelection;
731
+ isExisting: TExisting;
732
+ query: TExisting extends true ? undefined : SQL;
733
+ isAlias: boolean;
734
+ };
735
+
736
+ /** @internal */
737
+ [IsDrizzleView] = true;
738
+
739
+ declare readonly $inferSelect: InferSelectViewModel<View<Assume<TName, string>, TExisting, TSelection>>;
740
+
741
+ constructor(
742
+ { name, schema, selectedFields, query }: {
743
+ name: TName;
744
+ schema: string | undefined;
745
+ selectedFields: ColumnsSelection;
746
+ query: SQL | undefined;
747
+ },
748
+ ) {
749
+ this[ViewBaseConfig] = {
750
+ name,
751
+ originalName: name,
752
+ schema,
753
+ selectedFields,
754
+ query: query as (TExisting extends true ? undefined : SQL),
755
+ isExisting: !query as TExisting,
756
+ isAlias: false,
757
+ };
758
+ }
759
+
760
+ getSQL(): SQL<unknown> {
761
+ return new SQL([this]);
762
+ }
763
+ }
764
+
765
+ export function isView(view: unknown): view is View {
766
+ return typeof view === 'object' && view !== null && IsDrizzleView in view;
767
+ }
768
+
769
+ export function getViewName<T extends View>(view: T): T['_']['name'] {
770
+ return view[ViewBaseConfig].name;
771
+ }
772
+
773
+ export type InferSelectViewModel<TView extends View> =
774
+ Equal<TView['_']['selectedFields'], { [x: string]: unknown }> extends true ? { [x: string]: unknown }
775
+ : SelectResult<
776
+ TView['_']['selectedFields'],
777
+ 'single',
778
+ Record<TView['_']['name'], 'not-null'>
779
+ >;
780
+
781
+ // Defined separately from the Column class to resolve circular dependency
782
+ Column.prototype.getSQL = function() {
783
+ return new SQL([this]);
784
+ };
785
+
786
+ // Defined separately from the Table class to resolve circular dependency
787
+ Table.prototype.getSQL = function() {
788
+ return new SQL([this]);
789
+ };
790
+
791
+ // Defined separately from the Column class to resolve circular dependency
792
+ Subquery.prototype.getSQL = function() {
793
+ return new SQL([this]);
794
+ };