pipework 0.20.0 → 0.22.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 (43) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cli/commands/check.d.ts +2 -0
  3. package/dist/cli/commands/check.d.ts.map +1 -1
  4. package/dist/cli/commands/check.js +11 -6
  5. package/dist/cli/commands/check.js.map +1 -1
  6. package/dist/cli/commands/scope.d.ts.map +1 -1
  7. package/dist/cli/commands/scope.js +6 -1
  8. package/dist/cli/commands/scope.js.map +1 -1
  9. package/dist/cli/commands/test.d.ts +12 -1
  10. package/dist/cli/commands/test.d.ts.map +1 -1
  11. package/dist/cli/commands/test.js +39 -10
  12. package/dist/cli/commands/test.js.map +1 -1
  13. package/dist/core/config/discover.d.ts +12 -0
  14. package/dist/core/config/discover.d.ts.map +1 -1
  15. package/dist/core/config/discover.js +21 -1
  16. package/dist/core/config/discover.js.map +1 -1
  17. package/dist/core/config/load.js +48 -7
  18. package/dist/core/config/load.js.map +1 -1
  19. package/dist/core/config/namespace.d.ts +1 -0
  20. package/dist/core/config/namespace.d.ts.map +1 -1
  21. package/dist/core/config/schema.d.ts +2 -0
  22. package/dist/core/config/schema.d.ts.map +1 -1
  23. package/dist/core/config/schema.js +2 -0
  24. package/dist/core/config/schema.js.map +1 -1
  25. package/dist/test/auto-setup.js +2 -2
  26. package/dist/test/auto-setup.js.map +1 -1
  27. package/dist/test/discover-fork.d.ts +12 -0
  28. package/dist/test/discover-fork.d.ts.map +1 -0
  29. package/dist/test/discover-fork.js +16 -0
  30. package/dist/test/discover-fork.js.map +1 -0
  31. package/dist/test/setup.d.ts +10 -0
  32. package/dist/test/setup.d.ts.map +1 -1
  33. package/dist/test/setup.js +73 -13
  34. package/dist/test/setup.js.map +1 -1
  35. package/dist/workspace/affected.d.ts +16 -1
  36. package/dist/workspace/affected.d.ts.map +1 -1
  37. package/dist/workspace/affected.js +45 -11
  38. package/dist/workspace/affected.js.map +1 -1
  39. package/dist/workspace/changed-files.d.ts +19 -2
  40. package/dist/workspace/changed-files.d.ts.map +1 -1
  41. package/dist/workspace/changed-files.js +80 -22
  42. package/dist/workspace/changed-files.js.map +1 -1
  43. package/package.json +1 -1
@@ -1,6 +1,18 @@
1
1
  export type DiffMode = 'uncommitted' | 'staged' | 'branch';
2
2
  /**
3
- * Files changed under `mode`.
3
+ * Files changed under `mode`, as paths relative to `anchor` (the directory
4
+ * holding pipework.config.ts — the same base module paths are relative to).
5
+ *
6
+ * Three path coordinate systems meet here, and they only coincide when the
7
+ * anchor IS the git toplevel: `git diff --name-only` prints toplevel-relative
8
+ * paths regardless of cwd, `git ls-files --others` prints cwd-relative paths,
9
+ * and module paths are anchor-relative. Every git command therefore runs from
10
+ * the toplevel and every returned path is rebased onto the anchor before it is
11
+ * handed to `filesToModules` — otherwise a config dir below the toplevel
12
+ * (monorepo layout, e.g. <repo>/packages/backend) makes every diff path miss
13
+ * the module prefix match and `rootChanged` widens every scoped run to all
14
+ * modules. A change outside the anchor subtree comes back as a `../` path,
15
+ * which deliberately matches no module and keeps the fail-wide behavior.
4
16
  *
5
17
  * `branch` mode (the `--fast` path) returns `null` — never an empty array —
6
18
  * when the set cannot be computed (no base branch, unrelated history, no git):
@@ -11,7 +23,12 @@ export type DiffMode = 'uncommitted' | 'staged' | 'branch';
11
23
  * clean tree genuinely has nothing to do, and the caller exits 0 (#266). An
12
24
  * empty array always means "computed cleanly, nothing changed".
13
25
  */
