pipework 0.212.0 → 0.242.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 (312) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/REFERENCE.md +94 -2
  3. package/dist/cli/commands/openapi.d.ts +8 -0
  4. package/dist/cli/commands/openapi.d.ts.map +1 -0
  5. package/dist/cli/commands/openapi.js +49 -0
  6. package/dist/cli/commands/openapi.js.map +1 -0
  7. package/dist/cli/commands/serve.d.ts +8 -0
  8. package/dist/cli/commands/serve.d.ts.map +1 -1
  9. package/dist/cli/commands/serve.js +22 -3
  10. package/dist/cli/commands/serve.js.map +1 -1
  11. package/dist/cli/dev-bootstrap.js +6 -1
  12. package/dist/cli/dev-bootstrap.js.map +1 -1
  13. package/dist/cli/index.d.ts.map +1 -1
  14. package/dist/cli/index.js +15 -1
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/cli/surface-kinds.d.ts +5 -0
  17. package/dist/cli/surface-kinds.d.ts.map +1 -0
  18. package/dist/cli/surface-kinds.js +15 -0
  19. package/dist/cli/surface-kinds.js.map +1 -0
  20. package/dist/core/config/load.d.ts +1 -0
  21. package/dist/core/config/load.d.ts.map +1 -1
  22. package/dist/core/config/load.js +1 -0
  23. package/dist/core/config/load.js.map +1 -1
  24. package/dist/core/config/namespace.d.ts +6 -0
  25. package/dist/core/config/namespace.d.ts.map +1 -1
  26. package/dist/core/config/schema.d.ts +15 -0
  27. package/dist/core/config/schema.d.ts.map +1 -1
  28. package/dist/core/config/schema.js +11 -2
  29. package/dist/core/config/schema.js.map +1 -1
  30. package/dist/core/lifecycle/health.js +2 -2
  31. package/dist/core/lifecycle/health.js.map +1 -1
  32. package/dist/core/lifecycle/types.d.ts +2 -0
  33. package/dist/core/lifecycle/types.d.ts.map +1 -1
  34. package/dist/core/pipework.d.ts +14 -1
  35. package/dist/core/pipework.d.ts.map +1 -1
  36. package/dist/core/pipework.js +18 -2
  37. package/dist/core/pipework.js.map +1 -1
  38. package/dist/core/surface/http.d.ts +3 -0
  39. package/dist/core/surface/http.d.ts.map +1 -1
  40. package/dist/core/surface/http.js +27 -8
  41. package/dist/core/surface/http.js.map +1 -1
  42. package/dist/core/surface/start.d.ts.map +1 -1
  43. package/dist/core/surface/start.js +19 -3
  44. package/dist/core/surface/start.js.map +1 -1
  45. package/dist/core/surface/types.d.ts +8 -0
  46. package/dist/core/surface/types.d.ts.map +1 -1
  47. package/dist/data/db/filter.d.ts +3 -0
  48. package/dist/data/db/filter.d.ts.map +1 -1
  49. package/dist/data/db/filter.js +3 -0
  50. package/dist/data/db/filter.js.map +1 -1
  51. package/dist/data/db/in-list.d.ts +15 -0
  52. package/dist/data/db/in-list.d.ts.map +1 -0
  53. package/dist/data/db/in-list.js +51 -0
  54. package/dist/data/db/in-list.js.map +1 -0
  55. package/dist/data/db/namespace.d.ts +2 -0
  56. package/dist/data/db/namespace.d.ts.map +1 -1
  57. package/dist/data/db/pool.d.ts +1 -1
  58. package/dist/data/db/pool.d.ts.map +1 -1
  59. package/dist/data/db/pool.js +4 -2
  60. package/dist/data/db/pool.js.map +1 -1
  61. package/dist/data/db/reservation.d.ts +40 -0
  62. package/dist/data/db/reservation.d.ts.map +1 -0
  63. package/dist/data/db/reservation.js +108 -0
  64. package/dist/data/db/reservation.js.map +1 -0
  65. package/dist/data/domain/build-table.js +32 -1
  66. package/dist/data/domain/build-table.js.map +1 -1
  67. package/dist/data/domain/index.d.ts +2 -1
  68. package/dist/data/domain/index.d.ts.map +1 -1
  69. package/dist/data/domain/types.d.ts +9 -1
  70. package/dist/data/domain/types.d.ts.map +1 -1
  71. package/dist/data/domain/types.js.map +1 -1
  72. package/dist/data/migrate/apply.d.ts.map +1 -1
  73. package/dist/data/migrate/apply.js +3 -11
  74. package/dist/data/migrate/apply.js.map +1 -1
  75. package/dist/data/migrate/check.d.ts.map +1 -1
  76. package/dist/data/migrate/check.js +3 -6
  77. package/dist/data/migrate/check.js.map +1 -1
  78. package/dist/data/migrate/diff.d.ts +16 -0
  79. package/dist/data/migrate/diff.d.ts.map +1 -1
  80. package/dist/data/migrate/diff.js +44 -4
  81. package/dist/data/migrate/diff.js.map +1 -1
  82. package/dist/data/migrate/generate.d.ts +1 -1
  83. package/dist/data/migrate/generate.d.ts.map +1 -1
  84. package/dist/data/migrate/generate.js +19 -51
  85. package/dist/data/migrate/generate.js.map +1 -1
  86. package/dist/data/migrate/history.d.ts +36 -0
  87. package/dist/data/migrate/history.d.ts.map +1 -0
  88. package/dist/data/migrate/history.js +185 -0
  89. package/dist/data/migrate/history.js.map +1 -0
  90. package/dist/data/migrate/internal-definitions.d.ts.map +1 -1
  91. package/dist/data/migrate/internal-definitions.js +22 -1
  92. package/dist/data/migrate/internal-definitions.js.map +1 -1
  93. package/dist/data/migrate/provision-framework.d.ts +2 -0
  94. package/dist/data/migrate/provision-framework.d.ts.map +1 -1
  95. package/dist/data/migrate/provision-framework.js +11 -3
  96. package/dist/data/migrate/provision-framework.js.map +1 -1
  97. package/dist/data/migrate/snapshot.d.ts +4 -0
  98. package/dist/data/migrate/snapshot.d.ts.map +1 -1
  99. package/dist/data/migrate/snapshot.js +2 -0
  100. package/dist/data/migrate/snapshot.js.map +1 -1
  101. package/dist/data/migrate/sql-emit.js +66 -12
  102. package/dist/data/migrate/sql-emit.js.map +1 -1
  103. package/dist/data/query/pg-core/foreign-keys.d.ts +5 -0
  104. package/dist/data/query/pg-core/foreign-keys.d.ts.map +1 -1
  105. package/dist/data/query/pg-core/foreign-keys.js +9 -0
  106. package/dist/data/query/pg-core/foreign-keys.js.map +1 -1
  107. package/dist/data/query/pg-core/indexes.d.ts +5 -0
  108. package/dist/data/query/pg-core/indexes.d.ts.map +1 -1
  109. package/dist/data/query/pg-core/indexes.js +7 -0
  110. package/dist/data/query/pg-core/indexes.js.map +1 -1
  111. package/dist/data/schema/json-schema.js +29 -1
  112. package/dist/data/schema/json-schema.js.map +1 -1
  113. package/dist/data/schema/types.d.ts +2 -2
  114. package/dist/data/schema/types.d.ts.map +1 -1
  115. package/dist/index.d.ts +18 -9
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +5 -1
  118. package/dist/index.js.map +1 -1
  119. package/dist/infra/alerts/handle.d.ts +33 -5
  120. package/dist/infra/alerts/handle.d.ts.map +1 -1
  121. package/dist/infra/alerts/handle.js +56 -12
  122. package/dist/infra/alerts/handle.js.map +1 -1
  123. package/dist/infra/alerts/http.d.ts +2 -2
  124. package/dist/infra/alerts/http.d.ts.map +1 -1
  125. package/dist/infra/alerts/http.js +21 -3
  126. package/dist/infra/alerts/http.js.map +1 -1
  127. package/dist/infra/alerts/index.d.ts +1 -1
  128. package/dist/infra/alerts/index.d.ts.map +1 -1
  129. package/dist/infra/alerts/schema.d.ts +5 -0
  130. package/dist/infra/alerts/schema.d.ts.map +1 -1
  131. package/dist/infra/alerts/schema.js +1 -0
  132. package/dist/infra/alerts/schema.js.map +1 -1
  133. package/dist/infra/crawl/audit.d.ts +6 -0
  134. package/dist/infra/crawl/audit.d.ts.map +1 -0
  135. package/dist/infra/crawl/audit.js +38 -0
  136. package/dist/infra/crawl/audit.js.map +1 -0
  137. package/dist/infra/crawl/errors.d.ts +14 -0
  138. package/dist/infra/crawl/errors.d.ts.map +1 -0
  139. package/dist/infra/crawl/errors.js +22 -0
  140. package/dist/infra/crawl/errors.js.map +1 -0
  141. package/dist/infra/crawl/handle.d.ts +149 -0
  142. package/dist/infra/crawl/handle.d.ts.map +1 -0
  143. package/dist/infra/crawl/handle.js +550 -0
  144. package/dist/infra/crawl/handle.js.map +1 -0
  145. package/dist/infra/crawl/index.d.ts +7 -0
  146. package/dist/infra/crawl/index.d.ts.map +1 -0
  147. package/dist/infra/crawl/index.js +5 -0
  148. package/dist/infra/crawl/index.js.map +1 -0
  149. package/dist/infra/crawl/links.d.ts +9 -0
  150. package/dist/infra/crawl/links.d.ts.map +1 -0
  151. package/dist/infra/crawl/links.js +194 -0
  152. package/dist/infra/crawl/links.js.map +1 -0
  153. package/dist/infra/crawl/namespace.d.ts +36 -0
  154. package/dist/infra/crawl/namespace.d.ts.map +1 -0
  155. package/dist/infra/crawl/namespace.js +36 -0
  156. package/dist/infra/crawl/namespace.js.map +1 -0
  157. package/dist/infra/crawl/robots.d.ts +16 -0
  158. package/dist/infra/crawl/robots.d.ts.map +1 -0
  159. package/dist/infra/crawl/robots.js +98 -0
  160. package/dist/infra/crawl/robots.js.map +1 -0
  161. package/dist/infra/crawl/schema.d.ts +222 -0
  162. package/dist/infra/crawl/schema.d.ts.map +1 -0
  163. package/dist/infra/crawl/schema.js +84 -0
  164. package/dist/infra/crawl/schema.js.map +1 -0
  165. package/dist/infra/credit-line/handle.d.ts +250 -0
  166. package/dist/infra/credit-line/handle.d.ts.map +1 -0
  167. package/dist/infra/credit-line/handle.js +618 -0
  168. package/dist/infra/credit-line/handle.js.map +1 -0
  169. package/dist/infra/credit-line/index.d.ts +3 -0
  170. package/dist/infra/credit-line/index.d.ts.map +1 -0
  171. package/dist/infra/credit-line/index.js +2 -0
  172. package/dist/infra/credit-line/index.js.map +1 -0
  173. package/dist/infra/credit-line/namespace.d.ts +7 -0
  174. package/dist/infra/credit-line/namespace.d.ts.map +1 -0
  175. package/dist/infra/credit-line/namespace.js +7 -0
  176. package/dist/infra/credit-line/namespace.js.map +1 -0
  177. package/dist/infra/credit-line/schema.d.ts +194 -0
  178. package/dist/infra/credit-line/schema.d.ts.map +1 -0
  179. package/dist/infra/credit-line/schema.js +89 -0
  180. package/dist/infra/credit-line/schema.js.map +1 -0
  181. package/dist/infra/email/inbound.d.ts +14 -2
  182. package/dist/infra/email/inbound.d.ts.map +1 -1
  183. package/dist/infra/email/inbound.js +5 -1
  184. package/dist/infra/email/inbound.js.map +1 -1
  185. package/dist/infra/email/index.d.ts +2 -2
  186. package/dist/infra/email/index.d.ts.map +1 -1
  187. package/dist/infra/email/index.js.map +1 -1
  188. package/dist/infra/email/mail.d.ts +43 -5
  189. package/dist/infra/email/mail.d.ts.map +1 -1
  190. package/dist/infra/email/mail.js +124 -9
  191. package/dist/infra/email/mail.js.map +1 -1
  192. package/dist/infra/email/mime.d.ts +6 -0
  193. package/dist/infra/email/mime.d.ts.map +1 -1
  194. package/dist/infra/email/mime.js +10 -2
  195. package/dist/infra/email/mime.js.map +1 -1
  196. package/dist/infra/email/schema.d.ts +17 -3
  197. package/dist/infra/email/schema.d.ts.map +1 -1
  198. package/dist/infra/email/schema.js +15 -4
  199. package/dist/infra/email/schema.js.map +1 -1
  200. package/dist/infra/email/sns.js +2 -2
  201. package/dist/infra/email/sns.js.map +1 -1
  202. package/dist/infra/email/unsubscribe.d.ts +13 -0
  203. package/dist/infra/email/unsubscribe.d.ts.map +1 -0
  204. package/dist/infra/email/unsubscribe.js +43 -0
  205. package/dist/infra/email/unsubscribe.js.map +1 -0
  206. package/dist/infra/fetch/handle.d.ts +20 -1
  207. package/dist/infra/fetch/handle.d.ts.map +1 -1
  208. package/dist/infra/fetch/handle.js +60 -28
  209. package/dist/infra/fetch/handle.js.map +1 -1
  210. package/dist/infra/fetch/index.d.ts +2 -2
  211. package/dist/infra/fetch/index.d.ts.map +1 -1
  212. package/dist/infra/fetch/index.js +1 -1
  213. package/dist/infra/fetch/index.js.map +1 -1
  214. package/dist/infra/fetch/namespace.d.ts +20 -2
  215. package/dist/infra/fetch/namespace.d.ts.map +1 -1
  216. package/dist/infra/fetch/namespace.js +20 -2
  217. package/dist/infra/fetch/namespace.js.map +1 -1
  218. package/dist/infra/join-requests/handle.d.ts +86 -0
  219. package/dist/infra/join-requests/handle.d.ts.map +1 -0
  220. package/dist/infra/join-requests/handle.js +233 -0
  221. package/dist/infra/join-requests/handle.js.map +1 -0
  222. package/dist/infra/join-requests/index.d.ts +3 -0
  223. package/dist/infra/join-requests/index.d.ts.map +1 -0
  224. package/dist/infra/join-requests/index.js +2 -0
  225. package/dist/infra/join-requests/index.js.map +1 -0
  226. package/dist/infra/join-requests/namespace.d.ts +7 -0
  227. package/dist/infra/join-requests/namespace.d.ts.map +1 -0
  228. package/dist/infra/join-requests/namespace.js +7 -0
  229. package/dist/infra/join-requests/namespace.js.map +1 -0
  230. package/dist/infra/join-requests/schema.d.ts +58 -0
  231. package/dist/infra/join-requests/schema.d.ts.map +1 -0
  232. package/dist/infra/join-requests/schema.js +31 -0
  233. package/dist/infra/join-requests/schema.js.map +1 -0
  234. package/dist/infra/outbox/core.d.ts +9 -0
  235. package/dist/infra/outbox/core.d.ts.map +1 -1
  236. package/dist/infra/outbox/core.js +14 -0
  237. package/dist/infra/outbox/core.js.map +1 -1
  238. package/dist/infra/support/handle.d.ts +43 -0
  239. package/dist/infra/support/handle.d.ts.map +1 -1
  240. package/dist/infra/support/handle.js +35 -7
  241. package/dist/infra/support/handle.js.map +1 -1
  242. package/dist/infra/support/http.d.ts +28 -0
  243. package/dist/infra/support/http.d.ts.map +1 -0
  244. package/dist/infra/support/http.js +217 -0
  245. package/dist/infra/support/http.js.map +1 -0
  246. package/dist/infra/support/index.d.ts +2 -0
  247. package/dist/infra/support/index.d.ts.map +1 -1
  248. package/dist/infra/support/index.js +1 -0
  249. package/dist/infra/support/index.js.map +1 -1
  250. package/dist/infra/support/namespace.d.ts +3 -0
  251. package/dist/infra/support/namespace.d.ts.map +1 -1
  252. package/dist/infra/support/namespace.js +3 -0
  253. package/dist/infra/support/namespace.js.map +1 -1
  254. package/dist/infra/support/schema.d.ts +4 -4
  255. package/dist/infra/webhook/outbound.d.ts +16 -0
  256. package/dist/infra/webhook/outbound.d.ts.map +1 -1
  257. package/dist/infra/webhook/outbound.js +78 -27
  258. package/dist/infra/webhook/outbound.js.map +1 -1
  259. package/dist/request/di/builder.d.ts +24 -1
  260. package/dist/request/di/builder.d.ts.map +1 -1
  261. package/dist/request/di/builder.js +35 -0
  262. package/dist/request/di/builder.js.map +1 -1
  263. package/dist/request/di/types.d.ts +30 -0
  264. package/dist/request/di/types.d.ts.map +1 -1
  265. package/dist/request/http/server.d.ts.map +1 -1
  266. package/dist/request/http/server.js +111 -20
  267. package/dist/request/http/server.js.map +1 -1
  268. package/dist/test/auto-setup.js +2 -2
  269. package/dist/test/auto-setup.js.map +1 -1
  270. package/dist/test/crawl-fixture.d.ts +53 -0
  271. package/dist/test/crawl-fixture.d.ts.map +1 -0
  272. package/dist/test/crawl-fixture.js +130 -0
  273. package/dist/test/crawl-fixture.js.map +1 -0
  274. package/dist/test/index.d.ts +2 -1
  275. package/dist/test/index.d.ts.map +1 -1
  276. package/dist/test/index.js +2 -1
  277. package/dist/test/index.js.map +1 -1
  278. package/dist/test/progress.d.ts +7 -1
  279. package/dist/test/progress.d.ts.map +1 -1
  280. package/dist/test/progress.js +6 -0
  281. package/dist/test/progress.js.map +1 -1
  282. package/dist/test/reap-after-run.d.ts +3 -0
  283. package/dist/test/reap-after-run.d.ts.map +1 -0
  284. package/dist/test/reap-after-run.js +29 -0
  285. package/dist/test/reap-after-run.js.map +1 -0
  286. package/dist/test/reap.d.ts +11 -2
  287. package/dist/test/reap.d.ts.map +1 -1
  288. package/dist/test/reap.js +19 -12
  289. package/dist/test/reap.js.map +1 -1
  290. package/dist/test/setup.d.ts +2 -0
  291. package/dist/test/setup.d.ts.map +1 -1
  292. package/dist/test/setup.js +87 -30
  293. package/dist/test/setup.js.map +1 -1
  294. package/dist/test/vitest-plugin.d.ts.map +1 -1
  295. package/dist/test/vitest-plugin.js +8 -1
  296. package/dist/test/vitest-plugin.js.map +1 -1
  297. package/dist/test/vitest-workspace.d.ts +1 -0
  298. package/dist/test/vitest-workspace.d.ts.map +1 -1
  299. package/dist/test/vitest-workspace.js +1 -1
  300. package/dist/test/vitest-workspace.js.map +1 -1
  301. package/dist/test/vitest.d.ts +20 -0
  302. package/dist/test/vitest.d.ts.map +1 -1
  303. package/dist/test/vitest.js +41 -1
  304. package/dist/test/vitest.js.map +1 -1
  305. package/dist/trace/partition/sync.d.ts +8 -2
  306. package/dist/trace/partition/sync.d.ts.map +1 -1
  307. package/dist/trace/partition/sync.js +6 -3
  308. package/dist/trace/partition/sync.js.map +1 -1
  309. package/dist/workspace/generate.d.ts.map +1 -1
  310. package/dist/workspace/generate.js +1 -0
  311. package/dist/workspace/generate.js.map +1 -1
  312. package/package.json +1 -1
