pipework 0.288.0 → 0.290.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 (71) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +2 -0
  3. package/REFERENCE.md +6 -0
  4. package/dist/cli/commands/test.d.ts.map +1 -1
  5. package/dist/cli/commands/test.js +13 -0
  6. package/dist/cli/commands/test.js.map +1 -1
  7. package/dist/core/config/discover.d.ts +2 -1
  8. package/dist/core/config/discover.d.ts.map +1 -1
  9. package/dist/core/config/discover.js +2 -2
  10. package/dist/core/config/discover.js.map +1 -1
  11. package/dist/core/config/import-config.d.ts +2 -1
  12. package/dist/core/config/import-config.d.ts.map +1 -1
  13. package/dist/core/config/import-config.js +3 -7
  14. package/dist/core/config/import-config.js.map +1 -1
  15. package/dist/core/config/schema.d.ts.map +1 -1
  16. package/dist/core/config/schema.js +3 -1
  17. package/dist/core/config/schema.js.map +1 -1
  18. package/dist/data/db/expressions.d.ts +23 -0
  19. package/dist/data/db/expressions.d.ts.map +1 -1
  20. package/dist/data/db/expressions.js +27 -1
  21. package/dist/data/db/expressions.js.map +1 -1
  22. package/dist/data/db/filter.d.ts +3 -1
  23. package/dist/data/db/filter.d.ts.map +1 -1
  24. package/dist/data/db/filter.js +3 -1
  25. package/dist/data/db/filter.js.map +1 -1
  26. package/dist/data/db/namespace.d.ts +2 -0
  27. package/dist/data/db/namespace.d.ts.map +1 -1
  28. package/dist/data/query/sql/expressions/conditions.d.ts +2 -0
  29. package/dist/data/query/sql/expressions/conditions.d.ts.map +1 -1
  30. package/dist/data/query/sql/expressions/conditions.js +13 -0
  31. package/dist/data/query/sql/expressions/conditions.js.map +1 -1
  32. package/dist/data/query/sql/expressions/index.d.ts +1 -0
  33. package/dist/data/query/sql/expressions/index.d.ts.map +1 -1
  34. package/dist/data/query/sql/expressions/index.js +1 -0
  35. package/dist/data/query/sql/expressions/index.js.map +1 -1
  36. package/dist/data/query/sql/expressions/row.d.ts +19 -0
  37. package/dist/data/query/sql/expressions/row.d.ts.map +1 -0
  38. package/dist/data/query/sql/expressions/row.js +50 -0
  39. package/dist/data/query/sql/expressions/row.js.map +1 -0
  40. package/dist/test/auto-setup.js +4 -1
  41. package/dist/test/auto-setup.js.map +1 -1
  42. package/dist/test/discover-fork.d.ts +6 -1
  43. package/dist/test/discover-fork.d.ts.map +1 -1
  44. package/dist/test/discover-fork.js +6 -2
  45. package/dist/test/discover-fork.js.map +1 -1
  46. package/dist/test/shared-registry-guard.d.ts +2 -0
  47. package/dist/test/shared-registry-guard.d.ts.map +1 -0
  48. package/dist/test/shared-registry-guard.js +35 -0
  49. package/dist/test/shared-registry-guard.js.map +1 -0
  50. package/dist/test/shared-registry.d.ts +16 -0
  51. package/dist/test/shared-registry.d.ts.map +1 -0
  52. package/dist/test/shared-registry.js +63 -0
  53. package/dist/test/shared-registry.js.map +1 -0
  54. package/dist/test/vitest-workspace.d.ts.map +1 -1
  55. package/dist/test/vitest-workspace.js +63 -13
  56. package/dist/test/vitest-workspace.js.map +1 -1
  57. package/package.json +6 -2
  58. package/src/cli/commands/test.ts +15 -0
  59. package/src/core/config/discover.ts +3 -3
  60. package/src/core/config/import-config.ts +9 -2
  61. package/src/core/config/schema.ts +3 -1
  62. package/src/data/db/expressions.ts +29 -1
  63. package/src/data/db/filter.ts +3 -1
  64. package/src/data/query/sql/expressions/conditions.ts +8 -0
  65. package/src/data/query/sql/expressions/index.ts +1 -0
  66. package/src/data/query/sql/expressions/row.ts +63 -0
  67. package/src/test/auto-setup.ts +4 -1
  68. package/src/test/discover-fork.ts +7 -2
  69. package/src/test/shared-registry-guard.ts +41 -0
  70. package/src/test/shared-registry.ts +71 -0
  71. package/src/test/vitest-workspace.ts +66 -13
