pipework 0.1.0 → 0.1.2

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/README.md +59 -31
  2. package/dist/cli/commands/init.d.ts.map +1 -1
  3. package/dist/cli/commands/init.js +1 -0
  4. package/dist/cli/commands/init.js.map +1 -1
  5. package/dist/config/discover.d.ts +3 -0
  6. package/dist/config/discover.d.ts.map +1 -0
  7. package/dist/config/discover.js +20 -0
  8. package/dist/config/discover.js.map +1 -0
  9. package/dist/config/index.d.ts +1 -0
  10. package/dist/config/index.d.ts.map +1 -1
  11. package/dist/config/index.js +1 -0
  12. package/dist/config/index.js.map +1 -1
  13. package/dist/config/load.js +1 -1
  14. package/dist/config/load.js.map +1 -1
  15. package/dist/config/namespace.d.ts +2 -0
  16. package/dist/config/namespace.d.ts.map +1 -1
  17. package/dist/config/namespace.js +3 -0
  18. package/dist/config/namespace.js.map +1 -1
  19. package/dist/config/resolve.d.ts +1 -1
  20. package/dist/config/resolve.d.ts.map +1 -1
  21. package/dist/config/resolve.js +15 -7
  22. package/dist/config/resolve.js.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/schema/generated/type-constructor.d.ts +1 -1
  28. package/dist/schema/generated/type-constructor.d.ts.map +1 -1
  29. package/dist/schema/generated/type-constructor.js +3 -0
  30. package/dist/schema/generated/type-constructor.js.map +1 -1
  31. package/dist/schema/namespace.d.ts +1 -0
  32. package/dist/schema/namespace.d.ts.map +1 -1
  33. package/dist/schema/namespace.js +1 -0
  34. package/dist/schema/namespace.js.map +1 -1
  35. package/dist/test/auto-setup.d.ts +2 -0
  36. package/dist/test/auto-setup.d.ts.map +1 -0
  37. package/dist/test/auto-setup.js +29 -0
  38. package/dist/test/auto-setup.js.map +1 -0
  39. package/dist/test/vitest.d.ts +2 -0
  40. package/dist/test/vitest.d.ts.map +1 -1
  41. package/dist/test/vitest.js +15 -4
  42. package/dist/test/vitest.js.map +1 -1
  43. package/package.json +18 -15