@@ -4,7 +4,7 @@ import { discoverForTestFork } from './discover-fork.js';
4
4
  import { setupTestDatabases } from './setup.js';
5
5
  import { beginTestIsolation, endTestIsolation } from './plugin.js';
6
6
  import { _setTestState, teardownAfterAll, useTestDb } from './vitest.js';
7
- import { logSlowPhases } from './progress.js';
7
+ import { logSlowPhases, SETUP_HOOK_TIMEOUT_MS } from './progress.js';
8
8
  import { TEARDOWN_HOOK_TIMEOUT_MS } from '../trace/runtime/pending-writes.js';
9
9
  loadEnvFiles();
10
10
  let _testContext = null;
@@ -20,7 +20,7 @@ if (dbNames.length === 1) {
20
20
  // because a fixed wall clock elapsed while it queued behind peer forks (#380).
21
21
  beforeAll(async () => {
22
22
  await setupTestDatabases(instance, { onProgress: logSlowPhases() });
23
- });
23
+ }, SETUP_HOOK_TIMEOUT_MS);
24
24
  afterAll(async () => {
25
25
  await teardownAfterAll(instance);
26
26
  }, TEARDOWN_HOOK_TIMEOUT_MS);
@@ -1 +1 @@
1
- {"version":3,"file":"auto-setup.js","sourceRoot":"","sources":["../../src/test/auto-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAE7E,YAAY,EAAE,CAAA;AAEd,IAAI,YAAY,GAAuB,IAAI,CAAA;AAE3C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,EAAE,CAAA;AAE5C,aAAa,CAAC,QAAQ,CAAC,CAAA;AAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA;AAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACzB,CAAC;IAAC,UAAsC,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,CAAA;AAC9D,CAAC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,kBAAkB,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AACrE,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAA;AAClC,CAAC,EAAE,wBAAwB,CAAC,CAAA;AAE5B,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,YAAY,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACjD,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AACvC,CAAC,CAAC,CAAA;AAEF,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC9C,YAAY,GAAG,IAAI,CAAA;QACnB,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC,EAAE,wBAAwB,CAAC,CAAA"}
1
+ {"version":3,"file":"auto-setup.js","sourceRoot":"","sources":["../../src/test/auto-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAE7E,YAAY,EAAE,CAAA;AAEd,IAAI,YAAY,GAAuB,IAAI,CAAA;AAE3C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,EAAE,CAAA;AAE5C,aAAa,CAAC,QAAQ,CAAC,CAAA;AAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA;AAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACzB,CAAC;IAAC,UAAsC,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,CAAA;AAC9D,CAAC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,kBAAkB,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AACrE,CAAC,EAAE,qBAAqB,CAAC,CAAA;AAEzB,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAA;AAClC,CAAC,EAAE,wBAAwB,CAAC,CAAA;AAE5B,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,YAAY,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACjD,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AACvC,CAAC,CAAC,CAAA;AAEF,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC9C,YAAY,GAAG,IAAI,CAAA;QACnB,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC,EAAE,wBAAwB,CAAC,CAAA"}
@@ -0,0 +1,53 @@
1
+ import { type IncomingHttpHeaders } from 'node:http';
2
+ import { type Socket } from 'node:net';
3
+ import type { FetchTarget } from '../infra/fetch/index.js';
4
+ /** What one path of a fixture site does instead of serving a file. */
5
+ export interface CrawlFixtureRoute {
6
+ /** Answer with a redirect to this URL (status 302 unless `status` is given). */
7
+ readonly redirect?: string;
8
+ /** Answer with this status and no body (with `redirect`: the redirect's status). */
9
+ readonly status?: number;
10
+ /** Wait this long before answering. */
11
+ readonly delayMs?: number;
12
+ /** Answer 200 with this many generated bytes, streamed and never on disk, without a Content-Length. */
13
+ readonly bytes?: number;
14
+ /** Content type of the generated bytes; default `application/pdf`. */
15
+ readonly contentType?: string;
16
+ }
17
+ export interface CrawlFixtureOptions {
18
+ /** The directory served as every host's site: `/` is `index.html`, `/robots.txt` is the file of that name. Files carry an ETag and Last-Modified, and an `If-None-Match` that matches is answered 304. */
19
+ readonly root: string;
20
+ /** The names that resolve, each to a fake public address (or the address given); any other name does not resolve. */
21
+ readonly hosts: readonly string[] | Readonly<Record<string, string>>;
22
+ /** Per-path behaviour, keyed by the URL's path (`/big.pdf`), or by host and path (`example.test/`) for one host only; the host form wins. */
23
+ readonly routes?: Readonly<Record<string, CrawlFixtureRoute>>;
24
+ }
25
+ /** One request the fixture server received. */
26
+ export interface CrawlFixtureRequest {
27
+ readonly method: string;
28
+ /** The Host header without the port. */
29
+ readonly host: string;
30
+ /** Path and query. */
31
+ readonly path: string;
32
+ /** `Date.now()` when the request arrived. */
33
+ readonly at: number;
34
+ readonly headers: IncomingHttpHeaders;
35
+ }
36
+ export interface CrawlFixtureSite {
37
+ /** Pass as the `network` option of `crawl.create` (or `untrustedFetch.get`'s `resolve` and `connect`). */
38
+ readonly network: {
39
+ resolve: (hostname: string) => Promise<string[]>;
40
+ connect: (target: FetchTarget) => Socket;
41
+ };
42
+ /** Every request received, oldest first. */
43
+ readonly requests: CrawlFixtureRequest[];
44
+ close(): Promise<void>;
45
+ }
46
+ /**
47
+ * Serves a directory as a website on a local server, for testing a crawl with no outside fetch. `network` makes the
48
+ * hosts in `hosts` resolve to a fake public address and sends their connections to the local server, so the real
49
+ * address rules still run: a host not in `hosts` (such as `127.0.0.1`) is refused as it would be live. Use plain
50
+ * `http://<host>/` URLs; the port is the fixture's. Every request is recorded in `requests`.
51
+ */
52
+ export declare function crawlFixtureSite(options: CrawlFixtureOptions): Promise<CrawlFixtureSite>;
53
+ //# sourceMappingURL=crawl-fixture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl-fixture.d.ts","sourceRoot":"","sources":["../../src/test/crawl-fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,mBAAmB,EAA6C,MAAM,WAAW,CAAA;AAC7G,OAAO,EAA2C,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAG/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAU1D,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,uGAAuG;IACvG,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,0MAA0M;IAC1M,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,qHAAqH;IACrH,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACpE,6IAA6I;IAC7I,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAA;CAC9D;AAED,+CAA+C;AAC/C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,sBAAsB;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAA;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,0GAA0G;IAC1G,QAAQ,CAAC,OAAO,EAAE;QAChB,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAChD,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,MAAM,CAAA;KACzC,CAAA;IACD,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAA;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AA+CD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6C9F"}
@@ -0,0 +1,130 @@
1
+ import { createServer } from 'node:http';
2
+ import { connect as netConnect } from 'node:net';
3
+ import { readFile, stat } from 'node:fs/promises';
4
+ import { extname, join, normalize, sep } from 'node:path';
5
+ const PUBLIC_ADDRESS = '93.184.216.34';
6
+ const TYPES = {
7
+ '.html': 'text/html', '.htm': 'text/html', '.xhtml': 'application/xhtml+xml', '.txt': 'text/plain',
8
+ '.pdf': 'application/pdf', '.xml': 'application/xml', '.css': 'text/css', '.js': 'text/javascript',
9
+ '.json': 'application/json', '.png': 'image/png', '.jpg': 'image/jpeg',
10
+ };
11
+ function safePath(root, urlPath) {
12
+ let decoded;
13
+ try {
14
+ decoded = decodeURIComponent(urlPath);
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ const full = normalize(join(root, decoded));
20
+ const base = normalize(root);
21
+ return full === base || full.startsWith(base.endsWith(sep) ? base : base + sep) ? full : null;
22
+ }
23
+ async function serveFile(root, pathname, req, res) {
24
+ let file = safePath(root, pathname);
25
+ if (file === null) {
26
+ res.statusCode = 400;
27
+ res.end();
28
+ return;
29
+ }
30
+ try {
31
+ if ((await stat(file)).isDirectory())
32
+ file = join(file, 'index.html');
33
+ const info = await stat(file);
34
+ const etag = `"${info.size.toString(16)}-${Math.floor(info.mtimeMs).toString(16)}"`;
35
+ res.setHeader('etag', etag);
36
+ res.setHeader('last-modified', info.mtime.toUTCString());
37
+ if (req.headers['if-none-match'] === etag) {
38
+ res.statusCode = 304;
39
+ res.end();
40
+ return;
41
+ }
42
+ const body = await readFile(file);
43
+ res.setHeader('content-type', TYPES[extname(file).toLowerCase()] ?? 'application/octet-stream');
44
+ res.end(body);
45
+ }
46
+ catch {
47
+ res.statusCode = 404;
48
+ res.setHeader('content-type', 'text/plain');
49
+ res.end('not found');
50
+ }
51
+ }
52
+ function streamBytes(res, total, contentType) {
53
+ res.setHeader('content-type', contentType);
54
+ const chunk = Buffer.alloc(64 * 1024, 0x25);
55
+ let sent = 0;
56
+ let closed = false;
57
+ res.on('close', () => { closed = true; });
58
+ const pump = () => {
59
+ while (!closed && sent < total) {
60
+ const piece = sent + chunk.length <= total ? chunk : chunk.subarray(0, total - sent);
61
+ sent += piece.length;
62
+ if (!res.write(piece)) {
63
+ res.once('drain', pump);
64
+ return;
65
+ }
66
+ }
67
+ if (!closed)
68
+ res.end();
69
+ };
70
+ pump();
71
+ }
72
+ /**
73
+ * Serves a directory as a website on a local server, for testing a crawl with no outside fetch. `network` makes the
74
+ * hosts in `hosts` resolve to a fake public address and sends their connections to the local server, so the real
75
+ * address rules still run: a host not in `hosts` (such as `127.0.0.1`) is refused as it would be live. Use plain
76
+ * `http://<host>/` URLs; the port is the fixture's. Every request is recorded in `requests`.
77
+ */
78
+ export async function crawlFixtureSite(options) {
79
+ const addresses = Array.isArray(options.hosts)
80
+ ? Object.fromEntries(options.hosts.map(h => [h, PUBLIC_ADDRESS]))
81
+ : { ...options.hosts };
82
+ const requests = [];
83
+ const sockets = new Set();
84
+ const server = createServer((req, res) => {
85
+ const url = new URL(req.url ?? '/', 'http://fixture.invalid');
86
+ const host = (req.headers.host ?? '').replace(/:\d+$/, '');
87
+ requests.push({ method: req.method ?? 'GET', host, path: url.pathname + url.search, at: Date.now(), headers: req.headers });
88
+ const route = options.routes?.[`${host}${url.pathname}`] ?? options.routes?.[url.pathname];
89
+ const respond = async () => {
90
+ if (route?.redirect !== undefined) {
91
+ res.statusCode = route.status ?? 302;
92
+ res.setHeader('location', route.redirect);
93
+ res.end();
94
+ }
95
+ else if (route?.bytes !== undefined) {
96
+ streamBytes(res, route.bytes, route.contentType ?? 'application/pdf');
97
+ }
98
+ else if (route?.status !== undefined) {
99
+ res.statusCode = route.status;
100
+ res.end();
101
+ }
102
+ else {
103
+ await serveFile(options.root, url.pathname, req, res);
104
+ }
105
+ };
106
+ if (route?.delayMs !== undefined)
107
+ setTimeout(() => { void respond(); }, route.delayMs);
108
+ else
109
+ void respond();
110
+ });
111
+ server.on('connection', s => { sockets.add(s); s.on('close', () => sockets.delete(s)); });
112
+ await new Promise(resolve => server.listen(0, '127.0.0.1', resolve));
113
+ const port = server.address().port;
114
+ return {
115
+ network: {
116
+ resolve: (hostname) => {
117
+ const found = addresses[hostname];
118
+ return found === undefined ? Promise.reject(new Error('ENOTFOUND')) : Promise.resolve([found]);
119
+ },
120
+ connect: () => netConnect(port, '127.0.0.1'),
121
+ },
122
+ requests,
123
+ close: async () => {
124
+ for (const s of sockets)
125
+ s.destroy();
126
+ await new Promise(resolve => server.close(() => resolve()));
127
+ },
128
+ };
129
+ }
130
+ //# sourceMappingURL=crawl-fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl-fixture.js","sourceRoot":"","sources":["../../src/test/crawl-fixture.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@ export { setupTestDatabases, teardownTestDatabases, getTestDatabase, getTestData
2
2
  export { flushPendingDrops, TEST_DROP_LOG_PREFIX, TEST_REAP_LOG_PREFIX } from './setup.js';
3
3
  export { SetupStalled, logSlowPhases, SETUP_PROGRESS_LOG_PREFIX, type SetupPhase, type SetupProgress, type SetupProgressListener, } from './progress.js';
4
4
  export { beginTestIsolation, endTestIsolation, type TestContext, type TestDatabaseConnections } from './plugin.js';
5
- export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, closeSetupConnections, SetupConnectionCloseError, teardownAfterAll, withFlow, type WithFlowOptions } from './vitest.js';
5
+ export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, useTestClient, type UseTestClientOptions, closeSetupConnections, SetupConnectionCloseError, teardownAfterAll, withFlow, type WithFlowOptions } from './vitest.js';
6
6
  export { mockAuth, asTenant } from './auth.js';
7
7
  export { withContext, withJobContext, type WithContextOptions } from './context.js';
8
8
  export { pipework as vitestPlugin, type PipeworkVitestOptions } from './vitest-plugin.js';
9
9
  export { resolveVitestConfig, resolveVitestModules } from './vitest-workspace.js';
10
10
  export { tap, type ManagedConnection, type ConnectOptions } from '../data/db/pool.js';
11
+ export { crawlFixtureSite, type CrawlFixtureOptions, type CrawlFixtureRoute, type CrawlFixtureRequest, type CrawlFixtureSite } from './crawl-fixture.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAC/I,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC1F,OAAO,EACL,YAAY,EACZ,aAAa,EACb,yBAAyB,EACzB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC5L,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACnF,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAAE,GAAG,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAC/I,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC1F,OAAO,EACL,YAAY,EACZ,aAAa,EACb,yBAAyB,EACzB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AACtO,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACnF,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAAE,GAAG,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACrF,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAA"}
@@ -2,10 +2,11 @@ export { setupTestDatabases, teardownTestDatabases, getTestDatabase, getTestData
2
2
  export { flushPendingDrops, TEST_DROP_LOG_PREFIX, TEST_REAP_LOG_PREFIX } from './setup.js';
3
3
  export { SetupStalled, logSlowPhases, SETUP_PROGRESS_LOG_PREFIX, } from './progress.js';
4
4
  export { beginTestIsolation, endTestIsolation } from './plugin.js';
5
- export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, closeSetupConnections, SetupConnectionCloseError, teardownAfterAll, withFlow } from './vitest.js';
5
+ export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, useTestClient, closeSetupConnections, SetupConnectionCloseError, teardownAfterAll, withFlow } from './vitest.js';
6
6
  export { mockAuth, asTenant } from './auth.js';
