pipework 0.8.13 → 0.8.15

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 (75) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cli/commands/check.d.ts +1 -0
  3. package/dist/cli/commands/check.d.ts.map +1 -1
  4. package/dist/cli/commands/check.js +78 -33
  5. package/dist/cli/commands/check.js.map +1 -1
  6. package/dist/cli/commands/scope.d.ts +4 -0
  7. package/dist/cli/commands/scope.d.ts.map +1 -1
  8. package/dist/cli/commands/scope.js +12 -2
  9. package/dist/cli/commands/scope.js.map +1 -1
  10. package/dist/cli/commands/test.d.ts +2 -0
  11. package/dist/cli/commands/test.d.ts.map +1 -1
  12. package/dist/cli/commands/test.js +11 -1
  13. package/dist/cli/commands/test.js.map +1 -1
  14. package/dist/cli/index.d.ts.map +1 -1
  15. package/dist/cli/index.js +8 -3
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/core/config/namespace.d.ts +10 -0
  18. package/dist/core/config/namespace.d.ts.map +1 -1
  19. package/dist/core/config/schema.d.ts +21 -0
  20. package/dist/core/config/schema.d.ts.map +1 -1
  21. package/dist/core/config/schema.js +10 -0
  22. package/dist/core/config/schema.js.map +1 -1
  23. package/dist/data/migrate/apply.d.ts +25 -0
  24. package/dist/data/migrate/apply.d.ts.map +1 -1
  25. package/dist/data/migrate/apply.js +111 -5
  26. package/dist/data/migrate/apply.js.map +1 -1
  27. package/dist/data/migrate/diff.d.ts +3 -0
  28. package/dist/data/migrate/diff.d.ts.map +1 -1
  29. package/dist/data/migrate/diff.js +5 -1
  30. package/dist/data/migrate/diff.js.map +1 -1
  31. package/dist/data/migrate/generate.d.ts.map +1 -1
  32. package/dist/data/migrate/generate.js +9 -2
  33. package/dist/data/migrate/generate.js.map +1 -1
  34. package/dist/data/migrate/post-process.d.ts +8 -3
  35. package/dist/data/migrate/post-process.d.ts.map +1 -1
  36. package/dist/data/migrate/post-process.js +8 -18
  37. package/dist/data/migrate/post-process.js.map +1 -1
  38. package/dist/data/migrate/provision-framework.d.ts +14 -0
  39. package/dist/data/migrate/provision-framework.d.ts.map +1 -0
  40. package/dist/data/migrate/provision-framework.js +39 -0
  41. package/dist/data/migrate/provision-framework.js.map +1 -0
  42. package/dist/data/migrate/sql-emit.d.ts.map +1 -1
  43. package/dist/data/migrate/sql-emit.js +38 -14
  44. package/dist/data/migrate/sql-emit.js.map +1 -1
  45. package/dist/test/setup.d.ts +2 -1
  46. package/dist/test/setup.d.ts.map +1 -1
  47. package/dist/test/setup.js +109 -67
  48. package/dist/test/setup.js.map +1 -1
  49. package/dist/test/vitest-plugin.d.ts +4 -0
  50. package/dist/test/vitest-plugin.d.ts.map +1 -1
  51. package/dist/test/vitest-plugin.js +39 -1
  52. package/dist/test/vitest-plugin.js.map +1 -1
  53. package/dist/trace/check/coverage-check.d.ts.map +1 -1
  54. package/dist/trace/check/coverage-check.js +4 -2
  55. package/dist/trace/check/coverage-check.js.map +1 -1
  56. package/dist/trace/check/flow-step-site.d.ts +4 -0
  57. package/dist/trace/check/flow-step-site.d.ts.map +1 -1
  58. package/dist/trace/check/flow-step-site.js +13 -0
  59. package/dist/trace/check/flow-step-site.js.map +1 -1
  60. package/dist/trace/partition/sync.d.ts.map +1 -1
  61. package/dist/trace/partition/sync.js +23 -2
  62. package/dist/trace/partition/sync.js.map +1 -1
  63. package/dist/trace/partition/tables.d.ts +7 -0
  64. package/dist/trace/partition/tables.d.ts.map +1 -1
  65. package/dist/trace/partition/tables.js +7 -0
  66. package/dist/trace/partition/tables.js.map +1 -1
  67. package/dist/workspace/affected.d.ts +6 -0
  68. package/dist/workspace/affected.d.ts.map +1 -1
  69. package/dist/workspace/affected.js +5 -0
  70. package/dist/workspace/affected.js.map +1 -1
  71. package/dist/workspace/changed-files.d.ts +14 -2
  72. package/dist/workspace/changed-files.d.ts.map +1 -1
  73. package/dist/workspace/changed-files.js +50 -4
  74. package/dist/workspace/changed-files.js.map +1 -1
  75. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"post-process.js","sourceRoot":"","sources":["../../../src/data/migrate/post-process.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,oDAAoD,CAAA;AAC5E,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAC3C,MAAM,KAAK,GAAG,qEAAqE,CAAA;AACnF,MAAM,mBAAmB,GAAG,sFAAsF,CAAA;AAClH,MAAM,sBAAsB,GAAG,6CAA6C,CAAA;AAE5E,MAAM,qBAAqB,GAAG,4BAA4B,CAAA;AAE1D;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACxC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAExC,MAAM,gBAAgB,GAAa,EAAE,CAAA;IACrC,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;QAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC1B,SAAQ;QACV,CAAC;QAED,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAC3B,uCAAuC,EACvC,mBAAmB,CACpB,CAAA;YACD,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAChC,eAAe,GAAG,IAAI,CAAA;YACtB,SAAQ;QACV,CAAC;QAED,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,eAAe,GAAG,IAAI,CAAA;QACxB,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACpD,MAAM,eAAe,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAE5D,IAAI,UAAU,KAAK,IAAI,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;gBACpD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAE,CAAA;gBAChC,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAE,CAAA;gBAE1C,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;gBACtD,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBACnC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,SAAS,wBAAwB,cAAc,EAAE,CAAC,CAAA;gBACzF,SAAQ;YACV,CAAC;QACH,CAAC;QAED,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;IAE7C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,QAAQ,CAAA;IACpB,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC;YAC/C,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,GAAG,qBAAqB,KAAK,MAAM,EAAE,CAAA;IAC3C,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"post-process.js","sourceRoot":"","sources":["../../../src/data/migrate/post-process.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,oDAAoD,CAAA;AAC5E,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAE3C,MAAM,qBAAqB,GAAG,4BAA4B,CAAA;AAE1D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACxC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAExC,MAAM,gBAAgB,GAAa,EAAE,CAAA;IACrC,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;QAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC1B,SAAQ;QACV,CAAC;QAED,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAC3B,uCAAuC,EACvC,mBAAmB,CACpB,CAAA;YACD,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAChC,eAAe,GAAG,IAAI,CAAA;YACtB,SAAQ;QACV,CAAC;QAED,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,eAAe,GAAG,IAAI,CAAA;QACxB,CAAC;QAED,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;IAE7C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,QAAQ,CAAA;IACpB,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC;YAC/C,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,GAAG,qBAAqB,KAAK,MAAM,EAAE,CAAA;IAC3C,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { DB } from '../db/index.js';
2
+ import type { Blueprint } from '../../core/config/schema.js';
3
+ import { type TracePartitionConfig } from '../../trace/partition/index.js';
4
+ /**
5
+ * Create the framework-owned partitioned tables and their day partitions on a
6
+ * freshly-migrated database.
7
+ *
8
+ * Trace and audit storage rides the default database only, and only when the
9
+ * blueprint enables `trace` or `audit`. `valve_crossing` is framework-owned but
10
+ * not partitioned — it ships in the application migration like any ordinary
11
+ * table — so it is not provisioned here. Issue #313.
12
+ */
13
+ export declare function provisionFrameworkTables(db: DB, blueprint: Blueprint, traceConfig: TracePartitionConfig, isDefaultDatabase: boolean): Promise<void>;
14
+ //# sourceMappingURL=provision-framework.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provision-framework.d.ts","sourceRoot":"","sources":["../../../src/data/migrate/provision-framework.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAQ/F;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,oBAAoB,EACjC,iBAAiB,EAAE,OAAO,GACzB,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -0,0 +1,39 @@
1
+ // Provisions pipework's framework-owned partitioned tables — the trace family.
2
+ // `generate` deliberately keeps them out of application migrations (#313): a
3
+ // bare CREATE TABLE of a PARTITION BY RANGE table accepts no rows. pipework
4
+ // creates them itself — the parent tables, then their day partitions —
5
+ // wherever a database is provisioned (the test harness; see src/test/setup.ts).
6
+ import { sql } from '../db/sql.js';
7
+ import { syncTracePartitions } from '../../trace/partition/index.js';
8
+ import { PARTITIONED_TRACE_TABLE_NAMES } from '../../trace/partition/tables.js';
9
+ import { loadInternalDefinitions } from './internal-definitions.js';
10
+ import { buildSnapshot, EMPTY_SNAPSHOT } from './snapshot.js';
11
+ import { diffSnapshots, diffOpTableName } from './diff.js';
12
+ import { emitSQL } from './sql-emit.js';
13
+ import { makeTablesUnlogged } from './apply.js';
14
+ /**
15
+ * Create the framework-owned partitioned tables and their day partitions on a
16
+ * freshly-migrated database.
17
+ *
18
+ * Trace and audit storage rides the default database only, and only when the
19
+ * blueprint enables `trace` or `audit`. `valve_crossing` is framework-owned but
20
+ * not partitioned — it ships in the application migration like any ordinary
21
+ * table — so it is not provisioned here. Issue #313.
22
+ */
23
+ export async function provisionFrameworkTables(db, blueprint, traceConfig, isDefaultDatabase) {
24
+ if (!isDefaultDatabase)
25
+ return;
26
+ if (blueprint.trace === undefined && blueprint.audit === undefined)
27
+ return;
28
+ const definitions = await loadInternalDefinitions(blueprint, { isDefaultDatabase });
29
+ const snapshot = buildSnapshot(definitions, EMPTY_SNAPSHOT.id);
30
+ const ops = diffSnapshots(EMPTY_SNAPSHOT, snapshot);
31
+ const partitionedOps = ops.filter(op => PARTITIONED_TRACE_TABLE_NAMES.has(diffOpTableName(op)));
32
+ // The framework tables ride a test database (this runs only from the test
33
+ // harness), so they are created UNLOGGED like every other test table. #325
34
+ for (const statement of emitSQL(partitionedOps)) {
35
+ await db.execute(sql.raw(makeTablesUnlogged(statement)));
36
+ }
37
+ await syncTracePartitions(db, traceConfig);
38
+ }
39
+ //# sourceMappingURL=provision-framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provision-framework.js","sourceRoot":"","sources":["../../../src/data/migrate/provision-framework.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,uEAAuE;AACvE,gFAAgF;AAEhF,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAGlC,OAAO,EAAE,mBAAmB,EAA6B,MAAM,gCAAgC,CAAA;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,EAAM,EACN,SAAoB,EACpB,WAAiC,EACjC,iBAA0B;IAE1B,IAAI,CAAC,iBAAiB;QAAE,OAAM;IAC9B,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;QAAE,OAAM;IAE1E,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAA;IACnF,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC,CAAA;IAC9D,MAAM,GAAG,GAAG,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;IACnD,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,6BAA6B,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAE/F,0EAA0E;IAC1E,2EAA2E;IAC3E,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAChD,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,mBAAmB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;AAC5C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sql-emit.d.ts","sourceRoot":"","sources":["../../../src/data/migrate/sql-emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACP,MAAM,WAAW,CAAA;AAoBlB,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAM/C"}
1
+ {"version":3,"file":"sql-emit.d.ts","sourceRoot":"","sources":["../../../src/data/migrate/sql-emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACP,MAAM,WAAW,CAAA;AA0BlB,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAsB/C"}
@@ -7,15 +7,32 @@ function qualifiedTable(schema, name) {
7
7
  return `${q(schema)}.${q(name)}`;
8
8
  }
9
9
  export function emitSQL(ops) {
10
- const statements = [];
10
+ // Foreign keys are hoisted to run after every CREATE TABLE. A from-scratch
11
+ // baseline creates many tables in one migration; an FK ALTER emitted next to
12
+ // its own CREATE TABLE fails when it references a table created further down.
13
+ // Collecting every FK statement and appending them keeps all referenced
14
+ // tables in place before any constraint is added. Issue #312.
15
+ const tables = [];
16
+ const foreignKeys = [];
11
17
  for (const op of ops) {
12
- statements.push(...emitOp(op));
13
- }
14
- return statements;
18
+ if (op.type === 'create_table') {
19
+ tables.push(...emitCreateTable(op.table));
20
+ const partitioned = op.table.partitionBy !== undefined;
21
+ for (const fk of Object.values(op.table.foreignKeys)) {
22
+ foreignKeys.push(...emitAddForeignKey(op.table.name, op.table.schema, fk, partitioned));
23
+ }
24
+ }
25
+ else if (op.type === 'add_foreign_key') {
26
+ foreignKeys.push(...emitAddForeignKey(op.tableName, op.tableSchema, op.fk, op.tablePartitioned));
27
+ }
28
+ else {
29
+ tables.push(...emitOp(op));
30
+ }
31
+ }
32
+ return [...tables, ...foreignKeys];
15
33
  }
16
34
  function emitOp(op) {
17
35
  switch (op.type) {
18
- case 'create_table': return emitCreateTable(op.table);
19
36
  case 'drop_table': return emitDropTable(op.table);
20
37
  case 'add_column': return [emitAddColumn(op.tableName, op.tableSchema, op.column)];
21
38
  case 'drop_column': return [emitDropColumn(op.tableName, op.tableSchema, op.column.name)];
@@ -30,7 +47,6 @@ function emitOp(op) {
30
47
  case 'alter_column_drop_identity': return [emitAlterColumnDropIdentity(op.tableName, op.tableSchema, op.column)];
31
48
  case 'create_index': return [emitCreateIndex(op.tableName, op.tableSchema, op.index)];
32
49
  case 'drop_index': return [emitDropIndex(op.tableSchema, op.index)];
33
- case 'add_foreign_key': return [emitAddForeignKey(op.tableName, op.tableSchema, op.fk)];
34
50
  case 'drop_foreign_key': return [emitDropForeignKey(op.tableName, op.tableSchema, op.fk.name)];
35
51
  case 'add_check': return [emitAddCheck(op.tableName, op.tableSchema, op.check.name, op.check.value)];
36
52
  case 'drop_check': return [emitDropConstraint(op.tableName, op.tableSchema, op.check.name)];
@@ -63,9 +79,8 @@ function emitCreateTable(table) {
63
79
  for (const idx of Object.values(table.indexes)) {
64
80
  statements.push(emitCreateIndex(table.name, table.schema, idx));
65
81
  }
66
- for (const fk of Object.values(table.foreignKeys)) {
67
- statements.push(emitAddForeignKey(table.name, table.schema, fk));
68
- }
82
+ // Foreign keys are not emitted here — `emitSQL` hoists them after every
83
+ // CREATE TABLE so forward references resolve. Issue #312.
69
84
  return statements;
70
85
  }
71
86
  function columnDef(col) {
@@ -190,19 +205,28 @@ function emitDropIndex(tableSchema, idx) {
190
205
  return `DROP INDEX ${q(idx.name)}`;
191
206
  return `DROP INDEX ${q(tableSchema)}.${q(idx.name)}`;
192
207
  }
193
- function emitAddForeignKey(tableName, tableSchema, fk) {
208
+ function emitAddForeignKey(tableName, tableSchema, fk, tablePartitioned) {
194
209
  const tbl = qualifiedTable(tableSchema, tableName);
195
210
  const cols = fk.columns.map(q).join(', ');
196
211
  const refTbl = qualifiedTable(fk.foreignSchema, fk.foreignTable);
197
212
  const refCols = fk.foreignColumns.map(q).join(', ');
198
213
  let stmt = `ALTER TABLE ${tbl} ADD CONSTRAINT ${q(fk.name)} FOREIGN KEY (${cols}) REFERENCES ${refTbl}(${refCols})`;
199
214
  if (fk.onUpdate !== undefined && fk.onUpdate !== 'no action') {
200
- stmt += ` ON UPDATE ${fk.onUpdate.toUpperCase().replace(' ', ' ')}`;
215
+ stmt += ` ON UPDATE ${fk.onUpdate.toUpperCase()}`;
201
216
  }
202
217
  if (fk.onDelete !== undefined && fk.onDelete !== 'no action') {
203
- stmt += ` ON DELETE ${fk.onDelete.toUpperCase().replace(' ', ' ')}`;
204
- }
205
- return stmt;
218
+ stmt += ` ON DELETE ${fk.onDelete.toUpperCase()}`;
219
+ }
220
+ // A partitioned table rejects NOT VALID foreign keys — Postgres requires the
221
+ // constraint be created already valid. For an ordinary table, ADD ... NOT
222
+ // VALID paired with VALIDATE CONSTRAINT keeps neither statement holding a
223
+ // lock while it scans a populated table. Issue #312.
224
+ if (tablePartitioned)
225
+ return [stmt];
226
+ return [
227
+ `${stmt} NOT VALID`,
228
+ `ALTER TABLE ${tbl} VALIDATE CONSTRAINT ${q(fk.name)}`,
229
+ ];
206
230
  }
207
231
  function emitDropForeignKey(tableName, tableSchema, fkName) {
208
232
  return `ALTER TABLE ${qualifiedTable(tableSchema, tableName)} DROP CONSTRAINT ${q(fkName)}`;
@@ -1 +1 @@
1
- {"version":3,"file":"sql-emit.js","sourceRoot":"","sources":["../../../src/data/migrate/sql-emit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql-emit.js","sourceRoot":"","sources":["../../../src/data/migrate/sql-emit.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@ export interface TestDatabase {
4
4
  url: string;
5
5
  appUrl: string;
6
6
  appRole: string;
7
- templateDb: string;
7
+ /** The per-file database that gets dropped on teardown. */
8
+ database: string;
8
9
  }
9
10
  export declare function setupTestDatabases(instance: Manifold): Promise<Map<string, TestDatabase>>;
10
11
  export declare function teardownTestDatabases(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAMnD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB;AAoBD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAa/F;AAyGD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsC3D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEtE;AAED,wBAAgB,gBAAgB,IAAI,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAEpE"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAOnD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAA;CACjB;AAwCD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAc/F;AAgKD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB3D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEtE;AAED,wBAAgB,gBAAgB,IAAI,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAEpE"}
@@ -4,8 +4,10 @@ import { drizzle } from '../data/query/postgres-js/index.js';
4
4
  import { sql } from '../data/query/index.js';
5
5
  import { quoteIdentifier } from '../data/db/identifiers.js';
6
6
  import { applyMigrations } from '../data/migrate/apply.js';
7
+ import { provisionFrameworkTables } from '../data/migrate/provision-framework.js';
7
8
  import { getAdminUrl, reapOrphanTestDatabases, runLockKey } from './reap.js';
8
9
  const testDatabases = new Map();
10
+ const templates = new Map();
9
11
  let adminClient = null;
10
12
  // A random per-process fingerprint, embedded in every database and role name
11
13
  // this run creates. It keys the advisory lock the run holds for its lifetime,
@@ -13,11 +15,18 @@ let adminClient = null;
13
15
  const runNonce = randomBytes(6).toString('hex');
14
16
  let lockClient = null;
15
17
  let reaped = false;
18
+ function templateDbName(baseName) {
19
+ return `pipework_test_${baseName}_tmpl_${process.pid}_${runNonce}`;
20
+ }
16
21
  function testDbName(baseName) {
17
22
  return `pipework_test_${baseName}_${process.pid}_${runNonce}`;
18
23
  }
24
+ // The app role is named to match what the orphan reaper derives from the
25
+ // *template* database name (`reap.ts` `pairedRoleName`): the template outlives
26
+ // every per-file clone, so when the reaper drops a leaked template it drops
27
+ // this role with it. Without the `_tmpl_` segment the role would leak forever.
19
28
  function appRoleName(baseName) {
20
- return `pipework_app_${baseName}_${process.pid}_${runNonce}`;
29
+ return `pipework_app_${baseName}_tmpl_${process.pid}_${runNonce}`;
21
30
  }
22
31
  export async function setupTestDatabases(instance) {
23
32
  const databases = [...instance.config.databases()];
@@ -26,16 +35,19 @@ export async function setupTestDatabases(instance) {
26
35
  await prepareRun(getAdminUrl(firstDb[1].url));
27
36
  }
28
37
  for (const [name, dbConfig] of databases) {
29
- const testDb = await createTestDatabase(name, dbConfig);
38
+ const template = await ensureTemplate(instance, name, dbConfig);
39
+ const testDb = await cloneTestDatabase(name, dbConfig, template);
30
40
  testDatabases.set(name, testDb);
31
41
  }
32
42
  return testDatabases;
33
43
  }
34
44
  // Acquire this run's advisory lock and reap orphans before provisioning. The
35
45
  // lock is taken before the first CREATE DATABASE so a concurrent run's reaper
36
- // can never mistake this run's freshly-created, backend-less databases for
37
- // orphans. It is held on a dedicated connection (idle/lifetime timeouts off)
38
- // so Postgres releases it only when this process dies.
46
+ // can never mistake this run's freshly-created, backend-less databases — the
47
+ // per-process template included — for orphans. It is held on a dedicated
48
+ // connection (idle/lifetime timeouts off) so Postgres releases it only when
49
+ // this process dies, and is never unlocked per file: the template outlives
50
+ // every file's database, so the lock that protects it must outlive them too.
39
51
  async function prepareRun(adminUrl) {
40
52
  if (adminClient === null) {
41
53
  adminClient = postgres(adminUrl, { max: 1, onnotice: () => { } });
@@ -54,99 +66,129 @@ async function prepareRun(adminUrl) {
54
66
  }
55
67
  }
56
68
  }
57
- async function createTestDatabase(name, dbConfig) {
58
- const adminUrl = getAdminUrl(dbConfig.url);
59
- if (!adminClient) {
60
- adminClient = postgres(adminUrl, { max: 1, onnotice: () => { } });
61
- }
62
- const dbName = testDbName(name);
63
- const dbIdent = quoteIdentifier(dbName, 'database');
69
+ // Build the per-process template for one database, once. Subsequent test files
70
+ // hit the cache and skip straight to cloning. Issue #321.
71
+ async function ensureTemplate(instance, name, dbConfig) {
72
+ const cached = templates.get(name);
73
+ if (cached !== undefined)
74
+ return cached;
75
+ const templateDb = templateDbName(name);
76
+ const templateIdent = quoteIdentifier(templateDb, 'database');
64
77
  const admin = drizzle(adminClient);
65
- await admin.execute(sql.raw(`DROP DATABASE IF EXISTS ${dbIdent}`));
66
- await admin.execute(sql.raw(`CREATE DATABASE ${dbIdent}`));
67
- const testUrl = new URL(dbConfig.url);
68
- testUrl.pathname = `/${dbName}`;
69
- const testUrlStr = testUrl.toString();
70
- const testClient = postgres(testUrlStr, { max: 1, onnotice: () => { } });
71
- const testDb = drizzle(testClient);
78
+ await admin.execute(sql.raw(`DROP DATABASE IF EXISTS ${templateIdent}`));
79
+ await admin.execute(sql.raw(`CREATE DATABASE ${templateIdent}`));
80
+ // #325: a test database is dropped or rolled back — durable commits are pure
81
+ // overhead. `synchronous_commit` is a per-database setting and does not copy
82
+ // with `WITH TEMPLATE`, so it is set on the template and on every clone.
83
+ await admin.execute(sql.raw(`ALTER DATABASE ${templateIdent} SET synchronous_commit = off`));
84
+ const templateUrl = new URL(dbConfig.url);
85
+ templateUrl.pathname = `/${templateDb}`;
86
+ const templateUrlStr = templateUrl.toString();
87
+ const templateClient = postgres(templateUrlStr, { max: 1, onnotice: () => { } });
88
+ const templateDbHandle = drizzle(templateClient);
72
89
  if (dbConfig.extensions.length > 0) {
73
90
  for (const ext of dbConfig.extensions) {
74
- await testDb.execute(sql.raw(`CREATE EXTENSION IF NOT EXISTS ${quoteIdentifier(ext, 'extension')}`));
91
+ await templateDbHandle.execute(sql.raw(`CREATE EXTENSION IF NOT EXISTS ${quoteIdentifier(ext, 'extension')}`));
75
92
  }
76
93
  }
77
94
  if (dbConfig.migrations !== undefined) {
78
95
  await applyMigrations({
79
96
  migrationsFolder: dbConfig.migrations,
80
97
  migrationsTable: dbConfig.migrationTable,
81
- connectionUrl: testUrlStr,
98
+ connectionUrl: templateUrlStr,
82
99
  stripConcurrently: true,
100
+ unloggedTables: true,
83
101
  });
84
102
  }
85
- await testClient.end();
86
- const roleName = appRoleName(name);
87
- const appUrl = await provisionAppRole(adminClient, testUrlStr, dbName, roleName);
88
- return { name, url: testUrlStr, appUrl, appRole: roleName, templateDb: dbName };
103
+ // Framework-owned partitioned tables (trace family) are kept out of app
104
+ // migrations (#313) — pipework creates them and their day partitions here so
105
+ // a traced test never hits a missing relation or a missing partition.
106
+ await provisionFrameworkTables(templateDbHandle, instance.config.raw, {
107
+ hotRetentionDays: instance.config.trace.hotRetentionDays,
108
+ errorRetentionDays: instance.config.trace.errorRetentionDays,
109
+ auditRetentionDays: instance.config.audit.retentionDays,
110
+ partitionLeadDays: instance.config.trace.partitionLeadDays,
111
+ }, name === instance.config.defaultDatabaseName());
112
+ await templateClient.end();
113
+ const appRole = appRoleName(name);
114
+ await provisionTemplateRole(adminClient, templateUrlStr, appRole);
115
+ const template = { templateDb, appRole };
116
+ templates.set(name, template);
117
+ return template;
118
+ }
119
+ // Clone one test file's database from the per-process template. A clone copies
120
+ // the template's tables, partitions, and in-database grants; only the cluster
121
+ // catalog's CONNECT privilege has to be re-granted on the new database. Issue #321.
122
+ async function cloneTestDatabase(name, dbConfig, template) {
123
+ const dbName = testDbName(name);
124
+ const dbIdent = quoteIdentifier(dbName, 'database');
125
+ const templateIdent = quoteIdentifier(template.templateDb, 'database');
126
+ const roleIdent = quoteIdentifier(template.appRole, 'role');
127
+ const admin = drizzle(adminClient);
128
+ await admin.execute(sql.raw(`DROP DATABASE IF EXISTS ${dbIdent}`));
129
+ // CREATE ... WITH TEMPLATE refuses to run while any backend is connected to
130
+ // the template; close out stragglers (e.g. a connection still draining).
131
+ await admin.execute(sql `SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = ${template.templateDb} AND pid != pg_backend_pid()`);
132
+ await admin.execute(sql.raw(`CREATE DATABASE ${dbIdent} WITH TEMPLATE ${templateIdent}`));
133
+ await admin.execute(sql.raw(`ALTER DATABASE ${dbIdent} SET synchronous_commit = off`));
134
+ await admin.execute(sql.raw(`GRANT CONNECT ON DATABASE ${dbIdent} TO ${roleIdent}`));
135
+ const testUrl = new URL(dbConfig.url);
136
+ testUrl.pathname = `/${dbName}`;
137
+ const appUrl = new URL(testUrl.toString());
138
+ appUrl.username = template.appRole;
139
+ appUrl.password = 'pipework_test';
140
+ return {
141
+ name,
142
+ url: testUrl.toString(),
143
+ appUrl: appUrl.toString(),
144
+ appRole: template.appRole,
145
+ database: dbName,
146
+ };
89
147
  }
90
- async function provisionAppRole(client, testUrl, dbName, roleName) {
148
+ // Create the app role (cluster-global, once per process) and grant it on the
149
+ // template's tables, sequences, schema, and future objects. Those grants are
150
+ // in-database catalog rows, so every clone of the template inherits them — the
151
+ // role keeps a stable OID for the process lifetime, so the inherited ACL
152
+ // entries stay valid. Issue #321.
153
+ async function provisionTemplateRole(client, templateUrl, roleName) {
91
154
  const admin = drizzle(client);
92
155
  const roleIdent = quoteIdentifier(roleName, 'role');
93
- const dbIdent = quoteIdentifier(dbName, 'database');
94
156
  await admin.execute(sql.raw(`DO $$ BEGIN ` +
95
157
  `IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${roleName}') THEN ` +
96
158
  `CREATE ROLE ${roleIdent} WITH LOGIN PASSWORD 'pipework_test' NOSUPERUSER NOCREATEDB NOCREATEROLE; ` +
97
159
  `END IF; ` +
98
160
  `END $$`));
99
- await admin.execute(sql.raw(`GRANT CONNECT ON DATABASE ${dbIdent} TO ${roleIdent}`));
100
- const testClient = postgres(testUrl, { max: 1, onnotice: () => { } });
101
- const testDb = drizzle(testClient);
102
- await testDb.execute(sql.raw(`GRANT USAGE ON SCHEMA public TO ${roleIdent}`));
103
- await testDb.execute(sql.raw(`GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO ${roleIdent}`));
104
- await testDb.execute(sql.raw(`GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO ${roleIdent}`));
105
- await testDb.execute(sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO ${roleIdent}`));
106
- await testDb.execute(sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO ${roleIdent}`));
107
- await testClient.end();
108
- const appUrl = new URL(testUrl);
109
- appUrl.username = roleName;
110
- appUrl.password = 'pipework_test';
111
- return appUrl.toString();
161
+ const templateClient = postgres(templateUrl, { max: 1, onnotice: () => { } });
162
+ const templateDb = drizzle(templateClient);
163
+ await templateDb.execute(sql.raw(`GRANT USAGE ON SCHEMA public TO ${roleIdent}`));
164
+ await templateDb.execute(sql.raw(`GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO ${roleIdent}`));
165
+ await templateDb.execute(sql.raw(`GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO ${roleIdent}`));
166
+ await templateDb.execute(sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO ${roleIdent}`));
167
+ await templateDb.execute(sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO ${roleIdent}`));
168
+ await templateClient.end();
112
169
  }
170
+ // Drop the per-file clones. The per-process template, app roles, advisory lock,
171
+ // and admin connection deliberately outlive a single file — the template is
172
+ // reused by every following file, and the lock guarding it must stay held.
173
+ // They are released when the process exits; a run that never gets there leaves
174
+ // orphans for the next run's reaper. Issue #321.
113
175
  export async function teardownTestDatabases() {
114
- if (lockClient !== null) {
115
- try {
116
- await lockClient `SELECT pg_advisory_unlock(${runLockKey(runNonce).toString()}::bigint)`;
117
- }
118
- catch {
119
- // Connection already gone — Postgres released the lock when it died.
120
- }
121
- await lockClient.end();
122
- lockClient = null;
123
- }
124
- if (!adminClient)
176
+ if (adminClient === null) {
177
+ testDatabases.clear();
125
178
  return;
179
+ }
126
180
  const admin = drizzle(adminClient);
127
- const rolesToDrop = [];
128
181
  for (const [, testDb] of testDatabases) {
129
182
  try {
130
- const dbName = quoteIdentifier(testDb.templateDb, 'database');
131
- await admin.execute(sql `SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = ${testDb.templateDb} AND pid != pg_backend_pid()`);
132
- await admin.execute(sql.raw(`DROP DATABASE IF EXISTS ${dbName}`));
133
- }
134
- catch {
135
- // Best effort cleanup
136
- }
137
- rolesToDrop.push(testDb.appRole);
138
- }
139
- for (const roleName of rolesToDrop) {
140
- try {
141
- await admin.execute(sql.raw(`DROP ROLE IF EXISTS ${quoteIdentifier(roleName, 'role')}`));
183
+ const dbIdent = quoteIdentifier(testDb.database, 'database');
184
+ await admin.execute(sql `SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = ${testDb.database} AND pid != pg_backend_pid()`);
185
+ await admin.execute(sql.raw(`DROP DATABASE IF EXISTS ${dbIdent}`));
142
186
  }
143
187
  catch {
144
- // Best effort cleanup
188
+ // Best effort cleanup — a leftover clone is reaped by the next run.
145
189
  }
146
190
  }
147
191
  testDatabases.clear();
148
- await adminClient.end();
149
- adminClient = null;
150
192
  }
151
193
  export function getTestDatabase(name) {
152
194
  return testDatabases.get(name);
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,10 @@ export interface PipeworkVitestOptions {
18
18
  * one of its export subpaths) resolves through the package's `exports` field
19
19
  * to `dist/`, which is not built during `pipework test`. This routes those
20
20
  * specifiers to `src/` instead. Issue #301.
21
+ *
22
+ * A wildcard export subpath contributes a single `*` entry — key and value
23
+ * both contain one `*` (e.g. `@scope/pkg/events/*` → `<abs>/pkg/src/events/*.ts`).
24
+ * The resolver substitutes the matched segment into the value. Issue #311.
21
25
  */
22
26
  workspacePackages?: Record<string, string>;
23
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vitest-plugin.d.ts","sourceRoot":"","sources":["../../src/test/vitest-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iLAAiL;IACjL,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC3C;AAED,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAgChE"}
1
+ {"version":3,"file":"vitest-plugin.d.ts","sourceRoot":"","sources":["../../src/test/vitest-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iLAAiL;IACjL,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC3C;AAwCD,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAkDhE"}