pipework 0.15.0 → 0.16.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 (63) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/REFERENCE.md +159 -2
  3. package/dist/REFERENCE.md +159 -2
  4. package/dist/cli/commands/generate.d.ts.map +1 -1
  5. package/dist/cli/commands/generate.js +12 -10
  6. package/dist/cli/commands/generate.js.map +1 -1
  7. package/dist/core/config/base-dir.d.ts +6 -0
  8. package/dist/core/config/base-dir.d.ts.map +1 -0
  9. package/dist/core/config/base-dir.js +21 -0
  10. package/dist/core/config/base-dir.js.map +1 -0
  11. package/dist/core/config/discover.d.ts.map +1 -1
  12. package/dist/core/config/discover.js +2 -15
  13. package/dist/core/config/discover.js.map +1 -1
  14. package/dist/core/config/env-types.d.ts +70 -0
  15. package/dist/core/config/env-types.d.ts.map +1 -1
  16. package/dist/core/config/env.d.ts.map +1 -1
  17. package/dist/core/config/env.js +10 -6
  18. package/dist/core/config/env.js.map +1 -1
  19. package/dist/core/config/import-config.d.ts +3 -0
  20. package/dist/core/config/import-config.d.ts.map +1 -0
  21. package/dist/core/config/import-config.js +34 -0
  22. package/dist/core/config/import-config.js.map +1 -0
  23. package/dist/core/config/load.d.ts +4 -0
  24. package/dist/core/config/load.d.ts.map +1 -1
  25. package/dist/core/config/load.js +14 -5
  26. package/dist/core/config/load.js.map +1 -1
  27. package/dist/core/config/resolve.d.ts.map +1 -1
  28. package/dist/core/config/resolve.js +23 -1
  29. package/dist/core/config/resolve.js.map +1 -1
  30. package/dist/core/pipework.d.ts +19 -0
  31. package/dist/core/pipework.d.ts.map +1 -1
  32. package/dist/core/pipework.js +25 -0
  33. package/dist/core/pipework.js.map +1 -1
  34. package/dist/core/validation/queue-tables.d.ts +8 -0
  35. package/dist/core/validation/queue-tables.d.ts.map +1 -0
  36. package/dist/core/validation/queue-tables.js +53 -0
  37. package/dist/core/validation/queue-tables.js.map +1 -0
  38. package/dist/core/validation/rls-role.d.ts +16 -0
  39. package/dist/core/validation/rls-role.d.ts.map +1 -0
  40. package/dist/core/validation/rls-role.js +54 -0
  41. package/dist/core/validation/rls-role.js.map +1 -0
  42. package/dist/core/validation/startup.d.ts +2 -0
  43. package/dist/core/validation/startup.d.ts.map +1 -1
  44. package/dist/core/validation/startup.js +6 -0
  45. package/dist/core/validation/startup.js.map +1 -1
  46. package/dist/data/db/pool.d.ts +9 -0
  47. package/dist/data/db/pool.d.ts.map +1 -1
  48. package/dist/data/db/pool.js +7 -0
  49. package/dist/data/db/pool.js.map +1 -1
  50. package/dist/data/migrate/generate.d.ts +1 -1
  51. package/dist/data/migrate/generate.d.ts.map +1 -1
  52. package/dist/data/migrate/generate.js +15 -8
  53. package/dist/data/migrate/generate.js.map +1 -1
  54. package/dist/lint/resolver.d.ts.map +1 -1
  55. package/dist/lint/resolver.js +2 -11
  56. package/dist/lint/resolver.js.map +1 -1
  57. package/dist/test/setup.d.ts.map +1 -1
  58. package/dist/test/setup.js +33 -0
  59. package/dist/test/setup.js.map +1 -1
  60. package/dist/test/vitest-workspace.d.ts.map +1 -1
  61. package/dist/test/vitest-workspace.js +2 -11
  62. package/dist/test/vitest-workspace.js.map +1 -1
  63. package/package.json +1 -1
@@ -1,31 +1,100 @@
1
1
  import type { Environment } from './schema.js';
2
2
  interface EnvVarBase {
3
+ /** Redact the resolved value from logs and error messages (tokens, secrets). */
3
4
  readonly sensitive?: boolean | undefined;
5
+ /**
6
+ * Per-environment fallback values, keyed by environment name. Always given
7
+ * as strings (they take the same parse path as a real environment variable);
8
+ * a variable that is set in the environment wins over any default here.
9
+ *
10
+ * @example
11
+ * PORT: { type: 'number', defaults: { development: '3000', test: '0' } }
12
+ */
4
13
  readonly defaults?: Partial<Record<Environment, string>> | undefined;
5
14
  }
