@antelopejs/postgres 0.0.1-stage → 0.2.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 (357) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +152 -0
  3. package/dist/config.d.ts +33 -0
  4. package/dist/config.js +90 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/connection.d.ts +14 -0
  7. package/dist/connection.js +128 -0
  8. package/dist/connection.js.map +1 -0
  9. package/dist/implementations/database/changes.d.ts +19 -0
  10. package/dist/implementations/database/changes.js +100 -0
  11. package/dist/implementations/database/changes.js.map +1 -0
  12. package/dist/implementations/database/coerce.d.ts +15 -0
  13. package/dist/implementations/database/coerce.js +195 -0
  14. package/dist/implementations/database/coerce.js.map +1 -0
  15. package/dist/implementations/database/context.d.ts +32 -0
  16. package/dist/implementations/database/context.js +50 -0
  17. package/dist/implementations/database/context.js.map +1 -0
  18. package/dist/implementations/database/cursors.d.ts +16 -0
  19. package/dist/implementations/database/cursors.js +269 -0
  20. package/dist/implementations/database/cursors.js.map +1 -0
  21. package/dist/implementations/database/ddl.d.ts +62 -0
  22. package/dist/implementations/database/ddl.js +355 -0
  23. package/dist/implementations/database/ddl.js.map +1 -0
  24. package/dist/implementations/database/expression.d.ts +7 -0
  25. package/dist/implementations/database/expression.js +30 -0
  26. package/dist/implementations/database/expression.js.map +1 -0
  27. package/dist/implementations/database/external-catalog.d.ts +22 -0
  28. package/dist/implementations/database/external-catalog.js +82 -0
  29. package/dist/implementations/database/external-catalog.js.map +1 -0
  30. package/dist/implementations/database/external-errors.d.ts +20 -0
  31. package/dist/implementations/database/external-errors.js +67 -0
  32. package/dist/implementations/database/external-errors.js.map +1 -0
  33. package/dist/implementations/database/external-payload.d.ts +32 -0
  34. package/dist/implementations/database/external-payload.js +206 -0
  35. package/dist/implementations/database/external-payload.js.map +1 -0
  36. package/dist/implementations/database/external-refusals.d.ts +5 -0
  37. package/dist/implementations/database/external-refusals.js +23 -0
  38. package/dist/implementations/database/external-refusals.js.map +1 -0
  39. package/dist/implementations/database/external-schema.d.ts +3 -0
  40. package/dist/implementations/database/external-schema.js +121 -0
  41. package/dist/implementations/database/external-schema.js.map +1 -0
  42. package/dist/implementations/database/external-types.d.ts +29 -0
  43. package/dist/implementations/database/external-types.js +373 -0
  44. package/dist/implementations/database/external-types.js.map +1 -0
  45. package/dist/implementations/database/external-writes.d.ts +3 -0
  46. package/dist/implementations/database/external-writes.js +298 -0
  47. package/dist/implementations/database/external-writes.js.map +1 -0
  48. package/dist/implementations/database/feed-pipeline.d.ts +12 -0
  49. package/dist/implementations/database/feed-pipeline.js +92 -0
  50. package/dist/implementations/database/feed-pipeline.js.map +1 -0
  51. package/dist/implementations/database/feeds.d.ts +34 -0
  52. package/dist/implementations/database/feeds.js +338 -0
  53. package/dist/implementations/database/feeds.js.map +1 -0
  54. package/dist/implementations/database/fields.d.ts +37 -0
  55. package/dist/implementations/database/fields.js +114 -0
  56. package/dist/implementations/database/fields.js.map +1 -0
  57. package/dist/implementations/database/identifier.d.ts +8 -0
  58. package/dist/implementations/database/identifier.js +62 -0
  59. package/dist/implementations/database/identifier.js.map +1 -0
  60. package/dist/implementations/database/instances.d.ts +4 -0
  61. package/dist/implementations/database/instances.js +57 -0
  62. package/dist/implementations/database/instances.js.map +1 -0
  63. package/dist/implementations/database/introspect.d.ts +3 -0
  64. package/dist/implementations/database/introspect.js +36 -0
  65. package/dist/implementations/database/introspect.js.map +1 -0
  66. package/dist/implementations/database/jsonb.d.ts +29 -0
  67. package/dist/implementations/database/jsonb.js +54 -0
  68. package/dist/implementations/database/jsonb.js.map +1 -0
  69. package/dist/implementations/database/listener.d.ts +3 -0
  70. package/dist/implementations/database/listener.js +93 -0
  71. package/dist/implementations/database/listener.js.map +1 -0
  72. package/dist/implementations/database/migrate.d.ts +6 -0
  73. package/dist/implementations/database/migrate.js +282 -0
  74. package/dist/implementations/database/migrate.js.map +1 -0
  75. package/dist/implementations/database/payload.d.ts +24 -0
  76. package/dist/implementations/database/payload.js +113 -0
  77. package/dist/implementations/database/payload.js.map +1 -0
  78. package/dist/implementations/database/pipeline.d.ts +10 -0
  79. package/dist/implementations/database/pipeline.js +56 -0
  80. package/dist/implementations/database/pipeline.js.map +1 -0
  81. package/dist/implementations/database/query.d.ts +11 -0
  82. package/dist/implementations/database/query.js +189 -0
  83. package/dist/implementations/database/query.js.map +1 -0
  84. package/dist/implementations/database/readings.d.ts +17 -0
  85. package/dist/implementations/database/readings.js +133 -0
  86. package/dist/implementations/database/readings.js.map +1 -0
  87. package/dist/implementations/database/reaper.d.ts +6 -0
  88. package/dist/implementations/database/reaper.js +121 -0
  89. package/dist/implementations/database/reaper.js.map +1 -0
  90. package/dist/implementations/database/relation.d.ts +65 -0
  91. package/dist/implementations/database/relation.js +237 -0
  92. package/dist/implementations/database/relation.js.map +1 -0
  93. package/dist/implementations/database/result.d.ts +4 -0
  94. package/dist/implementations/database/result.js +70 -0
  95. package/dist/implementations/database/result.js.map +1 -0
  96. package/dist/implementations/database/row-source.d.ts +64 -0
  97. package/dist/implementations/database/row-source.js +279 -0
  98. package/dist/implementations/database/row-source.js.map +1 -0
  99. package/dist/implementations/database/schema.d.ts +15 -0
  100. package/dist/implementations/database/schema.js +143 -0
  101. package/dist/implementations/database/schema.js.map +1 -0
  102. package/dist/implementations/database/selection.d.ts +18 -0
  103. package/dist/implementations/database/selection.js +129 -0
  104. package/dist/implementations/database/selection.js.map +1 -0
  105. package/dist/implementations/database/sql.d.ts +24 -0
  106. package/dist/implementations/database/sql.js +48 -0
  107. package/dist/implementations/database/sql.js.map +1 -0
  108. package/dist/implementations/database/stage.d.ts +22 -0
  109. package/dist/implementations/database/stage.js +76 -0
  110. package/dist/implementations/database/stage.js.map +1 -0
  111. package/dist/implementations/database/stages-aggregate.d.ts +11 -0
  112. package/dist/implementations/database/stages-aggregate.js +112 -0
  113. package/dist/implementations/database/stages-aggregate.js.map +1 -0
  114. package/dist/implementations/database/stages-array.d.ts +2 -0
  115. package/dist/implementations/database/stages-array.js +162 -0
  116. package/dist/implementations/database/stages-array.js.map +1 -0
  117. package/dist/implementations/database/stages-core.d.ts +2 -0
  118. package/dist/implementations/database/stages-core.js +107 -0
  119. package/dist/implementations/database/stages-core.js.map +1 -0
  120. package/dist/implementations/database/stages-date.d.ts +2 -0
  121. package/dist/implementations/database/stages-date.js +65 -0
  122. package/dist/implementations/database/stages-date.js.map +1 -0
  123. package/dist/implementations/database/stages-group.d.ts +5 -0
  124. package/dist/implementations/database/stages-group.js +151 -0
  125. package/dist/implementations/database/stages-group.js.map +1 -0
  126. package/dist/implementations/database/stages-join.d.ts +2 -0
  127. package/dist/implementations/database/stages-join.js +162 -0
  128. package/dist/implementations/database/stages-join.js.map +1 -0
  129. package/dist/implementations/database/stages-numeric.d.ts +2 -0
  130. package/dist/implementations/database/stages-numeric.js +152 -0
  131. package/dist/implementations/database/stages-numeric.js.map +1 -0
  132. package/dist/implementations/database/stages-object.d.ts +2 -0
  133. package/dist/implementations/database/stages-object.js +81 -0
  134. package/dist/implementations/database/stages-object.js.map +1 -0
  135. package/dist/implementations/database/stages-projection.d.ts +2 -0
  136. package/dist/implementations/database/stages-projection.js +75 -0
  137. package/dist/implementations/database/stages-projection.js.map +1 -0
  138. package/dist/implementations/database/stages-rows.d.ts +2 -0
  139. package/dist/implementations/database/stages-rows.js +101 -0
  140. package/dist/implementations/database/stages-rows.js.map +1 -0
  141. package/dist/implementations/database/stages-selection.d.ts +2 -0
  142. package/dist/implementations/database/stages-selection.js +146 -0
  143. package/dist/implementations/database/stages-selection.js.map +1 -0
  144. package/dist/implementations/database/stages-string.d.ts +2 -0
  145. package/dist/implementations/database/stages-string.js +101 -0
  146. package/dist/implementations/database/stages-string.js.map +1 -0
  147. package/dist/implementations/database/subquery.d.ts +4 -0
  148. package/dist/implementations/database/subquery.js +49 -0
  149. package/dist/implementations/database/subquery.js.map +1 -0
  150. package/dist/implementations/database/types.d.ts +37 -0
  151. package/dist/implementations/database/types.js +57 -0
  152. package/dist/implementations/database/types.js.map +1 -0
  153. package/dist/implementations/database/utils.d.ts +16 -0
  154. package/dist/implementations/database/utils.js +38 -0
  155. package/dist/implementations/database/utils.js.map +1 -0
  156. package/dist/implementations/database/value.d.ts +10 -0
  157. package/dist/implementations/database/value.js +153 -0
  158. package/dist/implementations/database/value.js.map +1 -0
  159. package/dist/implementations/database/writes-atomic.d.ts +6 -0
  160. package/dist/implementations/database/writes-atomic.js +93 -0
  161. package/dist/implementations/database/writes-atomic.js.map +1 -0
  162. package/dist/implementations/database/writes-identity.d.ts +4 -0
  163. package/dist/implementations/database/writes-identity.js +181 -0
  164. package/dist/implementations/database/writes-identity.js.map +1 -0
  165. package/dist/implementations/database/writes-insert.d.ts +2 -0
  166. package/dist/implementations/database/writes-insert.js +136 -0
  167. package/dist/implementations/database/writes-insert.js.map +1 -0
  168. package/dist/implementations/database/writes-shared.d.ts +36 -0
  169. package/dist/implementations/database/writes-shared.js +64 -0
  170. package/dist/implementations/database/writes-shared.js.map +1 -0
  171. package/dist/implementations/database/writes.d.ts +16 -0
  172. package/dist/implementations/database/writes.js +52 -0
  173. package/dist/implementations/database/writes.js.map +1 -0
  174. package/dist/index.d.ts +4 -0
  175. package/dist/index.js +52 -0
  176. package/dist/index.js.map +1 -0
  177. package/dist/logger.d.ts +2 -0
  178. package/dist/logger.js +6 -0
  179. package/dist/logger.js.map +1 -0
  180. package/dist/test/antelope.test.d.ts +2 -0
  181. package/dist/test/antelope.test.js +88 -0
  182. package/dist/test/antelope.test.js.map +1 -0
  183. package/dist/test/atomic.test.d.ts +1 -0
  184. package/dist/test/atomic.test.js +132 -0
  185. package/dist/test/atomic.test.js.map +1 -0
  186. package/dist/test/contention.test.d.ts +1 -0
  187. package/dist/test/contention.test.js +183 -0
  188. package/dist/test/contention.test.js.map +1 -0
  189. package/dist/test/indexes.test.d.ts +1 -0
  190. package/dist/test/indexes.test.js +311 -0
  191. package/dist/test/indexes.test.js.map +1 -0
  192. package/dist/test/unit/changes.spec.d.ts +1 -0
  193. package/dist/test/unit/changes.spec.js +103 -0
  194. package/dist/test/unit/changes.spec.js.map +1 -0
  195. package/dist/test/unit/coerce.spec.d.ts +1 -0
  196. package/dist/test/unit/coerce.spec.js +162 -0
  197. package/dist/test/unit/coerce.spec.js.map +1 -0
  198. package/dist/test/unit/config.spec.d.ts +1 -0
  199. package/dist/test/unit/config.spec.js +123 -0
  200. package/dist/test/unit/config.spec.js.map +1 -0
  201. package/dist/test/unit/connection.spec.d.ts +1 -0
  202. package/dist/test/unit/connection.spec.js +171 -0
  203. package/dist/test/unit/connection.spec.js.map +1 -0
  204. package/dist/test/unit/cursors.spec.d.ts +1 -0
  205. package/dist/test/unit/cursors.spec.js +823 -0
  206. package/dist/test/unit/cursors.spec.js.map +1 -0
  207. package/dist/test/unit/ddl.spec.d.ts +1 -0
  208. package/dist/test/unit/ddl.spec.js +571 -0
  209. package/dist/test/unit/ddl.spec.js.map +1 -0
  210. package/dist/test/unit/expression-array.spec.d.ts +1 -0
  211. package/dist/test/unit/expression-array.spec.js +488 -0
  212. package/dist/test/unit/expression-array.spec.js.map +1 -0
  213. package/dist/test/unit/expression-date.spec.d.ts +1 -0
  214. package/dist/test/unit/expression-date.spec.js +329 -0
  215. package/dist/test/unit/expression-date.spec.js.map +1 -0
  216. package/dist/test/unit/expression-numeric.spec.d.ts +1 -0
  217. package/dist/test/unit/expression-numeric.spec.js +362 -0
  218. package/dist/test/unit/expression-numeric.spec.js.map +1 -0
  219. package/dist/test/unit/expression-object.spec.d.ts +1 -0
  220. package/dist/test/unit/expression-object.spec.js +230 -0
  221. package/dist/test/unit/expression-object.spec.js.map +1 -0
  222. package/dist/test/unit/expression-stages.spec.d.ts +1 -0
  223. package/dist/test/unit/expression-stages.spec.js +82 -0
  224. package/dist/test/unit/expression-stages.spec.js.map +1 -0
  225. package/dist/test/unit/expression-string.spec.d.ts +1 -0
  226. package/dist/test/unit/expression-string.spec.js +249 -0
  227. package/dist/test/unit/expression-string.spec.js.map +1 -0
  228. package/dist/test/unit/expression.spec.d.ts +1 -0
  229. package/dist/test/unit/expression.spec.js +449 -0
  230. package/dist/test/unit/expression.spec.js.map +1 -0
  231. package/dist/test/unit/external-comparisons.spec.d.ts +1 -0
  232. package/dist/test/unit/external-comparisons.spec.js +145 -0
  233. package/dist/test/unit/external-comparisons.spec.js.map +1 -0
  234. package/dist/test/unit/external-types.spec.d.ts +1 -0
  235. package/dist/test/unit/external-types.spec.js +191 -0
  236. package/dist/test/unit/external-types.spec.js.map +1 -0
  237. package/dist/test/unit/feeds.spec.d.ts +1 -0
  238. package/dist/test/unit/feeds.spec.js +374 -0
  239. package/dist/test/unit/feeds.spec.js.map +1 -0
  240. package/dist/test/unit/fields.spec.d.ts +1 -0
  241. package/dist/test/unit/fields.spec.js +79 -0
  242. package/dist/test/unit/fields.spec.js.map +1 -0
  243. package/dist/test/unit/identifier.spec.d.ts +1 -0
  244. package/dist/test/unit/identifier.spec.js +50 -0
  245. package/dist/test/unit/identifier.spec.js.map +1 -0
  246. package/dist/test/unit/payload.spec.d.ts +1 -0
  247. package/dist/test/unit/payload.spec.js +278 -0
  248. package/dist/test/unit/payload.spec.js.map +1 -0
  249. package/dist/test/unit/pipeline-aggregate.spec.d.ts +1 -0
  250. package/dist/test/unit/pipeline-aggregate.spec.js +199 -0
  251. package/dist/test/unit/pipeline-aggregate.spec.js.map +1 -0
  252. package/dist/test/unit/pipeline-fixture.d.ts +79 -0
  253. package/dist/test/unit/pipeline-fixture.js +277 -0
  254. package/dist/test/unit/pipeline-fixture.js.map +1 -0
  255. package/dist/test/unit/pipeline-group.spec.d.ts +1 -0
  256. package/dist/test/unit/pipeline-group.spec.js +390 -0
  257. package/dist/test/unit/pipeline-group.spec.js.map +1 -0
  258. package/dist/test/unit/pipeline-join.spec.d.ts +1 -0
  259. package/dist/test/unit/pipeline-join.spec.js +165 -0
  260. package/dist/test/unit/pipeline-join.spec.js.map +1 -0
  261. package/dist/test/unit/pipeline-lookup.spec.d.ts +1 -0
  262. package/dist/test/unit/pipeline-lookup.spec.js +268 -0
  263. package/dist/test/unit/pipeline-lookup.spec.js.map +1 -0
  264. package/dist/test/unit/pipeline-projection.spec.d.ts +1 -0
  265. package/dist/test/unit/pipeline-projection.spec.js +183 -0
  266. package/dist/test/unit/pipeline-projection.spec.js.map +1 -0
  267. package/dist/test/unit/pipeline-rows.spec.d.ts +1 -0
  268. package/dist/test/unit/pipeline-rows.spec.js +321 -0
  269. package/dist/test/unit/pipeline-rows.spec.js.map +1 -0
  270. package/dist/test/unit/pipeline-selection.spec.d.ts +1 -0
  271. package/dist/test/unit/pipeline-selection.spec.js +257 -0
  272. package/dist/test/unit/pipeline-selection.spec.js.map +1 -0
  273. package/dist/test/unit/pipeline-stages.spec.d.ts +1 -0
  274. package/dist/test/unit/pipeline-stages.spec.js +226 -0
  275. package/dist/test/unit/pipeline-stages.spec.js.map +1 -0
  276. package/dist/test/unit/pipeline.spec.d.ts +1 -0
  277. package/dist/test/unit/pipeline.spec.js +72 -0
  278. package/dist/test/unit/pipeline.spec.js.map +1 -0
  279. package/dist/test/unit/query.spec.d.ts +1 -0
  280. package/dist/test/unit/query.spec.js +212 -0
  281. package/dist/test/unit/query.spec.js.map +1 -0
  282. package/dist/test/unit/reaper.spec.d.ts +1 -0
  283. package/dist/test/unit/reaper.spec.js +122 -0
  284. package/dist/test/unit/reaper.spec.js.map +1 -0
  285. package/dist/test/unit/relation.spec.d.ts +1 -0
  286. package/dist/test/unit/relation.spec.js +348 -0
  287. package/dist/test/unit/relation.spec.js.map +1 -0
  288. package/dist/test/unit/result.spec.d.ts +1 -0
  289. package/dist/test/unit/result.spec.js +128 -0
  290. package/dist/test/unit/result.spec.js.map +1 -0
  291. package/dist/test/unit/row-source.spec.d.ts +1 -0
  292. package/dist/test/unit/row-source.spec.js +141 -0
  293. package/dist/test/unit/row-source.spec.js.map +1 -0
  294. package/dist/test/unit/schema.spec.d.ts +1 -0
  295. package/dist/test/unit/schema.spec.js +44 -0
  296. package/dist/test/unit/schema.spec.js.map +1 -0
  297. package/dist/test/unit/selection.spec.d.ts +1 -0
  298. package/dist/test/unit/selection.spec.js +182 -0
  299. package/dist/test/unit/selection.spec.js.map +1 -0
  300. package/dist/test/unit/spec-fixture.d.ts +11 -0
  301. package/dist/test/unit/spec-fixture.js +71 -0
  302. package/dist/test/unit/spec-fixture.js.map +1 -0
  303. package/dist/test/unit/sql.spec.d.ts +1 -0
  304. package/dist/test/unit/sql.spec.js +38 -0
  305. package/dist/test/unit/sql.spec.js.map +1 -0
  306. package/dist/test/unit/subquery.spec.d.ts +1 -0
  307. package/dist/test/unit/subquery.spec.js +154 -0
  308. package/dist/test/unit/subquery.spec.js.map +1 -0
  309. package/dist/test/unit/types.spec.d.ts +1 -0
  310. package/dist/test/unit/types.spec.js +39 -0
  311. package/dist/test/unit/types.spec.js.map +1 -0
  312. package/dist/test/unit/utils.spec.d.ts +1 -0
  313. package/dist/test/unit/utils.spec.js +22 -0
  314. package/dist/test/unit/utils.spec.js.map +1 -0
  315. package/dist/test/unit/value.spec.d.ts +1 -0
  316. package/dist/test/unit/value.spec.js +195 -0
  317. package/dist/test/unit/value.spec.js.map +1 -0
  318. package/dist/test/unit/writes-atomic.spec.d.ts +1 -0
  319. package/dist/test/unit/writes-atomic.spec.js +66 -0
  320. package/dist/test/unit/writes-atomic.spec.js.map +1 -0
  321. package/dist/test/unit/writes-insert.spec.d.ts +1 -0
  322. package/dist/test/unit/writes-insert.spec.js +270 -0
  323. package/dist/test/unit/writes-insert.spec.js.map +1 -0
  324. package/dist/test/unit/writes-replace.spec.d.ts +1 -0
  325. package/dist/test/unit/writes-replace.spec.js +100 -0
  326. package/dist/test/unit/writes-replace.spec.js.map +1 -0
  327. package/dist/test/unit/writes-target.spec.d.ts +1 -0
  328. package/dist/test/unit/writes-target.spec.js +118 -0
  329. package/dist/test/unit/writes-target.spec.js.map +1 -0
  330. package/dist/test/unit/writes-update.spec.d.ts +1 -0
  331. package/dist/test/unit/writes-update.spec.js +297 -0
  332. package/dist/test/unit/writes-update.spec.js.map +1 -0
  333. package/dist/test-external/fixture.d.ts +6 -0
  334. package/dist/test-external/fixture.js +136 -0
  335. package/dist/test-external/fixture.js.map +1 -0
  336. package/dist/test-external/native.test.d.ts +1 -0
  337. package/dist/test-external/native.test.js +132 -0
  338. package/dist/test-external/native.test.js.map +1 -0
  339. package/dist/test-external/reads.test.d.ts +1 -0
  340. package/dist/test-external/reads.test.js +232 -0
  341. package/dist/test-external/reads.test.js.map +1 -0
  342. package/dist/test-external/refusals.test.d.ts +1 -0
  343. package/dist/test-external/refusals.test.js +93 -0
  344. package/dist/test-external/refusals.test.js.map +1 -0
  345. package/dist/test-external/registration.test.d.ts +1 -0
  346. package/dist/test-external/registration.test.js +127 -0
  347. package/dist/test-external/registration.test.js.map +1 -0
  348. package/dist/test-external/sales.d.ts +5 -0
  349. package/dist/test-external/sales.js +126 -0
  350. package/dist/test-external/sales.js.map +1 -0
  351. package/dist/test-external/startup.test.d.ts +1 -0
  352. package/dist/test-external/startup.test.js +15 -0
  353. package/dist/test-external/startup.test.js.map +1 -0
  354. package/dist/test-external/writes.test.d.ts +1 -0
  355. package/dist/test-external/writes.test.js +315 -0
  356. package/dist/test-external/writes.test.js.map +1 -0
  357. package/package.json +75 -7