@@ -1,4 +1,4 @@
1
- import { resolve, dirname } from 'node:path';
1
+ import { resolve, dirname, isAbsolute } from 'node:path';
2
2
  import { configDefaults } from 'vitest/config';
3
3
  import { findConfig, registerTsResolveHooks } from '../core/config/discover.js';
4
4
  import { importConfig } from '../core/config/import-config.js';
@@ -6,6 +6,7 @@ import { loadEnvFiles } from '../core/config/env.js';
6
6
  import { resolveModules } from '../workspace/discover.js';
7
7
  import { workspaceSourcePaths } from '../workspace/source-paths.js';
8
8
  import { pipework as pipeworkPlugin } from './vitest-plugin.js';
9
+ import { escapeGlob, findRegistryFiles, isolatedSiblingName } from './shared-registry.js';
9
10
  const DEFAULT_TEST_TIMEOUT = 30_000;
10
11
  export const DEFAULT_HOOK_TIMEOUT = 60_000;
11
12
  // Pipework's own defaults, overridable per workspace, module and profile via
@@ -15,6 +16,8 @@ export const DEFAULT_HOOK_TIMEOUT = 60_000;
15
16
  // worker costs a process spawn per file.
16
17
  const DEFAULT_POOL = 'forks';
17
18
  const DEFAULT_ISOLATE = false;