14
- export declare function changedFiles(cwd: string, mode: DiffMode): string[] | null;
26
+ export declare function changedFiles(anchor: string, mode: DiffMode, baseBranches?: readonly string[]): string[] | null;
27
+ /**
28
+ * The base branch a `branch`-mode diff would be taken against, for scope
29
+ * reporting (the population line). `null` when none exists or git is absent.
30
+ */
31
+ export declare function resolveBaseBranch(anchor: string, baseBranches?: readonly string[]): string | null;
15
32
  export declare function filesToModules(files: readonly string[], modulePaths: readonly string[]): {
16
33
  modules: Set<string>;
17
34
  rootChanged: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"changed-files.d.ts","sourceRoot":"","sources":["../../src/workspace/changed-files.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAQ1D;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,IAAI,CA2BzE;AAmBD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B;IAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAwBhD"}
1
+ {"version":3,"file":"changed-files.d.ts","sourceRoot":"","sources":["../../src/workspace/changed-files.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAa1D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,EACd,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAC/B,MAAM,EAAE,GAAG,IAAI,CAqCjB;AAWD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAMjG;AAqBD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B;IAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CA+BhD"}
@@ -1,10 +1,27 @@
1
1
  import { execSync } from 'node:child_process';
2
+ import { relative, resolve, sep } from 'node:path';
2
3
  import { scrubGitEnv } from './scrub-git-env.js';
3
- // Base branches a `branch`-mode diff is taken against, in priority order — the
4
- // working branch first.
5
- const BASE_BRANCHES = ['integration', 'main'];
4
+ // Base branches a `branch`-mode diff is taken against when the blueprint does
5
+ // not configure `fastPath.baseBranches`, in priority order — the working
6
+ // branch first.
7
+ const DEFAULT_BASE_BRANCHES = ['integration', 'main'];
8
+ // Base refs are interpolated into git commands, so only plain ref characters
9
+ // are admitted — anything else is treated as not-a-base rather than executed.
10
+ const SAFE_REF = /^[A-Za-z0-9._/-]+$/;
6
11
  /**
7
- * Files changed under `mode`.
12
+ * Files changed under `mode`, as paths relative to `anchor` (the directory
13
+ * holding pipework.config.ts — the same base module paths are relative to).
14
+ *
15
+ * Three path coordinate systems meet here, and they only coincide when the
16
+ * anchor IS the git toplevel: `git diff --name-only` prints toplevel-relative
17
+ * paths regardless of cwd, `git ls-files --others` prints cwd-relative paths,
18
+ * and module paths are anchor-relative. Every git command therefore runs from
19
+ * the toplevel and every returned path is rebased onto the anchor before it is
20
+ * handed to `filesToModules` — otherwise a config dir below the toplevel
21
+ * (monorepo layout, e.g. <repo>/packages/backend) makes every diff path miss
22
+ * the module prefix match and `rootChanged` widens every scoped run to all
23
+ * modules. A change outside the anchor subtree comes back as a `../` path,
24
+ * which deliberately matches no module and keeps the fail-wide behavior.
8
25
  *
9
26
  * `branch` mode (the `--fast` path) returns `null` — never an empty array —
10
27
  * when the set cannot be computed (no base branch, unrelated history, no git):
@@ -15,19 +32,30 @@ const BASE_BRANCHES = ['integration', 'main'];
15
32
  * clean tree genuinely has nothing to do, and the caller exits 0 (#266). An
16
33
  * empty array always means "computed cleanly, nothing changed".
17
34
  */
18
- export function changedFiles(cwd, mode) {
35
+ export function changedFiles(anchor, mode, baseBranches) {
19
36
  const env = scrubGitEnv();
37
+ let toplevel;
38
+ try {
39
+ toplevel = git(anchor, env, 'git rev-parse --show-toplevel').trim();
40
+ if (toplevel === '')
41
+ throw new Error('no toplevel');
42
+ }
43
+ catch {
44
+ // Not a git repository: branch mode must fail open (null), the tree modes
45
+ // report a genuinely empty diff (#266).
46
+ return mode === 'branch' ? null : [];
47
+ }
20
48
  if (mode === 'branch') {
21
49
  try {
22
- const base = baseBranch(cwd, env);
50
+ const base = baseBranch(toplevel, env, baseBranches);
23
51
  if (base === null)
24
52
  return null;
25
- const mergeBase = git(cwd, env, `git merge-base ${base} HEAD`).trim();
53
+ const mergeBase = git(toplevel, env, `git merge-base ${base} HEAD`).trim();
26
54
  if (mergeBase === '')
27
55
  return null;
28
- const committed = parseLines(git(cwd, env, `git diff --name-only ${mergeBase}`));
29
- const untracked = parseLines(git(cwd, env, 'git ls-files --others --exclude-standard'));
30
- return [...new Set([...committed, ...untracked])];
56
+ const committed = parseLines(git(toplevel, env, `git diff --name-only ${mergeBase}`));
57
+ const untracked = parseLines(git(toplevel, env, 'git ls-files --others --exclude-standard'));
58
+ return rebase([...new Set([...committed, ...untracked])], toplevel, anchor);
31
59
  }
32
60
  catch {
33
61
  return null;
@@ -35,25 +63,48 @@ export function changedFiles(cwd, mode) {
35
63
  }
36
64
  try {
37
65
  if (mode === 'staged') {
38
- return parseLines(git(cwd, env, 'git diff --name-only --cached'));
66
+ return rebase(parseLines(git(toplevel, env, 'git diff --name-only --cached')), toplevel, anchor);
39
67
  }
40
- const diffRaw = git(cwd, env, 'git diff --name-only HEAD');
41
- const untrackedRaw = git(cwd, env, 'git ls-files --others --exclude-standard');
42
- return [...new Set([...parseLines(diffRaw), ...parseLines(untrackedRaw)])];
68
+ const diffRaw = git(toplevel, env, 'git diff --name-only HEAD');
69
+ const untrackedRaw = git(toplevel, env, 'git ls-files --others --exclude-standard');
70
+ return rebase([...new Set([...parseLines(diffRaw), ...parseLines(untrackedRaw)])], toplevel, anchor);
43
71
  }
44
72
  catch {
45
73
  return [];
46
74
  }
47
75
  }
76
+ /** Toplevel-relative git paths → anchor-relative POSIX paths. */
77
+ function rebase(files, toplevel, anchor) {
78
+ return files.map(f => relative(resolve(anchor), resolve(toplevel, f)).split(sep).join('/'));
79
+ }
48
80
  function git(cwd, env, cmd) {
49
81
  return execSync(cmd, { cwd, env, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
50
82
  }
51
- /** The first base branch that exists locally, or `null` when none does. */
52
- function baseBranch(cwd, env) {
53
- for (const branch of BASE_BRANCHES) {
83
+ /**
84
+ * The base branch a `branch`-mode diff would be taken against, for scope
85
+ * reporting (the population line). `null` when none exists or git is absent.
86
+ */
87
+ export function resolveBaseBranch(anchor, baseBranches) {
88
+ try {
89
+ return baseBranch(anchor, scrubGitEnv(), baseBranches);
90
+ }
91
+ catch {
92
+ return null;
93
+ }
94
+ }
95
+ /**
96
+ * The first configured base ref that resolves to a commit, or `null` when none
97
+ * does. A configured entry may be any committish — a local branch, a
98
+ * remote-tracking ref like 'origin/main', a tag — so a stale or absent local
99
+ * ref can be routed around instead of failing every fast run wide.
100
+ */
101
+ function baseBranch(cwd, env, baseBranches) {
102
+ for (const ref of baseBranches ?? DEFAULT_BASE_BRANCHES) {
103
+ if (!SAFE_REF.test(ref))
104
+ continue;
54
105
  try {
55
- git(cwd, env, `git rev-parse --verify --quiet refs/heads/${branch}`);
56
- return branch;
106
+ git(cwd, env, `git rev-parse --verify --quiet ${ref}^{commit}`);
107
+ return ref;
57
108
  }
58
109
  catch {
59
110
  // Not this one — try the next.
@@ -66,12 +117,19 @@ export function filesToModules(files, modulePaths) {
66
117
  const modules = new Set();
67
118
  let rootChanged = false;
68
119
  for (const file of files) {
120
+ // A `../` path is a change outside the config dir's subtree. It can affect
121
+ // every module (root lockfile, shared tsconfig) but can never BE a module
122
+ // file — not even of the synthesized '.' module — so it always fails wide.
123
+ if (file.startsWith('../')) {
124
+ rootChanged = true;
125
+ continue;
126
+ }
69
127
  let matched = false;
70
128
  for (const modPath of sorted) {
71
129
  // '.' is the synthesized implicit module for a single-package repo — it
72
- // is the repo root, so it contains every file. git diff paths are
73
- // repo-relative without a leading './', so the prefix check below can
74
- // never match '.' on its own.
130
+ // is the config dir itself, so it contains every anchor-relative file.
131
+ // Rebased paths never carry a leading './', so the prefix check below
132
+ // can never match '.' on its own.
75
133
  if (modPath === '.' || file === modPath || file.startsWith(modPath + '/')) {
76
134
  modules.add(modPath);
77
135
  matched = true;
@@ -1 +1 @@
1
- {"version":3,"file":"changed-files.js","sourceRoot":"","sources":["../../src/workspace/changed-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAIhD,+EAA+E;AAC/E,wBAAwB;AACxB,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,MAAM,CAAU,CAAA;AAItD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,IAAc;IACtD,MAAM,GAAG,GAAG,WAAW,EAAE,CAAA;IAEzB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YACjC,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,kBAAkB,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;YACrE,IAAI,SAAS,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAA;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,wBAAwB,SAAS,EAAE,CAAC,CAAC,CAAA;YAChF,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,0CAA0C,CAAC,CAAC,CAAA;YACvF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,+BAA+B,CAAC,CAAC,CAAA;QACnE,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,2BAA2B,CAAC,CAAA;QAC1D,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,0CAA0C,CAAC,CAAA;QAC9E,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;IAChD,OAAO,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;AACxF,CAAC;AAED,2EAA2E;AAC3E,SAAS,UAAU,CAAC,GAAW,EAAE,GAAW;IAC1C,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,6CAA6C,MAAM,EAAE,CAAC,CAAA;YACpE,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAwB,EACxB,WAA8B;IAE9B,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,IAAI,WAAW,GAAG,KAAK,CAAA;IAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,wEAAwE;YACxE,kEAAkE;YAClE,sEAAsE;YACtE,8BAA8B;YAC9B,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACpB,OAAO,GAAG,IAAI,CAAA;gBACd,MAAK;YACP,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,WAAW,GAAG,IAAI,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AACxD,CAAC"}
1
+ {"version":3,"file":"changed-files.js","sourceRoot":"","sources":["../../src/workspace/changed-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAIhD,8EAA8E;AAC9E,yEAAyE;AACzE,gBAAgB;AAChB,MAAM,qBAAqB,GAAsB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;AAExE,6EAA6E;AAC7E,8EAA8E;AAC9E,MAAM,QAAQ,GAAG,oBAAoB,CAAA;AAIrC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,IAAc,EACd,YAAgC;IAEhC,MAAM,GAAG,GAAG,WAAW,EAAE,CAAA;IAEzB,IAAI,QAAgB,CAAA;IACpB,IAAI,CAAC;QACH,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,+BAA+B,CAAC,CAAC,IAAI,EAAE,CAAA;QACnE,IAAI,QAAQ,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;QAC1E,wCAAwC;QACxC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACtC,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,CAAC,CAAA;YACpD,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,kBAAkB,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;YAC1E,IAAI,SAAS,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAA;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,wBAAwB,SAAS,EAAE,CAAC,CAAC,CAAA;YACrF,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,0CAA0C,CAAC,CAAC,CAAA;YAC5F,OAAO,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC7E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,+BAA+B,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;QAClG,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,2BAA2B,CAAC,CAAA;QAC/D,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,0CAA0C,CAAC,CAAA;QACnF,OAAO,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACtG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,SAAS,MAAM,CAAC,KAAwB,EAAE,QAAgB,EAAE,MAAc;IACxE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAC7F,CAAC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;IAChD,OAAO,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;AACxF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,YAAgC;IAChF,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,YAAY,CAAC,CAAA;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,GAAW,EAAE,GAAW,EAAE,YAAgC;IAC5E,KAAK,MAAM,GAAG,IAAI,YAAY,IAAI,qBAAqB,EAAE,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAQ;QACjC,IAAI,CAAC;YACH,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,kCAAkC,GAAG,WAAW,CAAC,CAAA;YAC/D,OAAO,GAAG,CAAA;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAwB,EACxB,WAA8B;IAE9B,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,IAAI,WAAW,GAAG,KAAK,CAAA;IAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,2EAA2E;QAC3E,0EAA0E;QAC1E,2EAA2E;QAC3E,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,WAAW,GAAG,IAAI,CAAA;YAClB,SAAQ;QACV,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,wEAAwE;YACxE,uEAAuE;YACvE,sEAAsE;YACtE,kCAAkC;YAClC,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACpB,OAAO,GAAG,IAAI,CAAA;gBACd,MAAK;YACP,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,WAAW,GAAG,IAAI,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AACxD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
6
  "license": "MIT",