15
+ /**
16
+ * A string environment variable — resolved verbatim.
17
+ *
18
+ * @example
19
+ * S3_BUCKET: { type: 'string', required: true }
20
+ */
6
21
  export interface StringEnvVar extends EnvVarBase {
7
22
  readonly type: 'string';
23
+ /** Fail startup when unset and no default applies. */
8
24
  readonly required?: boolean | undefined;
25
+ /** Environment-independent fallback; `defaults` (per-environment) wins over this. */
9
26
  readonly default?: string | undefined;
10
27
  }
28
+ /**
29
+ * A number environment variable — parsed with a loud error on a non-numeric value.
30
+ *
31
+ * @example
32
+ * PORT: { type: 'number', default: 3000 }
33
+ */
11
34
  export interface NumberEnvVar extends EnvVarBase {
12
35
  readonly type: 'number';
36
+ /** Fail startup when unset and no default applies. */
13
37
  readonly required?: boolean | undefined;
38
+ /** Environment-independent fallback; `defaults` (per-environment) wins over this. */
14
39
  readonly default?: number | undefined;
15
40
  }
41
+ /**
42
+ * A boolean environment variable — accepts true/false/1/0, loud error otherwise.
43
+ *
44
+ * @example
45
+ * FEATURE_GRAPH: { type: 'boolean', default: false }
46
+ */
16
47
  export interface BooleanEnvVar extends EnvVarBase {
17
48
  readonly type: 'boolean';
49
+ /** Fail startup when unset and no default applies. */
18
50
  readonly required?: boolean | undefined;
51
+ /** Environment-independent fallback; `defaults` (per-environment) wins over this. */
19
52
  readonly default?: boolean | undefined;
20
53
  }
54
+ /**
55
+ * A string-array environment variable — the raw value split on `separator`
56
+ * (default `,`), each element trimmed.
57
+ *
58
+ * @example
59
+ * CORS_ORIGINS: { type: 'string[]', separator: ',', default: [] }
60
+ */
21
61
  export interface StringArrayEnvVar extends EnvVarBase {
22
62
  readonly type: 'string[]';
63
+ /** Split character for the raw value (default ','). */
23
64
  readonly separator?: string | undefined;
65
+ /** Fail startup when unset and no default applies. */
24
66
  readonly required?: boolean | undefined;
67
+ /** Environment-independent fallback; `defaults` (per-environment) wins over this. */
25
68
  readonly default?: readonly string[] | undefined;
26
69
  }
70
+ /**
71
+ * One declared environment variable: its type, whether it is required, its
72
+ * fallbacks, and whether the value is sensitive. Declared under the `env`
73
+ * blueprint field; resolved once at config load and exposed typed on
74
+ * `manifold.env` — the canonical replacement for ad-hoc `process.env` reads.
75
+ */
27
76
  export type EnvVarDef = StringEnvVar | NumberEnvVar | BooleanEnvVar | StringArrayEnvVar;
77
+ /**
78
+ * The `env` blueprint field: environment-variable declarations keyed by
79
+ * variable name. Passing this map to `createManifold` is what types
80
+ * `manifold.env`.
81
+ *
82
+ * @example
83
+ * export default createManifold({
84
+ * databases: { app: { url: 'DATABASE_URL', testUrl: 'DATABASE_URL_TEST' } },
85
+ * env: {
86
+ * PORT: { type: 'number', defaults: { development: '3000', test: '0' } },
87
+ * S3_BUCKET: { type: 'string', required: true },
88
+ * API_TOKEN: { type: 'string', required: true, sensitive: true },
89
+ * CORS_ORIGINS: { type: 'string[]', default: [] },
90
+ * },
91
+ * })
92
+ * // manifold.env.PORT → number
93
+ * // manifold.env.S3_BUCKET → string
94
+ * // manifold.env.CORS_ORIGINS → string[]
95
+ */
28
96
  export type EnvDefs = Record<string, EnvVarDef>;