7
7
  export { withContext, withJobContext } from './context.js';
8
8
  export { pipework as vitestPlugin } from './vitest-plugin.js';
9
9
  export { resolveVitestConfig, resolveVitestModules } from './vitest-workspace.js';
10
10
  export { tap } from '../data/db/pool.js';
11
+ export { crawlFixtureSite } from './crawl-fixture.js';
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAwC,MAAM,YAAY,CAAA;AAC/I,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC1F,OAAO,EACL,YAAY,EACZ,aAAa,EACb,yBAAyB,GAI1B,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAkD,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,QAAQ,EAAwB,MAAM,aAAa,CAAA;AAC5L,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAA2B,MAAM,cAAc,CAAA;AACnF,OAAO,EAAE,QAAQ,IAAI,YAAY,EAA8B,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAAE,GAAG,EAA+C,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAwC,MAAM,YAAY,CAAA;AAC/I,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC1F,OAAO,EACL,YAAY,EACZ,aAAa,EACb,yBAAyB,GAI1B,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAkD,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAA6B,qBAAqB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,QAAQ,EAAwB,MAAM,aAAa,CAAA;AACtO,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAA2B,MAAM,cAAc,CAAA;AACnF,OAAO,EAAE,QAAQ,IAAI,YAAY,EAA8B,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAAE,GAAG,EAA+C,MAAM,oBAAoB,CAAA;AACrF,OAAO,EAAE,gBAAgB,EAAqG,MAAM,oBAAoB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  /** Steps `setupTestDatabases` passes through, in the order it reaches them. */
2
- export type SetupPhase = 'rls-probe' | 'run-prepare' | 'template-pin' | 'template-wait' | 'template-build' | 'template-migrate' | 'template-ready' | 'queue-check' | 'clone-start' | 'clone-done' | 'ready';
2
+ export type SetupPhase = 'rls-probe' | 'run-prepare' | 'run-reap' | 'template-pin' | 'template-wait' | 'template-build' | 'template-migrate' | 'template-framework' | 'template-partitions' | 'template-grants' | 'template-ready' | 'queue-check' | 'clone-start' | 'clone-done' | 'ready';
3
3
  export interface SetupProgress {
4
4
  readonly phase: SetupPhase;
5
5
  /** The configured database this step is about, or null for whole-run steps. */
@@ -43,6 +43,12 @@ export declare class PhaseTracker {
43
43
  reached(phase: SetupPhase, database?: string | null, detail?: string): void;
44
44
  }
45
45
  export declare const DEFAULT_SETUP_STALL_MS = 120000;
46
+ /**
47
+ * Timeout for the `beforeAll` that runs setup: setTimeout's ceiling, so vitest's
48
+ * hookTimeout never bounds a setup that is still advancing. Only the stall
49
+ * watchdog fails setup.
50
+ */
51
+ export declare const SETUP_HOOK_TIMEOUT_MS: number;
46
52
  export interface StallWatchOptions {
47
53
  stallMs?: number;
48
54
  /** How often the watchdog looks. Defaults to a tenth of the bound. */
@@ -1 +1 @@
1
- {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/test/progress.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,aAAa,GACb,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,YAAY,GACZ,OAAO,CAAA;AAEX,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACpH;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAA;AAErE,qFAAqF;AACrF,qBAAa,YAAa,SAAQ,KAAK;IAEnC,QAAQ,CAAC,KAAK,EAAE,UAAU;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM;gBAHjB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;CAe7B;AAED;;;GAGG;AACH,qBAAa,YAAY;IAQrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IARxB,KAAK,EAAE,UAAU,CAAgB;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAO;IAC9B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,EAAE,CAAQ;IAClB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAGX,QAAQ,GAAE,qBAAgC,EAC1C,KAAK,GAAE,MAAM,MAAyB;IAMzD,2CAA2C;IAC3C,MAAM,IAAI,MAAM;IAIhB,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAiBlF;AAED,eAAO,MAAM,sBAAsB,SAAU,CAAA;AAE7C,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,CAAC,CAAC,CAoBZ;AAED,yEAAyE;AACzE,eAAO,MAAM,yBAAyB,wBAAwB,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAS,CAAA;AAEnC;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAuC,EAChE,MAAM,GAAE,MAAsB,GAC7B,qBAAqB,CAUvB"}
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/test/progress.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,aAAa,GACb,UAAU,GACV,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,oBAAoB,GACpB,qBAAqB,GACrB,iBAAiB,GACjB,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,YAAY,GACZ,OAAO,CAAA;AAEX,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACpH;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAA;AAErE,qFAAqF;AACrF,qBAAa,YAAa,SAAQ,KAAK;IAEnC,QAAQ,CAAC,KAAK,EAAE,UAAU;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM;gBAHjB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM;CAe7B;AAED;;;GAGG;AACH,qBAAa,YAAY;IAQrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IARxB,KAAK,EAAE,UAAU,CAAgB;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAO;IAC9B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,EAAE,CAAQ;IAClB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAGX,QAAQ,GAAE,qBAAgC,EAC1C,KAAK,GAAE,MAAM,MAAyB;IAMzD,2CAA2C;IAC3C,MAAM,IAAI,MAAM;IAIhB,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAiBlF;AAED,eAAO,MAAM,sBAAsB,SAAU,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAc,CAAA;AAEhD,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,CAAC,CAAC,CAoBZ;AAED,yEAAyE;AACzE,eAAO,MAAM,yBAAyB,wBAAwB,CAAA;AAE9D;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAS,CAAA;AAEnC;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAuC,EAChE,MAAM,GAAE,MAAsB,GAC7B,qBAAqB,CAUvB"}
@@ -72,6 +72,12 @@ export class PhaseTracker {
72
72
  }
73
73
  }
74
74
  export const DEFAULT_SETUP_STALL_MS = 120_000;
75
+ /**
76
+ * Timeout for the `beforeAll` that runs setup: setTimeout's ceiling, so vitest's
77
+ * hookTimeout never bounds a setup that is still advancing. Only the stall
78
+ * watchdog fails setup.
79
+ */
80
+ export const SETUP_HOOK_TIMEOUT_MS = 2 ** 31 - 1;
75
81
  /**
76
82
  * Run `work`, failing it if `tracker` reports no phase advance for `stallMs`.
77
83
  *
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/test/progress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/test/progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function setup(): void;
2
+ export declare function teardown(): Promise<void>;
3
+ //# sourceMappingURL=reap-after-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reap-after-run.d.ts","sourceRoot":"","sources":["../../src/test/reap-after-run.ts"],"names":[],"mappings":"AAUA,wBAAgB,KAAK,IAAI,IAAI,CAAG;AAEhC,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAe9C"}
@@ -0,0 +1,29 @@
1
+ import { loadEnvFiles } from '../core/config/env.js';
2
+ import { discoverInstance } from '../core/config/discover.js';
3
+ import { reapConfiguredTestDatabases } from './reap.js';
4
+ import { TEST_REAP_LOG_PREFIX } from './setup.js';
5
+ // Vitest globalSetup, added by the pipework plugin. `teardown` runs in the
6
+ // parent after every worker has stopped, so the clones a SIGTERMed fork left
7
+ // queued are orphans by then: their run locks died with the workers. Clones
8
+ // only (templates outlive runs), and only those whose run lock is free, so a
9
+ // concurrent run's live clones are never touched. Best effort, never fails a run.
10
+ export function setup() { }
11
+ export async function teardown() {
12
+ try {
13
+ loadEnvFiles();
14
+ const instance = await discoverInstance();
15
+ try {
16
+ const { droppedDatabases } = await reapConfiguredTestDatabases(instance, { clonesOnly: true });
17
+ if (droppedDatabases.length > 0) {
18
+ process.stderr.write(`${TEST_REAP_LOG_PREFIX} dropped ${String(droppedDatabases.length)} leftover clone(s): ${droppedDatabases.join(', ')}\n`);
19
+ }
20
+ }
21
+ finally {
22
+ await instance.pool.closeAll();
23
+ }
24
+ }
25
+ catch {
26
+ // Best effort — the next run's reaper drops what this missed.
27
+ }
28
+ }
29
+ //# sourceMappingURL=reap-after-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reap-after-run.js","sourceRoot":"","sources":["../../src/test/reap-after-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEjD,2EAA2E;AAC3E,6EAA6E;AAC7E,4EAA4E;AAC5E,6EAA6E;AAC7E,kFAAkF;AAClF,MAAM,UAAU,KAAK,KAAU,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,IAAI,CAAC;QACH,YAAY,EAAE,CAAA;QACd,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAA;QACzC,IAAI,CAAC;YACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,2BAA2B,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9F,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,oBAAoB,YAAY,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,uBAAuB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChJ,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;AACH,CAAC"}
@@ -1,5 +1,14 @@
1
1
  import postgres from 'postgres';
2
2
  import type { Manifold } from '../core/pipework.js';
3
+ export interface ReapOptions {
4
+ /**
5
+ * Called before each candidate database is handled, `index` counting 1..`total`
6
+ * across the clones and the stale templates together, so a hung drop is named.
7
+ */
8
+ onReap?: (datname: string, index: number, total: number) => void;
9
+ /** Leave shared templates alone: only per-run clones are candidates. */
10
+ clonesOnly?: boolean;
11
+ }
3
12
  export interface ReapResult {
4
13
  readonly droppedDatabases: readonly string[];
5
14
  /**
@@ -36,10 +45,10 @@ export declare function getAdminUrl(databaseUrl: string): string;
36
45
  * All three only ever make the reaper more conservative, so it can never drop a
37
46
  * database belonging to a live or still-provisioning run, or to anyone else.
38
47
  */
39
- export declare function reapOrphanTestDatabases(admin: postgres.Sql, liveTemplates?: ReadonlySet<string>): Promise<ReapResult>;
48
+ export declare function reapOrphanTestDatabases(admin: postgres.Sql, liveTemplates?: ReadonlySet<string>, options?: ReapOptions): Promise<ReapResult>;
40
49
  /**
41
50
  * Reap orphan test databases across every Postgres server referenced by the
42
51
  * manifold's database config. Used by `pipework test --reap`.
43
52
  */
44
- export declare function reapConfiguredTestDatabases(instance: Manifold): Promise<ReapResult>;
53
+ export declare function reapConfiguredTestDatabases(instance: Manifold, options?: ReapOptions): Promise<ReapResult>;
45
54
  //# sourceMappingURL=reap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reap.d.ts","sourceRoot":"","sources":["../../src/test/reap.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAuBnD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AA0BD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAIvD;AAcD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,QAAQ,CAAC,GAAG,EACnB,aAAa,GAAE,WAAW,CAAC,MAAM,CAAa,GAC7C,OAAO,CAAC,UAAU,CAAC,CAqCrB;AAgED;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBzF"}
1
+ {"version":3,"file":"reap.d.ts","sourceRoot":"","sources":["../../src/test/reap.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAuBnD,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChE,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AA0BD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAIvD;AAcD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,QAAQ,CAAC,GAAG,EACnB,aAAa,GAAE,WAAW,CAAC,MAAM,CAAa,EAC9C,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAyCrB;AAsED;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBpH"}
package/dist/test/reap.js CHANGED
@@ -82,15 +82,19 @@ const TEMPLATE_FINGERPRINT_SUFFIX = /_([0-9a-f]{16})$/;
82
82
  * All three only ever make the reaper more conservative, so it can never drop a
83
83
  * database belonging to a live or still-provisioning run, or to anyone else.
84
84
  */
85
- export async function reapOrphanTestDatabases(admin, liveTemplates = new Set()) {
85
+ export async function reapOrphanTestDatabases(admin, liveTemplates = new Set(), options = {}) {
86
86
  const rows = await admin `
87
87
  SELECT datname, numbackends
88
88
  FROM pg_stat_database
89
89
  WHERE datname LIKE ${testDbLikePattern()}
90
90
  `;
91
+ const templateRows = options.clonesOnly === true ? [] : await staleTemplateCandidates(admin);
92
+ const total = rows.length + templateRows.length;
93
+ const { onReap } = options;
91
94
  const droppedDatabases = [];
92
95
  const skippedDatabases = [];
93
- for (const { datname, numbackends } of rows) {
96
+ for (const [i, { datname, numbackends }] of rows.entries()) {
97
+ onReap?.(datname, i + 1, total);
94
98
  // A name in this prefix that pipework did not write. It could be anything —
95
99
  // a control database, a hand-made fixture, another tool's namespace that
96
100
  // happens to collide. Dropping it because the prefix matched is what #391
@@ -115,7 +119,7 @@ export async function reapOrphanTestDatabases(admin, liveTemplates = new Set())
115
119
  await admin `SELECT pg_advisory_unlock(${key.toString()}::bigint)`;
116
120
  }
117
121
  }
118
- const templates = await reapStaleTemplates(admin, liveTemplates);
122
+ const templates = await reapStaleTemplates(admin, liveTemplates, templateRows, (datname, i) => onReap?.(datname, rows.length + i, total));
119
123
  droppedDatabases.push(...templates.droppedDatabases);
120
124
  skippedDatabases.push(...templates.skippedDatabases);
121
125
  return { droppedDatabases, skippedDatabases };
@@ -144,15 +148,11 @@ export async function reapOrphanTestDatabases(admin, liveTemplates = new Set())
144
148
  * means "drop every template not currently in use", which is the right reading
145
149
  * of an explicit cleanup command.
146
150
  */
147
- async function reapStaleTemplates(admin, liveTemplates) {
148
- const rows = await admin `
149
- SELECT datname, numbackends
150
- FROM pg_stat_database
151
- WHERE datname LIKE ${templateDbLikePattern()}
152
- `;
151
+ async function reapStaleTemplates(admin, liveTemplates, rows, onEach) {
153
152
  const droppedDatabases = [];
154
153
  const skippedDatabases = [];
155
- for (const { datname, numbackends } of rows) {
154
+ for (const [i, { datname, numbackends }] of rows.entries()) {
155
+ onEach(datname, i + 1);
156
156
  const fingerprint = TEMPLATE_FINGERPRINT_SUFFIX.exec(datname)?.[1];
157
157
  // A name in the template namespace without a fingerprint was not written by
158
158
  // this scheme. Leave it alone rather than guess at its owner — and say so.
@@ -179,11 +179,18 @@ async function reapStaleTemplates(admin, liveTemplates) {
179
179
  }
180
180
  return { droppedDatabases, skippedDatabases };
181
181
  }
182
+ async function staleTemplateCandidates(admin) {
183
+ return [...await admin `
184
+ SELECT datname, numbackends
185
+ FROM pg_stat_database
186
+ WHERE datname LIKE ${templateDbLikePattern()}
187
+ `];
188
+ }
182
189
  /**
183
190
  * Reap orphan test databases across every Postgres server referenced by the
184
191
  * manifold's database config. Used by `pipework test --reap`.
185
192
  */
186
- export async function reapConfiguredTestDatabases(instance) {
193
+ export async function reapConfiguredTestDatabases(instance, options = {}) {
187
194
  const adminUrls = new Set();
188
195
  for (const [, dbConfig] of instance.config.databases()) {
189
196
  adminUrls.add(getAdminUrl(dbConfig.url));
@@ -193,7 +200,7 @@ export async function reapConfiguredTestDatabases(instance) {
193
200
  for (const adminUrl of adminUrls) {
194
201
  const client = postgres(adminUrl, { max: 1, onnotice: () => { } });
195
202
  try {
196
- const result = await reapOrphanTestDatabases(client);
203
+ const result = await reapOrphanTestDatabases(client, new Set(), options);
197
204
  droppedDatabases.push(...result.droppedDatabases);
198
205
  skippedDatabases.push(...result.skippedDatabases);
199
206
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reap.js","sourceRoot":"","sources":["../../src/test/reap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reap.js","sourceRoot":"","sources":["../../src/test/reap.ts"],"names":[],"mappings":"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"}
@@ -89,6 +89,8 @@ export interface TemplateRetryOptions {
89
89
  now?: () => number;
90
90
  /** Names the operation the lines are about. Defaults to the clone prefix. */
91
91
  prefix?: string;
92
+ /** Called with the retry number before each backoff sleep. */
93
+ onRetry?: (n: number) => void;
92
94
  }
93
95
  /**
94
96
  * Run `attempt`, retrying only on SQLSTATE 55006 with capped exponential
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"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"}