@@ -0,0 +1,2 @@
1
+ import { type WriteCompiler } from "./writes-shared";
2
+ export declare const InsertWrite: WriteCompiler;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.InsertWrite = void 0;
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const node_crypto_1 = require("node:crypto");
9
+ const types_1 = require("./types");
10
+ const stage_1 = require("./stage");
11
+ const ddl_1 = require("./ddl");
12
+ const sql_1 = require("./sql");
13
+ const fields_1 = require("./fields");
14
+ const utils_1 = require("./utils");
15
+ const payload_1 = require("./payload");
16
+ const writes_shared_1 = require("./writes-shared");
17
+ const EXCLUDED_ROW = "EXCLUDED";
18
+ const INSERTED = { id: payload_1.ID_AS_KEY };
19
+ const SIGNATURE_SEPARATOR = ",";
20
+ const SINGLE_GROUP = 1;
21
+ const GROUP_PREFIX = "g";
22
+ const GROUP_RESULT = "SELECT 1";
23
+ function Excluded(column) {
24
+ return `${EXCLUDED_ROW}.${(0, sql_1.QuoteIdentifier)(column)}`;
25
+ }
26
+ const EXCLUDED_EXTRA = Excluded(utils_1.EXTRA_COLUMN);
27
+ const CONFLICT_MODES = {
28
+ update: { everyColumn: false, extra: (0, writes_shared_1.MergeExtra)(EXCLUDED_EXTRA) },
29
+ replace: { everyColumn: true, extra: EXCLUDED_EXTRA },
30
+ };
31
+ function ConflictModeOf(stage) {
32
+ const conflict = stage.options?.conflict;
33
+ if (conflict === undefined || conflict === null) {
34
+ return undefined;
35
+ }
36
+ (0, node_assert_1.default)(typeof conflict === "string" && Object.hasOwn(CONFLICT_MODES, conflict), `The '${stage.stage}' stage takes a conflict mode of ${Object.keys(CONFLICT_MODES).join(" or ")}, received ${JSON.stringify(conflict)}`);
37
+ return CONFLICT_MODES[conflict];
38
+ }
39
+ function Documents(stage) {
40
+ const argument = stage.args[stage_1.FIRST_OPERAND];
41
+ const list = Array.isArray(argument) ? argument : [argument];
42
+ return list.map((entry, position) => {
43
+ const document = (0, writes_shared_1.AsDocument)(entry);
44
+ (0, node_assert_1.default)(document, `The '${stage.stage}' stage takes documents, and the one at position ${position} is ${(0, writes_shared_1.DescribeKind)(entry)}`);
45
+ return document;
46
+ });
47
+ }
48
+ function SuppliedId(document) {
49
+ const supplied = Object.hasOwn(document, utils_1.ID_COLUMN)
50
+ ? document[utils_1.ID_COLUMN]
51
+ : undefined;
52
+ if ((0, payload_1.NoIdSupplied)(supplied)) {
53
+ return undefined;
54
+ }
55
+ (0, node_assert_1.default)(typeof supplied === "string", `An inserted document's '${utils_1.ID_COLUMN}' must be a string, received ${typeof supplied}`);
56
+ return supplied;
57
+ }
58
+ function InsertRowOf(document, shape, context) {
59
+ const supplied = SuppliedId(document);
60
+ const id = supplied ?? (0, node_crypto_1.randomUUID)();
61
+ const generated = supplied === undefined ? (0, sql_1.Param)(context.params, id, types_1.TEXT) : undefined;
62
+ const split = (0, payload_1.SplitPayload)(document, shape, context, INSERTED);
63
+ const values = (0, payload_1.MembersByColumn)(split);
64
+ const key = generated ?? values.get(utils_1.ID_COLUMN);
65
+ (0, node_assert_1.default)(key, `An inserted row is keyed by the '${utils_1.ID_COLUMN}' its payload supplied or by the one generated for it`);
66
+ values.delete(utils_1.ID_COLUMN);
67
+ return { id, key, values, extra: split.extra };
68
+ }
69
+ function BatchColumns(shape, rows) {
70
+ return (0, fields_1.DeclaredColumns)(shape).filter((column) => rows.some((row) => row.values.has(column)));
71
+ }
72
+ function RowTuple(row, columns, instance) {
73
+ const declared = columns.map((column) => row.values.get(column)?.sql ?? writes_shared_1.NULL_VALUE);
74
+ const values = (0, fields_1.PhysicalOrder)(row.key.sql, instance, declared, row.extra?.sql ?? writes_shared_1.EMPTY_EXTRA);
75
+ return `(${values.join(", ")})`;
76
+ }
77
+ function ConflictClause(columns, mode) {
78
+ if (!mode) {
79
+ return "";
80
+ }
81
+ const assignments = columns.map((column) => (0, writes_shared_1.Assignment)(column, Excluded(column)));
82
+ assignments.push((0, writes_shared_1.Assignment)(utils_1.EXTRA_COLUMN, mode.extra));
83
+ return ` ON CONFLICT (${ddl_1.PRIMARY_KEY_LIST}) DO UPDATE SET ${assignments.join(", ")}`;
84
+ }
85
+ function InsertInto(origin, columns) {
86
+ const named = (0, fields_1.PhysicalOrder)(utils_1.ID_COLUMN, utils_1.INSTANCE_COLUMN, columns, utils_1.EXTRA_COLUMN).map((column) => (0, sql_1.QuoteIdentifier)(column));
87
+ return `INSERT INTO ${(0, writes_shared_1.WriteTable)(origin)} (${named.join(", ")})`;
88
+ }
89
+ function GroupStatement(plan, rows) {
90
+ const shape = plan.origin.shape;
91
+ const columns = plan.mode?.everyColumn
92
+ ? (0, fields_1.DeclaredColumns)(shape)
93
+ : BatchColumns(shape, rows);
94
+ const tuples = rows.map((row) => RowTuple(row, columns, plan.instance));
95
+ return `${InsertInto(plan.origin, columns)} VALUES ${tuples.join(", ")}${ConflictClause(columns, plan.mode)}`;
96
+ }
97
+ function RowGroups(plan, rows) {
98
+ if (!plan.mode || plan.mode.everyColumn) {
99
+ return [rows];
100
+ }
101
+ const groups = new Map();
102
+ for (const row of rows) {
103
+ const signature = BatchColumns(plan.origin.shape, [row]).join(SIGNATURE_SEPARATOR);
104
+ const group = groups.get(signature);
105
+ if (group) {
106
+ group.push(row);
107
+ continue;
108
+ }
109
+ groups.set(signature, [row]);
110
+ }
111
+ return [...groups.values()];
112
+ }
113
+ function OneStatement(statements) {
114
+ if (statements.length === SINGLE_GROUP) {
115
+ return statements[0];
116
+ }
117
+ const named = statements.map((statement, index) => `${(0, sql_1.QuoteIdentifier)(`${GROUP_PREFIX}${index}`)} AS (${statement})`);
118
+ return `WITH ${named.join(", ")} ${GROUP_RESULT}`;
119
+ }
120
+ const InsertWrite = (target, stage, context) => {
121
+ const instance = (0, writes_shared_1.RequireInstance)(target, stage);
122
+ const documents = Documents(stage);
123
+ if (documents.length === 0) {
124
+ return { sql: "", ids: [] };
125
+ }
126
+ const plan = {
127
+ origin: target.origin,
128
+ mode: ConflictModeOf(stage),
129
+ instance: instance.sql,
130
+ };
131
+ const rows = documents.map((document) => InsertRowOf(document, target.origin.shape, context));
132
+ const statements = RowGroups(plan, rows).map((group) => GroupStatement(plan, group));
133
+ return { sql: OneStatement(statements), ids: rows.map((row) => row.id) };
134
+ };
135
+ exports.InsertWrite = InsertWrite;
136
+ //# sourceMappingURL=writes-insert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes-insert.js","sourceRoot":"","sources":["../../../src/implementations/database/writes-insert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { DecodingContext } from "./context";
2
+ import { type QueryStage } from "./utils";
3
+ import type { InstanceScope, RootSelection } from "./selection";
4
+ import { type Compiled } from "./sql";
5
+ import { type Relation, type TableOrigin } from "./relation";
6
+ import { type RowSource } from "./row-source";
7
+ export interface WriteTarget {
8
+ relation: Relation;
9
+ origin: TableOrigin;
10
+ instance: InstanceScope;
11
+ }
12
+ export declare function WriteTargetOf(root: RootSelection, relation: Relation): WriteTarget;
13
+ export interface WriteStatement {
14
+ sql: string;
15
+ ids?: string[];
16
+ validation?: WriteValidation;
17
+ returnsIds?: boolean;
18
+ }
19
+ export interface WriteValidation {
20
+ sql: string;
21
+ params: unknown[];
22
+ failures: string[];
23
+ }
24
+ export type WriteCompiler = (target: WriteTarget, stage: QueryStage, context: DecodingContext) => WriteStatement;
25
+ export declare const WRITE_ALIAS = "w0";
26
+ export declare const EMPTY_EXTRA = "'{}'::jsonb";
27
+ export declare const NULL_VALUE = "NULL";
28
+ export declare function WriteTable(origin: TableOrigin): string;
29
+ export declare function WriteRowSource(origin: TableOrigin): RowSource;
30
+ export declare function Assignment(column: string, value: string): string;
31
+ export declare const EXISTING_EXTRA: string;
32
+ export declare function MergeExtra(incoming: string): string;
33
+ export declare function DescribeKind(value: unknown): string;
34
+ export declare function AsDocument(value: unknown): Record<string, unknown> | undefined;
35
+ export declare function RequireInstance(target: WriteTarget, stage: QueryStage): Compiled;
36
+ export declare function RefuseCrossInstance(target: WriteTarget, stage: QueryStage): void;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EXISTING_EXTRA = exports.NULL_VALUE = exports.EMPTY_EXTRA = exports.WRITE_ALIAS = void 0;
7
+ exports.WriteTargetOf = WriteTargetOf;
8
+ exports.WriteTable = WriteTable;
9
+ exports.WriteRowSource = WriteRowSource;
10
+ exports.Assignment = Assignment;
11
+ exports.MergeExtra = MergeExtra;
12
+ exports.DescribeKind = DescribeKind;
13
+ exports.AsDocument = AsDocument;
14
+ exports.RequireInstance = RequireInstance;
15
+ exports.RefuseCrossInstance = RefuseCrossInstance;
16
+ const node_assert_1 = __importDefault(require("node:assert"));
17
+ const schema_1 = require("@antelopejs/interface-database/schema");
18
+ const identifier_1 = require("./identifier");
19
+ const utils_1 = require("./utils");
20
+ const sql_1 = require("./sql");
21
+ const relation_1 = require("./relation");
22
+ const row_source_1 = require("./row-source");
23
+ function WriteTargetOf(root, relation) {
24
+ return {
25
+ relation,
26
+ origin: (0, relation_1.RequireOrigin)(relation),
27
+ instance: root.instance,
28
+ };
29
+ }
30
+ exports.WRITE_ALIAS = "w0";
31
+ exports.EMPTY_EXTRA = "'{}'::jsonb";
32
+ exports.NULL_VALUE = "NULL";
33
+ function WriteTable(origin) {
34
+ const table = (0, identifier_1.TableReference)(origin.schemaId, origin.tableId);
35
+ return `${table} AS ${(0, sql_1.QuoteIdentifier)(exports.WRITE_ALIAS)}`;
36
+ }
37
+ function WriteRowSource(origin) {
38
+ return new row_source_1.ColumnRowSource((0, row_source_1.AliasedColumns)(exports.WRITE_ALIAS), origin.shape);
39
+ }
40
+ function Assignment(column, value) {
41
+ return `${(0, sql_1.QuoteIdentifier)(column)} = ${value}`;
42
+ }
43
+ exports.EXISTING_EXTRA = `COALESCE(${(0, sql_1.QualifiedColumn)(exports.WRITE_ALIAS, utils_1.EXTRA_COLUMN)}, ${exports.EMPTY_EXTRA})`;
44
+ function MergeExtra(incoming) {
45
+ return `(${exports.EXISTING_EXTRA} || ${incoming})`;
46
+ }
47
+ function DescribeKind(value) {
48
+ return Array.isArray(value) ? "an array" : `a ${typeof value}`;
49
+ }
50
+ function AsDocument(value) {
51
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
52
+ return undefined;
53
+ }
54
+ return value;
55
+ }
56
+ function RequireInstance(target, stage) {
57
+ const scope = target.instance;
58
+ (0, node_assert_1.default)(scope !== schema_1.CROSS_INSTANCE, `The '${stage.stage}' stage cannot write under CROSS_INSTANCE: name the instance the rows belong to, or omit the instance id for the default one`);
59
+ return scope;
60
+ }
61
+ function RefuseCrossInstance(target, stage) {
62
+ RequireInstance(target, stage);
63
+ }
64
+ //# sourceMappingURL=writes-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes-shared.js","sourceRoot":"","sources":["../../../src/implementations/database/writes-shared.ts"],"names":[],"mappings":";;;;;;AAgCA,sCASC;AA6DD,gCAGC;AAWD,wCAEC;AAQD,gCAEC;AAsBD,gCAEC;AAGD,oCAEC;AAWD,gCAOC;AAaD,0CAUC;AAGD,kDAKC;AA9MD,8DAAiC;AACjC,kEAAuE;AAEvE,6CAA8C;AAE9C,mCAAwD;AAExD,+BAAwE;AACxE,yCAA4E;AAC5E,6CAA+E;AAuB/E,SAAgB,aAAa,CAC3B,IAAmB,EACnB,QAAkB;IAElB,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,IAAA,wBAAa,EAAC,QAAQ,CAAC;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;AACJ,CAAC;AAkDY,QAAA,WAAW,GAAG,IAAI,CAAC;AACnB,QAAA,WAAW,GAAG,aAAa,CAAC;AAC5B,QAAA,UAAU,GAAG,MAAM,CAAC;AASjC,SAAgB,UAAU,CAAC,MAAmB;IAC5C,MAAM,KAAK,GAAG,IAAA,2BAAc,EAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,OAAO,GAAG,KAAK,OAAO,IAAA,qBAAe,EAAC,mBAAW,CAAC,EAAE,CAAC;AACvD,CAAC;AAWD,SAAgB,cAAc,CAAC,MAAmB;IAChD,OAAO,IAAI,4BAAe,CAAC,IAAA,2BAAc,EAAC,mBAAW,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAQD,SAAgB,UAAU,CAAC,MAAc,EAAE,KAAa;IACtD,OAAO,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC;AACjD,CAAC;AAaY,QAAA,cAAc,GAAG,YAAY,IAAA,qBAAe,EAAC,mBAAW,EAAE,oBAAY,CAAC,KAAK,mBAAW,GAAG,CAAC;AASxG,SAAgB,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,sBAAc,OAAO,QAAQ,GAAG,CAAC;AAC9C,CAAC;AAGD,SAAgB,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,KAAK,EAAE,CAAC;AACjE,CAAC;AAWD,SAAgB,UAAU,CACxB,KAAc;IAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAaD,SAAgB,eAAe,CAC7B,MAAmB,EACnB,KAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC9B,IAAA,qBAAM,EACJ,KAAK,KAAK,uBAAc,EACxB,QAAQ,KAAK,CAAC,KAAK,8HAA8H,CAClJ,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,SAAgB,mBAAmB,CACjC,MAAmB,EACnB,KAAiB;IAEjB,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { QueryStage } from "./utils";
2
+ import type { DecodingContext } from "./context";
3
+ import type { WriteCompiler, WriteStatement, WriteTarget } from "./writes-shared";
4
+ interface WriteSpec {
5
+ compile: WriteCompiler;
6
+ readsRelation: boolean;
7
+ }
8
+ export type WriteSpecMap = Record<string, WriteSpec>;
9
+ export interface WriteSplit {
10
+ pipeline: QueryStage[];
11
+ write?: QueryStage;
12
+ }
13
+ export declare const WRITE_STAGES: WriteSpecMap;
14
+ export declare function SplitWrite(stages: QueryStage[]): WriteSplit;
15
+ export declare function CompileWrite(target: WriteTarget, stage: QueryStage, context: DecodingContext): WriteStatement;
16
+ export {};
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WRITE_STAGES = void 0;
7
+ exports.SplitWrite = SplitWrite;
8
+ exports.CompileWrite = CompileWrite;
9
+ const node_assert_1 = __importDefault(require("node:assert"));
10
+ const writes_insert_1 = require("./writes-insert");
11
+ const external_writes_1 = require("./external-writes");
12
+ const writes_atomic_1 = require("./writes-atomic");
13
+ const writes_identity_1 = require("./writes-identity");
14
+ exports.WRITE_STAGES = {
15
+ [writes_atomic_1.ATOMIC_MUTATION]: { compile: writes_atomic_1.AtomicWrite, readsRelation: false },
16
+ insert: { compile: writes_insert_1.InsertWrite, readsRelation: false },
17
+ update: { compile: writes_identity_1.UpdateWrite, readsRelation: true },
18
+ replace: { compile: writes_identity_1.ReplaceWrite, readsRelation: true },
19
+ delete: { compile: writes_identity_1.DeleteWrite, readsRelation: true },
20
+ };
21
+ function RefuseWrites(stages) {
22
+ for (const stage of stages) {
23
+ (0, node_assert_1.default)(!Object.hasOwn(exports.WRITE_STAGES, stage.stage), `The '${stage.stage}' stage writes and can only be the last stage of a query`);
24
+ }
25
+ }
26
+ function RefuseDiscardedStages(write, spec, pipeline) {
27
+ if (spec.readsRelation || pipeline.length === 0) {
28
+ return;
29
+ }
30
+ const discarded = pipeline.map((stage) => `'${stage.stage}'`).join(", ");
31
+ throw new Error(`The '${write.stage}' stage does not read the rows it is applied to, so every stage before it would be discarded: ${discarded}`);
32
+ }
33
+ function SplitWrite(stages) {
34
+ const last = stages[stages.length - 1];
35
+ if (!last || !Object.hasOwn(exports.WRITE_STAGES, last.stage)) {
36
+ RefuseWrites(stages);
37
+ return { pipeline: stages };
38
+ }
39
+ const pipeline = stages.slice(0, -1);
40
+ RefuseWrites(pipeline);
41
+ RefuseDiscardedStages(last, exports.WRITE_STAGES[last.stage], pipeline);
42
+ return { pipeline, write: last };
43
+ }
44
+ function CompileWrite(target, stage, context) {
45
+ (0, node_assert_1.default)(Object.hasOwn(exports.WRITE_STAGES, stage.stage), `Unsupported write stage '${stage.stage}'`);
46
+ if ((0, external_writes_1.IsExternalTarget)(target)) {
47
+ (0, node_assert_1.default)(Object.hasOwn(external_writes_1.EXTERNAL_WRITES, stage.stage), `The '${stage.stage}' stage is not supported on an external relation`);
48
+ return external_writes_1.EXTERNAL_WRITES[stage.stage](target, stage, context);
49
+ }
50
+ return exports.WRITE_STAGES[stage.stage].compile(target, stage, context);
51
+ }
52
+ //# sourceMappingURL=writes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes.js","sourceRoot":"","sources":["../../../src/implementations/database/writes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type Options } from "./config";
2
+ export type { MigrationMode, Mode, Options } from "./config";
3
+ export declare function construct(options?: Options): Promise<void>;
4
+ export declare function destroy(): Promise<void>;
package/dist/index.js ADDED
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.construct = construct;
37
+ exports.destroy = destroy;
38
+ const interface_core_1 = require("@antelopejs/interface-core");
39
+ const config_1 = require("./config");
40
+ const connection_1 = require("./connection");
41
+ async function construct(options) {
42
+ await (0, connection_1.Connect)(options);
43
+ if (!(0, config_1.IsExternal)()) {
44
+ (await Promise.resolve().then(() => __importStar(require("./implementations/database/reaper")))).StartReaper();
45
+ }
46
+ void (0, interface_core_1.ImplementInterface)(await Promise.resolve().then(() => __importStar(require("@antelopejs/interface-database/query"))), await Promise.resolve().then(() => __importStar(require("./implementations/database/query"))));
47
+ void (0, interface_core_1.ImplementInterface)(await Promise.resolve().then(() => __importStar(require("@antelopejs/interface-database/schema"))), await Promise.resolve().then(() => __importStar(require("./implementations/database/schema"))));
48
+ }
49
+ async function destroy() {
50
+ await (0, connection_1.Disconnect)();
51
+ }
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,8BAcC;AAED,0BAEC;AAzBD,+DAAgE;AAEhE,qCAAoD;AACpD,6CAAmD;AAI5C,KAAK,UAAU,SAAS,CAAC,OAAiB;IAC/C,MAAM,IAAA,oBAAO,EAAC,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC,IAAA,mBAAU,GAAE,EAAE,CAAC;QAClB,CAAC,wDAAa,mCAAmC,GAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,IAAA,mCAAkB,EACrB,wDAAa,sCAAsC,GAAC,EACpD,wDAAa,kCAAkC,GAAC,CACjD,CAAC;IACF,KAAK,IAAA,mCAAkB,EACrB,wDAAa,uCAAuC,GAAC,EACrD,wDAAa,mCAAmC,GAAC,CAClD,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,OAAO;IAC3B,MAAM,IAAA,uBAAU,GAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Logging } from "@antelopejs/interface-core/logging";
2
+ export declare const Logger: Logging.Channel;
package/dist/logger.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = void 0;
4
+ const logging_1 = require("@antelopejs/interface-core/logging");
5
+ exports.Logger = new logging_1.Logging.Channel("postgres");
6
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAAA,gEAA6D;AAEhD,QAAA,MAAM,GAAG,IAAI,iBAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@antelopejs/interface-core/config").ConfigInput;
2
+ export default _default;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const pg_1 = require("pg");
4
+ const config_1 = require("@antelopejs/interface-core/config");
5
+ const postgresql_1 = require("@testcontainers/postgresql");
6
+ const fixture_1 = require("../test-external/fixture");
7
+ const POSTGRES_IMAGE = "postgres:18-alpine";
8
+ const TEST_DATABASE = "antelopejs_test";
9
+ const EXTERNAL_MODE = "external";
10
+ let container;
11
+ function moduleConfig(config) {
12
+ return { modules: { local: { config } } };
13
+ }
14
+ async function OwnerUrl() {
15
+ if (process.env.PG_TEST_URL) {
16
+ return process.env.PG_TEST_URL;
17
+ }
18
+ container = await new postgresql_1.PostgreSqlContainer(POSTGRES_IMAGE)
19
+ .withDatabase(TEST_DATABASE)
20
+ .start();
21
+ return container.getConnectionUri();
22
+ }
23
+ async function Run(url, statements) {
24
+ const client = new pg_1.Client({ connectionString: url });
25
+ await client.connect();
26
+ try {
27
+ for (const statement of statements) {
28
+ await client.query(statement);
29
+ }
30
+ }
31
+ finally {
32
+ await client.end();
33
+ }
34
+ }
35
+ function WithDatabase(url, database, user) {
36
+ const target = new URL(url);
37
+ target.pathname = `/${database}`;
38
+ if (user) {
39
+ target.username = user;
40
+ target.password = fixture_1.READER_PASSWORD;
41
+ }
42
+ return target.toString();
43
+ }
44
+ async function ClientDatabase(ownerUrl) {
45
+ await Run(ownerUrl, [
46
+ `DROP DATABASE IF EXISTS ${fixture_1.CLIENT_DATABASE}`,
47
+ `CREATE DATABASE ${fixture_1.CLIENT_DATABASE}`,
48
+ `DO $$ BEGIN
49
+ IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '${fixture_1.CLIENT_ROLE}') THEN
50
+ CREATE ROLE ${fixture_1.CLIENT_ROLE} LOGIN PASSWORD '${fixture_1.READER_PASSWORD}';
51
+ END IF;
52
+ END $$`,
53
+ ]);
54
+ const clientOwnerUrl = WithDatabase(ownerUrl, fixture_1.CLIENT_DATABASE);
55
+ await Run(clientOwnerUrl, [
56
+ ...fixture_1.FIXTURE,
57
+ ...(0, fixture_1.ReaderGrants)(fixture_1.CLIENT_ROLE),
58
+ ...(0, fixture_1.WriterGrants)(fixture_1.CLIENT_ROLE),
59
+ ]);
60
+ process.env.PG_TEST_CLIENT_OWNER_URL = clientOwnerUrl;
61
+ return WithDatabase(ownerUrl, fixture_1.CLIENT_DATABASE, fixture_1.CLIENT_ROLE);
62
+ }
63
+ exports.default = (0, config_1.defineConfig)({
64
+ name: "postgres-test",
65
+ cacheFolder: ".antelope/cache",
66
+ modules: {
67
+ local: {
68
+ source: { type: "local", path: "." },
69
+ },
70
+ },
71
+ test: {
72
+ folder: "dist/test",
73
+ async setup() {
74
+ const url = await OwnerUrl();
75
+ if (process.env.PG_TEST_MODE !== EXTERNAL_MODE) {
76
+ return moduleConfig({ url });
77
+ }
78
+ return moduleConfig({
79
+ url: await ClientDatabase(url),
80
+ mode: EXTERNAL_MODE,
81
+ });
82
+ },
83
+ async cleanup() {
84
+ await container?.stop();
85
+ },
86
+ },
87
+ });
88
+ //# sourceMappingURL=antelope.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antelope.test.js","sourceRoot":"","sources":["../../src/test/antelope.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const schema_1 = require("@antelopejs/interface-database/schema");
5
+ const schema = new schema_1.Schema("atomic_results", {
6
+ records: { fields: { value: "string" }, indexes: {} },
7
+ declared: {
8
+ fields: { revision: "string", value: "string", updatedAt: "date" },
9
+ indexes: {},
10
+ },
11
+ });
12
+ const table = schema.instance("tenant").table("records");
13
+ const ID = "one";
14
+ const update = {
15
+ type: "update",
16
+ revisionField: "revision",
17
+ expectedRevision: "old",
18
+ nextRevision: "fresh",
19
+ patch: { value: "after", details: { kept: true } },
20
+ };
21
+ async function Seed(document = {}) {
22
+ await table.insert({ _id: ID, value: "before", ...document });
23
+ }
24
+ describe("atomic mutation results and scope", () => {
25
+ beforeEach(async () => {
26
+ await table.delete();
27
+ });
28
+ it("persists inserted overflow revisions and replaces nested fields as a whole", async () => {
29
+ await Seed({ revision: "old", details: { removed: true } });
30
+ (0, chai_1.expect)((await table.get(ID))?.revision).to.equal("old");
31
+ (0, chai_1.expect)(await table.atomicMutation(ID, update)).to.equal("applied");
32
+ (0, chai_1.expect)(await table.get(ID)).to.include({
33
+ revision: "fresh",
34
+ value: "after",
35
+ });
36
+ const rows = await table.filter((row) => row.key("revision").eq("fresh"));
37
+ (0, chai_1.expect)(rows).to.have.length(1);
38
+ (0, chai_1.expect)(rows[0].revision).to.equal("fresh");
39
+ (0, chai_1.expect)(rows[0].details).to.deep.equal({ kept: true });
40
+ });
41
+ it("bootstraps absent overflow revisions but not stored null or an absent row", async () => {
42
+ const request = {
43
+ ...update,
44
+ expectedRevision: { kind: "missing" },
45
+ };
46
+ (0, chai_1.expect)(await table.atomicMutation(ID, request)).to.equal("not-applied");
47
+ await Seed({ revision: null });
48
+ (0, chai_1.expect)(await table.atomicMutation(ID, request)).to.equal("not-applied");
49
+ await table.get(ID).update({ revision: undefined });
50
+ (0, chai_1.expect)(await table.atomicMutation(ID, request)).to.equal("applied");
51
+ (0, chai_1.expect)((await table.get(ID))?.revision).to.equal("fresh");
52
+ });
53
+ it("rejects missing-revision bootstrap on declared columns", async () => {
54
+ try {
55
+ await schema
56
+ .instance()
57
+ .table("declared")
58
+ .atomicMutation(ID, {
59
+ ...update,
60
+ expectedRevision: { kind: "missing" },
61
+ });
62
+ chai_1.expect.fail("expected unsupported bootstrap");
63
+ }
64
+ catch (error) {
65
+ (0, chai_1.expect)(String(error)).to.include("Missing revision bootstrap is unsupported");
66
+ }
67
+ });
68
+ it("supports the default instance and refuses cross-instance mutation", async () => {
69
+ const defaults = schema.instance().table("records");
70
+ await defaults.delete();
71
+ await defaults.insert({ _id: ID, revision: "old" });
72
+ (0, chai_1.expect)(await defaults.atomicMutation(ID, update)).to.equal("applied");
73
+ (0, chai_1.expect)(() => schema
74
+ .instance(schema_1.CROSS_INSTANCE)
75
+ .table("records")
76
+ .atomicMutation(ID, update)).to.throw();
77
+ });
78
+ });
79
+ describe("atomic scalar equality deletes", () => {
80
+ beforeEach(async () => {
81
+ await table.delete();
82
+ });
83
+ it("compares declared dates by instant and leaves a changed date untouched", async () => {
84
+ const declared = schema.instance().table("declared");
85
+ await declared.delete();
86
+ const updatedAt = new Date("2026-01-05T10:00:00+02:00");
87
+ await declared.insert({ _id: ID, updatedAt });
88
+ (0, chai_1.expect)(await declared.atomicMutation(ID, {
89
+ type: "deleteIfEqual",
90
+ field: "updatedAt",
91
+ expectedValue: new Date("2026-01-05T08:00:01Z"),
92
+ })).to.equal("not-applied");
93
+ (0, chai_1.expect)(await declared.atomicMutation(ID, {
94
+ type: "deleteIfEqual",
95
+ field: "updatedAt",
96
+ expectedValue: new Date("2026-01-05T08:00:00Z"),
97
+ })).to.equal("applied");
98
+ });
99
+ it("preserves scalar types in overflow equality and ignores missing fields", async () => {
100
+ await Seed({ attempts: 7, active: true });
101
+ (0, chai_1.expect)(await table.atomicMutation(ID, {
102
+ type: "deleteIfEqual",
103
+ field: "updatedAt",
104
+ expectedValue: new Date(),
105
+ })).to.equal("not-applied");
106
+ (0, chai_1.expect)(await table.atomicMutation(ID, {
107
+ type: "deleteIfEqual",
108
+ field: "attempts",
109
+ expectedValue: "7",
110
+ })).to.equal("not-applied");
111
+ (0, chai_1.expect)(await table.atomicMutation(ID, {
112
+ type: "deleteIfEqual",
113
+ field: "active",
114
+ expectedValue: false,
115
+ })).to.equal("not-applied");
116
+ (0, chai_1.expect)(await table.atomicMutation(ID, {
117
+ type: "deleteIfEqual",
118
+ field: "attempts",
119
+ expectedValue: 7,
120
+ })).to.equal("applied");
121
+ });
122
+ it("matches dates stored in overflow by the native insert compiler", async () => {
123
+ const updatedAt = new Date("2026-02-12T03:04:05Z");
124
+ await Seed({ updatedAt });
125
+ (0, chai_1.expect)(await table.atomicMutation(ID, {
126
+ type: "deleteIfEqual",
127
+ field: "updatedAt",
128
+ expectedValue: updatedAt,
129
+ })).to.equal("applied");
130
+ });
131
+ });
132
+ //# sourceMappingURL=atomic.test.js.map