pipework 0.3.1 → 0.4.1
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/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +37 -1
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/dev-bootstrap.d.ts +2 -0
- package/dist/cli/dev-bootstrap.d.ts.map +1 -0
- package/dist/cli/dev-bootstrap.js +11 -0
- package/dist/cli/dev-bootstrap.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +3 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +20 -4
- package/dist/config/env.js.map +1 -1
- package/dist/di/builder.d.ts +7 -2
- package/dist/di/builder.d.ts.map +1 -1
- package/dist/di/builder.js +20 -1
- package/dist/di/builder.js.map +1 -1
- package/dist/di/types.d.ts +8 -0
- package/dist/di/types.d.ts.map +1 -1
- package/dist/di/types.js.map +1 -1
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +3 -1
- package/dist/http/server.js.map +1 -1
- package/dist/http/types.d.ts +1 -0
- package/dist/http/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/jobs/queue.d.ts +1 -0
- package/dist/jobs/queue.d.ts.map +1 -1
- package/dist/jobs/queue.js +2 -1
- package/dist/jobs/queue.js.map +1 -1
- package/dist/pipework.d.ts +7 -0
- package/dist/pipework.d.ts.map +1 -1
- package/dist/pipework.js +85 -2
- package/dist/pipework.js.map +1 -1
- package/dist/surface/http.d.ts +3 -0
- package/dist/surface/http.d.ts.map +1 -0
- package/dist/surface/http.js +78 -0
- package/dist/surface/http.js.map +1 -0
- package/dist/surface/index.d.ts +7 -0
- package/dist/surface/index.d.ts.map +1 -0
- package/dist/surface/index.js +6 -0
- package/dist/surface/index.js.map +1 -0
- package/dist/surface/namespace.d.ts +9 -0
- package/dist/surface/namespace.d.ts.map +1 -0
- package/dist/surface/namespace.js +9 -0
- package/dist/surface/namespace.js.map +1 -0
- package/dist/surface/script.d.ts +3 -0
- package/dist/surface/script.d.ts.map +1 -0
- package/dist/surface/script.js +18 -0
- package/dist/surface/script.js.map +1 -0
- package/dist/surface/start.d.ts +8 -0
- package/dist/surface/start.d.ts.map +1 -0
- package/dist/surface/start.js +64 -0
- package/dist/surface/start.js.map +1 -0
- package/dist/surface/types.d.ts +107 -0
- package/dist/surface/types.d.ts.map +1 -0
- package/dist/surface/types.js +2 -0
- package/dist/surface/types.js.map +1 -0
- package/dist/surface/validate.d.ts +5 -0
- package/dist/surface/validate.d.ts.map +1 -0
- package/dist/surface/validate.js +67 -0
- package/dist/surface/validate.js.map +1 -0
- package/dist/surface/worker.d.ts +3 -0
- package/dist/surface/worker.d.ts.map +1 -0
- package/dist/surface/worker.js +145 -0
- package/dist/surface/worker.js.map +1 -0
- package/dist/test/auto-setup.js +2 -1
- package/dist/test/auto-setup.js.map +1 -1
- package/dist/test/index.d.ts +1 -1
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +1 -1
- package/dist/test/index.js.map +1 -1
- package/dist/test/plugin.d.ts +5 -0
- package/dist/test/plugin.d.ts.map +1 -1
- package/dist/test/plugin.js +5 -0
- package/dist/test/plugin.js.map +1 -1
- package/dist/test/vitest.d.ts +2 -0
- package/dist/test/vitest.d.ts.map +1 -1
- package/dist/test/vitest.js +48 -4
- package/dist/test/vitest.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { DEFAULT_DB } from '../di/types.js';
|
|
2
|
+
export function validateSurfaces(config, surfaces) {
|
|
3
|
+
const problems = [];
|
|
4
|
+
const configuredDbs = new Set(config.databaseNames());
|
|
5
|
+
for (const [name, surface] of Object.entries(surfaces)) {
|
|
6
|
+
for (const db of surface.manifest.databases) {
|
|
7
|
+
if (db === DEFAULT_DB) {
|
|
8
|
+
if (configuredDbs.size > 1) {
|
|
9
|
+
try {
|
|
10
|
+
config.defaultDatabaseName();
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
problems.push(`Surface "${name}" uses the default database, but multiple databases are configured.\n` +
|
|
14
|
+
` Configured: ${[...configuredDbs].join(', ')}\n` +
|
|
15
|
+
` Fix: Pass an explicit database name — e.g., surface.worker({ database: "${[...configuredDbs][0]}" })`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
else if (!configuredDbs.has(db)) {
|
|
20
|
+
const available = [...configuredDbs].join(', ');
|
|
21
|
+
problems.push(`Surface "${name}" requires database "${db}" which is not configured.\n` +
|
|
22
|
+
` Configured databases: ${available || '(none)'}\n` +
|
|
23
|
+
` Fix: Add "${db}" to your databases config, or correct the name in the surface definition.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
validateSurfaceKind(name, surface, problems);
|
|
27
|
+
}
|
|
28
|
+
if (problems.length > 0) {
|
|
29
|
+
throw new Error(`[pipework] Surface validation failed:\n\n${problems.map((p, i) => ` ${i + 1}. ${p}`).join('\n\n')}\n`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function validateSurfaceKind(name, surface, problems) {
|
|
33
|
+
if (surface.kind === 'worker') {
|
|
34
|
+
if (surface.manifest.jobTypes.length === 0) {
|
|
35
|
+
problems.push(`Surface "${name}" is a worker with no job handlers.\n` +
|
|
36
|
+
' Fix: Pass at least one job handler — surface.worker({ jobs: [myJob] })');
|
|
37
|
+
}
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
for (const jobType of surface.manifest.jobTypes) {
|
|
40
|
+
if (seen.has(jobType)) {
|
|
41
|
+
problems.push(`Surface "${name}" has duplicate job type "${jobType}".\n` +
|
|
42
|
+
' Each job type must have exactly one handler.');
|
|
43
|
+
}
|
|
44
|
+
seen.add(jobType);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export function validateNoJobTypeDuplicates(surfaces) {
|
|
49
|
+
const owners = new Map();
|
|
50
|
+
const problems = [];
|
|
51
|
+
for (const [name, surface] of Object.entries(surfaces)) {
|
|
52
|
+
for (const jobType of surface.manifest.jobTypes) {
|
|
53
|
+
const existing = owners.get(jobType);
|
|
54
|
+
if (existing !== undefined) {
|
|
55
|
+
problems.push(`Job type "${jobType}" is handled by both "${existing}" and "${name}".\n` +
|
|
56
|
+
' Each job type must be handled by exactly one worker surface.');
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
owners.set(jobType, name);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (problems.length > 0) {
|
|
64
|
+
throw new Error(`[pipework] Job type conflict:\n\n${problems.map((p, i) => ` ${i + 1}. ${p}`).join('\n\n')}\n`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/surface/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/surface/worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,mBAAmB,EAAkB,MAAM,YAAY,CAAA;AAQ7F,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAsFxE"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { DEFAULT_DB } from '../di/types.js';
|
|
3
|
+
import { createQueue } from '../jobs/queue.js';
|
|
4
|
+
import { executeJob } from '../jobs/execute.js';
|
|
5
|
+
import { sql } from '../db/sql.js';
|
|
6
|
+
export function createWorkerSurface(config) {
|
|
7
|
+
const databases = collectWorkerDatabases(config);
|
|
8
|
+
const jobTypes = collectJobTypes(config.jobs);
|
|
9
|
+
validateJobHandlers(config.jobs);
|
|
10
|
+
return {
|
|
11
|
+
kind: 'worker',
|
|
12
|
+
manifest: { databases, jobTypes },
|
|
13
|
+
async start(context) {
|
|
14
|
+
const queue = createQueue(config.queue);
|
|
15
|
+
const dbName = config.database ?? context.config.defaultDatabaseName();
|
|
16
|
+
const dbConfig = context.config.database(dbName);
|
|
17
|
+
const conn = context.pool.getOrCreate(dbConfig);
|
|
18
|
+
const db = conn.drizzle;
|
|
19
|
+
await db.execute(sql `SELECT 1`);
|
|
20
|
+
const dispatch = buildDispatchTable(config.jobs);
|
|
21
|
+
const concurrency = config.concurrency ?? 1;
|
|
22
|
+
const pollIntervalMs = config.pollIntervalMs ?? 1000;
|
|
23
|
+
const shouldRun = { value: true };
|
|
24
|
+
const claimLoop = async () => {
|
|
25
|
+
const workerId = randomUUID();
|
|
26
|
+
while (shouldRun.value) {
|
|
27
|
+
try {
|
|
28
|
+
const claimed = await queue.claim(db, workerId);
|
|
29
|
+
if (claimed === null) {
|
|
30
|
+
await sleep(pollIntervalMs);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const handler = dispatch.get(claimed.type);
|
|
34
|
+
if (handler === undefined) {
|
|
35
|
+
await queue.fail(db, claimed.id, new Error(`[pipework] No handler registered for job type "${claimed.type}".\n\n` +
|
|
36
|
+
` Registered types: ${[...dispatch.keys()].join(', ')}\n` +
|
|
37
|
+
' This job was enqueued with a type that no handler recognizes.\n'));
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const heartbeatInterval = setInterval(() => {
|
|
41
|
+
void queue.heartbeat(db, claimed.id);
|
|
42
|
+
}, 30_000);
|
|
43
|
+
try {
|
|
44
|
+
const timeoutMs = handler.meta.jobTimeout ?? undefined;
|
|
45
|
+
const result = await executeWithTimeout(() => executeJob(handler, {
|
|
46
|
+
instance: context,
|
|
47
|
+
jobId: claimed.id,
|
|
48
|
+
jobType: claimed.type,
|
|
49
|
+
input: claimed.payload,
|
|
50
|
+
}), timeoutMs, claimed.type, claimed.id);
|
|
51
|
+
await queue.complete(db, claimed.id, result);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
await queue.fail(db, claimed.id, err);
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
clearInterval(heartbeatInterval);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
await sleep(pollIntervalMs);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const workers = Array.from({ length: concurrency }, () => claimLoop());
|
|
66
|
+
return {
|
|
67
|
+
kind: 'worker',
|
|
68
|
+
async stop() {
|
|
69
|
+
shouldRun.value = false;
|
|
70
|
+
await Promise.allSettled(workers);
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function buildDispatchTable(jobs) {
|
|
77
|
+
const table = new Map();
|
|
78
|
+
for (const job of jobs) {
|
|
79
|
+
const jobType = job.meta.jobType;
|
|
80
|
+
if (typeof jobType === 'string') {
|
|
81
|
+
table.set(jobType, job);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return table;
|
|
85
|
+
}
|
|
86
|
+
function validateJobHandlers(jobs) {
|
|
87
|
+
const seen = new Set();
|
|
88
|
+
for (const job of jobs) {
|
|
89
|
+
if (!job.meta.isJob || job.meta.jobType === null) {
|
|
90
|
+
throw new Error('[pipework] All handlers passed to surface.worker({ jobs }) must be created with .job("type-name").\n\n' +
|
|
91
|
+
' Example:\n' +
|
|
92
|
+
' fitting().use().job("send-email").input(schema).fit(handler)\n');
|
|
93
|
+
}
|
|
94
|
+
if (seen.has(job.meta.jobType)) {
|
|
95
|
+
throw new Error(`[pipework] Duplicate job type "${job.meta.jobType}" in worker surface.\n\n` +
|
|
96
|
+
' Each job type must have exactly one handler. If you need multiple handlers,\n' +
|
|
97
|
+
' create separate worker surfaces.\n');
|
|
98
|
+
}
|
|
99
|
+
seen.add(job.meta.jobType);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function collectWorkerDatabases(config) {
|
|
103
|
+
const dbs = new Set();
|
|
104
|
+
if (config.database !== undefined) {
|
|
105
|
+
dbs.add(config.database);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
dbs.add(DEFAULT_DB);
|
|
109
|
+
}
|
|
110
|
+
for (const job of config.jobs) {
|
|
111
|
+
for (const db of job.meta.databases) {
|
|
112
|
+
dbs.add(db);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return [...dbs];
|
|
116
|
+
}
|
|
117
|
+
function collectJobTypes(jobs) {
|
|
118
|
+
const types = [];
|
|
119
|
+
for (const j of jobs) {
|
|
120
|
+
if (typeof j.meta.jobType === 'string') {
|
|
121
|
+
types.push(j.meta.jobType);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return types;
|
|
125
|
+
}
|
|
126
|
+
async function executeWithTimeout(fn, timeoutMs, jobType, jobId) {
|
|
127
|
+
if (timeoutMs === undefined)
|
|
128
|
+
return fn();
|
|
129
|
+
const result = await Promise.race([
|
|
130
|
+
fn(),
|
|
131
|
+
new Promise((_, reject) => {
|
|
132
|
+
const timer = setTimeout(() => {
|
|
133
|
+
reject(new Error(`[pipework] Job "${jobType}" (${jobId}) timed out after ${timeoutMs}ms.\n\n` +
|
|
134
|
+
' The job handler did not complete within the configured timeout.\n' +
|
|
135
|
+
' Increase the timeout with .timeout(ms) or optimize the handler.\n'));
|
|
136
|
+
}, timeoutMs);
|
|
137
|
+
timer.unref();
|
|
138
|
+
}),
|
|
139
|
+
]);
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
function sleep(ms) {
|
|
143
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/surface/worker.ts"],"names":[],"mappings":"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"}
|
package/dist/test/auto-setup.js
CHANGED
|
@@ -3,7 +3,7 @@ import { loadEnvFiles } from '../config/env.js';
|
|
|
3
3
|
import { discoverInstance } from '../config/discover.js';
|
|
4
4
|
import { setupTestDatabases, teardownTestDatabases } from './setup.js';
|
|
5
5
|
import { beginTestIsolation, endTestIsolation } from './plugin.js';
|
|
6
|
-
import { _setTestState, useTestDb } from './vitest.js';
|
|
6
|
+
import { _setTestState, _closeSetupConnections, useTestDb } from './vitest.js';
|
|
7
7
|
loadEnvFiles();
|
|
8
8
|
let _testContext = null;
|
|
9
9
|
const instance = await discoverInstance();
|
|
@@ -17,6 +17,7 @@ beforeAll(async () => {
|
|
|
17
17
|
await setupTestDatabases(instance);
|
|
18
18
|
});
|
|
19
19
|
afterAll(async () => {
|
|
20
|
+
await _closeSetupConnections();
|
|
20
21
|
await instance.pool.closeAll();
|
|
21
22
|
await teardownTestDatabases();
|
|
22
23
|
});
|
|
@@ -1 +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,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
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,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE9E,YAAY,EAAE,CAAA;AAEd,IAAI,YAAY,GAAuB,IAAI,CAAA;AAE3C,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAA;AAEzC,aAAa,CAAC,QAAQ,CAAC,CAAA;AAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA;AAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACzB,CAAC;IAAC,UAAsC,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,CAAA;AAC9D,CAAC;AAED,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,sBAAsB,EAAE,CAAA;IAC9B,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"}
|
package/dist/test/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { setupTestDatabases, teardownTestDatabases, getTestDatabase, getTestDatabases, type TestDatabase } from './setup.js';
|
|
2
2
|
export { beginTestIsolation, endTestIsolation, type TestContext, type TestDatabaseConnections } from './plugin.js';
|
|
3
|
-
export { setupPipeworkTests, useTestDb, useTestInstance, withFlow, type WithFlowOptions } from './vitest.js';
|
|
3
|
+
export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, withFlow, type WithFlowOptions } from './vitest.js';
|
|
4
4
|
export { mockAuth, asTenant } from './auth.js';
|
|
5
5
|
export { withContext, withJobContext, type WithContextOptions } from './context.js';
|
|
6
6
|
export { pipework as vitestPlugin, type PipeworkVitestOptions } from './vitest-plugin.js';
|
package/dist/test/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5H,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5H,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AACxH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACnF,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/test/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { setupTestDatabases, teardownTestDatabases, getTestDatabase, getTestDatabases } from './setup.js';
|
|
2
2
|
export { beginTestIsolation, endTestIsolation } from './plugin.js';
|
|
3
|
-
export { setupPipeworkTests, useTestDb, useTestInstance, withFlow } from './vitest.js';
|
|
3
|
+
export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, withFlow } from './vitest.js';
|
|
4
4
|
export { mockAuth, asTenant } from './auth.js';
|
|
5
5
|
export { withContext, withJobContext } from './context.js';
|
|
6
6
|
export { pipework as vitestPlugin } from './vitest-plugin.js';
|
package/dist/test/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAA;AAC5H,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAkD,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAwB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAA;AAC5H,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAkD,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAwB,MAAM,aAAa,CAAA;AACxH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,cAAc,EAA2B,MAAM,cAAc,CAAA;AACnF,OAAO,EAAE,QAAQ,IAAI,YAAY,EAA8B,MAAM,oBAAoB,CAAA;AACzF,OAAO,EAAE,gBAAgB,EAA0B,MAAM,oBAAoB,CAAA"}
|
package/dist/test/plugin.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type PostgresJsDatabase } from 'drizzle-orm/postgres-js';
|
|
2
2
|
import type { Manifold } from '../pipework.js';
|
|
3
|
+
import { type TestDatabase } from './setup.js';
|
|
3
4
|
import { runInContext } from '../context/store.js';
|
|
4
5
|
import type { Flow } from '../context/types.js';
|
|
5
6
|
export interface TestDatabaseConnections {
|
|
@@ -12,5 +13,9 @@ export interface TestContext {
|
|
|
12
13
|
export declare function beginTestIsolation(instance: Manifold): Promise<TestContext>;
|
|
13
14
|
export declare function endTestIsolation(instance: Manifold, ctx: TestContext): Promise<void>;
|
|
14
15
|
export declare function createTestContext(instance: Manifold, testConnections: TestContext, auth?: unknown, tenant?: string | null): Flow;
|
|
16
|
+
export declare function createSetupConnection(testDb: TestDatabase): {
|
|
17
|
+
drizzle: PostgresJsDatabase;
|
|
18
|
+
close: () => Promise<void>;
|
|
19
|
+
};
|
|
15
20
|
export { runInContext };
|
|
16
21
|
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/test/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/test/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAG/C,MAAM,WAAW,uBAAuB;IACtC,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAA;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,uBAAuB,CAAA;CAC5B;AASD,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAkBjF;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1F;AAgBD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAMhI;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAIvH;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/test/plugin.js
CHANGED
|
@@ -59,5 +59,10 @@ export function createTestContext(instance, testConnections, auth, tenant) {
|
|
|
59
59
|
}
|
|
60
60
|
return ctx;
|
|
61
61
|
}
|
|
62
|
+
export function createSetupConnection(testDb) {
|
|
63
|
+
const client = postgres(testDb.url, { max: 1, onnotice: () => { } });
|
|
64
|
+
const db = drizzle(client);
|
|
65
|
+
return { drizzle: db, close: () => client.end() };
|
|
66
|
+
}
|
|
62
67
|
export { runInContext };
|
|
63
68
|
//# sourceMappingURL=plugin.js.map
|
package/dist/test/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/test/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/test/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/test/vitest.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export { type TestContext, type TestDatabaseConnections } from './plugin.js';
|
|
|
6
6
|
export declare function _setTestState(instance: Manifold, testContext?: TestContext | null): void;
|
|
7
7
|
export declare function setupPipeworkTests(configOrInstance: Blueprint | Manifold): Manifold;
|
|
8
8
|
export declare function useTestDb(name?: string): DB;
|
|
9
|
+
export declare function useSetupDb(name?: string): DB;
|
|
10
|
+
export declare function _closeSetupConnections(): Promise<void>;
|
|
9
11
|
export declare function _isInTestIsolation(): boolean;
|
|
10
12
|
export declare function useTestInstance(): Manifold;
|
|
11
13
|
export interface WithFlowOptions {
|
|
@@ -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;AAG9C,OAAO,
|
|
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,EAAgG,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAE5I,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAO5E,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,CA0BnF;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAiC3C;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE,CAyC5C;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK5D;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,eAAe,IAAI,QAAQ,CAS1C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;AAC3C,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA"}
|
package/dist/test/vitest.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { beforeAll, afterAll, beforeEach, afterEach } from 'vitest';
|
|
2
2
|
import { createManifold } from '../pipework.js';
|
|
3
|
-
import { setupTestDatabases, teardownTestDatabases } from './setup.js';
|
|
4
|
-
import { beginTestIsolation, endTestIsolation, createTestContext, runInContext } from './plugin.js';
|
|
3
|
+
import { setupTestDatabases, teardownTestDatabases, getTestDatabase } from './setup.js';
|
|
4
|
+
import { beginTestIsolation, endTestIsolation, createTestContext, createSetupConnection, runInContext } from './plugin.js';
|
|
5
5
|
export {} from './plugin.js';
|
|
6
6
|
let _testContext = null;
|
|
7
7
|
let _instance = null;
|
|
8
|
+
const _setupConnections = new Map();
|
|
8
9
|
export function _setTestState(instance, testContext) {
|
|
9
10
|
_instance = instance;
|
|
10
11
|
if (testContext !== undefined) {
|
|
@@ -18,6 +19,7 @@ export function setupPipeworkTests(configOrInstance) {
|
|
|
18
19
|
await setupTestDatabases(instance);
|
|
19
20
|
});
|
|
20
21
|
afterAll(async () => {
|
|
22
|
+
await _closeSetupConnections();
|
|
21
23
|
await instance.pool.closeAll();
|
|
22
24
|
await teardownTestDatabases();
|
|
23
25
|
});
|
|
@@ -37,8 +39,8 @@ export function useTestDb(name) {
|
|
|
37
39
|
function resolve() {
|
|
38
40
|
if (!_testContext || !_instance) {
|
|
39
41
|
throw new Error('[pipework] No test context available.\n\n' +
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
+
' useTestDb() only works inside test bodies (it, test) and beforeEach/afterEach.\n' +
|
|
43
|
+
' For beforeAll/afterAll fixture setup, use useSetupDb() instead.\n');
|
|
42
44
|
}
|
|
43
45
|
const dbName = resolvedName ?? _instance.config.defaultDatabaseName();
|
|
44
46
|
const db = _testContext.db[dbName];
|
|
@@ -59,6 +61,48 @@ export function useTestDb(name) {
|
|
|
59
61
|
},
|
|
60
62
|
});
|
|
61
63
|
}
|
|
64
|
+
export function useSetupDb(name) {
|
|
65
|
+
const resolvedName = name;
|
|
66
|
+
function resolve() {
|
|
67
|
+
if (!_instance) {
|
|
68
|
+
throw new Error('[pipework] No test instance available.\n\n' +
|
|
69
|
+
' Add to your vitest.config.ts:\n' +
|
|
70
|
+
' test: { setupFiles: [\'pipework/test/setup\'] }\n');
|
|
71
|
+
}
|
|
72
|
+
const dbName = resolvedName ?? _instance.config.defaultDatabaseName();
|
|
73
|
+
const existing = _setupConnections.get(dbName);
|
|
74
|
+
if (existing)
|
|
75
|
+
return existing.drizzle;
|
|
76
|
+
const testDb = getTestDatabase(dbName);
|
|
77
|
+
if (!testDb) {
|
|
78
|
+
throw new Error(`[pipework] Test database "${dbName}" is not set up yet.\n\n` +
|
|
79
|
+
' useSetupDb() requires setupTestDatabases() to have completed.\n' +
|
|
80
|
+
' Make sure your beforeAll that seeds data runs after the pipework setup.\n');
|
|
81
|
+
}
|
|
82
|
+
const conn = createSetupConnection(testDb);
|
|
83
|
+
_setupConnections.set(dbName, conn);
|
|
84
|
+
return conn.drizzle;
|
|
85
|
+
}
|
|
86
|
+
return new Proxy({}, {
|
|
87
|
+
get(_target, prop, receiver) {
|
|
88
|
+
const db = resolve();
|
|
89
|
+
const value = Reflect.get(db, prop, receiver);
|
|
90
|
+
return typeof value === 'function' ? value.bind(db) : value;
|
|
91
|
+
},
|
|
92
|
+
has(_target, prop) {
|
|
93
|
+
return prop in resolve();
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export async function _closeSetupConnections() {
|
|
98
|
+
for (const [, conn] of _setupConnections) {
|
|
99
|
+
try {
|
|
100
|
+
await conn.close();
|
|
101
|
+
}
|
|
102
|
+
catch { /* best effort */ }
|
|
103
|
+
}
|
|
104
|
+
_setupConnections.clear();
|
|
105
|
+
}
|
|
62
106
|
export function _isInTestIsolation() {
|
|
63
107
|
return _testContext !== null;
|
|
64
108
|
}
|
package/dist/test/vitest.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/test/vitest.ts"],"names":[],"mappings":"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"}
|