pipework 0.37.0 → 0.38.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.38.0
4
+
5
+ - **Fix: a setup connection that will not close is named, not swallowed.** `closeSetupConnections()` wrapped each close in `try {} catch {}` and cleared its registry entry regardless, so a connection that refused to close left its backend held with no record anywhere. The failure surfaced much later and in a shape that pointed at the wrong thing — a foreign pid in a `pg_stat_activity` witness, or a setup hook that ran out its timeout — both of which read as a test or box fault rather than as a close that failed. A failed close now throws `SetupConnectionCloseError`, naming every database whose connection would not close and the underlying error for each, and saying that those backends hold their locks until the process exits. Every connection that *can* close still does; the registry is still cleared, so a later `useSetupDb()` gets a fresh connection rather than the broken one.
6
+
7
+ The harness's own `afterAll` is now `teardownAfterAll()` (exported from `pipework/test`): it closes the setup connections, the pool, and the test databases, and raises the close failure at the end. A connection that will not close must not cost the pool and the databases their teardown — that trades one leak for many — so every step runs and the file still fails by name.
8
+
3
9
  ## 0.37.0
4
10
 
5
11
  - **Fix: `vitest.coverage` now lands where vitest reads it, and `coverage.enabled` exists.** Coverage was written into each *project*, and vitest treats coverage as a root-level option — so every modeled coverage setting was discarded in silence. `coverage.enabled` was not in the schema at all, which meant a preset that gates collection on an environment variable (`enabled: process.env.X !== undefined`) had no modeled home and was reachable only through `vitest.extra.test.coverage`. `vitest.coverage` is now applied at the config root, `enabled` is a modeled field, and a `coverage` key on a module or a profile is **refused by name** — with the module (and profile) it was found on, where to move it, and how to gate it. A setting that cannot take effect is worse than one that is rejected.
@@ -1,9 +1,9 @@
1
1
  import { beforeAll, afterAll, beforeEach, afterEach } from 'vitest';
2
2
  import { loadEnvFiles } from '../core/config/env.js';
3
3
  import { discoverForTestFork } from './discover-fork.js';
4
- import { setupTestDatabases, teardownTestDatabases } from './setup.js';
4
+ import { setupTestDatabases } from './setup.js';
5
5
  import { beginTestIsolation, endTestIsolation } from './plugin.js';
6
- import { _setTestState, closeSetupConnections, useTestDb } from './vitest.js';
6
+ import { _setTestState, teardownAfterAll, useTestDb } from './vitest.js';
7
7
  import { logSlowPhases } from './progress.js';
8
8
  loadEnvFiles();
9
9
  let _testContext = null;
@@ -21,9 +21,7 @@ beforeAll(async () => {
21
21
  await setupTestDatabases(instance, { onProgress: logSlowPhases() });
22
22
  });
23
23
  afterAll(async () => {
24
- await closeSetupConnections();
25
- await instance.pool.closeAll();
26
- await teardownTestDatabases();
24
+ await teardownAfterAll(instance);
27
25
  });
