pipework 0.4.1 → 0.5.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 +33 -60
- package/dist/audit/namespace.d.ts +2 -0
- package/dist/audit/namespace.d.ts.map +1 -1
- package/dist/audit/namespace.js +2 -0
- package/dist/audit/namespace.js.map +1 -1
- package/dist/auth/chain.d.ts +5 -0
- package/dist/auth/chain.d.ts.map +1 -1
- package/dist/auth/chain.js +1 -0
- package/dist/auth/chain.js.map +1 -1
- package/dist/auth/cookie.d.ts +6 -0
- package/dist/auth/cookie.d.ts.map +1 -1
- package/dist/auth/cookie.js +4 -0
- package/dist/auth/cookie.js.map +1 -1
- package/dist/auth/multi-org.d.ts +9 -0
- package/dist/auth/multi-org.d.ts.map +1 -1
- package/dist/auth/multi-org.js +1 -0
- package/dist/auth/multi-org.js.map +1 -1
- package/dist/auth/namespace.d.ts +8 -0
- package/dist/auth/namespace.d.ts.map +1 -1
- package/dist/auth/namespace.js +8 -0
- package/dist/auth/namespace.js.map +1 -1
- package/dist/auth/sessions.d.ts +6 -0
- package/dist/auth/sessions.d.ts.map +1 -1
- package/dist/auth/sessions.js +1 -0
- package/dist/auth/sessions.js.map +1 -1
- package/dist/auth/types.d.ts +4 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/behavior/namespace.d.ts +5 -0
- package/dist/behavior/namespace.d.ts.map +1 -1
- package/dist/behavior/namespace.js +5 -0
- package/dist/behavior/namespace.js.map +1 -1
- package/dist/cache/namespace.d.ts +3 -0
- package/dist/cache/namespace.d.ts.map +1 -1
- package/dist/cache/namespace.js +3 -0
- package/dist/cache/namespace.js.map +1 -1
- package/dist/cli/commands/add.d.ts +2 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +98 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +40 -1
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/install.d.ts +2 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +31 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/remove.d.ts +2 -0
- package/dist/cli/commands/remove.d.ts.map +1 -0
- package/dist/cli/commands/remove.js +60 -0
- package/dist/cli/commands/remove.js.map +1 -0
- package/dist/cli/commands/shared/find-config.d.ts +2 -0
- package/dist/cli/commands/shared/find-config.d.ts.map +1 -0
- package/dist/cli/commands/shared/find-config.js +19 -0
- package/dist/cli/commands/shared/find-config.js.map +1 -0
- package/dist/cli/commands/shared/load-config.d.ts +11 -0
- package/dist/cli/commands/shared/load-config.d.ts.map +1 -0
- package/dist/cli/commands/shared/load-config.js +25 -0
- package/dist/cli/commands/shared/load-config.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +2 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +28 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +28 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/namespace.d.ts +7 -0
- package/dist/config/namespace.d.ts.map +1 -1
- package/dist/config/namespace.js +5 -0
- package/dist/config/namespace.js.map +1 -1
- package/dist/config/schema.d.ts +2 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +6 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/context/types.d.ts +3 -0
- package/dist/context/types.d.ts.map +1 -1
- package/dist/db/namespace.d.ts +25 -0
- package/dist/db/namespace.d.ts.map +1 -1
- package/dist/db/namespace.js +17 -6
- package/dist/db/namespace.js.map +1 -1
- package/dist/db/types.d.ts +4 -0
- package/dist/db/types.d.ts.map +1 -1
- package/dist/di/types.d.ts +11 -0
- package/dist/di/types.d.ts.map +1 -1
- package/dist/di/types.js +1 -0
- package/dist/di/types.js.map +1 -1
- package/dist/domain/brand.d.ts +19 -0
- package/dist/domain/brand.d.ts.map +1 -0
- package/dist/domain/brand.js +2 -0
- package/dist/domain/brand.js.map +1 -0
- package/dist/domain/define.d.ts +5 -0
- package/dist/domain/define.d.ts.map +1 -0
- package/dist/domain/define.js +62 -0
- package/dist/domain/define.js.map +1 -0
- package/dist/domain/field.d.ts +34 -0
- package/dist/domain/field.d.ts.map +1 -0
- package/dist/domain/field.js +111 -0
- package/dist/domain/field.js.map +1 -0
- package/dist/domain/index.d.ts +7 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +5 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/naming.d.ts +2 -0
- package/dist/domain/naming.d.ts.map +1 -0
- package/dist/domain/naming.js +7 -0
- package/dist/domain/naming.js.map +1 -0
- package/dist/domain/project-factory.d.ts +4 -0
- package/dist/domain/project-factory.d.ts.map +1 -0
- package/dist/domain/project-factory.js +136 -0
- package/dist/domain/project-factory.js.map +1 -0
- package/dist/domain/project-schema.d.ts +6 -0
- package/dist/domain/project-schema.d.ts.map +1 -0
- package/dist/domain/project-schema.js +118 -0
- package/dist/domain/project-schema.js.map +1 -0
- package/dist/domain/project-table.d.ts +30 -0
- package/dist/domain/project-table.d.ts.map +1 -0
- package/dist/domain/project-table.js +117 -0
- package/dist/domain/project-table.js.map +1 -0
- package/dist/domain/types.d.ts +68 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/{resource → domain}/types.js.map +1 -1
- package/dist/errors/namespace.d.ts +7 -0
- package/dist/errors/namespace.d.ts.map +1 -1
- package/dist/errors/namespace.js +7 -0
- package/dist/errors/namespace.js.map +1 -1
- package/dist/fitting/namespace.d.ts +2 -0
- package/dist/fitting/namespace.d.ts.map +1 -1
- package/dist/fitting/namespace.js +2 -0
- package/dist/fitting/namespace.js.map +1 -1
- package/dist/fixture/namespace.d.ts +8 -0
- package/dist/fixture/namespace.d.ts.map +1 -1
- package/dist/fixture/namespace.js +8 -0
- package/dist/fixture/namespace.js.map +1 -1
- package/dist/flow/namespace.d.ts +9 -0
- package/dist/flow/namespace.d.ts.map +1 -1
- package/dist/flow/namespace.js +9 -0
- package/dist/flow/namespace.js.map +1 -1
- package/dist/http/namespace.d.ts +2 -0
- package/dist/http/namespace.d.ts.map +1 -1
- package/dist/http/namespace.js +2 -0
- package/dist/http/namespace.js.map +1 -1
- package/dist/http/server.d.ts +2 -0
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +1 -0
- package/dist/http/server.js.map +1 -1
- package/dist/http/types.d.ts +12 -0
- package/dist/http/types.d.ts.map +1 -1
- package/dist/jobs/cron.d.ts +1 -0
- package/dist/jobs/cron.d.ts.map +1 -1
- package/dist/jobs/cron.js.map +1 -1
- package/dist/jobs/namespace.d.ts +5 -0
- package/dist/jobs/namespace.d.ts.map +1 -1
- package/dist/jobs/namespace.js +5 -0
- package/dist/jobs/namespace.js.map +1 -1
- package/dist/jobs/queue.d.ts +4 -0
- package/dist/jobs/queue.d.ts.map +1 -1
- package/dist/jobs/queue.js.map +1 -1
- package/dist/lifecycle/namespace.d.ts +2 -0
- package/dist/lifecycle/namespace.d.ts.map +1 -1
- package/dist/lifecycle/namespace.js +2 -0
- package/dist/lifecycle/namespace.js.map +1 -1
- package/dist/log/namespace.d.ts +6 -0
- package/dist/log/namespace.d.ts.map +1 -1
- package/dist/log/namespace.js +6 -0
- package/dist/log/namespace.js.map +1 -1
- package/dist/openapi/namespace.d.ts +2 -0
- package/dist/openapi/namespace.d.ts.map +1 -1
- package/dist/openapi/namespace.js +2 -0
- package/dist/openapi/namespace.js.map +1 -1
- package/dist/pipeline/namespace.d.ts +4 -0
- package/dist/pipeline/namespace.d.ts.map +1 -1
- package/dist/pipeline/namespace.js +4 -0
- package/dist/pipeline/namespace.js.map +1 -1
- package/dist/pipework.d.ts +31 -0
- package/dist/pipework.d.ts.map +1 -1
- package/dist/pipework.js +15 -0
- package/dist/pipework.js.map +1 -1
- package/dist/rbac/index.d.ts +1 -0
- package/dist/rbac/index.d.ts.map +1 -1
- package/dist/rbac/index.js +1 -0
- package/dist/rbac/index.js.map +1 -1
- package/dist/rbac/namespace.d.ts +6 -0
- package/dist/rbac/namespace.d.ts.map +1 -1
- package/dist/rbac/namespace.js +6 -0
- package/dist/rbac/namespace.js.map +1 -1
- package/dist/schema/namespace.d.ts +10 -0
- package/dist/schema/namespace.d.ts.map +1 -1
- package/dist/schema/namespace.js +12 -4
- package/dist/schema/namespace.js.map +1 -1
- package/dist/schema/types.d.ts +2 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/state-machine/namespace.d.ts +4 -0
- package/dist/state-machine/namespace.d.ts.map +1 -1
- package/dist/state-machine/namespace.js +4 -0
- package/dist/state-machine/namespace.js.map +1 -1
- package/dist/surface/http.d.ts +2 -2
- package/dist/surface/http.d.ts.map +1 -1
- package/dist/surface/http.js +8 -2
- package/dist/surface/http.js.map +1 -1
- package/dist/surface/index.d.ts +1 -1
- package/dist/surface/index.d.ts.map +1 -1
- package/dist/surface/namespace.d.ts +4 -0
- package/dist/surface/namespace.d.ts.map +1 -1
- package/dist/surface/namespace.js +4 -0
- package/dist/surface/namespace.js.map +1 -1
- package/dist/surface/script.d.ts +2 -2
- package/dist/surface/script.d.ts.map +1 -1
- package/dist/surface/script.js +8 -2
- package/dist/surface/script.js.map +1 -1
- package/dist/surface/types.d.ts +4 -0
- package/dist/surface/types.d.ts.map +1 -1
- package/dist/surface/worker.d.ts +2 -2
- package/dist/surface/worker.d.ts.map +1 -1
- package/dist/surface/worker.js +8 -2
- package/dist/surface/worker.js.map +1 -1
- package/dist/temporal/namespace.d.ts +8 -0
- package/dist/temporal/namespace.d.ts.map +1 -1
- package/dist/temporal/namespace.js +8 -0
- package/dist/temporal/namespace.js.map +1 -1
- package/dist/tenant/namespace.d.ts +9 -0
- package/dist/tenant/namespace.d.ts.map +1 -1
- package/dist/tenant/namespace.js +9 -0
- package/dist/tenant/namespace.js.map +1 -1
- package/dist/tenant/types.d.ts +2 -0
- package/dist/tenant/types.d.ts.map +1 -1
- package/dist/test/index.d.ts +1 -0
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +1 -0
- package/dist/test/index.js.map +1 -1
- package/dist/test/vitest-config.d.ts +2 -0
- package/dist/test/vitest-config.d.ts.map +1 -1
- package/dist/test/vitest-config.js +5 -2
- package/dist/test/vitest-config.js.map +1 -1
- package/dist/test/vitest-plugin.d.ts +3 -1
- package/dist/test/vitest-plugin.d.ts.map +1 -1
- package/dist/test/vitest-plugin.js +3 -2
- package/dist/test/vitest-plugin.js.map +1 -1
- package/dist/validation/connectivity.d.ts +4 -0
- package/dist/validation/connectivity.d.ts.map +1 -0
- package/dist/validation/connectivity.js +32 -0
- package/dist/validation/connectivity.js.map +1 -0
- package/dist/validation/domain.d.ts +4 -0
- package/dist/validation/domain.d.ts.map +1 -0
- package/dist/validation/domain.js +72 -0
- package/dist/validation/domain.js.map +1 -0
- package/dist/validation/index.d.ts +6 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +6 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/startup.d.ts +12 -0
- package/dist/validation/startup.d.ts.map +1 -0
- package/dist/validation/startup.js +19 -0
- package/dist/validation/startup.js.map +1 -0
- package/dist/validation/surface.d.ts +4 -0
- package/dist/validation/surface.d.ts.map +1 -0
- package/dist/validation/surface.js +55 -0
- package/dist/validation/surface.js.map +1 -0
- package/dist/validation/types.d.ts +13 -0
- package/dist/validation/types.d.ts.map +1 -0
- package/dist/validation/types.js +13 -0
- package/dist/validation/types.js.map +1 -0
- package/dist/vector/namespace.d.ts +11 -0
- package/dist/vector/namespace.d.ts.map +1 -1
- package/dist/vector/namespace.js +11 -0
- package/dist/vector/namespace.js.map +1 -1
- package/dist/webhook/namespace.d.ts +7 -0
- package/dist/webhook/namespace.d.ts.map +1 -1
- package/dist/webhook/namespace.js +7 -0
- package/dist/webhook/namespace.js.map +1 -1
- package/dist/workspace/checksum.d.ts +4 -0
- package/dist/workspace/checksum.d.ts.map +1 -0
- package/dist/workspace/checksum.js +20 -0
- package/dist/workspace/checksum.js.map +1 -0
- package/dist/workspace/discover.d.ts +6 -0
- package/dist/workspace/discover.d.ts.map +1 -0
- package/dist/workspace/discover.js +43 -0
- package/dist/workspace/discover.js.map +1 -0
- package/dist/workspace/generate.d.ts +17 -0
- package/dist/workspace/generate.d.ts.map +1 -0
- package/dist/workspace/generate.js +153 -0
- package/dist/workspace/generate.js.map +1 -0
- package/dist/workspace/index.d.ts +5 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +5 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/sync.d.ts +18 -0
- package/dist/workspace/sync.d.ts.map +1 -0
- package/dist/workspace/sync.js +58 -0
- package/dist/workspace/sync.js.map +1 -0
- package/package.json +7 -1
- 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/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/{resource → domain}/types.js +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export function validateSurfaceIntegrity(surfaces, configuredDatabases, defaultDbAvailable) {
|
|
2
|
+
const issues = [];
|
|
3
|
+
const dbSet = new Set(configuredDatabases);
|
|
4
|
+
for (const [name, surface] of Object.entries(surfaces)) {
|
|
5
|
+
for (const db of surface.manifest.databases) {
|
|
6
|
+
if (db === '__default__') {
|
|
7
|
+
if (!defaultDbAvailable) {
|
|
8
|
+
issues.push({
|
|
9
|
+
phase: 'surface',
|
|
10
|
+
message: `"${name}" uses the default database, but multiple databases are configured: ${configuredDatabases.join(', ')}`,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else if (!dbSet.has(db)) {
|
|
15
|
+
issues.push({
|
|
16
|
+
phase: 'surface',
|
|
17
|
+
message: `"${name}" requires database "${db}" which is not configured (available: ${configuredDatabases.join(', ')})`,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (surface.kind === 'worker' && surface.manifest.jobTypes.length === 0) {
|
|
22
|
+
issues.push({
|
|
23
|
+
phase: 'surface',
|
|
24
|
+
message: `"${name}" is a worker with no job handlers`,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const seen = new Set();
|
|
28
|
+
for (const jobType of surface.manifest.jobTypes) {
|
|
29
|
+
if (seen.has(jobType)) {
|
|
30
|
+
issues.push({
|
|
31
|
+
phase: 'surface',
|
|
32
|
+
message: `"${name}" has duplicate job type "${jobType}"`,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
seen.add(jobType);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const jobOwners = new Map();
|
|
39
|
+
for (const [name, surface] of Object.entries(surfaces)) {
|
|
40
|
+
for (const jobType of surface.manifest.jobTypes) {
|
|
41
|
+
const existing = jobOwners.get(jobType);
|
|
42
|
+
if (existing !== undefined) {
|
|
43
|
+
issues.push({
|
|
44
|
+
phase: 'surface',
|
|
45
|
+
message: `job type "${jobType}" handled by both "${existing}" and "${name}"`,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
jobOwners.set(jobType, name);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return issues;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/validation/surface.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,wBAAwB,CACtC,QAAoB,EACpB,mBAAsC,EACtC,kBAA2B;IAE3B,MAAM,MAAM,GAAsB,EAAE,CAAA;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAE1C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC5C,IAAI,EAAE,KAAK,aAAa,EAAE,CAAC;gBACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,OAAO,EAAE,IAAI,IAAI,uEAAuE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACzH,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,IAAI,IAAI,wBAAwB,EAAE,yCAAyC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;iBACtH,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,IAAI,IAAI,oCAAoC;aACtD,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,IAAI,IAAI,6BAA6B,OAAO,GAAG;iBACzD,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,aAAa,OAAO,sBAAsB,QAAQ,UAAU,IAAI,GAAG;iBAC7E,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Which subsystem produced the validation issue. */
|
|
2
|
+
export type ValidationPhase = 'config' | 'workspace' | 'database' | 'domain' | 'surface';
|
|
3
|
+
/** A single validation problem with its phase and human-readable message. */
|
|
4
|
+
export interface ValidationIssue {
|
|
5
|
+
readonly phase: ValidationPhase;
|
|
6
|
+
readonly message: string;
|
|
7
|
+
}
|
|
8
|
+
/** Thrown when startup validation finds issues — lists all problems across all phases. */
|
|
9
|
+
export declare class StartupValidationError extends Error {
|
|
10
|
+
readonly issues: readonly ValidationIssue[];
|
|
11
|
+
constructor(issues: readonly ValidationIssue[]);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/validation/types.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAA;AAExF,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,0FAA0F;AAC1F,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;gBAE/B,MAAM,EAAE,SAAS,eAAe,EAAE;CAW/C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Thrown when startup validation finds issues — lists all problems across all phases. */
|
|
2
|
+
export class StartupValidationError extends Error {
|
|
3
|
+
issues;
|
|
4
|
+
constructor(issues) {
|
|
5
|
+
const summary = issues
|
|
6
|
+
.map(i => ` [${i.phase}]${' '.repeat(Math.max(1, 12 - i.phase.length))}${i.message}`)
|
|
7
|
+
.join('\n');
|
|
8
|
+
super(`Startup validation failed (${String(issues.length)} issue${issues.length === 1 ? '' : 's'}):\n\n${summary}\n\nFix these issues and restart.`);
|
|
9
|
+
this.name = 'StartupValidationError';
|
|
10
|
+
this.issues = issues;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/validation/types.ts"],"names":[],"mappings":"AASA,0FAA0F;AAC1F,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,MAAM,CAA4B;IAE3C,YAAY,MAAkC;QAC5C,MAAM,OAAO,GAAG,MAAM;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;aACrF,IAAI,CAAC,IAAI,CAAC,CAAA;QAEb,KAAK,CACH,8BAA8B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,OAAO,mCAAmC,CAC9I,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAA;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF"}
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import { vector as vectorColumn, tsvector } from './types.js';
|
|
2
2
|
import { cosineDistance, cosineSimilarity, l2Distance, innerProduct, toTsvector, toTsquery, tsRank } from './query.js';
|
|
3
3
|
import { validateVectorExtension } from './validate.js';
|
|
4
|
+
/** Vector and full-text search namespace — pgvector column types and similarity/ranking queries. */
|
|
4
5
|
export declare const vector: {
|
|
6
|
+
/** Defines a vector(N) column for embeddings. */
|
|
5
7
|
column: typeof vectorColumn;
|
|
8
|
+
/** Defines a tsvector column for full-text search. */
|
|
6
9
|
tsvector: typeof tsvector;
|
|
10
|
+
/** Cosine distance between a column and a query vector (lower = more similar). */
|
|
7
11
|
cosine: typeof cosineDistance;
|
|
12
|
+
/** Cosine similarity (higher = more similar) — 1 - cosineDistance. */
|
|
8
13
|
cosineSimilarity: typeof cosineSimilarity;
|
|
14
|
+
/** L2 (Euclidean) distance between a column and a query vector. */
|
|
9
15
|
l2: typeof l2Distance;
|
|
16
|
+
/** Inner product between a column and a query vector. */
|
|
10
17
|
innerProduct: typeof innerProduct;
|
|
18
|
+
/** Converts text to a tsvector for full-text indexing. */
|
|
11
19
|
toTsvector: typeof toTsvector;
|
|
20
|
+
/** Converts a search query string to a tsquery. */
|
|
12
21
|
toTsquery: typeof toTsquery;
|
|
22
|
+
/** Computes ts_rank for full-text search result ordering. */
|
|
13
23
|
rank: typeof tsRank;
|
|
24
|
+
/** Verifies the pgvector extension is installed and accessible. */
|
|
14
25
|
validate: typeof validateVectorExtension;
|
|
15
26
|
};
|
|
16
27
|
//# sourceMappingURL=namespace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/vector/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACtH,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAEvD,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/vector/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACtH,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAEvD,oGAAoG;AACpG,eAAO,MAAM,MAAM;IACjB,iDAAiD;;IAEjD,sDAAsD;;IAEtD,kFAAkF;;IAElF,sEAAsE;;IAEtE,mEAAmE;;IAEnE,yDAAyD;;IAEzD,0DAA0D;;IAE1D,mDAAmD;;IAEnD,6DAA6D;;IAE7D,mEAAmE;;CAEpE,CAAA"}
|
package/dist/vector/namespace.js
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import { vector as vectorColumn, tsvector } from './types.js';
|
|
2
2
|
import { cosineDistance, cosineSimilarity, l2Distance, innerProduct, toTsvector, toTsquery, tsRank } from './query.js';
|
|
3
3
|
import { validateVectorExtension } from './validate.js';
|
|
4
|
+
/** Vector and full-text search namespace — pgvector column types and similarity/ranking queries. */
|
|
4
5
|
export const vector = {
|
|
6
|
+
/** Defines a vector(N) column for embeddings. */
|
|
5
7
|
column: vectorColumn,
|
|
8
|
+
/** Defines a tsvector column for full-text search. */
|
|
6
9
|
tsvector,
|
|
10
|
+
/** Cosine distance between a column and a query vector (lower = more similar). */
|
|
7
11
|
cosine: cosineDistance,
|
|
12
|
+
/** Cosine similarity (higher = more similar) — 1 - cosineDistance. */
|
|
8
13
|
cosineSimilarity,
|
|
14
|
+
/** L2 (Euclidean) distance between a column and a query vector. */
|
|
9
15
|
l2: l2Distance,
|
|
16
|
+
/** Inner product between a column and a query vector. */
|
|
10
17
|
innerProduct,
|
|
18
|
+
/** Converts text to a tsvector for full-text indexing. */
|
|
11
19
|
toTsvector,
|
|
20
|
+
/** Converts a search query string to a tsquery. */
|
|
12
21
|
toTsquery,
|
|
22
|
+
/** Computes ts_rank for full-text search result ordering. */
|
|
13
23
|
rank: tsRank,
|
|
24
|
+
/** Verifies the pgvector extension is installed and accessible. */
|
|
14
25
|
validate: validateVectorExtension,
|
|
15
26
|
};
|
|
16
27
|
//# sourceMappingURL=namespace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/vector/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACtH,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAEvD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,MAAM,EAAE,YAAY;IACpB,QAAQ;IACR,MAAM,EAAE,cAAc;IACtB,gBAAgB;IAChB,EAAE,EAAE,UAAU;IACd,YAAY;IACZ,UAAU;IACV,SAAS;IACT,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,uBAAuB;CAClC,CAAA"}
|
|
1
|
+
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/vector/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACtH,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAEvD,oGAAoG;AACpG,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,iDAAiD;IACjD,MAAM,EAAE,YAAY;IACpB,sDAAsD;IACtD,QAAQ;IACR,kFAAkF;IAClF,MAAM,EAAE,cAAc;IACtB,sEAAsE;IACtE,gBAAgB;IAChB,mEAAmE;IACnE,EAAE,EAAE,UAAU;IACd,yDAAyD;IACzD,YAAY;IACZ,0DAA0D;IAC1D,UAAU;IACV,mDAAmD;IACnD,SAAS;IACT,6DAA6D;IAC7D,IAAI,EAAE,MAAM;IACZ,mEAAmE;IACnE,QAAQ,EAAE,uBAAuB;CAClC,CAAA"}
|
|
@@ -2,14 +2,21 @@ import { defineInboundWebhook } from './inbound.js';
|
|
|
2
2
|
import { hmacVerifier, stripeVerifier, githubVerifier } from './verify.js';
|
|
3
3
|
import { signPayload } from './sign.js';
|
|
4
4
|
import { createOutboundWebhook } from './outbound.js';
|
|
5
|
+
/** Webhook namespace — inbound verification, outbound delivery with retries, HMAC signing. */
|
|
5
6
|
export declare const webhook: {
|
|
7
|
+
/** Defines an inbound webhook handler with signature verification and optional idempotency. */
|
|
6
8
|
readonly defineInbound: typeof defineInboundWebhook;
|
|
9
|
+
/** Creates an outbound webhook system — endpoint registration, payload signing, delivery with retries. */
|
|
7
10
|
readonly createOutbound: typeof createOutboundWebhook;
|
|
8
11
|
readonly verify: {
|
|
12
|
+
/** Creates an HMAC signature verifier for inbound webhooks. */
|
|
9
13
|
readonly hmac: typeof hmacVerifier;
|
|
14
|
+
/** Creates a Stripe-compatible signature verifier. */
|
|
10
15
|
readonly stripe: typeof stripeVerifier;
|
|
16
|
+
/** Creates a GitHub-compatible signature verifier. */
|
|
11
17
|
readonly github: typeof githubVerifier;
|
|
12
18
|
};
|
|
19
|
+
/** Signs a payload with HMAC for outbound delivery — returns body, signature, timestamp, messageId. */
|
|
13
20
|
readonly sign: typeof signPayload;
|
|
14
21
|
};
|
|
15
22
|
//# sourceMappingURL=namespace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/webhook/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/webhook/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,8FAA8F;AAC9F,eAAO,MAAM,OAAO;IAClB,+FAA+F;;IAE/F,0GAA0G;;;QAIxG,+DAA+D;;QAE/D,sDAAsD;;QAEtD,sDAAsD;;;IAIxD,uGAAuG;;CAE/F,CAAA"}
|
|
@@ -2,14 +2,21 @@ import { defineInboundWebhook } from './inbound.js';
|
|
|
2
2
|
import { hmacVerifier, stripeVerifier, githubVerifier } from './verify.js';
|
|
3
3
|
import { signPayload } from './sign.js';
|
|
4
4
|
import { createOutboundWebhook } from './outbound.js';
|
|
5
|
+
/** Webhook namespace — inbound verification, outbound delivery with retries, HMAC signing. */
|
|
5
6
|
export const webhook = {
|
|
7
|
+
/** Defines an inbound webhook handler with signature verification and optional idempotency. */
|
|
6
8
|
defineInbound: defineInboundWebhook,
|
|
9
|
+
/** Creates an outbound webhook system — endpoint registration, payload signing, delivery with retries. */
|
|
7
10
|
createOutbound: createOutboundWebhook,
|
|
8
11
|
verify: {
|
|
12
|
+
/** Creates an HMAC signature verifier for inbound webhooks. */
|
|
9
13
|
hmac: hmacVerifier,
|
|
14
|
+
/** Creates a Stripe-compatible signature verifier. */
|
|
10
15
|
stripe: stripeVerifier,
|
|
16
|
+
/** Creates a GitHub-compatible signature verifier. */
|
|
11
17
|
github: githubVerifier,
|
|
12
18
|
},
|
|
19
|
+
/** Signs a payload with HMAC for outbound delivery — returns body, signature, timestamp, messageId. */
|
|
13
20
|
sign: signPayload,
|
|
14
21
|
};
|
|
15
22
|
//# sourceMappingURL=namespace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/webhook/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,aAAa,EAAE,oBAAoB;IACnC,cAAc,EAAE,qBAAqB;IAErC,MAAM,EAAE;QACN,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,cAAc;KACvB;IAED,IAAI,EAAE,WAAW;CACT,CAAA"}
|
|
1
|
+
{"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/webhook/namespace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,+FAA+F;IAC/F,aAAa,EAAE,oBAAoB;IACnC,0GAA0G;IAC1G,cAAc,EAAE,qBAAqB;IAErC,MAAM,EAAE;QACN,+DAA+D;QAC/D,IAAI,EAAE,YAAY;QAClB,sDAAsD;QACtD,MAAM,EAAE,cAAc;QACtB,sDAAsD;QACtD,MAAM,EAAE,cAAc;KACvB;IAED,uGAAuG;IACvG,IAAI,EAAE,WAAW;CACT,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function computeChecksum(input: string): string;
|
|
2
|
+
export declare function checksumFromPackageJson(content: string): string | undefined;
|
|
3
|
+
export declare function isStale(expected: string, actual: string | undefined): boolean;
|
|
4
|
+
//# sourceMappingURL=checksum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../../src/workspace/checksum.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ3E;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE7E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export function computeChecksum(input) {
|
|
3
|
+
const hash = createHash('sha256').update(input).digest('hex').slice(0, 16);
|
|
4
|
+
return `sha256:${hash}`;
|
|
5
|
+
}
|
|
6
|
+
export function checksumFromPackageJson(content) {
|
|
7
|
+
try {
|
|
8
|
+
const parsed = JSON.parse(content);
|
|
9
|
+
if (typeof parsed['_checksum'] === 'string')
|
|
10
|
+
return parsed['_checksum'];
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function isStale(expected, actual) {
|
|
18
|
+
return actual !== expected;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=checksum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/workspace/checksum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC1E,OAAO,UAAU,IAAI,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAA;QAC7D,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,WAAW,CAAC,CAAA;QACvE,OAAO,SAAS,CAAA;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,QAAgB,EAAE,MAA0B;IAClE,OAAO,MAAM,KAAK,QAAQ,CAAA;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/workspace/discover.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACpD,GAAG,EAAE,MAAM,GACV,gBAAgB,EAAE,CAWpB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { readdirSync, statSync } from 'node:fs';
|
|
2
|
+
import { join, basename, resolve } from 'node:path';
|
|
3
|
+
export function discoverModules(modules, cwd) {
|
|
4
|
+
if (modules === undefined)
|
|
5
|
+
return [];
|
|
6
|
+
if (typeof modules === 'string') {
|
|
7
|
+
return discoverFromGlob(modules, cwd);
|
|
8
|
+
}
|
|
9
|
+
return Object.entries(modules).map(([name, dir]) => ({
|
|
10
|
+
name,
|
|
11
|
+
path: resolve(cwd, dir),
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
function discoverFromGlob(pattern, cwd) {
|
|
15
|
+
const parts = pattern.split('/');
|
|
16
|
+
const starIndex = parts.indexOf('*');
|
|
17
|
+
if (starIndex === -1) {
|
|
18
|
+
throw new Error(`[pipework] Invalid modules glob: "${pattern}".\n\n` +
|
|
19
|
+
' Expected a glob pattern like "packages/*" or "libs/*".\n');
|
|
20
|
+
}
|
|
21
|
+
const parentDir = resolve(cwd, parts.slice(0, starIndex).join('/'));
|
|
22
|
+
let entries;
|
|
23
|
+
try {
|
|
24
|
+
entries = readdirSync(parentDir);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const results = [];
|
|
30
|
+
for (const entry of entries.sort()) {
|
|
31
|
+
const fullPath = join(parentDir, entry);
|
|
32
|
+
try {
|
|
33
|
+
if (statSync(fullPath).isDirectory()) {
|
|
34
|
+
results.push({ name: basename(entry), path: fullPath });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return results;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/workspace/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnD,MAAM,UAAU,eAAe,CAC7B,OAAoD,EACpD,GAAW;IAEX,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAEpC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACvC,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI;QACJ,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;KACxB,CAAC,CAAC,CAAA;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,GAAW;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEpC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,QAAQ;YACpD,4DAA4D,CAC7D,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAEnE,IAAI,OAAiB,CAAA;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,OAAO,GAAuB,EAAE,CAAA;IACtC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACvC,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;YACzD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DiscoveredModule } from './discover.js';
|
|
2
|
+
export interface WorkspaceConfig {
|
|
3
|
+
readonly name?: string | undefined;
|
|
4
|
+
readonly dependencies?: Readonly<Record<string, string>> | undefined;
|
|
5
|
+
readonly surfaces?: Readonly<Record<string, SurfaceDeps>> | undefined;
|
|
6
|
+
readonly modules: readonly DiscoveredModule[];
|
|
7
|
+
readonly pipeworkVersion: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SurfaceDeps {
|
|
10
|
+
readonly dependencies: Readonly<Record<string, string>>;
|
|
11
|
+
}
|
|
12
|
+
export interface GeneratedFile {
|
|
13
|
+
readonly relativePath: string;
|
|
14
|
+
readonly content: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function generateWorkspace(config: WorkspaceConfig): GeneratedFile[];
|
|
17
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/workspace/generate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAarD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;IACpE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC7C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACxD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,aAAa,EAAE,CAkB1E"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { computeChecksum } from './checksum.js';
|
|
2
|
+
const GENERATED_NOTICE = 'DO NOT EDIT — managed by Pipework. Deleted and regenerated by `pipework sync`.';
|
|
3
|
+
const FRAMEWORK_DEPS = {
|
|
4
|
+
'drizzle-orm': '^0.45.2',
|
|
5
|
+
'fastify': '^5.8.5',
|
|
6
|
+
'jose': '^6.2.3',
|
|
7
|
+
'pino': '^10.3.1',
|
|
8
|
+
'postgres': '^3.4.9',
|
|
9
|
+
'zod': '^4.4.3',
|
|
10
|
+
};
|
|
11
|
+
export function generateWorkspace(config) {
|
|
12
|
+
const files = [];
|
|
13
|
+
files.push(generateRootPackageJson(config));
|
|
14
|
+
files.push(generatePreinstallGuard());
|
|
15
|
+
files.push(generateWorkspaceYaml(config));
|
|
16
|
+
for (const mod of config.modules) {
|
|
17
|
+
files.push(generateModulePackageJson(mod, config));
|
|
18
|
+
}
|
|
19
|
+
if (config.surfaces !== undefined) {
|
|
20
|
+
for (const [name, surface] of Object.entries(config.surfaces)) {
|
|
21
|
+
files.push(generateSurfacePackageJson(name, surface, config));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return files;
|
|
25
|
+
}
|
|
26
|
+
function generatePreinstallGuard() {
|
|
27
|
+
const script = [
|
|
28
|
+
`// ${GENERATED_NOTICE}`,
|
|
29
|
+
`'use strict';`,
|
|
30
|
+
`const fs = require('fs');`,
|
|
31
|
+
`const crypto = require('crypto');`,
|
|
32
|
+
``,
|
|
33
|
+
`function checksum(content) {`,
|
|
34
|
+
` const withoutChecksum = content.replace(/"_checksum":\\s*"[^"]*",?\\n?/, '');`,
|
|
35
|
+
` const hash = crypto.createHash('sha256').update(withoutChecksum).digest('hex').slice(0, 16);`,
|
|
36
|
+
` return 'sha256:' + hash;`,
|
|
37
|
+
`}`,
|
|
38
|
+
``,
|
|
39
|
+
`function check(file) {`,
|
|
40
|
+
` if (!fs.existsSync(file)) return;`,
|
|
41
|
+
` const raw = fs.readFileSync(file, 'utf8');`,
|
|
42
|
+
` let pkg;`,
|
|
43
|
+
` try { pkg = JSON.parse(raw); } catch { return; }`,
|
|
44
|
+
` if (!pkg._generated || !pkg._checksum) return;`,
|
|
45
|
+
` const expected = pkg._checksum;`,
|
|
46
|
+
` delete pkg._checksum;`,
|
|
47
|
+
` const actual = checksum(JSON.stringify(pkg, null, 2) + '\\n');`,
|
|
48
|
+
` if (expected !== actual) {`,
|
|
49
|
+
` console.error('\\n Pipework workspace files are stale.\\n Run: npx pipework install\\n');`,
|
|
50
|
+
` process.exit(1);`,
|
|
51
|
+
` }`,
|
|
52
|
+
`}`,
|
|
53
|
+
``,
|
|
54
|
+
`check('package.json');`,
|
|
55
|
+
``,
|
|
56
|
+
].join('\n');
|
|
57
|
+
return {
|
|
58
|
+
relativePath: 'pipework-guard.cjs',
|
|
59
|
+
content: script,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function generateRootPackageJson(config) {
|
|
63
|
+
const appDeps = config.dependencies ?? {};
|
|
64
|
+
const allDeps = { ...FRAMEWORK_DEPS, ...appDeps };
|
|
65
|
+
const pkg = {
|
|
66
|
+
_generated: GENERATED_NOTICE,
|
|
67
|
+
name: config.name ?? 'app',
|
|
68
|
+
private: true,
|
|
69
|
+
type: 'module',
|
|
70
|
+
packageManager: 'pnpm@9.15.4',
|
|
71
|
+
engines: { node: '>=22' },
|
|
72
|
+
scripts: {
|
|
73
|
+
preinstall: 'node -e "try{require(\'./pipework-guard.cjs\')}catch{}"',
|
|
74
|
+
},
|
|
75
|
+
dependencies: sortKeys(allDeps),
|
|
76
|
+
devDependencies: sortKeys({
|
|
77
|
+
pipework: `^${config.pipeworkVersion}`,
|
|
78
|
+
typescript: '^6.0.3',
|
|
79
|
+
vitest: '^4.1.5',
|
|
80
|
+
}),
|
|
81
|
+
};
|
|
82
|
+
const content = JSON.stringify(pkg, null, 2) + '\n';
|
|
83
|
+
const checksum = computeChecksum(content);
|
|
84
|
+
pkg['_checksum'] = checksum;
|
|
85
|
+
return {
|
|
86
|
+
relativePath: 'package.json',
|
|
87
|
+
content: JSON.stringify(pkg, null, 2) + '\n',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function generateWorkspaceYaml(config) {
|
|
91
|
+
const packages = ['.'];
|
|
92
|
+
for (const mod of config.modules) {
|
|
93
|
+
packages.push(mod.name);
|
|
94
|
+
}
|
|
95
|
+
if (config.surfaces !== undefined) {
|
|
96
|
+
for (const name of Object.keys(config.surfaces)) {
|
|
97
|
+
packages.push(`surfaces/${name}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const lines = [
|
|
101
|
+
`# ${GENERATED_NOTICE}`,
|
|
102
|
+
'packages:',
|
|
103
|
+
...packages.map(p => ` - "${p}"`),
|
|
104
|
+
'',
|
|
105
|
+
];
|
|
106
|
+
return {
|
|
107
|
+
relativePath: 'pnpm-workspace.yaml',
|
|
108
|
+
content: lines.join('\n'),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function generateModulePackageJson(mod, config) {
|
|
112
|
+
const appDeps = config.dependencies ?? {};
|
|
113
|
+
const pkg = {
|
|
114
|
+
_generated: GENERATED_NOTICE,
|
|
115
|
+
name: `@${config.name ?? 'app'}/${mod.name}`,
|
|
116
|
+
private: true,
|
|
117
|
+
type: 'module',
|
|
118
|
+
dependencies: sortKeys(appDeps),
|
|
119
|
+
};
|
|
120
|
+
const content = JSON.stringify(pkg, null, 2) + '\n';
|
|
121
|
+
const checksum = computeChecksum(content);
|
|
122
|
+
pkg['_checksum'] = checksum;
|
|
123
|
+
return {
|
|
124
|
+
relativePath: `${mod.name}/package.json`,
|
|
125
|
+
content: JSON.stringify(pkg, null, 2) + '\n',
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function generateSurfacePackageJson(name, surface, config) {
|
|
129
|
+
const appDeps = config.dependencies ?? {};
|
|
130
|
+
const surfaceDeps = surface.dependencies;
|
|
131
|
+
const pkg = {
|
|
132
|
+
_generated: GENERATED_NOTICE,
|
|
133
|
+
name: `@${config.name ?? 'app'}/surface-${name}`,
|
|
134
|
+
private: true,
|
|
135
|
+
type: 'module',
|
|
136
|
+
dependencies: sortKeys({ ...appDeps, ...surfaceDeps }),
|
|
137
|
+
};
|
|
138
|
+
const content = JSON.stringify(pkg, null, 2) + '\n';
|
|
139
|
+
const checksum = computeChecksum(content);
|
|
140
|
+
pkg['_checksum'] = checksum;
|
|
141
|
+
return {
|
|
142
|
+
relativePath: `surfaces/${name}/package.json`,
|
|
143
|
+
content: JSON.stringify(pkg, null, 2) + '\n',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function sortKeys(obj) {
|
|
147
|
+
const sorted = {};
|
|
148
|
+
for (const key of Object.keys(obj).sort()) {
|
|
149
|
+
sorted[key] = obj[key];
|
|
150
|
+
}
|
|
151
|
+
return sorted;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/workspace/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { sync, type SyncInput, type SyncResult } from './sync.js';
|
|
2
|
+
export { computeChecksum, checksumFromPackageJson, isStale } from './checksum.js';
|
|
3
|
+
export { discoverModules, type DiscoveredModule } from './discover.js';
|
|
4
|
+
export { generateWorkspace, type WorkspaceConfig, type GeneratedFile, type SurfaceDeps } from './generate.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmC,MAAM,WAAW,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACjF,OAAO,EAAE,eAAe,EAAyB,MAAM,eAAe,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAA8D,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type GeneratedFile } from './generate.js';
|
|
2
|
+
import type { Blueprint } from '../config/schema.js';
|
|
3
|
+
import type { SurfaceManifest } from '../surface/types.js';
|
|
4
|
+
export interface SyncInput {
|
|
5
|
+
readonly config: Blueprint;
|
|
6
|
+
readonly surfaces?: Readonly<Record<string, {
|
|
7
|
+
readonly manifest: SurfaceManifest;
|
|
8
|
+
}>> | undefined;
|
|
9
|
+
readonly cwd: string;
|
|
10
|
+
readonly appName?: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
export interface SyncResult {
|
|
13
|
+
readonly files: readonly GeneratedFile[];
|
|
14
|
+
readonly written: number;
|
|
15
|
+
readonly skipped: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function sync(input: SyncInput): SyncResult;
|
|
18
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/workspace/sync.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6D,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IAChG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CA2CjD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { writeFileSync, mkdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join, dirname } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { discoverModules } from './discover.js';
|
|
5
|
+
import { generateWorkspace } from './generate.js';
|
|
6
|
+
export function sync(input) {
|
|
7
|
+
const pipeworkVersion = readPipeworkVersion();
|
|
8
|
+
const surfaceDeps = input.surfaces !== undefined
|
|
9
|
+
? Object.fromEntries(Object.entries(input.surfaces).map(([name, s]) => [
|
|
10
|
+
name,
|
|
11
|
+
{ dependencies: s.manifest.dependencies },
|
|
12
|
+
]))
|
|
13
|
+
: undefined;
|
|
14
|
+
const modules = discoverModules(input.config.modules, input.cwd);
|
|
15
|
+
const workspaceConfig = {
|
|
16
|
+
name: input.appName,
|
|
17
|
+
dependencies: input.config.dependencies,
|
|
18
|
+
surfaces: surfaceDeps,
|
|
19
|
+
modules,
|
|
20
|
+
pipeworkVersion,
|
|
21
|
+
};
|
|
22
|
+
const files = generateWorkspace(workspaceConfig);
|
|
23
|
+
let written = 0;
|
|
24
|
+
let skipped = 0;
|
|
25
|
+
for (const file of files) {
|
|
26
|
+
const fullPath = join(input.cwd, file.relativePath);
|
|
27
|
+
const dir = dirname(fullPath);
|
|
28
|
+
mkdirSync(dir, { recursive: true });
|
|
29
|
+
const existing = readFileSafe(fullPath);
|
|
30
|
+
if (existing === file.content) {
|
|
31
|
+
skipped++;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
writeFileSync(fullPath, file.content, 'utf-8');
|
|
35
|
+
written++;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return { files, written, skipped };
|
|
39
|
+
}
|
|
40
|
+
function readFileSafe(path) {
|
|
41
|
+
try {
|
|
42
|
+
return readFileSync(path, 'utf-8');
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function readPipeworkVersion() {
|
|
49
|
+
try {
|
|
50
|
+
const pkgPath = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'package.json');
|
|
51
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
52
|
+
return pkg.version;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return '0.0.0';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/workspace/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAA8D,MAAM,eAAe,CAAA;AAiB7G,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,eAAe,GAAG,mBAAmB,EAAE,CAAA;IAE7C,MAAM,WAAW,GACf,KAAK,CAAC,QAAQ,KAAK,SAAS;QAC1B,CAAC,CAAC,MAAM,CAAC,WAAW,CAClB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI;YACJ,EAAE,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE;SAC1C,CAAC,CACH;QACD,CAAC,CAAC,SAAS,CAAA;IAEf,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhE,MAAM,eAAe,GAAoB;QACvC,IAAI,EAAE,KAAK,CAAC,OAAO;QACnB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;QACvC,QAAQ,EAAE,WAAW;QACrB,OAAO;QACP,eAAe;KAChB,CAAA;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAA;IAEhD,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QACnD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC7B,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAEnC,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,QAAQ,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAA;QACX,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC9C,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AACpC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAA;QACzF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAwB,CAAA;QAC7E,OAAO,GAAG,CAAC,OAAO,CAAA;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAA;IAChB,CAAC;AACH,CAAC"}
|