pipework 0.6.3 → 0.7.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/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +62 -1
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +4 -8
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/config/discover.d.ts +1 -0
- package/dist/config/discover.d.ts.map +1 -1
- package/dist/config/discover.js +1 -1
- 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 +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/namespace.d.ts +76 -0
- package/dist/config/namespace.d.ts.map +1 -1
- package/dist/config/schema.d.ts +250 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +38 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/db/db.d.ts +0 -1
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +2 -5
- package/dist/db/db.js.map +1 -1
- package/dist/db/namespace.d.ts +0 -5
- package/dist/db/namespace.d.ts.map +1 -1
- package/dist/db/namespace.js +0 -5
- package/dist/db/namespace.js.map +1 -1
- package/dist/di/builder.d.ts +3 -2
- package/dist/di/builder.d.ts.map +1 -1
- package/dist/di/builder.js +11 -4
- package/dist/di/builder.js.map +1 -1
- package/dist/di/resolve.d.ts.map +1 -1
- package/dist/di/resolve.js +18 -4
- package/dist/di/resolve.js.map +1 -1
- package/dist/di/types.d.ts +1 -1
- package/dist/di/types.d.ts.map +1 -1
- package/dist/domain/define.d.ts.map +1 -1
- package/dist/domain/define.js +5 -0
- package/dist/domain/define.js.map +1 -1
- package/dist/domain/project-table.d.ts.map +1 -1
- package/dist/domain/project-table.js +13 -5
- package/dist/domain/project-table.js.map +1 -1
- package/dist/fitting/namespace.d.ts +1 -5
- package/dist/fitting/namespace.d.ts.map +1 -1
- package/dist/fitting/namespace.js +1 -5
- package/dist/fitting/namespace.js.map +1 -1
- package/dist/fixture/index.d.ts +1 -1
- package/dist/fixture/index.d.ts.map +1 -1
- package/dist/fixture/index.js +1 -1
- package/dist/fixture/index.js.map +1 -1
- package/dist/fixture/namespace.d.ts +3 -3
- package/dist/fixture/namespace.d.ts.map +1 -1
- package/dist/fixture/namespace.js +3 -3
- package/dist/fixture/namespace.js.map +1 -1
- package/dist/fixture/to-handlers.d.ts +6 -0
- package/dist/fixture/to-handlers.d.ts.map +1 -0
- package/dist/fixture/to-handlers.js +245 -0
- package/dist/fixture/to-handlers.js.map +1 -0
- package/dist/flow/namespace.d.ts +1 -10
- package/dist/flow/namespace.d.ts.map +1 -1
- package/dist/flow/namespace.js +1 -10
- package/dist/flow/namespace.js.map +1 -1
- package/dist/http/namespace.d.ts +2 -6
- package/dist/http/namespace.d.ts.map +1 -1
- package/dist/http/namespace.js +2 -6
- package/dist/http/namespace.js.map +1 -1
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +17 -11
- package/dist/http/server.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/openapi/generate.d.ts.map +1 -1
- package/dist/openapi/generate.js +10 -8
- package/dist/openapi/generate.js.map +1 -1
- package/dist/pipework.d.ts +7 -0
- package/dist/pipework.d.ts.map +1 -1
- package/dist/pipework.js +11 -0
- package/dist/pipework.js.map +1 -1
- package/dist/surface/validate.d.ts +2 -0
- package/dist/surface/validate.d.ts.map +1 -1
- package/dist/surface/validate.js +54 -0
- package/dist/surface/validate.js.map +1 -1
- package/dist/temporal/definition-queries.d.ts +6 -6
- package/dist/temporal/definition-queries.d.ts.map +1 -1
- package/dist/temporal/definition-queries.js.map +1 -1
- package/dist/tenant/index.d.ts +1 -1
- package/dist/tenant/index.d.ts.map +1 -1
- package/dist/tenant/index.js +1 -1
- package/dist/tenant/index.js.map +1 -1
- package/dist/tenant/namespace.d.ts +2 -4
- package/dist/tenant/namespace.d.ts.map +1 -1
- package/dist/tenant/namespace.js +2 -4
- package/dist/tenant/namespace.js.map +1 -1
- package/dist/tenant/scoped-db.d.ts +1 -0
- package/dist/tenant/scoped-db.d.ts.map +1 -1
- package/dist/tenant/scoped-db.js +63 -2
- package/dist/tenant/scoped-db.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/vitest-config.d.ts +1 -0
- package/dist/test/vitest-config.d.ts.map +1 -1
- package/dist/test/vitest-config.js +6 -2
- package/dist/test/vitest-config.js.map +1 -1
- package/dist/test/vitest-workspace.d.ts +6 -0
- package/dist/test/vitest-workspace.d.ts.map +1 -0
- package/dist/test/vitest-workspace.js +293 -0
- package/dist/test/vitest-workspace.js.map +1 -0
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +1 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/startup.js +2 -2
- package/dist/validation/startup.js.map +1 -1
- package/dist/workspace/generate.d.ts +2 -0
- package/dist/workspace/generate.d.ts.map +1 -1
- package/dist/workspace/generate.js +15 -0
- package/dist/workspace/generate.js.map +1 -1
- package/dist/workspace/index.d.ts +1 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -1
- package/dist/workspace/index.js.map +1 -1
- package/dist/workspace/sync.d.ts.map +1 -1
- package/dist/workspace/sync.js +1 -0
- package/dist/workspace/sync.js.map +1 -1
- package/package.json +22 -24
- package/dist/drizzle/index.d.ts +0 -3
- package/dist/drizzle/index.d.ts.map +0 -1
- package/dist/drizzle/index.js +0 -3
- package/dist/drizzle/index.js.map +0 -1
- package/dist/resource/batch.d.ts +0 -17
- package/dist/resource/batch.d.ts.map +0 -1
- package/dist/resource/batch.js +0 -47
- package/dist/resource/batch.js.map +0 -1
- package/dist/resource/builder.d.ts +0 -11
- package/dist/resource/builder.d.ts.map +0 -1
- package/dist/resource/builder.js +0 -12
- package/dist/resource/builder.js.map +0 -1
- package/dist/resource/errors.d.ts +0 -7
- package/dist/resource/errors.d.ts.map +0 -1
- package/dist/resource/errors.js +0 -9
- package/dist/resource/errors.js.map +0 -1
- package/dist/resource/index.d.ts +0 -9
- package/dist/resource/index.d.ts.map +0 -1
- package/dist/resource/index.js +0 -6
- package/dist/resource/index.js.map +0 -1
- package/dist/resource/paginate.d.ts +0 -13
- package/dist/resource/paginate.d.ts.map +0 -1
- package/dist/resource/paginate.js +0 -29
- package/dist/resource/paginate.js.map +0 -1
- package/dist/resource/register.d.ts +0 -16
- package/dist/resource/register.d.ts.map +0 -1
- package/dist/resource/register.js +0 -181
- package/dist/resource/register.js.map +0 -1
- package/dist/resource/types.d.ts +0 -69
- package/dist/resource/types.d.ts.map +0 -1
- package/dist/resource/types.js +0 -2
- package/dist/resource/types.js.map +0 -1
- package/dist/trunk.d.ts +0 -35
- package/dist/trunk.d.ts.map +0 -1
- package/dist/trunk.js +0 -102
- package/dist/trunk.js.map +0 -1
- package/dist/validation/surface.d.ts +0 -4
- package/dist/validation/surface.d.ts.map +0 -1
- package/dist/validation/surface.js +0 -55
- package/dist/validation/surface.js.map +0 -1
package/dist/pipework.d.ts
CHANGED
|
@@ -25,6 +25,13 @@ export interface Manifold<TEnv extends EnvDefs = EnvDefs> {
|
|
|
25
25
|
start(): Promise<void>;
|
|
26
26
|
/** Gracefully shuts down surfaces, runs pre-shutdown hooks, and closes all pools. */
|
|
27
27
|
stop(): Promise<void>;
|
|
28
|
+
/** Runs a callback in a managed job context — the canonical entry point for seed scripts and one-off tasks. */
|
|
29
|
+
seed<T>(fn: () => T | Promise<T>, options?: SeedOptions): Promise<T>;
|
|
30
|
+
}
|
|
31
|
+
export interface SeedOptions {
|
|
32
|
+
tenant?: string | null;
|
|
33
|
+
auth?: unknown;
|
|
34
|
+
jobType?: string;
|
|
28
35
|
}
|
|
29
36
|
/** Manages database connection pools keyed by database name. */
|
|
30
37
|
export interface PoolState {
|
package/dist/pipework.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipework.d.ts","sourceRoot":"","sources":["../src/pipework.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAGrD,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,oBAAoB,CAAA;AAIjE,OAAO,KAAK,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"pipework.d.ts","sourceRoot":"","sources":["../src/pipework.ts"],"names":[],"mappings":"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"}
|
package/dist/pipework.js
CHANGED
|
@@ -5,6 +5,8 @@ import { startSurfaces } from './surface/start.js';
|
|
|
5
5
|
import { orchestrateStartup } from './lifecycle/startup.js';
|
|
6
6
|
import { getBaseLogger } from './logging/index.js';
|
|
7
7
|
import { validateStartup } from './validation/startup.js';
|
|
8
|
+
import { createJobContext } from './context/create.js';
|
|
9
|
+
import { runInContext } from './context/store.js';
|
|
8
10
|
/**
|
|
9
11
|
* Creates the Pipework application instance. This is the entry point for every Pipework app.
|
|
10
12
|
* Define in `pipework.config.ts` and export as default.
|
|
@@ -57,6 +59,15 @@ export function createManifold(raw) {
|
|
|
57
59
|
running = await startSurfaces(context, config, surfaces);
|
|
58
60
|
signalCleanup = installSignalHandlers(manifold);
|
|
59
61
|
},
|
|
62
|
+
async seed(fn, options) {
|
|
63
|
+
const ctx = createJobContext({
|
|
64
|
+
instance: manifold,
|
|
65
|
+
jobType: options?.jobType ?? 'seed',
|
|
66
|
+
auth: options?.auth ?? null,
|
|
67
|
+
tenant: options?.tenant ?? null,
|
|
68
|
+
});
|
|
69
|
+
return runInContext(ctx, fn);
|
|
70
|
+
},
|
|
60
71
|
async stop() {
|
|
61
72
|
const logger = getBaseLogger();
|
|
62
73
|
if (signalCleanup !== null) {
|
package/dist/pipework.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipework.js","sourceRoot":"","sources":["../src/pipework.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAI5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"pipework.js","sourceRoot":"","sources":["../src/pipework.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { ResolvedConfig } from '../config/load.js';
|
|
2
2
|
import type { SurfaceMap } from './types.js';
|
|
3
|
+
import type { ValidationIssue } from '../validation/types.js';
|
|
3
4
|
export declare function validateSurfaces(config: ResolvedConfig, surfaces: SurfaceMap): void;
|
|
5
|
+
export declare function collectSurfaceIssues(surfaces: SurfaceMap, configuredDatabases: readonly string[], defaultDbAvailable: boolean): ValidationIssue[];
|
|
4
6
|
export declare function validateNoJobTypeDuplicates(surfaces: SurfaceMap): void;
|
|
5
7
|
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/surface/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/surface/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,GAAG,IAAI,CAoCnF;AAwBD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,UAAU,EACpB,mBAAmB,EAAE,SAAS,MAAM,EAAE,EACtC,kBAAkB,EAAE,OAAO,GAC1B,eAAe,EAAE,CAwDnB;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAuBtE"}
|
package/dist/surface/validate.js
CHANGED
|
@@ -45,6 +45,60 @@ function validateSurfaceKind(name, surface, problems) {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
+
export function collectSurfaceIssues(surfaces, configuredDatabases, defaultDbAvailable) {
|
|
49
|
+
const issues = [];
|
|
50
|
+
const dbSet = new Set(configuredDatabases);
|
|
51
|
+
for (const [name, surface] of Object.entries(surfaces)) {
|
|
52
|
+
for (const db of surface.manifest.databases) {
|
|
53
|
+
if (db === DEFAULT_DB) {
|
|
54
|
+
if (!defaultDbAvailable) {
|
|
55
|
+
issues.push({
|
|
56
|
+
phase: 'surface',
|
|
57
|
+
message: `"${name}" uses the default database, but multiple databases are configured: ${configuredDatabases.join(', ')}`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (!dbSet.has(db)) {
|
|
62
|
+
issues.push({
|
|
63
|
+
phase: 'surface',
|
|
64
|
+
message: `"${name}" requires database "${db}" which is not configured (available: ${configuredDatabases.join(', ')})`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (surface.kind === 'worker' && surface.manifest.jobTypes.length === 0) {
|
|
69
|
+
issues.push({
|
|
70
|
+
phase: 'surface',
|
|
71
|
+
message: `"${name}" is a worker with no job handlers`,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
for (const jobType of surface.manifest.jobTypes) {
|
|
76
|
+
if (seen.has(jobType)) {
|
|
77
|
+
issues.push({
|
|
78
|
+
phase: 'surface',
|
|
79
|
+
message: `"${name}" has duplicate job type "${jobType}"`,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
seen.add(jobType);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const jobOwners = new Map();
|
|
86
|
+
for (const [name, surface] of Object.entries(surfaces)) {
|
|
87
|
+
for (const jobType of surface.manifest.jobTypes) {
|
|
88
|
+
const existing = jobOwners.get(jobType);
|
|
89
|
+
if (existing !== undefined) {
|
|
90
|
+
issues.push({
|
|
91
|
+
phase: 'surface',
|
|
92
|
+
message: `job type "${jobType}" handled by both "${existing}" and "${name}"`,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
jobOwners.set(jobType, name);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return issues;
|
|
101
|
+
}
|
|
48
102
|
export function validateNoJobTypeDuplicates(surfaces) {
|
|
49
103
|
const owners = new Map();
|
|
50
104
|
const problems = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/surface/validate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/surface/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { DB, SQL } from '../db/types.js';
|
|
2
|
-
import type { DefinedTable } from '../domain/types.js';
|
|
2
|
+
import type { DefinedTable, FieldDescriptor } from '../domain/types.js';
|
|
3
3
|
import type { ReviseResult } from './types.js';
|
|
4
|
-
export interface DefinitionReviseOptions {
|
|
4
|
+
export interface DefinitionReviseOptions<TFields extends Record<string, FieldDescriptor> = Record<string, FieldDescriptor>> {
|
|
5
5
|
readonly tx: DB;
|
|
6
|
-
readonly definition: DefinedTable
|
|
6
|
+
readonly definition: DefinedTable<TFields>;
|
|
7
7
|
readonly where: SQL;
|
|
8
8
|
readonly data: Record<string, unknown>;
|
|
9
9
|
readonly userId?: string;
|
|
10
10
|
}
|
|
11
|
-
export declare function asOf(db: DB, definition: DefinedTable
|
|
12
|
-
export declare function allVersions(db: DB, definition: DefinedTable
|
|
13
|
-
export declare function effectiveUpdate(options: DefinitionReviseOptions): Promise<ReviseResult>;
|
|
11
|
+
export declare function asOf<TFields extends Record<string, FieldDescriptor>>(db: DB, definition: DefinedTable<TFields>, date: Date, where?: SQL): Promise<Record<string, unknown>[]>;
|
|
12
|
+
export declare function allVersions<TFields extends Record<string, FieldDescriptor>>(db: DB, definition: DefinedTable<TFields>, where?: SQL): Promise<Record<string, unknown>[]>;
|
|
13
|
+
export declare function effectiveUpdate<TFields extends Record<string, FieldDescriptor>>(options: DefinitionReviseOptions<TFields>): Promise<ReviseResult>;
|
|
14
14
|
//# sourceMappingURL=definition-queries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition-queries.d.ts","sourceRoot":"","sources":["../../src/temporal/definition-queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"definition-queries.d.ts","sourceRoot":"","sources":["../../src/temporal/definition-queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAA;AAM7D,MAAM,WAAW,uBAAuB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IACxH,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;IACf,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;IAC1C,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAaD,wBAAsB,IAAI,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACxE,EAAE,EAAE,EAAE,EACN,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC,EACjC,IAAI,EAAE,IAAI,EACV,KAAK,CAAC,EAAE,GAAG,GACV,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAQpC;AAED,wBAAsB,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC/E,EAAE,EAAE,EAAE,EACN,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC,EACjC,KAAK,CAAC,EAAE,GAAG,GACV,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CASpC;AAED,wBAAsB,eAAe,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAYvJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition-queries.js","sourceRoot":"","sources":["../../src/temporal/definition-queries.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,yCAAyC,CAAA;AAU7D,SAAS,qBAAqB,
|
|
1
|
+
{"version":3,"file":"definition-queries.js","sourceRoot":"","sources":["../../src/temporal/definition-queries.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,yCAAyC,CAAA;AAU7D,SAAS,qBAAqB,CAAkD,UAAiC,EAAE,MAAc;IAC/H,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,sBAAsB,CAC9B,YAAY,MAAM,gDAAgD;YAClE,MAAM,UAAU,CAAC,KAAK,kDAAkD;YACxE,+CAA+C;YAC/C,oBAAoB,UAAU,CAAC,KAAK,gCAAgC,CACrE,CAAA;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,EAAM,EACN,UAAiC,EACjC,IAAU,EACV,KAAW;IAEX,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAA;IAChC,6HAA6H;IAC7H,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAY,EAAE,IAAI,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IACvE,uHAAuH;IACvH,OAAO,MAAO,EAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAM,EACN,UAAiC,EACjC,KAAW;IAEX,qBAAqB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAA;IAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,uHAAuH;QACvH,OAAO,MAAO,EAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5D,CAAC;IACD,uHAAuH;IACvH,OAAO,MAAO,EAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAkD,OAAyC;IAC9H,qBAAqB,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;IAC5D,MAAM,aAAa,GAAkB;QACnC,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK;QAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAA;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,aAAa,CAAC,CAAA;AAC9B,CAAC"}
|
package/dist/tenant/index.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ export { propagateTenantLocals } from './propagate.js';
|
|
|
4
4
|
export { extractTenant, type TenantExtractionResult } from './extract.js';
|
|
5
5
|
export { tenantIsolationPolicy, enableTenantRls, verifyTenantContext } from './rls.js';
|
|
6
6
|
export { scopeTable, getScopeConfig, isTenantScoped, type ScopeConfig } from './scope.js';
|
|
7
|
-
export { createScopedDb } from './scoped-db.js';
|
|
7
|
+
export { createScopedDb, createTenantGuardDb } from './scoped-db.js';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tenant/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tenant/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/tenant/index.js
CHANGED
|
@@ -3,5 +3,5 @@ export { propagateTenantLocals } from './propagate.js';
|
|
|
3
3
|
export { extractTenant } from './extract.js';
|
|
4
4
|
export { tenantIsolationPolicy, enableTenantRls, verifyTenantContext } from './rls.js';
|
|
5
5
|
export { scopeTable, getScopeConfig, isTenantScoped } from './scope.js';
|
|
6
|
-
export { createScopedDb } from './scoped-db.js';
|
|
6
|
+
export { createScopedDb, createTenantGuardDb } from './scoped-db.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/tenant/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tenant/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAA+B,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tenant/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAA+B,MAAM,cAAc,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -2,7 +2,7 @@ import { validateTenantId } from './validate.js';
|
|
|
2
2
|
import { enableTenantRls, tenantIsolationPolicy, verifyTenantContext } from './rls.js';
|
|
3
3
|
import { propagateTenantLocals } from './propagate.js';
|
|
4
4
|
import { extractTenant } from './extract.js';
|
|
5
|
-
import {
|
|
5
|
+
import { isTenantScoped } from './scope.js';
|
|
6
6
|
/** Multi-tenant isolation namespace — RLS policies, tenant extraction, Postgres-side verification. */
|
|
7
7
|
export declare const tenant: {
|
|
8
8
|
/** Validates a tenant ID format (non-empty string, safe characters). */
|
|
@@ -17,9 +17,7 @@ export declare const tenant: {
|
|
|
17
17
|
propagate: typeof propagateTenantLocals;
|
|
18
18
|
/** Extracts tenant ID from auth context using the configured extraction strategy. */
|
|
19
19
|
extract: typeof extractTenant;
|
|
20
|
-
/**
|
|
21
|
-
scoped: typeof scopeTable;
|
|
22
|
-
/** Returns true if a table has been marked as tenant-scoped. */
|
|
20
|
+
/** Returns true if a table has been marked as tenant-scoped (via .tenant() field metadata). */
|
|
23
21
|
isTenantScoped: typeof isTenantScoped;
|
|
24
22
|
};
|
|
25
23
|
//# sourceMappingURL=namespace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/tenant/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/tenant/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,sGAAsG;AACtG,eAAO,MAAM,MAAM;IACjB,wEAAwE;;IAExE,kFAAkF;;IAElF,oFAAoF;;IAEpF,oGAAoG;;IAEpG,2EAA2E;;IAE3E,qFAAqF;;IAErF,+FAA+F;;CAEhG,CAAA"}
|
package/dist/tenant/namespace.js
CHANGED
|
@@ -2,7 +2,7 @@ import { validateTenantId } from './validate.js';
|
|
|
2
2
|
import { enableTenantRls, tenantIsolationPolicy, verifyTenantContext } from './rls.js';
|
|
3
3
|
import { propagateTenantLocals } from './propagate.js';
|
|
4
4
|
import { extractTenant } from './extract.js';
|
|
5
|
-
import {
|
|
5
|
+
import { isTenantScoped } from './scope.js';
|
|
6
6
|
/** Multi-tenant isolation namespace — RLS policies, tenant extraction, Postgres-side verification. */
|
|
7
7
|
export const tenant = {
|
|
8
8
|
/** Validates a tenant ID format (non-empty string, safe characters). */
|
|
@@ -17,9 +17,7 @@ export const tenant = {
|
|
|
17
17
|
propagate: propagateTenantLocals,
|
|
18
18
|
/** Extracts tenant ID from auth context using the configured extraction strategy. */
|
|
19
19
|
extract: extractTenant,
|
|
20
|
-
/**
|
|
21
|
-
scoped: scopeTable,
|
|
22
|
-
/** Returns true if a table has been marked as tenant-scoped. */
|
|
20
|
+
/** Returns true if a table has been marked as tenant-scoped (via .tenant() field metadata). */
|
|
23
21
|
isTenantScoped,
|
|
24
22
|
};
|
|
25
23
|
//# sourceMappingURL=namespace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/tenant/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/tenant/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,sGAAsG;AACtG,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,wEAAwE;IACxE,QAAQ,EAAE,gBAAgB;IAC1B,kFAAkF;IAClF,GAAG,EAAE,eAAe;IACpB,oFAAoF;IACpF,MAAM,EAAE,qBAAqB;IAC7B,oGAAoG;IACpG,MAAM,EAAE,mBAAmB;IAC3B,2EAA2E;IAC3E,SAAS,EAAE,qBAAqB;IAChC,qFAAqF;IACrF,OAAO,EAAE,aAAa;IACtB,+FAA+F;IAC/F,cAAc;CACf,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-db.d.ts","sourceRoot":"","sources":["../../src/tenant/scoped-db.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"scoped-db.d.ts","sourceRoot":"","sources":["../../src/tenant/scoped-db.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AA+JxC,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAsB9C;AAmBD,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,EAAE,CAgE3D"}
|
package/dist/tenant/scoped-db.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { eq, and } from '../db/generated/drizzle-orm/operator.js';
|
|
2
|
-
import { getTableColumns } from '../db/generated/drizzle-orm/introspection.js';
|
|
2
|
+
import { getTableColumns, getTableName } from '../db/generated/drizzle-orm/introspection.js';
|
|
3
3
|
import { getScopeConfig } from './scope.js';
|
|
4
4
|
function buildTenantCondition(table, columnKey, tenantId) {
|
|
5
5
|
const columns = getTableColumns(table);
|
|
@@ -95,7 +95,7 @@ function wrapInsertBuilder(builder, columnKey, tenantId) {
|
|
|
95
95
|
throw new Error(`[pipework] Tenant-scoped insert: value has ${columnKey} "${String(existing)}" ` +
|
|
96
96
|
`but the current context tenant is "${tenantId}".\n\n` +
|
|
97
97
|
` Remove the explicit ${columnKey} from your insert values — it's set automatically.\n` +
|
|
98
|
-
|
|
98
|
+
' If you need cross-tenant writes, file an issue on the pipework repo.\n');
|
|
99
99
|
}
|
|
100
100
|
return { ...row, [columnKey]: tenantId };
|
|
101
101
|
};
|
|
@@ -128,6 +128,51 @@ function wrapSelectBuilder(builder, tenantId) {
|
|
|
128
128
|
},
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
|
+
function throwTenantRequired(tableName, operation) {
|
|
132
|
+
throw new Error(`[pipework] Cannot ${operation} tenant-scoped table "${tableName}" without a tenant in context.\n\n` +
|
|
133
|
+
' This table has a .tenant() field, which means all operations require\n' +
|
|
134
|
+
' an active tenant in the request/job context.\n\n' +
|
|
135
|
+
' If this is a system-level operation that legitimately needs to operate\n' +
|
|
136
|
+
' without a tenant (admin tooling, analytics), file an issue on the\n' +
|
|
137
|
+
' pipework repo describing your use case.\n');
|
|
138
|
+
}
|
|
139
|
+
export function createTenantGuardDb(db) {
|
|
140
|
+
return new Proxy(db, {
|
|
141
|
+
get(target, prop, receiver) {
|
|
142
|
+
if (prop === 'insert' || prop === 'update' || prop === 'delete') {
|
|
143
|
+
return (table) => {
|
|
144
|
+
if (getScopeConfig(table)) {
|
|
145
|
+
throwTenantRequired(getTableName(table), prop);
|
|
146
|
+
}
|
|
147
|
+
return target[prop].call(target, table);
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
if (prop === 'select' || prop === 'selectDistinct' || prop === 'selectDistinctOn') {
|
|
151
|
+
return (...args) => {
|
|
152
|
+
const selectBuilder = target[prop](...args);
|
|
153
|
+
return wrapGuardSelectBuilder(selectBuilder);
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return Reflect.get(target, prop, receiver);
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function wrapGuardSelectBuilder(builder) {
|
|
161
|
+
return new Proxy(builder, {
|
|
162
|
+
get(t, prop) {
|
|
163
|
+
if (prop === 'from') {
|
|
164
|
+
return (table, ...rest) => {
|
|
165
|
+
if (getScopeConfig(table)) {
|
|
166
|
+
throwTenantRequired(getTableName(table), 'select from');
|
|
167
|
+
}
|
|
168
|
+
return t['from'].call(t, table, ...rest);
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const value = Reflect.get(t, prop, t);
|
|
172
|
+
return typeof value === 'function' ? value.bind(t) : value;
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
}
|
|
131
176
|
export function createScopedDb(db, tenantId) {
|
|
132
177
|
return new Proxy(db, {
|
|
133
178
|
get(target, prop, receiver) {
|
|
@@ -166,6 +211,22 @@ export function createScopedDb(db, tenantId) {
|
|
|
166
211
|
return wrapSelectBuilder(selectBuilder, tenantId);
|
|
167
212
|
};
|
|
168
213
|
}
|
|
214
|
+
if (prop === 'execute') {
|
|
215
|
+
return () => {
|
|
216
|
+
throw new Error('[pipework] execute() is not available on a tenant-scoped database connection.\n\n' +
|
|
217
|
+
' Tenant-scoped connections only support select, insert, update, and delete\n' +
|
|
218
|
+
' operations, which are automatically filtered by tenant.\n\n' +
|
|
219
|
+
' If you need to run a query that the builder cannot express, file an issue\n' +
|
|
220
|
+
' on the pipework repo describing your use case.\n');
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
if (prop === '$with') {
|
|
224
|
+
return () => {
|
|
225
|
+
throw new Error('[pipework] $with() (common table expressions) is not available on a tenant-scoped database connection.\n\n' +
|
|
226
|
+
' CTEs bypass tenant scoping. If you need CTE support, file an issue\n' +
|
|
227
|
+
' on the pipework repo describing your use case.\n');
|
|
228
|
+
};
|
|
229
|
+
}
|
|
169
230
|
return Reflect.get(target, prop, receiver);
|
|
170
231
|
},
|
|
171
232
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-db.js","sourceRoot":"","sources":["../../src/tenant/scoped-db.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,yCAAyC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAA;
|
|
1
|
+
{"version":3,"file":"scoped-db.js","sourceRoot":"","sources":["../../src/tenant/scoped-db.ts"],"names":[],"mappings":"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"}
|
package/dist/test/index.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, withFlow, t
|
|
|
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';
|
|
7
|
-
export { defineTestConfig, type TestConfigOptions } from './vitest-config.js';
|
|
7
|
+
export { defineTestConfig, type TestConfigOptions, resolveVitestWorkspace, resolveVitestModules } from './vitest-config.js';
|
|
8
8
|
export { tap, type ManagedConnection, type ConnectOptions } from '../db/pool.js';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
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,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;
|
|
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,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC3H,OAAO,EAAE,GAAG,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/test/index.js
CHANGED
|
@@ -4,6 +4,6 @@ export { setupPipeworkTests, useTestDb, useSetupDb, useTestInstance, withFlow }
|
|
|
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';
|
|
7
|
-
export { defineTestConfig } from './vitest-config.js';
|
|
7
|
+
export { defineTestConfig, resolveVitestWorkspace, resolveVitestModules } from './vitest-config.js';
|
|
8
8
|
export { tap } from '../db/pool.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
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,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;
|
|
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,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC3H,OAAO,EAAE,GAAG,EAA+C,MAAM,eAAe,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ViteUserConfig } from 'vitest/config';
|
|
2
2
|
import { type PipeworkVitestOptions } from './vitest-plugin.js';
|
|
3
|
+
export { resolveVitestWorkspace, resolveVitestModules } from './vitest-workspace.js';
|
|
3
4
|
export type { PipeworkVitestOptions };
|
|
4
5
|
export interface TestConfigOptions {
|
|
5
6
|
/** Set to `false` to skip DB auto-setup — use for pure unit test configs that never call `pipe()` or `withFlow()`. Shorthand for `pipework: { database: false }`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest-config.d.ts","sourceRoot":"","sources":["../../src/test/vitest-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AACjE,OAAO,EAAY,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAEzE,YAAY,EAAE,qBAAqB,EAAE,CAAA;AAErC,MAAM,WAAW,iBAAiB;IAChC,qKAAqK;IACrK,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IAChC,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"vitest-config.d.ts","sourceRoot":"","sources":["../../src/test/vitest-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AACjE,OAAO,EAAY,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAEzE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACpF,YAAY,EAAE,qBAAqB,EAAE,CAAA;AAErC,MAAM,WAAW,iBAAiB;IAChC,qKAAqK;IACrK,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IAChC,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAgC9E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { defineConfig } from 'vitest/config';
|
|
2
2
|
import { pipework } from './vitest-plugin.js';
|
|
3
|
+
export { resolveVitestWorkspace, resolveVitestModules } from './vitest-workspace.js';
|
|
3
4
|
export function defineTestConfig(overrides) {
|
|
4
5
|
const pipeworkOptions = { ...overrides?.pipework };
|
|
5
6
|
if (overrides?.database === false) {
|
|
@@ -20,8 +21,11 @@ export function defineTestConfig(overrides) {
|
|
|
20
21
|
testTimeout: 30_000,
|
|
21
22
|
hookTimeout: 60_000,
|
|
22
23
|
pool: 'forks',
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
isolate: false,
|
|
25
|
+
server: {
|
|
26
|
+
deps: {
|
|
27
|
+
inline: ['pipework'],
|
|
28
|
+
},
|
|
25
29
|
},
|
|
26
30
|
...testOverrides,
|
|
27
31
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest-config.js","sourceRoot":"","sources":["../../src/test/vitest-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,eAAe,CAAA;AACjE,OAAO,EAAE,QAAQ,EAA8B,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"vitest-config.js","sourceRoot":"","sources":["../../src/test/vitest-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,eAAe,CAAA;AACjE,OAAO,EAAE,QAAQ,EAA8B,MAAM,oBAAoB,CAAA;AAEzE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAkBpF,MAAM,UAAU,gBAAgB,CAAC,SAA6B;IAC5D,MAAM,eAAe,GAA0B,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAA;IACzE,IAAI,SAAS,EAAE,QAAQ,KAAK,KAAK,EAAE,CAAC;QAClC,eAAe,CAAC,QAAQ,GAAG,KAAK,CAAA;IAClC,CAAC;IACD,MAAM,aAAa,GAAG,SAAS,EAAE,IAAI,CAAA;IACrC,MAAM,cAAc,GAA4B,EAAE,CAAA;IAElD,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC/D,cAAc,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;QAClB,OAAO,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACpC,IAAI,EAAE;YACJ,WAAW,EAAE,MAAM;YACnB,WAAW,EAAE,MAAM;YACnB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;YACd,MAAM,EAAE;gBACN,IAAI,EAAE;oBACJ,MAAM,EAAE,CAAC,UAAU,CAAC;iBACrB;aACF;YACD,GAAG,aAAa;SACjB;QACD,GAAG,cAAc;KACA,CAAmB,CAAA;AACxC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { UserWorkspaceConfig } from 'vitest/config';
|
|
2
|
+
import type { VitestConfig } from '../config/schema.js';
|
|
3
|
+
import type { ResolvedModule } from '../workspace/discover.js';
|
|
4
|
+
export declare function resolveVitestWorkspace(cwd?: string): Promise<UserWorkspaceConfig[]>;
|
|
5
|
+
export declare function resolveVitestModules(vitestConfig: VitestConfig, resolvedModules: ResolvedModule[], configDir: string): UserWorkspaceConfig[];
|
|
6
|
+
//# sourceMappingURL=vitest-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest-workspace.d.ts","sourceRoot":"","sources":["../../src/test/vitest-workspace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAA2D,MAAM,qBAAqB,CAAA;AAChH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAU9D,wBAAsB,sBAAsB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA2CzF;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,cAAc,EAAE,EACjC,SAAS,EAAE,MAAM,GAChB,mBAAmB,EAAE,CAmBvB"}
|