28
26
  beforeEach(async () => {
29
27
  _testContext = await beginTestIsolation(instance);
@@ -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,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,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,qBAAqB,EAAE,CAAA;IAC7B,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IAC9B,MAAM,qBAAqB,EAAE,CAAA;AAC/B,CAAC,CAAC,CAAA;AAEF,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,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,MAAM,eAAe,CAAA;AAE7C,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,CAAC,CAAA;AAEF,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,CAAC,CAAA"}
@@ -2,7 +2,7 @@ export { setupTestDatabases, teardownTestDatabases, getTestDatabase, getTestData
2
2
  export { flushPendingDrops, TEST_DROP_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, withFlow, type WithFlowOptions } from './vitest.js';
5
+ export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, 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';
@@ -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,MAAM,YAAY,CAAA;AACpE,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,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC/I,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,MAAM,YAAY,CAAA;AACpE,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"}
@@ -2,7 +2,7 @@ export { setupTestDatabases, teardownTestDatabases, getTestDatabase, getTestData
2
2
  export { flushPendingDrops, TEST_DROP_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, withFlow } from './vitest.js';
5
+ export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, 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';
@@ -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,MAAM,YAAY,CAAA;AACpE,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,QAAQ,EAAwB,MAAM,aAAa,CAAA;AAC/I,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,MAAM,YAAY,CAAA;AACpE,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"}
@@ -7,6 +7,15 @@ export declare function _setTestState(instance: Manifold, testContext?: TestCont
7
7
  export declare function setupPipeworkTests(configOrInstance: Blueprint | Manifold): Manifold;
8
8
  export declare function useTestDb(name?: string): DB;
9
9
  export declare function useSetupDb(name?: string): DB;
10
+ /**
11
+ * Register a setup connection directly. Internal: the only caller outside this module
12
+ * is the test that proves a close failure is named rather than swallowed (#395), which
13
+ * needs a connection whose `close` rejects.
14
+ */
15
+ export declare function _registerSetupConnection(database: string, conn: {
16
+ drizzle: DB;
17
+ close: () => Promise<void>;
18
+ }): void;
10
19
  /**
11
20
  * Close every connection `useSetupDb()` has opened, and forget them.
12
21
  *
@@ -22,6 +31,31 @@ export declare function useSetupDb(name?: string): DB;
22
31
  * `useSetupDb()` opens a fresh connection.
23
32
  */
24
33
  export declare function closeSetupConnections(): Promise<void>;
34
+ /**
35
+ * A setup connection refused to close.
36
+ *
37
+ * Names every database whose connection would not close and the underlying error,
38
+ * because the backend is still held: the alternative is a leak with no record, found
39
+ * later as an unexplained pid or a hook that never finishes.
40
+ */
41
+ export declare class SetupConnectionCloseError extends Error {
42
+ readonly failures: ReadonlyArray<{
43
+ database: string;
44
+ cause: unknown;
45
+ }>;
46
+ constructor(failures: ReadonlyArray<{
47
+ database: string;
48
+ cause: unknown;
49
+ }>);
50
+ }
51
+ /**
52
+ * The harness's own `afterAll`: close setup connections, the pool, the databases.
53
+ *
54
+ * A setup connection that will not close must not cost the pool and the databases
55
+ * their teardown — that would trade one leak for many. Every step runs, and the close
56
+ * failure is raised at the end so the file fails by name (#395).
57
+ */
58
+ export declare function teardownAfterAll(instance: Manifold): Promise<void>;
25
59
  export declare function _isInTestIsolation(): boolean;
26
60
  export declare function useTestInstance(): Manifold;
27
61
  export interface WithFlowOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,EAA0H,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAEtK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAO5E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAKxF;AAED,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CA0BnF;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAiC3C;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAyC5C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3D;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,eAAe,IAAI,QAAQ,CAS1C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7D,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnD,OAAO,EAA0H,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAEtK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAO5E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAKxF;AAED,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAwBnF;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAiC3C;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAyC5C;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,GAAG,IAAI,CAElH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB3D;AAED;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;gBAE1D,QAAQ,EAAE,aAAa,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAa1E;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAYxE;AAMD,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,eAAe,IAAI,QAAQ,CAS1C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7D,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -19,9 +19,7 @@ export function setupPipeworkTests(configOrInstance) {
19
19
  await setupTestDatabases(instance);
20
20
  });
21
21
  afterAll(async () => {
22
- await closeSetupConnections();
23
- await instance.pool.closeAll();
24
- await teardownTestDatabases();
22
+ await teardownAfterAll(instance);
25
23
  });
26
24
  beforeEach(async () => {
27
25
  _testContext = await beginTestIsolation(instance);
@@ -94,6 +92,14 @@ export function useSetupDb(name) {
94
92
  },
95
93
  });
96
94
  }
95
+ /**
96
+ * Register a setup connection directly. Internal: the only caller outside this module
97
+ * is the test that proves a close failure is named rather than swallowed (#395), which
98
+ * needs a connection whose `close` rejects.
99
+ */
100
+ export function _registerSetupConnection(database, conn) {
101
+ _setupConnections.set(database, conn);
102
+ }
97
103
  /**
98
104
  * Close every connection `useSetupDb()` has opened, and forget them.
99
105
  *
@@ -109,13 +115,67 @@ export function useSetupDb(name) {
109
115
  * `useSetupDb()` opens a fresh connection.
110
116
  */
111
117
  export async function closeSetupConnections() {
112
- for (const [, conn] of _setupConnections) {
118
+ const failures = [];
119
+ for (const [database, conn] of _setupConnections) {
113
120
  try {
114
121
  await conn.close();
115
122
  }
116
- catch { /* best effort */ }
123
+ catch (cause) {
124
+ failures.push({ database, cause });
125
+ }
117
126
  }
127
+ // Cleared either way: a connection that would not close must not be handed to a
128
+ // later useSetupDb(). What must not happen is clearing it *quietly* — the backend
129
+ // stays held, and the only later evidence is a foreign pid in pg_stat_activity or
130
+ // a setup hook that times out, both of which read as a test or box fault (#395).
118
131
  _setupConnections.clear();
132
+ if (failures.length > 0)
133
+ throw new SetupConnectionCloseError(failures);
134
+ }
135
+ /**
136
+ * A setup connection refused to close.
137
+ *
138
+ * Names every database whose connection would not close and the underlying error,
139
+ * because the backend is still held: the alternative is a leak with no record, found
140
+ * later as an unexplained pid or a hook that never finishes.
141
+ */
142
+ export class SetupConnectionCloseError extends Error {
143
+ failures;
144
+ constructor(failures) {
145
+ const named = failures.map(f => ` ${f.database}: ${messageOf(f.cause)}`).join('\n');
146
+ super(`[pipework] ${String(failures.length)} setup connection${failures.length === 1 ? '' : 's'} would not close.\n\n` +
147
+ `${named}\n\n` +
148
+ ' Each backend above is still held by this test process. It is dropped from\n' +
149
+ ' pipework\'s registry regardless, so a later useSetupDb() opens a fresh one —\n' +
150
+ ' but the old backend holds its locks until the process exits.\n');
151
+ this.name = 'SetupConnectionCloseError';
152
+ this.failures = failures;
153
+ if (failures.length === 1)
154
+ this.cause = failures[0].cause;
155
+ }
156
+ }
157
+ /**
158
+ * The harness's own `afterAll`: close setup connections, the pool, the databases.
159
+ *
160
+ * A setup connection that will not close must not cost the pool and the databases
161
+ * their teardown — that would trade one leak for many. Every step runs, and the close
162
+ * failure is raised at the end so the file fails by name (#395).
163
+ */
164
+ export async function teardownAfterAll(instance) {
165
+ let closeFailure;
166
+ try {
167
+ await closeSetupConnections();
168
+ }
169
+ catch (err) {
170
+ closeFailure = err;
171
+ }
172
+ await instance.pool.closeAll();
173
+ await teardownTestDatabases();
174
+ if (closeFailure !== undefined)
175
+ throw closeFailure;
176
+ }
177
+ function messageOf(cause) {
178
+ return cause instanceof Error ? cause.message : String(cause);
119
179
  }
120
180
  export function _isInTestIsolation() {
121
181
  return _testContext !== null;
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.37.0",
3
+ "version": "0.38.0",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
6
  "license": "MIT",