19
+ // Setup file that refuses registry-changing `vi` calls in a shared-registry project.
20
+ const SHARED_REGISTRY_GUARD = 'pipework/test/shared-registry';
18
21
  /**
19
22
  * Consumer excludes on TOP of vitest's defaults, not in place of them.
20
23
  *
@@ -158,13 +161,11 @@ export function resolveVitestModules(vitestConfig, resolvedModules, configDir, w
158
161
  const projects = [];
159
162
  for (const [modulePath, moduleConfig] of [...included.entries()].sort(([a], [b]) => a.localeCompare(b))) {
160
163
  refuseProjectCoverage(`vitest.modules["${modulePath}"].coverage`, moduleConfig);
161
- const project = buildProjectConfig(modulePath, moduleConfig, vitestConfig, configDir, workspacePackages);
162
- projects.push(project);
164
+ pushRouted(projects, buildProjectConfig(modulePath, moduleConfig, vitestConfig, configDir, workspacePackages));
163
165
  if (moduleConfig.profiles !== undefined) {
164
166
  for (const [profileName, profileConfig] of Object.entries(moduleConfig.profiles).sort(([a], [b]) => a.localeCompare(b))) {
165
167
  refuseProjectCoverage(`vitest.modules["${modulePath}"].profiles["${profileName}"].coverage`, profileConfig);
166
- const profileProject = buildProfileConfig(modulePath, profileName, moduleConfig, profileConfig, vitestConfig, configDir, workspacePackages);
167
- projects.push(profileProject);
168
+ pushRouted(projects, buildProfileConfig(modulePath, profileName, moduleConfig, profileConfig, vitestConfig, configDir, workspacePackages));
168
169
  }
169
170
  }
170
171
  }
@@ -312,6 +313,7 @@ function buildProfileConfig(modulePath, profileName, moduleConfig, profileConfig
312
313
  }
313
314
  function buildProject(input) {
314
315
  const inlineDeps = buildInlineDeps(input);
316
+ const shared = sharesRegistry(input);
315
317
  return {
316
318
  ...input.extra,
317
319
  plugins: [
@@ -335,7 +337,7 @@ function buildProject(input) {
335
337
  inline: inlineDeps,
336
338
  },
337
339
  },
338
- setupFiles: input.setupFiles,
340
+ setupFiles: shared ? [...input.setupFiles, SHARED_REGISTRY_GUARD] : input.setupFiles,
339
341
  // `vitest.pool` / `vitest.isolate` are dedicated fields, so an explicitly
340
342
  // configured one wins over `extra.test`; unset, the default above stands and
341
343
  // `extra.test` still overrides it as it always did.
@@ -357,19 +359,24 @@ function buildSetupFiles(database, userSetupFiles) {
357
359
  }
358
360
  return files;
359
361
  }
360
- // Pipework is inlined only where the effective isolate is true: a fresh module
361
- // registry per file needs it. A shared-registry fork already matches Node's single
362
- // module instance, so inlining buys nothing there. The vm pools isolate per file
363
- // whatever `isolate` says, so they always inline. Precedence mirrors buildProject's
364
- // emitted config: dedicated field, then `extra.test`, then the default.
365
- function buildInlineDeps(input) {
362
+ // Whether the project's workers share one module registry: the effective isolate is
363
+ // false and the pool is not a vm pool (those isolate per file whatever `isolate` says).
364
+ // Precedence mirrors buildProject's emitted config: dedicated field, then `extra.test`,
365
+ // then the default.
366
+ function sharesRegistry(input) {
366
367
  const extraTest = 'test' in input.extra ? input.extra['test'] : {};
367
368
  const extraIsolate = typeof extraTest['isolate'] === 'boolean' ? extraTest['isolate'] : undefined;
368
369
  const extraPool = extraTest['pool'];
369
370
  const isolate = input.isolate ?? extraIsolate ?? DEFAULT_ISOLATE;
370
371
  const pool = input.pool ?? extraPool ?? DEFAULT_POOL;
372
+ return !isolate && pool !== 'vmThreads' && pool !== 'vmForks';
373
+ }
374
+ // Pipework is inlined only where the registry is not shared: a fresh module registry
375
+ // per file needs it. A shared-registry fork already matches Node's single module
376
+ // instance, so inlining buys nothing there.
377
+ function buildInlineDeps(input) {
371
378
  const deps = new Set();
372
- if (isolate || pool === 'vmThreads' || pool === 'vmForks') {
379
+ if (!sharesRegistry(input)) {
373
380
  deps.add('pipework');
374
381
  }
375
382
  for (const dep of input.inlineDeps) {
@@ -377,6 +384,49 @@ function buildInlineDeps(input) {
377
384
  }
378
385
  return [...deps];
379
386
  }
387
+ // Routing for #1001. `isolate: false` projects keep one module registry per worker, and a
388
+ // file that calls vi.resetModules / vi.mock / vi.doMock / vi.unmock / vi.doUnmock breaks
389
+ // the files after it. Per project, the files its `include` selects (under `dir` or the
390
+ // root, minus its merged `exclude`) are read; those whose own text calls one move to a
391
+ // sibling project `<name>:registry-isolated` that is the same project with `isolate: true`
392
+ // and an `include` of exactly those files, and the project itself excludes them. Each
393
+ // project decides for itself from the file's text, so a file two projects select (a
394
+ // module and its profile, or nested module roots) is routed in each, and still runs once
395
+ // per project as before. Files are visited in sorted order, projects in config order.
396
+ function pushRouted(projects, project) {
397
+ const test = project.test;
398
+ const setup = test?.setupFiles;
399
+ if (test === undefined || typeof test.root !== 'string' || !Array.isArray(setup) || !setup.includes(SHARED_REGISTRY_GUARD)) {
400
+ projects.push(project);
401
+ return;
402
+ }
403
+ const root = test.root;
404
+ const name = String(test.name);
405
+ const dir = typeof test.dir === 'string' ? (isAbsolute(test.dir) ? test.dir : resolve(root, test.dir)) : root;
406
+ const include = test.include ?? [...configDefaults.include];
407
+ const exclude = test.exclude ?? [...configDefaults.exclude];
408
+ const routed = findRegistryFiles(dir, include, exclude);
409
+ if (routed.length === 0) {
410
+ projects.push(project);
411
+ return;
412
+ }
413
+ const escaped = routed.map(escapeGlob);
414
+ projects.push({
415
+ ...project,
416
+ test: { ...test, exclude: [...exclude, ...escaped] },
417
+ });
418
+ projects.push({
419
+ ...project,
420
+ test: {
421
+ ...test,
422
+ name: isolatedSiblingName(name),
423
+ isolate: true,
424
+ include: escaped,
425
+ setupFiles: setup.filter(file => file !== SHARED_REGISTRY_GUARD),
426
+ server: { deps: { inline: [...new Set(['pipework', ...(test.server?.deps?.inline ?? [])])] } },
427
+ },
428
+ });
429
+ }
380
430
  function closestMatch(input, candidates) {
381
431
  if (candidates.length === 0)
382
432
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"vitest-workspace.js","sourceRoot":"","sources":["../../src/test/vitest-workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vitest-workspace.js","sourceRoot":"","sources":["../../src/test/vitest-workspace.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.288.0",
3
+ "version": "0.290.0",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -21,7 +21,7 @@
21
21
  "framework"
22
22
  ],
23
23
  "engines": {
24
- "node": ">=22"
24
+ "node": ">=22.5"
25
25
  },
26
26
  "exports": {
27
27
  ".": {
@@ -40,6 +40,10 @@
40
40
  "import": "./dist/test/auto-setup.js",
41
41
  "types": "./dist/test/auto-setup.d.ts"
42
42
  },
43
+ "./test/shared-registry": {
44
+ "import": "./dist/test/shared-registry-guard.js",
45
+ "types": "./dist/test/shared-registry-guard.d.ts"
46
+ },
43
47
  "./vitest-plugin": {
44
48
  "import": "./dist/test/vitest-plugin.js",
45
49
  "types": "./dist/test/vitest-plugin.d.ts"
@@ -6,6 +6,8 @@ import { resolveAffected } from '../../workspace/affected.js'
6
6
  import { findConfig } from '../../core/config/discover.js'
7
7
  import { resolveModules, type ResolvedModule } from '../../workspace/discover.js'
8
8
  import { shardArg, type Shard } from './shard.js'
9
+ import { resolveVitestModules } from '../../test/vitest-workspace.js'
10
+ import { isolatedSiblingName } from '../../test/shared-registry.js'
9
11
 
10
12
  export interface TestOptions {
11
13
  cwd: string
@@ -281,6 +283,19 @@ export function buildProjectArgs(
281
283
  info(`Scoped to ${String(scopeResult.modules.size)} of ${String(effectiveModules.length)} module(s): ${[...scopeResult.modules].sort().join(', ')}`)
282
284
  }
283
285
 
286
+ // A shared-registry project whose files call vi.resetModules or vi.mock has those files
287
+ // in a generated sibling project (#1001). The sibling runs wherever its parent does, so
288
+ // it is named beside it; the project names come from the same resolution vitest loads.
289
+ const generated = new Set(
290
+ resolveVitestModules(blueprint.vitest, effectiveModules, configDir, {}).map(p => String(p.test?.name)),
291
+ )
292
+ for (const name of [...projectNames]) {
293
+ const sibling = isolatedSiblingName(name)
294
+ if (!generated.has(sibling)) continue
295
+ projectNames.push(sibling)
296
+ databaseByProject.set(sibling, databaseByProject.get(name) ?? true)
297
+ }
298
+
284
299
  const args: string[] = []
285
300
  for (const name of projectNames) {
286
301
  args.push('--project', name)
@@ -2,7 +2,7 @@ import { resolve, dirname } from 'node:path'
2
2
  import { existsSync } from 'node:fs'
3
3
  import type { Manifold } from '../pipework.js'
4
4
  import { ConfigError } from './errors.js'
5
- import { importConfig } from './import-config.js'
5
+ import { importConfig, type ConfigLoader } from './import-config.js'
6
6
  import { registerTsResolveHooks } from './ts-inline-hooks.js'
7
7
 
8
8
  export { registerTsResolveHooks }
@@ -21,7 +21,7 @@ const CONFIG_FILENAME = 'pipework.config.ts'
21
21
  * leaves the variable alone; the test fork's `discoverForTestFork` consumes
22
22
  * it after loading, so it never travels to processes a test spawns.
23
23
  */