97
+ /** The resolved runtime type of one declaration: 'string' → string, 'number' → number, 'boolean' → boolean, 'string[]' → string[]. */
29
98
  export type ResolvedEnvType<T extends EnvVarDef> = T extends {
30
99
  readonly type: 'string';
31
100
  } ? string : T extends {
@@ -35,6 +104,7 @@ export type ResolvedEnvType<T extends EnvVarDef> = T extends {
35
104
  } ? boolean : T extends {
36
105
  readonly type: 'string[]';
37
106
  } ? string[] : never;
107
+ /** Maps a declaration map to the shape of `manifold.env` — each key typed by its declared `type`. */
38
108
  export type ResolveEnvDefs<T extends EnvDefs> = {
39
109
  readonly [K in keyof T]: ResolvedEnvType<T[K]>;
40
110
  };
@@ -1 +1 @@
1
- {"version":3,"file":"env-types.d.ts","sourceRoot":"","sources":["../../../src/core/config/env-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,UAAU,UAAU;IAClB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;CACrE;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACvC;AAED,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CACjD;AAED,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,iBAAiB,CAAA;AAEvF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAE/C,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,SAAS,IAC7C,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,MAAM,GAC9C,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,MAAM,GAC9C,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,OAAO,GAChD,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG,MAAM,EAAE,GAClD,KAAK,CAAA;AAEP,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,OAAO,IAAI;IAC9C,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C,CAAA"}
1
+ {"version":3,"file":"env-types.d.ts","sourceRoot":"","sources":["../../../src/core/config/env-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,UAAU,UAAU;IAClB,gFAAgF;IAChF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;CACrE;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACvC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,uDAAuD;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CACjD;AAED;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,iBAAiB,CAAA;AAEvF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAE/C,sIAAsI;AACtI,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,SAAS,IAC7C,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,MAAM,GAC9C,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,MAAM,GAC9C,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,OAAO,GAChD,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG,MAAM,EAAE,GAClD,KAAK,CAAA;AAEP,qGAAqG;AACrG,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,OAAO,IAAI;IAC9C,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/core/config/env.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAM/C"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/core/config/env.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAU/C"}
@@ -1,24 +1,28 @@
1
1
  import { readFileSync, existsSync } from 'node:fs';
2
2
  import { resolve, dirname } from 'node:path';
3
+ const ENV_FILES = ['.env.test.local', '.env.test', '.env.local', '.env'];
3
4
  export function loadEnvFiles(cwd) {
4
5
  const start = cwd ?? process.cwd();
5
6
  const envDir = findEnvDir(start) ?? start;
6
- loadFile(resolve(envDir, '.env.test'));
7
- loadFile(resolve(envDir, '.env'));
7
+ // First-set wins (loadFile never overwrites), so the machine-local,
8
+ // never-committed `.local` variant of each tier takes precedence over the
9
+ // committed file — the standard dotenv convention.
10
+ for (const file of ENV_FILES) {
11
+ loadFile(resolve(envDir, file));
12
+ }
8
13
  }
9
14
  function findEnvDir(from) {
15
+ const hasEnvFile = (dir) => ENV_FILES.some(f => existsSync(resolve(dir, f)));
10
16
  let dir = resolve(from);
11
17
  let parent = dirname(dir);
12
18
  while (dir !== parent) {
13
- if (existsSync(resolve(dir, '.env')) || existsSync(resolve(dir, '.env.test'))) {
19
+ if (hasEnvFile(dir))
14
20
  return dir;
15
- }
16
21
  dir = parent;
17
22
  parent = dirname(dir);
18
23
  }
19
- if (existsSync(resolve(dir, '.env')) || existsSync(resolve(dir, '.env.test'))) {
24
+ if (hasEnvFile(dir))
20
25
  return dir;
21
- }
22
26
  return null;
23
27
  }
24
28
  function loadFile(path) {
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/core/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,KAAK,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;IAEzC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;IACtC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,GAAG,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YAC9E,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,GAAG,GAAG,MAAM,CAAA;QACZ,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAM;IAE7B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QAEvD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAQ;QAE1B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;QAC1C,IAAI,GAAG,KAAK,EAAE;YAAE,SAAQ;QAExB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,SAAQ;QAE5C,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAC1B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/core/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,SAAS,GAAG,CAAC,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;AAExE,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,KAAK,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;IAEzC,oEAAoE;IACpE,0EAA0E;IAC1E,mDAAmD;IACnD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;IACjC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,UAAU,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7F,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,GAAG,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAA;QAC/B,GAAG,GAAG,MAAM,CAAA;QACZ,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IACD,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAA;IAC/B,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAM;IAE7B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QAEvD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAQ;QAE1B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;QAC1C,IAAI,GAAG,KAAK,EAAE;YAAE,SAAQ;QAExB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,SAAQ;QAE5C,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAC1B,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Manifold } from '../pipework.js';
2
+ export declare function importConfig(configPath: string): Promise<Manifold>;
3
+ //# sourceMappingURL=import-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-config.d.ts","sourceRoot":"","sources":["../../../src/core/config/import-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAS9C,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwBxE"}
@@ -0,0 +1,34 @@
1
+ import { dirname } from 'node:path';
2
+ import { pathToFileURL } from 'node:url';
3
+ import { ConfigError } from './errors.js';
4
+ import { setConfigBaseDir, clearConfigBaseDir } from './base-dir.js';
5
+ // The single import-and-validate chokepoint for pipework.config.ts. Every
6
+ // importer (discoverInstance, the vitest config resolver, the eslint config
7
+ // resolver) goes through here so relative `migrations`/`schema` paths always
8
+ // resolve against the config file's directory, whichever entry path loads the
9
+ // config first in a process.
10
+ export async function importConfig(configPath) {
11
+ setConfigBaseDir(dirname(configPath));
12
+ try {
13
+ const mod = await import(pathToFileURL(configPath).href);
14
+ const exported = mod['default'] ?? mod;
15
+ if (!isManifold(exported)) {
16
+ throw new ConfigError(`pipework.config.ts must export a Pipework instance as its default export.`, `Your config should look like:\n\n` +
17
+ ` import { createManifold } from 'pipework'\n\n` +
18
+ ` export default createManifold({\n` +
19
+ ` databases: { app: { url: 'DATABASE_URL' } },\n` +
20
+ ` })\n`);
21
+ }
22
+ return exported;
23
+ }
24
+ finally {
25
+ // An ESM cache hit re-enters here without re-running loadConfig (the
26
+ // consume). Clear unconditionally so the slot cannot leak into a later
27
+ // directly-constructed loadConfig.
28
+ clearConfigBaseDir();
29
+ }
30
+ }
31
+ function isManifold(v) {
32
+ return typeof v === 'object' && v !== null && 'pool' in v && 'config' in v;
33
+ }
34
+ //# sourceMappingURL=import-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-config.js","sourceRoot":"","sources":["../../../src/core/config/import-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEpE,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,6BAA6B;AAC7B,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB;IACnD,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAA4B,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAA;QACjF,MAAM,QAAQ,GAAY,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAA;QAE/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,WAAW,CACnB,2EAA2E,EAC3E,mCAAmC;gBACnC,iDAAiD;gBACjD,qCAAqC;gBACrC,oDAAoD;gBACpD,QAAQ,CACT,CAAA;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;YAAS,CAAC;QACT,qEAAqE;QACrE,uEAAuE;QACvE,mCAAmC;QACnC,kBAAkB,EAAE,CAAA;IACtB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,CAAU;IAC5B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAA;AAC5E,CAAC"}
@@ -48,7 +48,11 @@ export interface ResolvedDatabase {
48
48
  readonly name: string;
49
49
  readonly url: string;
50
50
  readonly appUrl?: string;
51
+ /** Directory relative `migrations`/`schema` paths resolve against — the config file's directory (process.cwd() for directly-constructed configs). */
52
+ readonly baseDir: string;
53
+ /** Glob patterns stay as authored; consumers glob them with `cwd: baseDir`. */
51
54
  readonly schema: string | string[] | undefined;
55
+ /** Absolute — resolved against baseDir at load time, so cwd never matters (D1). */
52
56
  readonly migrations: string | undefined;
53
57
  readonly extensions: readonly string[];
54
58
  readonly migrationTable: string;
@@ -1 +1 @@
1
- {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/core/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAuB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAK9H,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,kHAAkH;IAClH,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAA;IACvD;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAA;IACzC,SAAS,IAAI,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAClD,aAAa,IAAI,SAAS,MAAM,EAAE,CAAA;IAClC,mBAAmB,IAAI,MAAM,CAAA;IAC7B,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAA;CACrD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;CACxE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAavD"}
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/core/config/load.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAuB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAM9H,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,kHAAkH;IAClH,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAA;IACvD;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAA;IACzC,SAAS,IAAI,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAClD,aAAa,IAAI,SAAS,MAAM,EAAE,CAAA;IAClC,mBAAmB,IAAI,MAAM,CAAA;IAC7B,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAA;CACrD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,qJAAqJ;IACrJ,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;IAC9C,mFAAmF;IACnF,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;CACxE;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAgBvD"}
@@ -1,8 +1,13 @@
1
+ import { resolve } from 'node:path';
1
2
  import { trunkConfigSchema } from './schema.js';
2
3
  import { resolveEnvironment, resolveDbUrl } from './resolve.js';
3
4
  import { ConfigError } from './errors.js';
4
5
  import { resolveEnvVars } from './env-resolve.js';
6
+ import { consumeConfigBaseDir } from './base-dir.js';
5
7
  export function loadConfig(raw) {
8
+ // Consume before validation so a parse failure cannot leave the slot set for
9
+ // an unrelated later load.
10
+ const baseDir = consumeConfigBaseDir() ?? process.cwd();
6
11
  const parsed = trunkConfigSchema.safeParse(raw);
7
12
  if (!parsed.success) {
8
13
  const issues = parsed.error.issues.map(i => ` - ${i.path.join('.')}: ${i.message}`).join('\n');
@@ -10,16 +15,16 @@ export function loadConfig(raw) {
10
15
  }
11
16
  const config = parsed.data;
12
17
  const environment = config.environment ?? resolveEnvironment();
13
- return buildResolved(config, environment);
18
+ return buildResolved(config, environment, baseDir);
14
19
  }
15
- function buildResolved(config, environment) {
20
+ function buildResolved(config, environment, baseDir) {
16
21
  const dbMap = new Map();
17
22
  for (const [name, dbConfig] of Object.entries(config.databases)) {
18
23
  const url = resolveDbUrl(dbConfig.url, dbConfig.testUrl, environment, name);
19
24
  const appUrl = dbConfig.appUrl !== undefined
20
25
  ? resolveDbUrl(dbConfig.appUrl, dbConfig.appTestUrl, environment, name)
21
26
  : undefined;
22
- dbMap.set(name, resolveDatabase(name, dbConfig, url, appUrl));
27
+ dbMap.set(name, resolveDatabase(name, dbConfig, url, appUrl, baseDir));
23
28
  }
24
29
  const declaredNames = [...dbMap.keys()];
25
30
  const defaultDbName = config.defaultDatabase;
@@ -102,13 +107,17 @@ function buildResolved(config, environment) {
102
107
  },
103
108
  };
104
109
  }
105
- function resolveDatabase(name, config, url, appUrl) {
110
+ function resolveDatabase(name, config, url, appUrl, baseDir) {
106
111
  return {
107
112
  name,
108
113
  url,
109
114
  ...(appUrl !== undefined ? { appUrl } : {}),
115
+ baseDir,
110
116
  schema: config.schema,
111
- migrations: config.migrations,
117
+ // Absolutized here — the single place — so every consumer (generate,
118
+ // migrate safety gate, test template provisioning) is cwd-independent.
119
+ // resolve(base, abs) === abs, so already-absolute consumer paths stay valid.
120
+ migrations: config.migrations !== undefined ? resolve(baseDir, config.migrations) : undefined,
112
121
  extensions: config.extensions ?? [],
113
122
  migrationTable: config.migrationTable ?? `__pipework_migrations_${name}`,
114
123
  pool: {
@@ -1 +1 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/core/config/load.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/core/config/load.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/core/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,wBAAgB,kBAAkB,IAAI,WAAW,CAWhD;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAgCtI"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/core/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,wBAAgB,kBAAkB,IAAI,WAAW,CAWhD;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA8DtI"}
@@ -23,9 +23,31 @@ export function resolveDbUrl(envVarName, testEnvVarName, environment, dbName) {
23
23
  ` }\n\n` +
24
24
  `Then set ${envVarName}_TEST in your environment.`);
25
25
  }
26
+ // D4a (subseam audit 2026-07-16): a testUrl that resolves to the real
27
+ // database means "tests" run against production — the harness
28
+ // creates/drops databases and rolls back transactions on what it assumes
29
+ // is a dedicated instance, and RLS-inertness goes unnoticed. Name-identity
30
+ // first: both fields reading one variable is a config-shape defect,
31
+ // regardless of what the variable holds.
32
+ if (testEnvVarName === envVarName) {
33
+ throw new ConfigError(`Database "${dbName ?? envVarName}" uses the same environment variable "${envVarName}" for url and testUrl — test isolation is defeated.`, `testUrl must be its own variable pointing at a separate database:\n\n` +
34
+ ` databases: {\n` +
35
+ ` ${dbName ?? 'app'}: {\n` +
36
+ ` url: '${envVarName}',\n` +
37
+ ` testUrl: '${envVarName}_TEST', // <-- its own variable\n` +
38
+ ` },\n` +
39
+ ` }\n\n` +
40
+ `Then set ${envVarName}_TEST to a separate database's connection string.`);
41
+ }
26
42
  const value = process.env[testEnvVarName];
27
- if (value !== undefined && value !== '')
43
+ if (value !== undefined && value !== '') {
44
+ const urlValue = process.env[envVarName];
45
+ if (urlValue !== undefined && urlValue !== '' && urlValue === value) {
46
+ throw new ConfigError(`Database "${dbName ?? envVarName}": "${testEnvVarName}" and "${envVarName}" hold the identical connection string — test isolation is defeated.`, `Tests would run against the same database "${envVarName}" points at. ` +
47
+ `Point ${testEnvVarName} at a separate database.`);
48
+ }
28
49
  return value;
50
+ }
29
51
  throw new ConfigError(`Missing test database URL: environment variable "${testEnvVarName}" is not set.`, `Set ${testEnvVarName} in your .env file or environment.`);
30
52
  }
31
53
  const value = process.env[envVarName];
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/core/config/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC5C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACnF,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACvC,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,MAAM,CAAA;IACrC,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,YAAY,CAAA;IAEjD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,cAAkC,EAAE,WAAwB,EAAE,MAAe;IAC5H,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,WAAW,CACnB,aAAa,MAAM,IAAI,UAAU,yDAAyD,EAC1F,0CAA0C;gBAC1C,kBAAkB;gBAClB,OAAO,MAAM,IAAI,KAAK,OAAO;gBAC7B,eAAe,UAAU,MAAM;gBAC/B,mBAAmB,UAAU,4BAA4B;gBACzD,UAAU;gBACV,SAAS;gBACT,YAAY,UAAU,4BAA4B,CACnD,CAAA;QACH,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QACzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,KAAK,CAAA;QAErD,MAAM,IAAI,WAAW,CACnB,oDAAoD,cAAc,eAAe,EACjF,OAAO,cAAc,oCAAoC,CAC1D,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IAErD,MAAM,IAAI,WAAW,CACnB,+CAA+C,UAAU,eAAe,EACxE,OAAO,UAAU,oCAAoC,CACtD,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/core/config/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC5C,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACnF,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACvC,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,MAAM,CAAA;IACrC,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,YAAY,CAAA;IAEjD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,cAAkC,EAAE,WAAwB,EAAE,MAAe;IAC5H,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,WAAW,CACnB,aAAa,MAAM,IAAI,UAAU,yDAAyD,EAC1F,0CAA0C;gBAC1C,kBAAkB;gBAClB,OAAO,MAAM,IAAI,KAAK,OAAO;gBAC7B,eAAe,UAAU,MAAM;gBAC/B,mBAAmB,UAAU,4BAA4B;gBACzD,UAAU;gBACV,SAAS;gBACT,YAAY,UAAU,4BAA4B,CACnD,CAAA;QACH,CAAC;QAED,sEAAsE;QACtE,8DAA8D;QAC9D,yEAAyE;QACzE,2EAA2E;QAC3E,oEAAoE;QACpE,yCAAyC;QACzC,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;YAClC,MAAM,IAAI,WAAW,CACnB,aAAa,MAAM,IAAI,UAAU,yCAAyC,UAAU,qDAAqD,EACzI,uEAAuE;gBACvE,kBAAkB;gBAClB,OAAO,MAAM,IAAI,KAAK,OAAO;gBAC7B,eAAe,UAAU,MAAM;gBAC/B,mBAAmB,UAAU,oCAAoC;gBACjE,UAAU;gBACV,SAAS;gBACT,YAAY,UAAU,mDAAmD,CAC1E,CAAA;QACH,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QACzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACxC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBACpE,MAAM,IAAI,WAAW,CACnB,aAAa,MAAM,IAAI,UAAU,OAAO,cAAc,UAAU,UAAU,sEAAsE,EAChJ,8CAA8C,UAAU,eAAe;oBACvE,SAAS,cAAc,0BAA0B,CAClD,CAAA;YACH,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,IAAI,WAAW,CACnB,oDAAoD,cAAc,eAAe,EACjF,OAAO,cAAc,oCAAoC,CAC1D,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IAErD,MAAM,IAAI,WAAW,CACnB,+CAA+C,UAAU,eAAe,EACxE,OAAO,UAAU,oCAAoC,CACtD,CAAA;AACH,CAAC"}
@@ -82,6 +82,25 @@ export interface ConnectionTracker {
82
82
  /**
83
83
  * Creates the Pipework application instance. This is the entry point for every Pipework app.
84
84
  * Define in `pipework.config.ts` and export as default.
85
+ *
86
+ * The `env` field declares the app's environment variables — the canonical
87
+ * home for runtime config (ports, service tokens, bucket names, flags) in
88
+ * place of scattered `process.env` reads. Each variable is read once at config
89
+ * load, validated and coerced to its declared type (loud error on a bad or
90
+ * missing-required value), and exposed typed on `manifold.env`.
91
+ *
92
+ * @example
93
+ * const manifold = createManifold({
94
+ * databases: { app: { url: 'DATABASE_URL', testUrl: 'DATABASE_URL_TEST' } },
95
+ * env: {
96
+ * PORT: { type: 'number', defaults: { development: '3000', test: '0' } },
97
+ * S3_BUCKET: { type: 'string', required: true },
98
+ * API_TOKEN: { type: 'string', required: true, sensitive: true },
99
+ * },
100
+ * })
101
+ * manifold.env.PORT // number — from process.env.PORT, or the per-environment default
102
+ * manifold.env.S3_BUCKET // string — startup fails loudly if unset
103
+ * export default manifold
85
104
  */
86
105
  export declare function createManifold<const TEnv extends EnvDefs = EnvDefs>(raw: Omit<BlueprintInput, 'env'> & {
87
106
  env?: TEnv | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"pipework.d.ts","sourceRoot":"","sources":["../../src/core/pipework.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipework.d.ts","sourceRoot":"","sources":["../../src/core/pipework.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,25 @@ import { runInContext } from '../request/context/store.js';
10
10
  /**
11
11
  * Creates the Pipework application instance. This is the entry point for every Pipework app.
12
12
  * Define in `pipework.config.ts` and export as default.
13
+ *
14
+ * The `env` field declares the app's environment variables — the canonical
15
+ * home for runtime config (ports, service tokens, bucket names, flags) in
16
+ * place of scattered `process.env` reads. Each variable is read once at config
17
+ * load, validated and coerced to its declared type (loud error on a bad or
18
+ * missing-required value), and exposed typed on `manifold.env`.
19
+ *
20
+ * @example
21
+ * const manifold = createManifold({
22
+ * databases: { app: { url: 'DATABASE_URL', testUrl: 'DATABASE_URL_TEST' } },
23
+ * env: {
24
+ * PORT: { type: 'number', defaults: { development: '3000', test: '0' } },
25
+ * S3_BUCKET: { type: 'string', required: true },
26
+ * API_TOKEN: { type: 'string', required: true, sensitive: true },
27
+ * },
28
+ * })
29
+ * manifold.env.PORT // number — from process.env.PORT, or the per-environment default
30
+ * manifold.env.S3_BUCKET // string — startup fails loudly if unset
31
+ * export default manifold
13
32
  */
14
33
  export function createManifold(raw) {
15
34
  const { surfaces: surfacesDef, lifecycle: lifecycleDef, ...blueprintRaw } = raw;
@@ -48,12 +67,18 @@ export function createManifold(raw) {
48
67
  startupOpts.timeoutMs = lifecycleConfig.startupTimeoutMs;
49
68
  }
50
69
  await orchestrateStartup(manifold, startupOpts);
70
+ // The database queue migrations land in: the sole database, or the
71
+ // declared defaultDatabase. Ambiguous multi-DB configs (no default)
72
+ // already fail at `pipework generate`, so skipping here loses nothing.
73
+ const names = config.databaseNames();
74
+ const defaultDbName = names.length === 1 ? names[0] : config.raw.defaultDatabase;
51
75
  await validateStartup({
52
76
  configuredDatabases: config.databaseNames(),
53
77
  environment: config.environment,
54
78
  surfaces,
55
79
  defaultDbAvailable: config.databaseNames().length === 1,
56
80
  databases: config.databases(),
81
+ defaultDatabase: defaultDbName !== undefined ? config.database(defaultDbName) : undefined,
57
82
  });
58
83
  const context = manifold;
59
84
  running = await startSurfaces(context, config, surfaces);
@@ -1 +1 @@
1
- {"version":3,"file":"pipework.js","sourceRoot":"","sources":["../../src/core/pipework.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipework.js","sourceRoot":"","sources":["../../src/core/pipework.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ValidationIssue } from './types.js';
2
+ import type { ResolvedDatabase } from '../config/load.js';
3
+ export declare function queueTableMessage(table: string, database: string): string;
4
+ /** Registered queue tables absent from the database at `url`. Opens a short-lived probe connection, mirroring validateConnectivity. */
5
+ export declare function missingQueueTables(url: string, timeoutMs?: number): Promise<string[]>;
6
+ /** Startup-validation leg: every registered queue's table must exist in the default database (where queue migrations are emitted). */
7
+ export declare function validateQueueTables(defaultDb: ResolvedDatabase, timeoutMs?: number): Promise<ValidationIssue[]>;
8
+ //# sourceMappingURL=queue-tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-tables.d.ts","sourceRoot":"","sources":["../../../src/core/validation/queue-tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AASzD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOzE;AAED,uIAAuI;AACvI,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsBzF;AAED,sIAAsI;AACtI,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,gBAAgB,EAC3B,SAAS,SAAO,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAY5B"}
@@ -0,0 +1,53 @@
1
+ import { queueDefinitions } from '../../async/jobs/table.js';
2
+ // D2 residual risk (subseam audit 2026-07-16): a queue whose module is in no
3
+ // schema glob and no import chain reaches the registry at runtime (createQueue
4
+ // runs when the worker imports it) but never reached a migration — so the
5
+ // first enqueue in production failed on a missing relation. This check makes
6
+ // that state loud at startup and at test bootstrap instead.
7
+ export function queueTableMessage(table, database) {
8
+ return (`queue table "${table}" is registered (createQueue) but does not exist in database "${database}". ` +
9
+ `The module calling createQueue({ table: '${table}' }) must be reachable from the database's ` +
10
+ `schema glob (or imported by a schema file) so \`pipework generate\` emits its migration. ` +
11
+ `Add it to the schema patterns, run \`pipework generate\`, then \`pipework migrate\`.`);
12
+ }
13
+ /** Registered queue tables absent from the database at `url`. Opens a short-lived probe connection, mirroring validateConnectivity. */
14
+ export async function missingQueueTables(url, timeoutMs = 5000) {
15
+ const tables = [...queueDefinitions().keys()];
16
+ if (tables.length === 0)
17
+ return [];
18
+ const { default: postgres } = await import('postgres');
19
+ const sql = postgres(url, {
20
+ max: 1,
21
+ idle_timeout: 1,
22
+ connect_timeout: Math.ceil(timeoutMs / 1000),
23
+ onnotice: () => { },
24
+ });
25
+ try {
26
+ const missing = [];
27
+ for (const table of tables) {
28
+ const rows = await sql `SELECT to_regclass(${'public.' + table}) IS NOT NULL AS present`;
29
+ if (rows[0]?.['present'] !== true)
30
+ missing.push(table);
31
+ }
32
+ return missing;
33
+ }
34
+ finally {
35
+ await sql.end({ timeout: 1 });
36
+ }
37
+ }
38
+ /** Startup-validation leg: every registered queue's table must exist in the default database (where queue migrations are emitted). */
39
+ export async function validateQueueTables(defaultDb, timeoutMs = 5000) {
40
+ try {
41
+ const missing = await missingQueueTables(defaultDb.url, timeoutMs);
42
+ return missing.map(table => ({
43
+ phase: 'database',
44
+ message: queueTableMessage(table, defaultDb.name),
45
+ }));
46
+ }
47
+ catch {
48
+ // An unreachable database is validateConnectivity's finding — reporting it
49
+ // here too would double up the same root cause.
50
+ return [];
51
+ }
52
+ }
53
+ //# sourceMappingURL=queue-tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-tables.js","sourceRoot":"","sources":["../../../src/core/validation/queue-tables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,6EAA6E;AAC7E,4DAA4D;AAE5D,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,QAAgB;IAC/D,OAAO,CACL,gBAAgB,KAAK,iEAAiE,QAAQ,KAAK;QACnG,4CAA4C,KAAK,6CAA6C;QAC9F,2FAA2F;QAC3F,sFAAsF,CACvF,CAAA;AACH,CAAC;AAED,uIAAuI;AACvI,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW,EAAE,SAAS,GAAG,IAAI;IACpE,MAAM,MAAM,GAAG,CAAC,GAAG,gBAAgB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAElC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE;QACxB,GAAG,EAAE,CAAC;QACN,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC5C,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;KACnB,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAA,sBAAsB,SAAS,GAAG,KAAK,0BAA0B,CAAA;YACvF,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC;AAED,sIAAsI;AACtI,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAA2B,EAC3B,SAAS,GAAG,IAAI;IAEhB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAClE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,UAAmB;YAC1B,OAAO,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC;SAClD,CAAC,CAAC,CAAA;IACL,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,gDAAgD;QAChD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ValidationIssue } from './types.js';
2
+ import type { ResolvedDatabase } from '../config/load.js';
3
+ import type { IsolationStrategy } from '../config/schema.js';
4
+ export interface RlsRoleProbe {
5
+ readonly role: string;
6
+ readonly superuser: boolean;
7
+ readonly bypassRls: boolean;
8
+ }
9
+ export declare function rlsRoleMessage(database: string, probe: RlsRoleProbe): string;
10
+ /** The connection whose role actually executes queries under the harness: transaction isolation collapses every role onto the resolved `url` connection; database/container isolation resolves roles normally (`appUrl ?? url`). */
11
+ export declare function rlsProbeTarget(db: ResolvedDatabase, strategy: IsolationStrategy): string;
12
+ /** Role flags for `current_user` at `url`. Short-lived probe connection, mirroring validateConnectivity. */
13
+ export declare function probeRlsRole(url: string, timeoutMs?: number): Promise<RlsRoleProbe>;
14
+ /** Startup-validation leg: for each database with `rls` configured, the runtime connection's role (`appUrl ?? url`) must not bypass RLS. */
15
+ export declare function validateRlsRoles(databases: ReadonlyMap<string, ResolvedDatabase>, timeoutMs?: number): Promise<ValidationIssue[]>;
16
+ //# sourceMappingURL=rls-role.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rls-role.d.ts","sourceRoot":"","sources":["../../../src/core/validation/rls-role.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAO5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAQ5E;AAED,oOAAoO;AACpO,wBAAgB,cAAc,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAExF;AAED,4GAA4G;AAC5G,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAmBvF;AAED,4IAA4I;AAC5I,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAChD,SAAS,SAAO,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAoB5B"}