pipework 0.1.4 → 0.2.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.
- package/README.md +21 -14
- package/dist/cli/commands/generate.d.ts +7 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +50 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +1 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.d.ts +8 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +33 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/test.d.ts +7 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +37 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +50 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/discover.js +20 -5
- package/dist/config/discover.js.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/load.d.ts +7 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +6 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/namespace.d.ts +21 -15
- package/dist/config/namespace.d.ts.map +1 -1
- package/dist/config/schema.d.ts +13 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +7 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/context/create.d.ts +5 -1
- package/dist/context/create.d.ts.map +1 -1
- package/dist/context/create.js +3 -3
- package/dist/context/create.js.map +1 -1
- package/dist/context/guard.d.ts.map +1 -1
- package/dist/context/guard.js +6 -1
- package/dist/context/guard.js.map +1 -1
- package/dist/db/index.d.ts +1 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/instrumentation.d.ts +5 -0
- package/dist/db/instrumentation.d.ts.map +1 -0
- package/dist/db/instrumentation.js +44 -0
- package/dist/db/instrumentation.js.map +1 -0
- package/dist/db/pool.d.ts +2 -1
- package/dist/db/pool.d.ts.map +1 -1
- package/dist/db/pool.js +4 -1
- package/dist/db/pool.js.map +1 -1
- package/dist/di/builder.d.ts +3 -0
- package/dist/di/builder.d.ts.map +1 -1
- package/dist/di/builder.js +4 -1
- package/dist/di/builder.js.map +1 -1
- package/dist/di/index.d.ts +1 -0
- package/dist/di/index.d.ts.map +1 -1
- package/dist/di/index.js +1 -0
- package/dist/di/index.js.map +1 -1
- package/dist/di/resolve.d.ts.map +1 -1
- package/dist/di/resolve.js +9 -5
- package/dist/di/resolve.js.map +1 -1
- package/dist/di/types.d.ts +1 -0
- package/dist/di/types.d.ts.map +1 -1
- package/dist/di/types.js +1 -1
- package/dist/di/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/migrate/generate.d.ts +9 -0
- package/dist/migrate/generate.d.ts.map +1 -0
- package/dist/migrate/generate.js +145 -0
- package/dist/migrate/generate.js.map +1 -0
- package/dist/migrate/index.d.ts +1 -0
- package/dist/migrate/index.d.ts.map +1 -1
- package/dist/migrate/index.js +1 -0
- package/dist/migrate/index.js.map +1 -1
- package/dist/pipework.js +3 -3
- package/dist/pipework.js.map +1 -1
- package/dist/test/auto-setup.js +6 -1
- package/dist/test/auto-setup.js.map +1 -1
- package/dist/test/context.d.ts.map +1 -1
- package/dist/test/context.js +10 -0
- package/dist/test/context.js.map +1 -1
- package/dist/test/index.d.ts +3 -1
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +2 -0
- package/dist/test/index.js.map +1 -1
- package/dist/test/plugin.d.ts +1 -1
- package/dist/test/plugin.d.ts.map +1 -1
- package/dist/test/plugin.js +2 -2
- package/dist/test/plugin.js.map +1 -1
- package/dist/test/vitest-config.d.ts +17 -0
- package/dist/test/vitest-config.d.ts.map +1 -0
- package/dist/test/vitest-config.js +28 -0
- package/dist/test/vitest-config.js.map +1 -0
- package/dist/test/vitest-plugin.d.ts +7 -0
- package/dist/test/vitest-plugin.d.ts.map +1 -0
- package/dist/test/vitest-plugin.js +13 -0
- package/dist/test/vitest-plugin.js.map +1 -0
- package/dist/test/vitest.d.ts +6 -0
- package/dist/test/vitest.d.ts.map +1 -1
- package/dist/test/vitest.js +31 -13
- package/dist/test/vitest.js.map +1 -1
- package/package.json +22 -2
package/README.md
CHANGED
|
@@ -31,7 +31,14 @@ Pipework eliminates the infrastructure decisions that every SaaS backend makes i
|
|
|
31
31
|
import { createManifold } from 'pipework'
|
|
32
32
|
|
|
33
33
|
export default createManifold({
|
|
34
|
-
databases: {
|
|
34
|
+
databases: {
|
|
35
|
+
app: {
|
|
36
|
+
url: 'DATABASE_URL',
|
|
37
|
+
testUrl: 'DATABASE_URL_TEST',
|
|
38
|
+
schema: './src/db/schema.ts',
|
|
39
|
+
migrations: './migrations/app',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
35
42
|
})
|
|
36
43
|
```
|
|
37
44
|
|
|
@@ -41,12 +48,12 @@ import pipework from '../pipework.config.js'
|
|
|
41
48
|
import { http, fitting, schema } from 'pipework'
|
|
42
49
|
|
|
43
50
|
const createNote = fitting
|
|
44
|
-
.use(
|
|
51
|
+
.use()
|
|
45
52
|
.auth<{ userId: string; tenantId: string }>()
|
|
46
53
|
.input(schema.check.object({ title: schema.check.string(), body: schema.check.string() }))
|
|
47
54
|
.route('POST', '/notes')
|
|
48
|
-
.fit(async ({
|
|
49
|
-
const [note] = await
|
|
55
|
+
.fit(async ({ db, auth, input }) => {
|
|
56
|
+
const [note] = await db
|
|
50
57
|
.insert(notes)
|
|
51
58
|
.values({ ...input, tenantId: auth.tenantId })
|
|
52
59
|
.returning()
|
|
@@ -97,11 +104,12 @@ const rows = await db.execute(pipe.sql`SELECT * FROM users`)
|
|
|
97
104
|
|
|
98
105
|
## Testing
|
|
99
106
|
|
|
100
|
-
|
|
107
|
+
One-liner vitest config. Put your connection string in `.env.test`:
|
|
101
108
|
|
|
102
109
|
```typescript
|
|
103
110
|
// vitest.config.ts
|
|
104
|
-
|
|
111
|
+
import { defineTestConfig } from 'pipework/vitest'
|
|
112
|
+
export default defineTestConfig()
|
|
105
113
|
```
|
|
106
114
|
|
|
107
115
|
```bash
|
|
@@ -109,27 +117,26 @@ test: { setupFiles: ['pipework/test/setup'] }
|
|
|
109
117
|
DATABASE_URL_TEST=postgresql://user:pass@localhost:5432/myapp_test
|
|
110
118
|
```
|
|
111
119
|
|
|
112
|
-
|
|
120
|
+
Add `"pipework/globals"` to your tsconfig types for the `db` global, then write tests directly:
|
|
113
121
|
|
|
114
122
|
```typescript
|
|
115
123
|
// tests/notes.test.ts
|
|
116
|
-
import { useTestDb, withFlow } from 'pipework/test'
|
|
117
124
|
import { pipe } from 'pipework'
|
|
118
125
|
|
|
119
126
|
it('creates a note', async () => {
|
|
120
|
-
|
|
121
|
-
await
|
|
122
|
-
|
|
123
|
-
const rows = await db.execute(pipe.sql`SELECT * FROM notes`)
|
|
124
|
-
expect(rows).toHaveLength(1)
|
|
125
|
-
})
|
|
127
|
+
await db.execute(pipe.sql`INSERT INTO notes (title) VALUES ('Test')`)
|
|
128
|
+
const rows = await db.execute(pipe.sql`SELECT * FROM notes`)
|
|
129
|
+
expect(rows).toHaveLength(1)
|
|
126
130
|
})
|
|
127
131
|
```
|
|
128
132
|
|
|
133
|
+
Every test runs in a rollback transaction. No cleanup, no state leaks. Run with `pipework test` for automatic database setup/teardown, or use `pnpm vitest` directly.
|
|
134
|
+
|
|
129
135
|
## Documentation
|
|
130
136
|
|
|
131
137
|
- **[Getting Started](https://github.com/theconstructory/pipework/blob/main/docs/getting-started.md)** — zero to running server
|
|
132
138
|
- **Guides**
|
|
139
|
+
- [Monorepo](https://github.com/theconstructory/pipework/blob/main/docs/guides/monorepo.md)
|
|
133
140
|
- [Configuration](https://github.com/theconstructory/pipework/blob/main/docs/guides/configuration.md)
|
|
134
141
|
- [Handlers](https://github.com/theconstructory/pipework/blob/main/docs/guides/handlers.md)
|
|
135
142
|
- [Auth & Tenants](https://github.com/theconstructory/pipework/blob/main/docs/guides/auth-and-tenants.md)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;IACtB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C7E"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { info, success, warn, error as logError } from '../output.js';
|
|
2
|
+
export async function generate(options) {
|
|
3
|
+
const { discoverInstance } = await import('../../config/discover.js');
|
|
4
|
+
const { generateForDatabase } = await import('../../migrate/generate.js');
|
|
5
|
+
let instance;
|
|
6
|
+
try {
|
|
7
|
+
instance = await discoverInstance(options.cwd);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
logError('No pipework.config.ts found.\n\n' +
|
|
11
|
+
' Run `pipework init` to create one.\n');
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
if (options.db !== undefined) {
|
|
16
|
+
const dbConfig = instance.config.database(options.db);
|
|
17
|
+
info(`Generating migration for database: ${options.db}`);
|
|
18
|
+
const result = await generateForDatabase(dbConfig, options.cwd, options.name);
|
|
19
|
+
if (result.migrationFile === null) {
|
|
20
|
+
warn(`${options.db}: no schema changes detected`);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
success(`${options.db}: generated ${result.migrationFile}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
info('Generating migrations for all databases...');
|
|
28
|
+
let generated = 0;
|
|
29
|
+
for (const [, dbConfig] of instance.config.databases()) {
|
|
30
|
+
if (dbConfig.schema === undefined)
|
|
31
|
+
continue;
|
|
32
|
+
const result = await generateForDatabase(dbConfig, options.cwd, options.name);
|
|
33
|
+
if (result.migrationFile === null) {
|
|
34
|
+
warn(`${dbConfig.name}: no schema changes detected`);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
success(`${dbConfig.name}: generated ${result.migrationFile}`);
|
|
38
|
+
generated++;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (generated === 0) {
|
|
42
|
+
warn('No schema changes detected in any database.');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
await instance.pool.closeAll();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,cAAc,CAAA;AAQrE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAA+B;IAC5D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;IACrE,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;IAEzE,IAAI,QAAQ,CAAA;IACZ,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,CACN,kCAAkC;YAClC,wCAAwC,CACzC,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACrD,IAAI,CAAC,sCAAsC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;YACxD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;YAC7E,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;gBAClC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,8BAA8B,CAAC,CAAA;YACnD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE,eAAe,MAAM,CAAC,aAAa,EAAE,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,4CAA4C,CAAC,CAAA;YAClD,IAAI,SAAS,GAAG,CAAC,CAAA;YACjB,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;gBACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;oBAAE,SAAQ;gBAC3C,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC7E,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;oBAClC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,8BAA8B,CAAC,CAAA;gBACtD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,eAAe,MAAM,CAAC,aAAa,EAAE,CAAC,CAAA;oBAC9D,SAAS,EAAE,CAAA;gBACb,CAAC;YACH,CAAC;YACD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,6CAA6C,CAAC,CAAA;YACrD,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAkBA,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiBtC"}
|
|
@@ -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
|
|
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;;;;;;;;;;;;CAYvB,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 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCnE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { bold, success } from '../output.js';
|
|
5
|
+
export async function run(options) {
|
|
6
|
+
const scriptPath = resolve(options.cwd, options.script);
|
|
7
|
+
if (!existsSync(scriptPath)) {
|
|
8
|
+
throw new Error(`Script not found: ${options.script}\n\n` +
|
|
9
|
+
` Provide a path relative to the project root.\n` +
|
|
10
|
+
` Example: ${bold('pipework run ./scripts/seed.ts')}\n`);
|
|
11
|
+
}
|
|
12
|
+
const { loadEnvFiles } = await import('../../config/env.js');
|
|
13
|
+
const { discoverInstance } = await import('../../config/discover.js');
|
|
14
|
+
const { createJobContext } = await import('../../context/create.js');
|
|
15
|
+
const { runInContext } = await import('../../context/store.js');
|
|
16
|
+
loadEnvFiles(options.cwd);
|
|
17
|
+
const instance = await discoverInstance(options.cwd);
|
|
18
|
+
const ctx = createJobContext({
|
|
19
|
+
instance,
|
|
20
|
+
jobType: options.jobType ?? 'script',
|
|
21
|
+
tenant: options.tenant ?? null,
|
|
22
|
+
});
|
|
23
|
+
try {
|
|
24
|
+
await runInContext(ctx, async () => {
|
|
25
|
+
await import(pathToFileURL(scriptPath).href);
|
|
26
|
+
});
|
|
27
|
+
success(`Script completed: ${options.script}`);
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
await instance.pool.closeAll();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.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;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAS5C,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAA0B;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAEvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,qBAAqB,OAAO,CAAC,MAAM,MAAM;YACzC,kDAAkD;YAClD,cAAc,IAAI,CAAC,gCAAgC,CAAC,IAAI,CACzD,CAAA;IACH,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAC5D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;IACrE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IACpE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;IAE/D,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACzB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEpD,MAAM,GAAG,GAAG,gBAAgB,CAAC;QAC3B,QAAQ;QACR,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;KAC/B,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,qBAAqB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAChD,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC9D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { bold, info, success } from '../output.js';
|
|
3
|
+
export async function test(options) {
|
|
4
|
+
const { loadEnvFiles } = await import('../../config/env.js');
|
|
5
|
+
const { discoverInstance } = await import('../../config/discover.js');
|
|
6
|
+
const { setupTestDatabases, teardownTestDatabases } = await import('../../test/setup.js');
|
|
7
|
+
loadEnvFiles(options.cwd);
|
|
8
|
+
const instance = await discoverInstance(options.cwd);
|
|
9
|
+
info('Setting up test databases...');
|
|
10
|
+
await setupTestDatabases(instance);
|
|
11
|
+
try {
|
|
12
|
+
const args = ['vitest', 'run', ...options.vitestArgs];
|
|
13
|
+
info(`Running: ${bold(args.join(' '))}`);
|
|
14
|
+
const result = spawnSync('npx', args, {
|
|
15
|
+
cwd: options.cwd,
|
|
16
|
+
stdio: 'inherit',
|
|
17
|
+
env: { ...process.env },
|
|
18
|
+
});
|
|
19
|
+
if (result.error !== undefined) {
|
|
20
|
+
throw new Error(`Failed to spawn vitest: ${result.error.message}\n\n` +
|
|
21
|
+
` Ensure vitest is installed as a devDependency.\n` +
|
|
22
|
+
` Example: ${bold('pnpm add -D vitest')}\n`);
|
|
23
|
+
}
|
|
24
|
+
if (result.status !== 0) {
|
|
25
|
+
process.exitCode = result.status ?? 1;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
success('Tests completed.');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
info('Tearing down test databases...');
|
|
33
|
+
await teardownTestDatabases();
|
|
34
|
+
await instance.pool.closeAll();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAQlD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAC5D,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;IACrE,MAAM,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAEzF,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACzB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEpD,IAAI,CAAC,8BAA8B,CAAC,CAAA;IACpC,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAElC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;QACrD,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;QAExC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;YACpC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM;gBACrD,oDAAoD;gBACpD,cAAc,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC7C,CAAA;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,kBAAkB,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,gCAAgC,CAAC,CAAA;QACtC,MAAM,qBAAqB,EAAE,CAAA;QAC7B,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IAChC,CAAC;AACH,CAAC"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAuCA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4GvD"}
|
package/dist/cli/index.js
CHANGED
|
@@ -6,22 +6,34 @@ ${bold('pipework')} — TypeScript framework for multi-tenant SaaS
|
|
|
6
6
|
|
|
7
7
|
${bold('Commands:')}
|
|
8
8
|
init Scaffold pipework.config.ts and migrations directory
|
|
9
|
+
generate Generate SQL migrations from Drizzle schema changes
|
|
9
10
|
migrate Run pending migrations for all databases
|
|
11
|
+
run <script> Execute a script with database context
|
|
12
|
+
test Run tests with automatic database setup
|
|
10
13
|
check Type-check, lint, and boundary enforcement
|
|
11
14
|
dev Start dev server with file watching
|
|
12
15
|
|
|
13
16
|
${bold('Options:')}
|
|
14
17
|
--help, -h Show this help message
|
|
15
18
|
--version, -v Show version
|
|
19
|
+
--name Migration name (used with generate)
|
|
16
20
|
--confirm Required for production migrations
|
|
17
21
|
--allow-destructive Permit destructive DDL (DROP TABLE, DROP COLUMN, etc.)
|
|
18
22
|
--acknowledge-lock Permit operations that acquire heavy locks
|
|
23
|
+
--tenant Tenant ID for tenant-scoped scripts
|
|
24
|
+
--job-type Override job type (default: "script")
|
|
19
25
|
|
|
20
26
|
${bold('Examples:')}
|
|
21
27
|
pipework init
|
|
28
|
+
pipework generate --name add-users
|
|
29
|
+
pipework generate --db app
|
|
22
30
|
pipework migrate --db app
|
|
23
31
|
pipework migrate --confirm # required in production
|
|
24
32
|
pipework dev --port 4000
|
|
33
|
+
pipework run ./scripts/seed.ts
|
|
34
|
+
pipework run ./scripts/backfill.ts --tenant t-123
|
|
35
|
+
pipework test
|
|
36
|
+
pipework test -- --reporter verbose
|
|
25
37
|
`;
|
|
26
38
|
export async function run(argv) {
|
|
27
39
|
const { values, positionals } = parseArgs({
|
|
@@ -31,11 +43,14 @@ export async function run(argv) {
|
|
|
31
43
|
help: { type: 'boolean', short: 'h' },
|
|
32
44
|
version: { type: 'boolean', short: 'v' },
|
|
33
45
|
db: { type: 'string' },
|
|
46
|
+
name: { type: 'string' },
|
|
34
47
|
port: { type: 'string' },
|
|
35
48
|
entry: { type: 'string' },
|
|
36
49
|
confirm: { type: 'boolean' },
|
|
37
50
|
'allow-destructive': { type: 'boolean' },
|
|
38
51
|
'acknowledge-lock': { type: 'boolean' },
|
|
52
|
+
tenant: { type: 'string' },
|
|
53
|
+
'job-type': { type: 'string' },
|
|
39
54
|
},
|
|
40
55
|
});
|
|
41
56
|
if (values.help === true || positionals.length === 0) {
|
|
@@ -60,6 +75,15 @@ export async function run(argv) {
|
|
|
60
75
|
await init(cwd);
|
|
61
76
|
break;
|
|
62
77
|
}
|
|
78
|
+
case 'generate': {
|
|
79
|
+
const { generate } = await import('./commands/generate.js');
|
|
80
|
+
await generate({
|
|
81
|
+
db: values.db,
|
|
82
|
+
name: values.name,
|
|
83
|
+
cwd,
|
|
84
|
+
});
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
63
87
|
case 'migrate': {
|
|
64
88
|
const { migrate } = await import('./commands/migrate.js');
|
|
65
89
|
await migrate({
|
|
@@ -71,6 +95,32 @@ export async function run(argv) {
|
|
|
71
95
|
});
|
|
72
96
|
break;
|
|
73
97
|
}
|
|
98
|
+
case 'run': {
|
|
99
|
+
const scriptPath = positionals[1];
|
|
100
|
+
if (scriptPath === undefined || scriptPath === '') {
|
|
101
|
+
error('Missing script path.');
|
|
102
|
+
process.stderr.write(`\n Usage: ${bold('pipework run <script> [-- args...]')}\n\n`);
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
const { run: runScript } = await import('./commands/run.js');
|
|
106
|
+
await runScript({
|
|
107
|
+
script: scriptPath,
|
|
108
|
+
cwd,
|
|
109
|
+
tenant: values.tenant,
|
|
110
|
+
jobType: values['job-type'],
|
|
111
|
+
});
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
case 'test': {
|
|
115
|
+
const vitestArgs = positionals.slice(1);
|
|
116
|
+
const { test: runTests } = await import('./commands/test.js');
|
|
117
|
+
await runTests({
|
|
118
|
+
cwd,
|
|
119
|
+
db: values.db,
|
|
120
|
+
vitestArgs,
|
|
121
|
+
});
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
74
124
|
case 'check': {
|
|
75
125
|
const { check } = await import('./commands/check.js');
|
|
76
126
|
await check(cwd);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,KAAK,GAAG;EACZ,IAAI,CAAC,UAAU,CAAC;;EAEhB,IAAI,CAAC,WAAW,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/config/discover.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { resolve } from 'node:path';
|
|
1
|
+
import { resolve, dirname } from 'node:path';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { pathToFileURL } from 'node:url';
|
|
4
4
|
import { ConfigError } from './resolve.js';
|
|
5
5
|
const CONFIG_FILENAME = 'pipework.config.ts';
|
|
6
6
|
export async function discoverInstance(cwd) {
|
|
7
|
-
const
|
|
8
|
-
const configPath =
|
|
9
|
-
if (
|
|
10
|
-
throw new ConfigError(`No ${CONFIG_FILENAME} found in ${
|
|
7
|
+
const start = cwd ?? process.cwd();
|
|
8
|
+
const configPath = findConfig(start);
|
|
9
|
+
if (configPath === null) {
|
|
10
|
+
throw new ConfigError(`No ${CONFIG_FILENAME} found in ${start} or any parent directory.`, `Create one with \`pipework init\`, or see the getting-started guide.`);
|
|
11
11
|
}
|
|
12
12
|
const configUrl = pathToFileURL(configPath).href;
|
|
13
13
|
const mod = await import(configUrl);
|
|
@@ -24,4 +24,19 @@ export async function discoverInstance(cwd) {
|
|
|
24
24
|
function isManifold(v) {
|
|
25
25
|
return typeof v === 'object' && v !== null && 'pool' in v && 'config' in v;
|
|
26
26
|
}
|
|
27
|
+
function findConfig(from) {
|
|
28
|
+
let dir = resolve(from);
|
|
29
|
+
let parent = dirname(dir);
|
|
30
|
+
while (dir !== parent) {
|
|
31
|
+
const candidate = resolve(dir, CONFIG_FILENAME);
|
|
32
|
+
if (existsSync(candidate))
|
|
33
|
+
return candidate;
|
|
34
|
+
dir = parent;
|
|
35
|
+
parent = dirname(dir);
|
|
36
|
+
}
|
|
37
|
+
const root = resolve(dir, CONFIG_FILENAME);
|
|
38
|
+
if (existsSync(root))
|
|
39
|
+
return root;
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
27
42
|
//# sourceMappingURL=discover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/config/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/config/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,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,gBAAgB,CAAC,GAAY;IACjD,MAAM,KAAK,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAClC,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IAEpC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,WAAW,CACnB,MAAM,eAAe,aAAa,KAAK,2BAA2B,EAClE,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,QAAQ,GAAY,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAA;IAE/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,WAAW,CACnB,GAAG,eAAe,yDAAyD,EAC3E,mCAAmC;YACnC,iDAAiD;YACjD,qCAAqC;YACrC,oDAAoD;YACpD,QAAQ,CACT,CAAA;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,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;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,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;QAC/C,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;QAC3C,GAAG,GAAG,MAAM,CAAA;QACZ,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { trunkConfigSchema, type Blueprint, type DatabaseConfig, type TestConfig, type Environment, type IsolationStrategy } from './schema.js';
|
|
2
|
-
export { loadConfig, type ResolvedConfig, type ResolvedDatabase } from './load.js';
|
|
1
|
+
export { trunkConfigSchema, type Blueprint, type DatabaseConfig, type TestConfig, type Environment, type IsolationStrategy, type ObservabilityConfig } from './schema.js';
|
|
2
|
+
export { loadConfig, type ResolvedConfig, type ResolvedDatabase, type ResolvedObservability } from './load.js';
|
|
3
3
|
export { resolveEnvironment, ConfigError } from './resolve.js';
|
|
4
4
|
export { discoverInstance } from './discover.js';
|
|
5
5
|
export { loadEnvFiles } from './env.js';
|
|
@@ -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;
|
|
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,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACzK,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAC9G,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA4H,MAAM,aAAa,CAAA;AACzK,OAAO,EAAE,UAAU,EAA0E,MAAM,WAAW,CAAA;AAC9G,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA"}
|
package/dist/config/load.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { type Blueprint, type Environment, type IsolationStrategy } from './schema.js';
|
|
2
|
+
export interface ResolvedObservability {
|
|
3
|
+
readonly slowQueryMs: number;
|
|
4
|
+
readonly logAllQueries: boolean;
|
|
5
|
+
readonly poolMetricsInterval: number;
|
|
6
|
+
}
|
|
2
7
|
export interface ResolvedConfig {
|
|
3
8
|
readonly raw: Blueprint;
|
|
4
9
|
readonly environment: Environment;
|
|
10
|
+
readonly observability: ResolvedObservability;
|
|
5
11
|
database(name?: string): ResolvedDatabase;
|
|
6
12
|
databases(): ReadonlyMap<string, ResolvedDatabase>;
|
|
7
13
|
databaseNames(): readonly string[];
|
|
@@ -11,6 +17,7 @@ export interface ResolvedConfig {
|
|
|
11
17
|
export interface ResolvedDatabase {
|
|
12
18
|
readonly name: string;
|
|
13
19
|
readonly url: string;
|
|
20
|
+
readonly schema: string | string[] | undefined;
|
|
14
21
|
readonly migrations: string | undefined;
|
|
15
22
|
readonly extensions: readonly string[];
|
|
16
23
|
readonly migrationTable: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAuB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAG9H,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;IACvB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,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,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;CACpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAavD"}
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAuB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAG9H,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,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,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,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;CACpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAavD"}
|
package/dist/config/load.js
CHANGED
|
@@ -20,6 +20,11 @@ function buildResolved(config, environment) {
|
|
|
20
20
|
return {
|
|
21
21
|
raw: config,
|
|
22
22
|
environment,
|
|
23
|
+
observability: {
|
|
24
|
+
slowQueryMs: config.observability?.slowQueryMs ?? 500,
|
|
25
|
+
logAllQueries: config.observability?.logAllQueries ?? false,
|
|
26
|
+
poolMetricsInterval: config.observability?.poolMetricsInterval ?? 0,
|
|
27
|
+
},
|
|
23
28
|
database(name) {
|
|
24
29
|
if (name === undefined) {
|
|
25
30
|
if (declaredNames.length === 1) {
|
|
@@ -61,6 +66,7 @@ function resolveDatabase(name, config, url) {
|
|
|
61
66
|
return {
|
|
62
67
|
name,
|
|
63
68
|
url,
|
|
69
|
+
schema: config.schema,
|
|
64
70
|
migrations: config.migrations,
|
|
65
71
|
extensions: config.extensions ?? [],
|
|
66
72
|
migrationTable: config.migrationTable ?? `__pipework_migrations_${name}`,
|
package/dist/config/load.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,37 +3,43 @@ import { discoverInstance } from './discover.js';
|
|
|
3
3
|
export declare const config: {
|
|
4
4
|
load: typeof loadConfig;
|
|
5
5
|
discover: typeof discoverInstance;
|
|
6
|
-
configSchema: import("zod
|
|
7
|
-
databases: import("zod
|
|
8
|
-
url: import("zod
|
|
9
|
-
testUrl: import("zod
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
configSchema: import("zod").ZodObject<{
|
|
7
|
+
databases: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
|
|
8
|
+
url: import("zod").ZodString;
|
|
9
|
+
testUrl: import("zod").ZodOptional<import("zod").ZodString>;
|
|
10
|
+
schema: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodArray<import("zod").ZodString>]>>;
|
|
11
|
+
migrations: import("zod").ZodOptional<import("zod").ZodString>;
|
|
12
|
+
extensions: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
13
|
+
migrationTable: import("zod").ZodOptional<import("zod").ZodString>;
|
|
14
|
+
pool: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
15
|
+
max: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
16
|
+
idleTimeout: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
16
17
|
}, import("zod/v4/core").$strip>>;
|
|
17
18
|
}, import("zod/v4/core").$strip>>;
|
|
18
|
-
environment: import("zod
|
|
19
|
+
environment: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
19
20
|
development: "development";
|
|
20
21
|
test: "test";
|
|
21
22
|
production: "production";
|
|
22
23
|
}>>;
|
|
23
|
-
test: import("zod
|
|
24
|
-
isolation: import("zod
|
|
24
|
+
test: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
25
|
+
isolation: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
25
26
|
transaction: "transaction";
|
|
26
27
|
database: "database";
|
|
27
28
|
container: "container";
|
|
28
29
|
}>>;
|
|
29
|
-
databases: import("zod
|
|
30
|
-
isolation: import("zod
|
|
30
|
+
databases: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
|
|
31
|
+
isolation: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
31
32
|
transaction: "transaction";
|
|
32
33
|
database: "database";
|
|
33
34
|
container: "container";
|
|
34
35
|
}>>;
|
|
35
36
|
}, import("zod/v4/core").$strip>>>;
|
|
36
37
|
}, import("zod/v4/core").$strip>>;
|
|
38
|
+
observability: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
39
|
+
slowQueryMs: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
40
|
+
logAllQueries: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
41
|
+
poolMetricsInterval: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
42
|
+
}, import("zod/v4/core").$strip>>;
|
|
37
43
|
}, import("zod/v4/core").$strip>;
|
|
38
44
|
ConfigError: typeof ConfigError;
|
|
39
45
|
};
|
|
@@ -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;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhD,eAAO,MAAM,MAAM
|
|
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,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKlB,CAAA"}
|