24
- export async function discoverInstance(cwd?: string): Promise<Manifold> {
24
+ export async function discoverInstance(cwd?: string, load?: ConfigLoader): Promise<Manifold> {
25
25
  const start = cwd ?? process.cwd()
26
26
  const override = process.env['PIPEWORK_CONFIG']
27
27
  const configPath = override === undefined ? findConfig(start) : resolveOverride(override)
@@ -35,7 +35,7 @@ export async function discoverInstance(cwd?: string): Promise<Manifold> {
35
35
 
36
36
  registerTsResolveHooks()
37
37
 
38
- return importConfig(configPath)
38
+ return importConfig(configPath, load)
39
39
  }
40
40
 
41
41
  function resolveOverride(value: string): string {
@@ -9,10 +9,17 @@ import { setConfigBaseDir, clearConfigBaseDir } from './base-dir.js'
9
9
  // resolver) goes through here so relative `migrations`/`schema` paths always
10
10
  // resolve against the config file's directory, whichever entry path loads the
11
11
  // config first in a process.
12
- export async function importConfig(configPath: string): Promise<Manifold> {
12
+ //
13
+ // `load` replaces the module loader, which is Node's `import()` by default. A test
14
+ // fork passes the vitest module runner's (#1006): the app's modules then evaluate
15
+ // once, in the same runner as the test files' imports, instead of once under Node.
16
+ export type ConfigLoader = (url: string) => Promise<Record<string, unknown>>
17
+
18
+ export async function importConfig(configPath: string, load?: ConfigLoader): Promise<Manifold> {
13
19
  setConfigBaseDir(dirname(configPath))
14
20
  try {
15
- const mod: Record<string, unknown> = await import(pathToFileURL(configPath).href)
21
+ const url = pathToFileURL(configPath).href
22
+ const mod: Record<string, unknown> = load !== undefined ? await load(url) : await import(url)
16
23
  const exported: unknown = mod['default'] ?? mod
17
24
 
18
25
  if (!isManifold(exported)) {
@@ -274,7 +274,9 @@ const vitestProfileSchema = z.object({
274
274
  isolate: z.boolean().optional().describe(
275
275
  'Run each test file in a fresh worker. Pipework defaults to `false` — pipework\'s own ' +
276
276
  'per-test database isolation already separates test state, and re-isolating the worker ' +
277
- 'costs a process spawn per file. Set `true` for a suite that relies on vitest\'s default.',
277
+ 'costs a process spawn per file. Set `true` for a suite that relies on vitest\'s default. ' +
278
+ 'In a project left at `false`, a file whose text calls vi.resetModules, vi.mock, vi.doMock, ' +
279
+ 'vi.unmock or vi.doUnmock runs in a generated `<name>:registry-isolated` sibling.',
278
280
  ),
279
281
  database: z.boolean().optional(),
280
282
  setupFiles: z.array(z.string()).optional(),
@@ -1,7 +1,7 @@
1
1
  import { sql } from './sql.js'
2
2
  import type { SQL, Column } from './types.js'
3
3
  import type { SQLWrapper } from '../query/sql/sql.js'
4
- import { bindIfParam } from '../query/index.js'
4
+ import { and, bindIfParam, gte, lte, Row, type RowElement } from '../query/index.js'
5
5
  import { PgArray } from '../query/pg-core/index.js'
6
6
  import { quoteCollation, type CollationName } from '../query/collation.js'
7
7
  import { is } from '../query/entity.js'
@@ -486,3 +486,31 @@ export function walReplayLsn(): SQL<string | null> {
486
486
  export function replicaFresh(createdLsn: string | Column | SQL): SQL<boolean | null> {
487
487
  return sql<boolean | null>`pg_last_wal_replay_lsn() >= ${createdLsn}::pg_lsn`
488
488
  }
489
+
490
+ /**
491
+ * A row constructor `(e1, e2, ...)` for comparing composite keys: `eq` / `ne` / `gt` / `gte` / `lt` / `lte`
492
+ * accept a row on both sides (row against row, equal length), so a composite-key join needs no `pipe.sql`:
493
+ * `gte(row(t.a, t.b), row(k.a, k.b))` renders `("t"."a", "t"."b") >= ("k"."a", "k"."b")`.
494
+ * Each element is a column, a SQL expression (a `pipe.rows` column is one) or a bound JS value. A column or
495
+ * expression is embedded as written. A value is bound and, when the element facing it on the other side is
496
+ * a column, converted by that column's driver mapping and cast to its SQL type (`$1::text`); facing an
497
+ * expression it is bound without a cast and Postgres infers its type from the other side.
498
+ * Throws `[pipework] row:` for fewer than two elements, for rows of unequal length, and when a row is
499
+ * compared with a non-row.
500
+ */
501
+ export function row(...elements: RowElement[]): Row {
502
+ return new Row(elements)
503
+ }
504
+
505
+ /**
506
+ * Row equality as the range pair `lhs >= rhs and lhs <= rhs`, for a composite-key match that must use an index.
507
+ * Written as `(a, b, c) = (x, y, z)` Postgres splits it into three equalities, and a join then probes the shortest
508
+ * index holding a and b and filters c. A row comparison is a btree index condition only on an index holding all
509
+ * its columns in order, so the range pair takes the index over (a, b, c) and reads only the matching rows.
510
+ * It equals equality for keys that are never NULL. With a NULL element a match is never true, as with
511
+ * equality (a NULL-bearing key does not match itself), but the result can be NULL where equality gives
512
+ * false, which differs only under `not(...)`; keep NULL-able columns out of the row or filter them first.
513
+ */
514
+ export function rowEquals(lhs: Row, rhs: Row): SQL<boolean> {
515
+ return and(gte(lhs, rhs), lte(lhs, rhs)) as SQL<boolean>
516
+ }
@@ -5,7 +5,7 @@ import {
5
5
  } from '../query/index.js'
6
6
  import { countAgg, countDistinctAgg, sumAgg, sumDistinctAgg, avgAgg, avgDistinctAgg, maxAgg, minAgg, boolAnd, boolOr, arrayAgg, stringAgg, jsonbAgg, jsonbObjectAgg, jsonbBuildObject } from './aggregates.js'
7
7
  import { except, exceptAll, intersect, intersectAll, union, unionAll } from '../query/pg-core/index.js'
8
- import { increment, decrement, add, subtract, coalesce, now, scalar, cast, collate, interval, clockTimestamp, strpos, textContains, startsWith, left, right, length, concat, arrayReplace, arrayHas, splitPart, lower, upper, trim, replace, substring, reverse, lpad, rpad, regexpReplace, regexpMatch, stringToArray, cardinality, arrayAt, arrayPosition, arraySlice, arrayToString, arrayAppend, arrayOf, arrayRemove, dateTrunc, rowNumber, rank, denseRank, over, identifier, withRecursive, caseWhen, walCurrentLsn, walReplayLsn, replicaFresh } from './expressions.js'
8
+ import { increment, decrement, add, subtract, coalesce, now, scalar, cast, collate, interval, clockTimestamp, strpos, textContains, startsWith, left, right, length, concat, arrayReplace, arrayHas, splitPart, lower, upper, trim, replace, substring, reverse, lpad, rpad, regexpReplace, regexpMatch, stringToArray, cardinality, arrayAt, arrayPosition, arraySlice, arrayToString, arrayAppend, arrayOf, row, rowEquals, arrayRemove, dateTrunc, rowNumber, rank, denseRank, over, identifier, withRecursive, caseWhen, walCurrentLsn, walReplayLsn, replicaFresh } from './expressions.js'
9
9
  import { ago, castUuid, castJsonb, castTimestamp, castBoolean, castNumeric, castInteger, castText, nextSequence } from './composed.js'
10
10
  import { json as jsonbExtract, pathText as jsonbExtractText, contains as jsonbContains, merge as jsonbMerge, concat as jsonbConcat, remove as jsonbRemove } from '../jsonb/query.js'
11
11
  import { arrayAny, arrayAll, jsonbElements } from './array-elements.js'
@@ -57,6 +57,8 @@ export const filter = {
57
57
  arrayToString,
58
58
  arrayAppend,
59
59
  arrayOf,
60
+ row,
61
+ rowEquals,
60
62
  arrayRemove,
61
63
  dateTrunc,
62
64
  rowNumber,
@@ -2,6 +2,7 @@ import { type AnyColumn, Column, type GetColumnData } from '../../column.js';
2
2
  import type { AcceptReadonly } from '../../../db/readonly.js';
3
3
  import { is } from '../../entity.js';
4
4
  import { Table } from '../../table.js';
5
+ import { isRow, Row, rowCompare } from './row.js';
5
6
  import {
6
7
  isDriverValueEncoder,
7
8
  isSQLWrapper,
@@ -31,6 +32,7 @@ export function bindIfParam(value: unknown, column: SQLWrapper): SQLChunk {
31
32
  }
32
33
 
33
34
  export interface BinaryOperator {
35
+ (left: Row, right: Row): SQL;
34
36
  <TColumn extends Column>(
35
37
  left: TColumn,
36
38
  right: GetColumnData<TColumn, 'raw'> | SQLWrapper,
@@ -61,6 +63,7 @@ export interface BinaryOperator {
61
63
  * @see isNull for a way to test equality to NULL.
62
64
  */
63
65
  export const eq: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
66
+ if (isRow(left) || isRow(right)) return rowCompare(left, '=', right);
64
67
  return sql`${left} = ${bindIfParam(right, left)}`;
65
68
  };
66
69
 
@@ -83,6 +86,7 @@ export const eq: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
83
86
  * @see isNotNull for a way to test whether a value is not null.
84
87
  */
85
88
  export const ne: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
89
+ if (isRow(left) || isRow(right)) return rowCompare(left, '<>', right);
86
90
  return sql`${left} <> ${bindIfParam(right, left)}`;
87
91
  };
88
92
 
@@ -194,6 +198,7 @@ export function not(condition: SQLWrapper): SQL {
194
198
  * @see gte for greater-than-or-equal
195
199
  */
196
200
  export const gt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
201
+ if (isRow(left) || isRow(right)) return rowCompare(left, '>', right);
197
202
  return sql`${left} > ${bindIfParam(right, left)}`;
198
203
  };
199
204
 
@@ -214,6 +219,7 @@ export const gt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
214
219
  * @see gt for a strictly greater-than condition
215
220
  */
216
221
  export const gte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
222
+ if (isRow(left) || isRow(right)) return rowCompare(left, '>=', right);
217
223
  return sql`${left} >= ${bindIfParam(right, left)}`;
218
224
  };
219
225
 
@@ -232,6 +238,7 @@ export const gte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
232
238
  * @see lte for less-than-or-equal
233
239
  */
234
240
  export const lt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
241
+ if (isRow(left) || isRow(right)) return rowCompare(left, '<', right);
235
242
  return sql`${left} < ${bindIfParam(right, left)}`;
236
243
  };
237
244
 
@@ -250,6 +257,7 @@ export const lt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
250
257
  * @see lt for a strictly less-than condition
251
258
  */
252
259
  export const lte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {
260
+ if (isRow(left) || isRow(right)) return rowCompare(left, '<=', right);
253
261
  return sql`${left} <= ${bindIfParam(right, left)}`;
254
262
  };
255
263
 
@@ -1,2 +1,3 @@
1
1
  export * from './conditions.js';
2
2
  export * from './select.js';
3
+ export * from './row.js';
@@ -0,0 +1,63 @@
1
+ import { Column } from '../../column.js';
2
+ import { is } from '../../entity.js';
3
+ import { isSQLWrapper, Param, sql, type SQL, type SQLWrapper } from '../sql.js';
4
+
5
+ /** One element of a row: a column, a SQL expression (a `pipe.rows` column is one), or a bound JS value. */
6
+ export type RowElement = Column | SQLWrapper | string | number | bigint | boolean | Date | null;
7
+
8
+ /**
9
+ * A row constructor `(e1, e2, ...)` built by `filter.row`. Compare it with another row through
10
+ * `eq` / `ne` / `gt` / `gte` / `lt` / `lte`; on its own it renders with its values bound uncast.
11
+ */
12
+ export class Row implements SQLWrapper {
13
+ readonly elements: readonly RowElement[];
14
+
15
+ constructor(elements: readonly RowElement[]) {
16
+ if (elements.length < 2) {
17
+ throw new Error(
18
+ `[pipework] row: a row needs at least two elements, got ${elements.length}.\n\n`
19
+ + ' A one-element row is just its element.\n'
20
+ + ' Fix: pass two or more elements to row(), or compare the element directly.\n',
21
+ );
22
+ }
23
+ this.elements = elements;
24
+ }
25
+
26
+ /** The row as `(e1, e2, ...)`. A value is cast to the type of `peers[i]` when that is a column. */
27
+ render(peers?: readonly RowElement[]): SQL {
28
+ const parts = this.elements.map((e, i) => {
29
+ if (is(e, Column) || isSQLWrapper(e)) return sql`${e}`;
30
+ const peer = peers?.[i];
31
+ if (peer !== undefined && is(peer, Column)) {
32
+ return sql`${new Param(e, peer)}::${sql.raw(peer.getSQLType())}`;
33
+ }
34
+ return sql`${new Param(e)}`;
35
+ });
36
+ return sql`(${sql.join(parts, sql`, `)})`;
37
+ }
38
+
39
+ getSQL(): SQL {
40
+ return this.render();
41
+ }
42
+ }
43
+
44
+ export function isRow(value: unknown): value is Row {
45
+ return value instanceof Row;
46
+ }
47
+
48
+ /** Renders `left <op> right` for two rows, binding each value with the type of the column facing it. */
49
+ export function rowCompare(left: unknown, op: string, right: unknown): SQL {
50
+ if (!isRow(left) || !isRow(right)) {
51
+ throw new Error(
52
+ `[pipework] row: a row can only be compared with another row (${isRow(left) ? 'right' : 'left'} side is not one).\n\n`
53
+ + ' Fix: build both sides with row(...), for example eq(row(t.a, t.b), row(k.a, k.b)).\n',
54
+ );
55
+ }
56
+ if (left.elements.length !== right.elements.length) {
57
+ throw new Error(
58
+ `[pipework] row: the rows differ in length (${left.elements.length} and ${right.elements.length}).\n\n`
59
+ + ' Fix: give both sides the same number of elements.\n',
60
+ );
61
+ }
62
+ return sql`${left.render(right.elements)} ${sql.raw(op)} ${right.render(left.elements)}`;
63
+ }
@@ -11,7 +11,10 @@ loadEnvFiles()
11
11
 
12
12
  let _testContext: TestContext | null = null
13
13
 
14
- const instance = await discoverForTestFork()
14
+ // Loaded through this file's own `import()`, which vitest routes through its module runner
15
+ // (setup files always run there), not through Node: the config's app modules must be the
16
+ // instances the test files import (#1006).
17
+ const instance = await discoverForTestFork(url => import(/* @vite-ignore */ url) as Promise<Record<string, unknown>>)
15
18
 
16
19
  _setTestState(instance)
17
20
 
@@ -1,5 +1,6 @@
1
1
  import type { Manifold } from '../core/pipework.js'
2
2
  import { discoverInstance } from '../core/config/discover.js'
3
+ import type { ConfigLoader } from '../core/config/import-config.js'
3
4
 
4
5
  /**
5
6
  * Load this test fork's manifold and consume `PIPEWORK_CONFIG`.
@@ -9,9 +10,13 @@ import { discoverInstance } from '../core/config/discover.js'
9
10
  * migrate`, a CLI under test — inherits it and migrates the wrong package
10
11
  * against the wrong manifold. Discovery failing leaves it set: the variable is
11
12
  * part of the diagnosis.
13
+ *
14
+ * `load` is the test runner's own `import()` (#1006): the config's module graph is then
15
+ * evaluated by the same module runner as the test files' imports, so an app module
16
+ * (and its `pipe.define(...)`) runs once whether or not pipework is inlined.
12
17
  */
13
- export async function discoverForTestFork(): Promise<Manifold> {
14
- const instance = await discoverInstance()
18
+ export async function discoverForTestFork(load?: ConfigLoader): Promise<Manifold> {
19
+ const instance = await discoverInstance(undefined, load)
15
20
  delete process.env['PIPEWORK_CONFIG']
16
21
  return instance
17
22
  }
@@ -0,0 +1,41 @@
1
+ import { vi } from 'vitest'
2
+ import { REGISTRY_CALLS } from './shared-registry.js'
3
+
4
+ // Setup file for projects that share one module registry per worker (`isolate: false`,
5
+ // non-vm pool). It replaces the `vi` calls that change the registry with a throw naming
6
+ // the test file and the fix. The workspace already routes a file whose own text calls
7
+ // them to an isolated sibling project; this catches a call it could not see, such as one
8
+ // reached through a helper (#1001). Idempotent: setup files re-run for every test file.
9
+ // Listed after the project's own setup files, so a mock a setup file registers on
10
+ // purpose still goes through.
11
+
12
+ const GUARDED = Symbol.for('pipework.sharedRegistryGuard')
13
+
14
+ function currentFile(): string {
15
+ const worker = (globalThis as { __vitest_worker__?: { filepath?: string } }).__vitest_worker__
16
+ return worker?.filepath ?? 'the running test file'
17
+ }
18
+
19
+ export function refuse(call: string, file: string): Error {
20
+ return new Error(
21
+ `[pipework] vi.${call}() is refused in a shared-registry test project (called from ${file}).\n\n` +
22
+ ' This project runs with isolate: false: every file in a worker shares one module\n' +
23
+ ' registry, and pipework itself is not re-evaluated by vi.resetModules() or vi.mock().\n' +
24
+ ' A reset re-runs the app\'s pipe.define(...) calls against the same registry, so the\n' +
25
+ ' next file in the worker fails with "Duplicate domain definition", and a mock binds\n' +
26
+ ' the importers of the file after it.\n' +
27
+ ' The workspace routes a file to an isolated sibling project when its own text calls\n' +
28
+ ' vi.resetModules, vi.mock, vi.doMock, vi.unmock or vi.doUnmock. This call was not found in\n' +
29
+ ` the text of ${file}, so it was not routed.\n` +
30
+ ' Fix: call it directly in the test file that needs it (not through a helper), or set\n' +
31
+ ' `isolate: true` on this project or profile in pipework.config.ts.\n',
32
+ )
33
+ }
34
+
35
+ const target = vi as unknown as Record<PropertyKey, unknown>
36
+ if (target[GUARDED] !== true) {
37
+ for (const call of REGISTRY_CALLS) {
38
+ target[call] = (): never => { throw refuse(call, currentFile()) }
39
+ }
40
+ target[GUARDED] = true
41
+ }