package/README.md CHANGED
@@ -36,7 +36,7 @@ const instance = createPipework({
36
36
  const createNote = fitting
37
37
  .use('app')
38
38
  .auth<{ userId: string; tenantId: string }>()
39
- .input(schema.object({ title: schema.string(), body: schema.string() }))
39
+ .input(schema.check.object({ title: schema.check.string(), body: schema.check.string() }))
40
40
  .route('POST', '/notes')
41
41
  .fit(async ({ app, auth, input }) => {
42
42
  const [note] = await app
@@ -63,47 +63,75 @@ pnpm add pipework
63
63
 
64
64
  Includes `drizzle-orm`, `postgres`, `zod`, and `fastify` — no additional dependencies needed.
65
65
 
66
- Database operations, schema builders, and validation are all accessed through pipework's namespaces:
66
+ Database schema definitions, SQL operations, and validation are accessed through Pipework's namespaces:
67
67
 
68
68
  ```typescript
69
- import { pipe, schema } from 'pipework'
69
+ import { schema, pipe } from 'pipework'
70
70
 
71
- // Database: table definitions, SQL, operators
72
- const users = pipe.table('users', {
73
- id: pipe.col.uuid('id').primaryKey().defaultRandom(),
74
- name: pipe.col.text('name').notNull(),
71
+ // Database schema: table definitions, column types
72
+ const users = schema.table('users', {
73
+ id: schema.col.uuid('id').primaryKey().defaultRandom(),
74
+ name: schema.col.text('name').notNull(),
75
75
  })
76
76
 
77
77
  // Validation
78
- const input = schema.object({ name: schema.string().min(1) })
78
+ const input = schema.check.object({ name: schema.check.string().min(1) })
79
+
80
+ // SQL
81
+ const rows = await db.execute(pipe.sql`SELECT * FROM users`)
82
+ ```
83
+
84
+ ## Testing
85
+
86
+ Add one line to your vitest config. Pipework discovers `pipework.config.ts`, connects to the test database, and wraps every test in a transaction that rolls back automatically.
87
+
88
+ ```typescript
89
+ // vitest.config.ts
90
+ test: { setupFiles: ['pipework/test/setup'] }
79
91
  ```
80
92
 
93
+ ```typescript
94
+ // tests/notes.test.ts
95
+ import { useTestDb, withFlow } from 'pipework/test'
96
+ import { pipe } from 'pipework'
97
+
98
+ it('creates a note', async () => {
99
+ const db = useTestDb()
100
+ await withFlow(async () => {
101
+ await db.execute(pipe.sql`INSERT INTO notes (title) VALUES ('Test')`)
102
+ const rows = await db.execute(pipe.sql`SELECT * FROM notes`)
103
+ expect(rows).toHaveLength(1)
104
+ })
105
+ })
106
+ ```
107
+
108
+ No setup functions, no config passing, no teardown.
109
+
81
110
  ## Documentation
82
111
 
83
- - **[Getting Started](docs/getting-started.md)** — zero to running server
112
+ - **[Getting Started](https://github.com/theconstructory/pipework/blob/main/docs/getting-started.md)** — zero to running server
84
113
  - **Guides**
85
- - [Configuration](docs/guides/configuration.md)
86
- - [DI Builder & Handlers](docs/guides/handlers.md)
87
- - [Authentication & Tenants](docs/guides/auth-and-tenants.md)
88
- - [Background Jobs](docs/guides/jobs.md)
89
- - [Cron Scheduling](docs/guides/cron.md)
90
- - [Temporal Records](docs/guides/temporal.md)
91
- - [Resource CRUD](docs/guides/resources.md)
92
- - [Caching](docs/guides/caching.md)
93
- - [State Machines](docs/guides/state-machines.md)
94
- - [Pipelines](docs/guides/pipelines.md)
95
- - [pgvector & Search](docs/guides/vector.md)
96
- - [RBAC](docs/guides/rbac.md)
97
- - [Audit Trail](docs/guides/audit.md)
98
- - [HTTP Security](docs/guides/security.md)
99
- - [Logging](docs/guides/logging.md)
100
- - [OpenAPI](docs/guides/openapi.md)
101
- - [Testing](docs/guides/testing.md)
102
- - [Error Handling](docs/guides/errors.md)
103
- - **Recipes** — composing primitives for real use cases
104
- - [Content Pipeline](docs/recipes/content-pipeline.md) — document lifecycle, versioning, chunking, embedding
105
- - [Flexible Entities](docs/recipes/flexible-entities.md) — runtime-validated JSONB over fixed tables
106
- - [Assertion Provenance](docs/recipes/assertion-provenance.md) — sourced claims, conflict detection, audit
114
+ - [Configuration](https://github.com/theconstructory/pipework/blob/main/docs/guides/configuration.md)
115
+ - [Handlers](https://github.com/theconstructory/pipework/blob/main/docs/guides/handlers.md)
116
+ - [Auth & Tenants](https://github.com/theconstructory/pipework/blob/main/docs/guides/auth-and-tenants.md)
117
+ - [Background Jobs](https://github.com/theconstructory/pipework/blob/main/docs/guides/jobs.md)
118
+ - [Temporal Records](https://github.com/theconstructory/pipework/blob/main/docs/guides/temporal.md)
119
+ - [Resource CRUD](https://github.com/theconstructory/pipework/blob/main/docs/guides/resources.md)
120
+ - [Caching](https://github.com/theconstructory/pipework/blob/main/docs/guides/caching.md)
121
+ - [State Machines](https://github.com/theconstructory/pipework/blob/main/docs/guides/state-machines.md)
122
+ - [Pipelines](https://github.com/theconstructory/pipework/blob/main/docs/guides/pipelines.md)
123
+ - [pgvector & Search](https://github.com/theconstructory/pipework/blob/main/docs/guides/vector.md)
124
+ - [RBAC](https://github.com/theconstructory/pipework/blob/main/docs/guides/rbac.md)
125
+ - [Audit Trail](https://github.com/theconstructory/pipework/blob/main/docs/guides/audit.md)
126
+ - [HTTP Security](https://github.com/theconstructory/pipework/blob/main/docs/guides/security.md)
127
+ - [Logging](https://github.com/theconstructory/pipework/blob/main/docs/guides/logging.md)
128
+ - [OpenAPI](https://github.com/theconstructory/pipework/blob/main/docs/guides/openapi.md)
129
+ - [Testing](https://github.com/theconstructory/pipework/blob/main/docs/guides/testing.md)
130
+ - [Error Handling](https://github.com/theconstructory/pipework/blob/main/docs/guides/errors.md)
131
+ - **Recipes**
132
+ - [Content Pipeline](https://github.com/theconstructory/pipework/blob/main/docs/recipes/content-pipeline.md)
133
+ - [Flexible Entities](https://github.com/theconstructory/pipework/blob/main/docs/recipes/flexible-entities.md)
134
+ - [Assertion Provenance](https://github.com/theconstructory/pipework/blob/main/docs/recipes/assertion-provenance.md)
107
135
 
108
136
  ## Design principles
109
137
 
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAgBA,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiBtC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAiBA,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiBtC"}
@@ -7,6 +7,7 @@ export default defineConfig({
7
7
  databases: {
8
8
  app: {
9
9
  url: 'DATABASE_URL',
10
+ testUrl: 'DATABASE_URL_TEST',
10
11
  migrations: './migrations/app',
11
12
  },
12
13
  },
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAE5C,MAAM,eAAe,GAAG;;;;;;;;;;CAUvB,CAAA;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAA;IAClD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;IAErD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,8CAA8C,CAAC,CAAA;IACtD,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;QACnD,OAAO,CAAC,4BAA4B,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,OAAO,CAAC,WAAW,cAAc,EAAE,CAAC,CAAA;IACtC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,cAAc,4BAA4B,CAAC,CAAA;IACrD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAE5C,MAAM,eAAe,GAAG;;;;;;;;;;;CAWvB,CAAA;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAA;IAClD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;IAErD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,8CAA8C,CAAC,CAAA;IACtD,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;QACnD,OAAO,CAAC,4BAA4B,CAAC,CAAA;IACvC,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,OAAO,CAAC,WAAW,cAAc,EAAE,CAAC,CAAA;IACtC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,cAAc,4BAA4B,CAAC,CAAA;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Blueprint } from './schema.js';
2
+ export declare function discoverConfig(cwd?: string): Promise<Blueprint>;
3
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/config/discover.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAK5C,wBAAsB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAuBrE"}
@@ -0,0 +1,20 @@
1
+ import { resolve } from 'node:path';
2
+ import { existsSync } from 'node:fs';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { ConfigError } from './resolve.js';
5
+ const CONFIG_FILENAME = 'pipework.config.ts';
6
+ export async function discoverConfig(cwd) {
7
+ const root = cwd ?? process.cwd();
8
+ const configPath = resolve(root, CONFIG_FILENAME);
9
+ if (!existsSync(configPath)) {
10
+ throw new ConfigError(`No ${CONFIG_FILENAME} found in ${root}.`, `Create one with \`pipework init\`, or pass a config object directly.`);
11
+ }
12
+ const configUrl = pathToFileURL(configPath).href;
13
+ const mod = await import(configUrl);
14
+ const raw = mod['default'] ?? mod;
15
+ if (typeof raw !== 'object' || raw === null) {
16
+ throw new ConfigError(`${CONFIG_FILENAME} must export a config object as its default export.`, `Export your config with: export default { databases: { ... } }`);
17
+ }
18
+ return raw;
19
+ }
20
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/config/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,eAAe,GAAG,oBAAoB,CAAA;AAE5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAY;IAC/C,MAAM,IAAI,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;IAEjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,WAAW,CACnB,MAAM,eAAe,aAAa,IAAI,GAAG,EACzC,sEAAsE,CACvE,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAA;IAChD,MAAM,GAAG,GAA4B,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;IAC5D,MAAM,GAAG,GAAY,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAA;IAE1C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,WAAW,CACnB,GAAG,eAAe,qDAAqD,EACvE,gEAAgE,CACjE,CAAA;IACH,CAAC;IAED,OAAO,GAAgB,CAAA;AACzB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { trunkConfigSchema, type Blueprint, type DatabaseConfig, type TestConfig, type Environment, type IsolationStrategy } from './schema.js';
2
2
  export { loadConfig, type ResolvedConfig, type ResolvedDatabase } from './load.js';
3
3
  export { resolveEnvironment, ConfigError } from './resolve.js';
4
+ export { discoverConfig } from './discover.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/I,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/I,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA"}
@@ -1,4 +1,5 @@
1
1
  export { trunkConfigSchema } from './schema.js';
2
2
  export { loadConfig } from './load.js';
3
3
  export { resolveEnvironment, ConfigError } from './resolve.js';
4
+ export { discoverConfig } from './discover.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAkG,MAAM,aAAa,CAAA;AAC/I,OAAO,EAAE,UAAU,EAA8C,MAAM,WAAW,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAkG,MAAM,aAAa,CAAA;AAC/I,OAAO,EAAE,UAAU,EAA8C,MAAM,WAAW,CAAA;AAClF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA"}
@@ -13,7 +13,7 @@ export function loadConfig(raw) {
13
13
  function buildResolved(config, environment) {
14
14
  const dbMap = new Map();
15
15
  for (const [name, dbConfig] of Object.entries(config.databases)) {
16
- const url = resolveDbUrl(dbConfig.url, dbConfig.testUrl, environment);
16
+ const url = resolveDbUrl(dbConfig.url, dbConfig.testUrl, environment, name);
17
17
  dbMap.set(name, resolveDatabase(name, dbConfig, url));
18
18
  }
19
19
  const declaredNames = [...dbMap.keys()];
@@ -1 +1 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiF,MAAM,aAAa,CAAA;AAC9H,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAqB5E,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/F,MAAM,IAAI,WAAW,CACnB,gCAAgC,MAAM,EAAE,EACxC,4DAA4D,CAC7D,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAA;IAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAA;IAC9D,OAAO,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB,EAAE,WAAwB;IAChE,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAA;IAEjD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACrE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAEvC,OAAO;QACL,GAAG,EAAE,MAAM;QACX,WAAW;QAEX,QAAQ,CAAC,IAAa;YACpB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/B,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAE,CAAE,CAAA;gBACtC,CAAC;gBACD,MAAM,IAAI,WAAW,CACnB,6DAA6D,EAC7D,uBAAuB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,aAAa,CAAC,CAAC,CAAC,+BAA+B,CAChH,CAAA;YACH,CAAC;YACD,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;gBACpD,MAAM,IAAI,GAAG,UAAU,KAAK,IAAI;oBAC9B,CAAC,CAAC,iBAAiB,UAAU,0BAA0B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACjF,CAAC,CAAC,uBAAuB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;gBACrD,MAAM,IAAI,WAAW,CAAC,qBAAqB,IAAI,IAAI,EAAE,IAAI,CAAC,CAAA;YAC5D,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC;QAED,SAAS;YACP,OAAO,KAAK,CAAA;QACd,CAAC;QAED,aAAa;YACX,OAAO,aAAa,CAAA;QACtB,CAAC;QAED,mBAAmB;YACjB,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,aAAa,CAAC,CAAC,CAAE,CAAA;YAC1B,CAAC;YACD,MAAM,IAAI,WAAW,CACnB,6DAA6D,EAC7D,uBAAuB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClD,CAAA;QACH,CAAC;QAED,iBAAiB,CAAC,MAAc;YAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;YACzD,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAA;YACvB,OAAO,MAAM,CAAC,IAAI,EAAE,SAAS,IAAI,aAAa,CAAA;QAChD,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,MAAsB,EAAE,GAAW;IACxE,OAAO;QACL,IAAI;QACJ,GAAG;QACH,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;QACnC,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,yBAAyB,IAAI,EAAE;QACxE,IAAI,EAAE;YACJ,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;YAC3B,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE;SAC5C;KACF,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,UAAoB;IACvD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAExC,IAAI,IAAI,GAAkB,IAAI,CAAA;IAC9B,IAAI,YAAY,GAAG,QAAQ,CAAA;IAE3B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;QACnE,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;YAC5E,YAAY,GAAG,CAAC,CAAA;YAChB,IAAI,GAAG,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS;IACvC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;IAClB,MAAM,EAAE,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAElG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1C,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAClB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,CAAC,EAClB,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,EAClB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAC1B,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { loadConfig, ConfigError } from './index.js';
2
+ import type { Blueprint } from './schema.js';
3
+ export declare function defineConfig(config: Blueprint): Blueprint;
2
4
  export declare const config: {
3
5
  load: typeof loadConfig;
4
6
  configSchema: import("zod/v4").ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/config/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,WAAW,EAAE,MAAM,YAAY,CAAA;AAEvE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIlB,CAAA"}
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/config/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,WAAW,EAAE,MAAM,YAAY,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAEzD;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIlB,CAAA"}
@@ -1,4 +1,7 @@
1
1
  import { loadConfig, trunkConfigSchema, ConfigError } from './index.js';
2
+ export function defineConfig(config) {
3
+ return config;
4
+ }
2
5
  export const config = {
3
6
  load: loadConfig,
4
7
  configSchema: trunkConfigSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/config/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEvE,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,iBAAiB;IAC/B,WAAW;CACZ,CAAA"}
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/config/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAGvE,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC5C,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,iBAAiB;IAC/B,WAAW;CACZ,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { Environment } from './schema.js';
2
2
  export declare function resolveEnvironment(): Environment;
3
- export declare function resolveDbUrl(envVarName: string, testEnvVarName: string | undefined, environment: Environment): string;
3
+ export declare function resolveDbUrl(envVarName: string, testEnvVarName: string | undefined, environment: Environment, dbName?: string): string;
4
4
  export declare class ConfigError extends Error {
5
5
  readonly hint: string;
6
6
  constructor(message: string, hint: string);
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,wBAAgB,kBAAkB,IAAI,WAAW,CAWhD;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAoBrH;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAgB,IAAI,EAAE,MAAM,CAAA;gBAEhB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,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;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAgB,IAAI,EAAE,MAAM,CAAA;gBAEhB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C"}
@@ -1,5 +1,5 @@
1
1
  export function resolveEnvironment() {
2
- const explicit = process.env['TRUNK_ENV'];
2
+ const explicit = process.env['PIPEWORK_ENV'];
3
3
  if (explicit === 'test' || explicit === 'development' || explicit === 'production') {
4
4
  return explicit;
5
5
  }
@@ -10,14 +10,22 @@ export function resolveEnvironment() {
10
10
  return 'production';
11
11
  return 'development';
12
12
  }
13
- export function resolveDbUrl(envVarName, testEnvVarName, environment) {
13
+ export function resolveDbUrl(envVarName, testEnvVarName, environment, dbName) {
14
14
  if (environment === 'test') {
15
- if (testEnvVarName !== undefined) {
16
- const value = process.env[testEnvVarName];
17
- if (value !== undefined && value !== '')
18
- return value;
19
- throw new ConfigError(`Missing test database URL: environment variable "${testEnvVarName}" is not set.`, `Set ${testEnvVarName} in your .env file or environment.`);
15
+ if (testEnvVarName === undefined) {
16
+ throw new ConfigError(`Database "${dbName ?? envVarName}" has no testUrl configured, but environment is "test".`, `Add testUrl to your database config:\n\n` +
17
+ ` databases: {\n` +
18
+ ` ${dbName ?? 'app'}: {\n` +
19
+ ` url: '${envVarName}',\n` +
20
+ ` testUrl: '${envVarName}_TEST', // <-- add this\n` +
21
+ ` },\n` +
22
+ ` }\n\n` +
23
+ `Then set ${envVarName}_TEST in your environment.`);
20
24
  }
25
+ const value = process.env[testEnvVarName];
26
+ if (value !== undefined && value !== '')
27
+ return value;
28
+ throw new ConfigError(`Missing test database URL: environment variable "${testEnvVarName}" is not set.`, `Set ${testEnvVarName} in your .env file or environment.`);
21
29
  }
22
30
  const value = process.env[envVarName];
23
31
  if (value !== undefined && value !== '')
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACzC,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;IAC3G,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YACzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;gBAAE,OAAO,KAAK,CAAA;YAErD,MAAM,IAAI,WAAW,CACnB,oDAAoD,cAAc,eAAe,EACjF,OAAO,cAAc,oCAAoC,CAC1D,CAAA;QACH,CAAC;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;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpB,IAAI,CAAQ;IAE5B,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,cAAc,OAAO,eAAe,IAAI,IAAI,CAAC,CAAA;QACnD,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAEA,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;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpB,IAAI,CAAQ;IAE5B,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,cAAc,OAAO,eAAe,IAAI,IAAI,CAAC,CAAA;QACnD,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -47,7 +47,7 @@ export { lifecycle } from './lifecycle/namespace.js';
47
47
  export type { LifecycleConfig, StartupHook, ShutdownHook, HealthCheck, HealthCheckResult, HealthStatus, StartupOptions } from './lifecycle/index.js';
48
48
  export { errors } from './errors/namespace.js';
49
49
  export { PipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError } from './errors/index.js';
50
- export { config } from './config/namespace.js';
50
+ export { config, defineConfig } from './config/namespace.js';
51
51
  export type { ResolvedConfig, ResolvedDatabase, Blueprint, DatabaseConfig, TestConfig, Environment, IsolationStrategy } from './config/index.js';
52
52
  export { ConfigError } from './config/index.js';
53
53
  export { log } from './log/namespace.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@ export { openapi } from './openapi/namespace.js';
20
20
  export { lifecycle } from './lifecycle/namespace.js';
21
21
  export { errors } from './errors/namespace.js';
22
22
  export { PipeworkError, NotFoundError, UnauthorizedError, ForbiddenError, ValidationError, ConflictError } from './errors/index.js';
23
- export { config } from './config/namespace.js';
23
+ export { config, defineConfig } from './config/namespace.js';
24
24
  export { ConfigError } from './config/index.js';
25
25
  export { log } from './log/namespace.js';
26
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAG9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAI9C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAIhD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAO1C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAQ1C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAI1C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAG9C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAI1C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAG5C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAK1C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAI5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAKhD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAIlD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAIpD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAIlD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAIpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EACtE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAG9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAI9C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAIhD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAO1C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAQ1C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAI1C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAG9C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAI1C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAG5C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAK1C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAI5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAKhD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAIlD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAIpD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAIlD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAIpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EACtE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAG5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA"}
@@ -1,3 +1,3 @@
1
- export type { enum, function, null, undefined, void } from 'zod/v4';
1
+ export type { function, null, undefined, void, enum } from 'zod/v4';
2
2
  export { _function, any, array, bigint, boolean, custom, date, file, int, json, lazy, literal, map, nan, nativeEnum, never, number, object, promise, record, set, string, symbol, tuple, unknown } from 'zod/v4';
3
3
  //# sourceMappingURL=type-constructor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type-constructor.d.ts","sourceRoot":"","sources":["../../../src/schema/generated/type-constructor.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA"}
1
+ {"version":3,"file":"type-constructor.d.ts","sourceRoot":"","sources":["../../../src/schema/generated/type-constructor.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA"}
@@ -2,4 +2,7 @@
2
2
  // Run: node scripts/scaffold-namespace.js generate manifests/zod--v4.json
3
3
  // Manual symbols are not included — they live in separate files.
4
4
  export { _function, any, array, bigint, boolean, custom, date, file, int, json, lazy, literal, map, nan, nativeEnum, never, number, object, promise, record, set, string, symbol, tuple, unknown } from 'zod/v4';
5
+ // Reserved words — runtime values exist but can't be re-exported as identifiers.
6
+ // Provide manually in the namespace file (e.g. `enum: z.enum`):
7
+ // enum
5
8
  //# sourceMappingURL=type-constructor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"type-constructor.js","sourceRoot":"","sources":["../../../src/schema/generated/type-constructor.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,0EAA0E;AAC1E,iEAAiE;AAGjE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA"}
1
+ {"version":3,"file":"type-constructor.js","sourceRoot":"","sources":["../../../src/schema/generated/type-constructor.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,0EAA0E;AAC1E,iEAAiE;AAGjE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAEhN,iFAAiF;AACjF,gEAAgE;AAChE,SAAS"}
@@ -21,6 +21,7 @@ export declare const schema: {
21
21
  readonly tableCreator: typeof schemaFeatures.tableCreator;
22
22
  readonly withReplicas: <HKT extends import("drizzle-orm/pg-core").PgQueryResultHKT, TFullSchema extends Record<string, unknown>, TSchema extends import("drizzle-orm").TablesRelationalConfig, Q extends import("drizzle-orm/pg-core").PgDatabase<HKT, TFullSchema, TSchema extends Record<string, unknown> ? import("drizzle-orm").ExtractTablesWithRelations<TFullSchema> : TSchema>>(primary: Q, replicas: [Q, ...Q[]], getReplica?: (replicas: Q[]) => Q) => import("drizzle-orm/pg-core").PgWithReplicas<Q>;
23
23
  readonly check: {
24
+ readonly enum: typeof z.enum;
24
25
  readonly coerce: typeof z.coerce;
25
26
  readonly parse: typeof parse;
26
27
  readonly tryParse: typeof tryParse;
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/schema/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAM1B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAE1D,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC/C,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAgBlD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYT,CAAA"}
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/schema/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAM1B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAE1D,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC/C,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAiBlD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYT,CAAA"}
@@ -18,6 +18,7 @@ const check = {
18
18
  ...formats,
19
19
  ...encoding,
20
20
  ...errors,
21
+ enum: z.enum,
21
22
  coerce: z.coerce,
22
23
  parse,
23
24
  tryParse,
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/schema/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,KAAK,gBAAgB,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,8DAA8D;AAC9D,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAK1D,MAAM,KAAK,GAAG;IACZ,GAAG,gBAAgB;IACnB,GAAG,WAAW;IACd,GAAG,OAAO;IACV,GAAG,QAAQ;IACX,GAAG,MAAM;IACT,MAAM,EAAE,CAAC,CAAC,MAAM;IAEhB,KAAK;IACL,QAAQ;IACR,YAAY;IACZ,OAAO;CACC,CAAA;AAEV,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,2BAA2B;IAC3B,KAAK;IAEL,wBAAwB;IACxB,GAAG,cAAc;IAEjB,eAAe;IACf,GAAG;IAEH,4BAA4B;IAC5B,GAAG;CACK,CAAA"}
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/schema/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,KAAK,gBAAgB,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAChD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,8DAA8D;AAC9D,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,cAAc,MAAM,0BAA0B,CAAA;AAK1D,MAAM,KAAK,GAAG;IACZ,GAAG,gBAAgB;IACnB,GAAG,WAAW;IACd,GAAG,OAAO;IACV,GAAG,QAAQ;IACX,GAAG,MAAM;IACT,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,MAAM,EAAE,CAAC,CAAC,MAAM;IAEhB,KAAK;IACL,QAAQ;IACR,YAAY;IACZ,OAAO;CACC,CAAA;AAEV,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,2BAA2B;IAC3B,KAAK;IAEL,wBAAwB;IACxB,GAAG,cAAc;IAEjB,eAAe;IACf,GAAG;IAEH,4BAA4B;IAC5B,GAAG;CACK,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auto-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-setup.d.ts","sourceRoot":"","sources":["../../src/test/auto-setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { beforeAll, afterAll, beforeEach, afterEach } from 'vitest';
2
+ import { discoverConfig } from '../config/discover.js';
3
+ import { createPipework } from '../pipework.js';
4
+ import { setupTestDatabases, teardownTestDatabases } from './setup.js';
5
+ import { beginTestIsolation, endTestIsolation } from './plugin.js';
6
+ import { _setTestState } from './vitest.js';
7
+ let _testContext = null;
8
+ const config = await discoverConfig();
9
+ const instance = createPipework(config);
10
+ _setTestState(instance);
11
+ beforeAll(async () => {
12
+ await setupTestDatabases(instance);
13
+ });
14
+ afterAll(async () => {
15
+ await instance.pool.closeAll();
16
+ await teardownTestDatabases();
17
+ });
18
+ beforeEach(async () => {
19
+ _testContext = await beginTestIsolation(instance);
20
+ _setTestState(instance, _testContext);
21
+ });
22
+ afterEach(async () => {
23
+ if (_testContext) {
24
+ await endTestIsolation(instance, _testContext);
25
+ _testContext = null;
26
+ _setTestState(instance, null);
27
+ }
28
+ });
29
+ //# sourceMappingURL=auto-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-setup.js","sourceRoot":"","sources":["../../src/test/auto-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,IAAI,YAAY,GAAuB,IAAI,CAAA;AAE3C,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;AACrC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;AAEvC,aAAa,CAAC,QAAQ,CAAC,CAAA;AAEvB,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IAC9B,MAAM,qBAAqB,EAAE,CAAA;AAC/B,CAAC,CAAC,CAAA;AAEF,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,YAAY,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACjD,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AACvC,CAAC,CAAC,CAAA;AAEF,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC9C,YAAY,GAAG,IAAI,CAAA;QACnB,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC,CAAC,CAAA"}
@@ -1,7 +1,9 @@
1
1
  import type { DB } from '../db/index.js';
2
2
  import type { Blueprint } from '../config/index.js';
3
3
  import type { Manifold } from '../pipework.js';
4
+ import { type TestContext } from './plugin.js';
4
5
  export { type TestContext, type TestDatabaseConnections } from './plugin.js';
6
+ export declare function _setTestState(instance: Manifold, testContext?: TestContext | null): void;
5
7
  export declare function setupPipeworkTests(configOrInstance: Blueprint | Manifold): Manifold;
6
8
  export declare function useTestDb(name?: string): DB;
7
9
  export declare function useTestInstance(): Manifold;
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAK9C,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAK5E,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAyBnF;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAiB3C;AAED,wBAAgB,eAAe,IAAI,QAAQ,CAK1C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAM1C"}
1
+ {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAG9C,OAAO,EAAyE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAErH,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAK5E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAKxF;AAED,wBAAgB,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAyBnF;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAkB3C;AAED,wBAAgB,eAAe,IAAI,QAAQ,CAS1C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAU1C"}
@@ -5,6 +5,12 @@ import { beginTestIsolation, endTestIsolation, createTestContext, runInContext }
5
5
  export {} from './plugin.js';
6
6
  let _testContext = null;
7
7
  let _instance = null;
8
+ export function _setTestState(instance, testContext) {
9
+ _instance = instance;
10
+ if (testContext !== undefined) {
11
+ _testContext = testContext;
12
+ }
13
+ }
8
14
  export function setupPipeworkTests(configOrInstance) {
9
15
  const instance = isInstance(configOrInstance) ? configOrInstance : createPipework(configOrInstance);
10
16
  _instance = instance;
@@ -28,8 +34,9 @@ export function setupPipeworkTests(configOrInstance) {
28
34
  }
29
35
  export function useTestDb(name) {
30
36
  if (!_testContext || !_instance) {
31
- throw new Error('[pipework] No test context available. Are you inside a test that called setupPipeworkTests()?\n\n' +
32
- ' Hint: Call setupPipeworkTests(config) at the top of your test file or in a setup file.\n');
37
+ throw new Error('[pipework] No test context available.\n\n' +
38
+ ' Add to your vitest.config.ts:\n' +
39
+ ' test: { setupFiles: [\'pipework/test/setup\'] }\n');
33
40
  }
34
41
  const resolvedName = name ?? _instance.config.defaultDatabaseName();
35
42
  const db = _testContext.db[resolvedName];
@@ -41,13 +48,17 @@ export function useTestDb(name) {
41
48
  }
42
49
  export function useTestInstance() {
43
50
  if (!_instance) {
44
- throw new Error('[pipework] No test instance. Call setupPipeworkTests() first.');
51
+ throw new Error('[pipework] No test instance available.\n\n' +
52
+ ' Add to your vitest.config.ts:\n' +
53
+ ' test: { setupFiles: [\'pipework/test/setup\'] }\n');
45
54
  }
46
55
  return _instance;
47
56
  }
48
57
  export function withFlow(fn) {
49
58
  if (!_testContext || !_instance) {
50
- throw new Error('[pipework] No test context. Call setupPipeworkTests() first.');
59
+ throw new Error('[pipework] No test context available.\n\n' +
60
+ ' Add to your vitest.config.ts:\n' +
61
+ ' test: { setupFiles: [\'pipework/test/setup\'] }\n');
51
62
  }
52
63
  const ctx = createTestContext(_instance, _testContext);
53
64
  return runInContext(ctx, fn);
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAInE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAoB,MAAM,aAAa,CAAA;AAErH,OAAO,EAAkD,MAAM,aAAa,CAAA;AAE5E,IAAI,YAAY,GAAuB,IAAI,CAAA;AAC3C,IAAI,SAAS,GAAoB,IAAI,CAAA;AAErC,MAAM,UAAU,kBAAkB,CAAC,gBAAsC;IACvE,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;IACnG,SAAS,GAAG,QAAQ,CAAA;IAEpB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC9B,MAAM,qBAAqB,EAAE,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,YAAY,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YAC9C,YAAY,GAAG,IAAI,CAAA;QACrB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,mGAAmG;YACnG,4FAA4F,CAC7F,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAA;IACnE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAA;IACxC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzD,MAAM,IAAI,KAAK,CACb,gCAAgC,YAAY,iBAAiB,SAAS,EAAE,CACzE,CAAA;IACH,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,EAAW;IACrC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACtD,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,CAAuB;IACzC,OAAO,MAAM,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAA;AACrC,CAAC"}
1
+ {"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,8 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
- "packageManager": "pnpm@9.15.4",
7
6
  "license": "MIT",
8
7
  "publishConfig": {
9
8
  "access": "public"
@@ -32,6 +31,10 @@
32
31
  "./test": {
33
32
  "import": "./dist/test/index.js",
34
33
  "types": "./dist/test/index.d.ts"
34
+ },
35
+ "./test/setup": {
36
+ "import": "./dist/test/auto-setup.js",
37
+ "types": "./dist/test/auto-setup.d.ts"
35
38
  }
36
39
  },
37
40
  "main": "./dist/index.js",
@@ -44,18 +47,6 @@
44
47
  "bin": {
45
48
  "pipework": "bin/pipework.js"
46
49
  },
47
- "scripts": {
48
- "build": "tsc",
49
- "type-check": "tsc --noEmit",
50
- "lint": "eslint src --max-warnings 0",
51
- "lint:boundaries": "node scripts/check-boundaries.js",
52
- "test": "vitest run",
53
- "test:isolation": "vitest run --config vitest.isolation.config.ts",
54
- "test:property": "vitest run --config vitest.property.config.ts",
55
- "test:stress": "vitest run --config vitest.stress.config.ts",
56
- "test:all": "vitest run && vitest run --config vitest.isolation.config.ts && vitest run --config vitest.property.config.ts && vitest run --config vitest.stress.config.ts",
57
- "mutate": "stryker run"
58
- },
59
50
  "pipework": {
60
51
  "boundaries": {
61
52
  "rules": {
@@ -134,5 +125,17 @@
134
125
  "pino-pretty": "^13.1.3",
135
126
  "typescript": "^6.0.3",
136
127
  "vitest": "^4.1.5"
128
+ },
129
+ "scripts": {
130
+ "build": "tsc",
131
+ "type-check": "tsc --noEmit",
132
+ "lint": "eslint src --max-warnings 0",
133
+ "lint:boundaries": "node scripts/check-boundaries.js",
134
+ "test": "vitest run",
135
+ "test:isolation": "vitest run --config vitest.isolation.config.ts",
136
+ "test:property": "vitest run --config vitest.property.config.ts",
137
+ "test:stress": "vitest run --config vitest.stress.config.ts",
138
+ "test:all": "vitest run && vitest run --config vitest.isolation.config.ts && vitest run --config vitest.property.config.ts && vitest run --config vitest.stress.config.ts",
139
+ "mutate": "stryker run"
137
140
  }
138
- }
141
+ }