pipework 0.6.4 → 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.
Files changed (168) hide show
  1. package/dist/cli/commands/check.d.ts.map +1 -1
  2. package/dist/cli/commands/check.js +62 -1
  3. package/dist/cli/commands/check.js.map +1 -1
  4. package/dist/cli/commands/run.d.ts.map +1 -1
  5. package/dist/cli/commands/run.js +4 -8
  6. package/dist/cli/commands/run.js.map +1 -1
  7. package/dist/config/discover.d.ts +1 -0
  8. package/dist/config/discover.d.ts.map +1 -1
  9. package/dist/config/discover.js +1 -1
  10. package/dist/config/discover.js.map +1 -1
  11. package/dist/config/index.d.ts +2 -2
  12. package/dist/config/index.d.ts.map +1 -1
  13. package/dist/config/index.js +1 -1
  14. package/dist/config/index.js.map +1 -1
  15. package/dist/config/namespace.d.ts +76 -0
  16. package/dist/config/namespace.d.ts.map +1 -1
  17. package/dist/config/schema.d.ts +250 -0
  18. package/dist/config/schema.d.ts.map +1 -1
  19. package/dist/config/schema.js +38 -0
  20. package/dist/config/schema.js.map +1 -1
  21. package/dist/db/db.d.ts +0 -1
  22. package/dist/db/db.d.ts.map +1 -1
  23. package/dist/db/db.js +2 -5
  24. package/dist/db/db.js.map +1 -1
  25. package/dist/db/namespace.d.ts +0 -5
  26. package/dist/db/namespace.d.ts.map +1 -1
  27. package/dist/db/namespace.js +0 -5
  28. package/dist/db/namespace.js.map +1 -1
  29. package/dist/di/builder.d.ts +3 -2
  30. package/dist/di/builder.d.ts.map +1 -1
  31. package/dist/di/builder.js +11 -4
  32. package/dist/di/builder.js.map +1 -1
  33. package/dist/di/resolve.d.ts.map +1 -1
  34. package/dist/di/resolve.js +18 -4
  35. package/dist/di/resolve.js.map +1 -1
  36. package/dist/di/types.d.ts +1 -1
  37. package/dist/di/types.d.ts.map +1 -1
  38. package/dist/domain/define.d.ts.map +1 -1
  39. package/dist/domain/define.js +5 -0
  40. package/dist/domain/define.js.map +1 -1
  41. package/dist/domain/project-table.js +4 -0
  42. package/dist/domain/project-table.js.map +1 -1
  43. package/dist/fitting/namespace.d.ts +1 -5
  44. package/dist/fitting/namespace.d.ts.map +1 -1
  45. package/dist/fitting/namespace.js +1 -5
  46. package/dist/fitting/namespace.js.map +1 -1
  47. package/dist/fixture/index.d.ts +1 -1
  48. package/dist/fixture/index.d.ts.map +1 -1
  49. package/dist/fixture/index.js +1 -1
  50. package/dist/fixture/index.js.map +1 -1
  51. package/dist/fixture/namespace.d.ts +3 -3
  52. package/dist/fixture/namespace.d.ts.map +1 -1
  53. package/dist/fixture/namespace.js +3 -3
  54. package/dist/fixture/namespace.js.map +1 -1
  55. package/dist/fixture/to-handlers.d.ts +6 -0
  56. package/dist/fixture/to-handlers.d.ts.map +1 -0
  57. package/dist/fixture/to-handlers.js +245 -0
  58. package/dist/fixture/to-handlers.js.map +1 -0
  59. package/dist/flow/namespace.d.ts +1 -10
  60. package/dist/flow/namespace.d.ts.map +1 -1
  61. package/dist/flow/namespace.js +1 -10
  62. package/dist/flow/namespace.js.map +1 -1
  63. package/dist/http/namespace.d.ts +2 -6
  64. package/dist/http/namespace.d.ts.map +1 -1
  65. package/dist/http/namespace.js +2 -6
  66. package/dist/http/namespace.js.map +1 -1
  67. package/dist/http/server.d.ts.map +1 -1
  68. package/dist/http/server.js +17 -11
  69. package/dist/http/server.js.map +1 -1
  70. package/dist/index.d.ts +2 -2
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js.map +1 -1
  73. package/dist/openapi/generate.d.ts.map +1 -1
  74. package/dist/openapi/generate.js +10 -8
  75. package/dist/openapi/generate.js.map +1 -1
  76. package/dist/pipework.d.ts +7 -0
  77. package/dist/pipework.d.ts.map +1 -1
  78. package/dist/pipework.js +11 -0
  79. package/dist/pipework.js.map +1 -1
  80. package/dist/surface/validate.d.ts +2 -0
  81. package/dist/surface/validate.d.ts.map +1 -1
  82. package/dist/surface/validate.js +54 -0
  83. package/dist/surface/validate.js.map +1 -1
  84. package/dist/temporal/definition-queries.d.ts +6 -6
  85. package/dist/temporal/definition-queries.d.ts.map +1 -1
  86. package/dist/temporal/definition-queries.js.map +1 -1
  87. package/dist/tenant/index.d.ts +1 -1
  88. package/dist/tenant/index.d.ts.map +1 -1
  89. package/dist/tenant/index.js +1 -1
  90. package/dist/tenant/index.js.map +1 -1
  91. package/dist/tenant/namespace.d.ts +2 -4
  92. package/dist/tenant/namespace.d.ts.map +1 -1
  93. package/dist/tenant/namespace.js +2 -4
  94. package/dist/tenant/namespace.js.map +1 -1
  95. package/dist/tenant/scoped-db.d.ts +1 -0
  96. package/dist/tenant/scoped-db.d.ts.map +1 -1
  97. package/dist/tenant/scoped-db.js +63 -2
  98. package/dist/tenant/scoped-db.js.map +1 -1
  99. package/dist/test/index.d.ts +1 -1
  100. package/dist/test/index.d.ts.map +1 -1
  101. package/dist/test/index.js +1 -1
  102. package/dist/test/index.js.map +1 -1
  103. package/dist/test/vitest-config.d.ts +1 -0
  104. package/dist/test/vitest-config.d.ts.map +1 -1
  105. package/dist/test/vitest-config.js +6 -2
  106. package/dist/test/vitest-config.js.map +1 -1
  107. package/dist/test/vitest-workspace.d.ts +6 -0
  108. package/dist/test/vitest-workspace.d.ts.map +1 -0
  109. package/dist/test/vitest-workspace.js +293 -0
  110. package/dist/test/vitest-workspace.js.map +1 -0
  111. package/dist/validation/index.d.ts +1 -1
  112. package/dist/validation/index.d.ts.map +1 -1
  113. package/dist/validation/index.js +1 -1
  114. package/dist/validation/index.js.map +1 -1
  115. package/dist/validation/startup.js +2 -2
  116. package/dist/validation/startup.js.map +1 -1
  117. package/dist/workspace/generate.d.ts +2 -0
  118. package/dist/workspace/generate.d.ts.map +1 -1
  119. package/dist/workspace/generate.js +15 -0
  120. package/dist/workspace/generate.js.map +1 -1
  121. package/dist/workspace/index.d.ts +1 -1
  122. package/dist/workspace/index.d.ts.map +1 -1
  123. package/dist/workspace/index.js +1 -1
  124. package/dist/workspace/index.js.map +1 -1
  125. package/dist/workspace/sync.d.ts.map +1 -1
  126. package/dist/workspace/sync.js +1 -0
  127. package/dist/workspace/sync.js.map +1 -1
  128. package/package.json +22 -24
  129. package/dist/drizzle/index.d.ts +0 -3
  130. package/dist/drizzle/index.d.ts.map +0 -1
  131. package/dist/drizzle/index.js +0 -3
  132. package/dist/drizzle/index.js.map +0 -1
  133. package/dist/resource/batch.d.ts +0 -17
  134. package/dist/resource/batch.d.ts.map +0 -1
  135. package/dist/resource/batch.js +0 -47
  136. package/dist/resource/batch.js.map +0 -1
  137. package/dist/resource/builder.d.ts +0 -11
  138. package/dist/resource/builder.d.ts.map +0 -1
  139. package/dist/resource/builder.js +0 -12
  140. package/dist/resource/builder.js.map +0 -1
  141. package/dist/resource/errors.d.ts +0 -7
  142. package/dist/resource/errors.d.ts.map +0 -1
  143. package/dist/resource/errors.js +0 -9
  144. package/dist/resource/errors.js.map +0 -1
  145. package/dist/resource/index.d.ts +0 -9
  146. package/dist/resource/index.d.ts.map +0 -1
  147. package/dist/resource/index.js +0 -6
  148. package/dist/resource/index.js.map +0 -1
  149. package/dist/resource/paginate.d.ts +0 -13
  150. package/dist/resource/paginate.d.ts.map +0 -1
  151. package/dist/resource/paginate.js +0 -29
  152. package/dist/resource/paginate.js.map +0 -1
  153. package/dist/resource/register.d.ts +0 -16
  154. package/dist/resource/register.d.ts.map +0 -1
  155. package/dist/resource/register.js +0 -181
  156. package/dist/resource/register.js.map +0 -1
  157. package/dist/resource/types.d.ts +0 -69
  158. package/dist/resource/types.d.ts.map +0 -1
  159. package/dist/resource/types.js +0 -2
  160. package/dist/resource/types.js.map +0 -1
  161. package/dist/trunk.d.ts +0 -35
  162. package/dist/trunk.d.ts.map +0 -1
  163. package/dist/trunk.js +0 -102
  164. package/dist/trunk.js.map +0 -1
  165. package/dist/validation/surface.d.ts +0 -4
  166. package/dist/validation/surface.d.ts.map +0 -1
  167. package/dist/validation/surface.js +0 -55
  168. package/dist/validation/surface.js.map +0 -1
package/dist/trunk.js DELETED
@@ -1,102 +0,0 @@
1
- import { loadConfig as parseConfig } from './config/load.js';
2
- import { createManagedConnection } from './db/pool.js';
3
- import { InvariantViolation } from './invariants/assert.js';
4
- export function createTrunk(raw) {
5
- const config = parseConfig(raw);
6
- const pool = createPoolState();
7
- const isolation = createIsolationState();
8
- const connections = createConnectionTracker();
9
- return { config, pool, isolation, connections };
10
- }
11
- function createPoolState() {
12
- const map = new Map();
13
- return {
14
- getOrCreate(config) {
15
- const existing = map.get(config.name);
16
- if (existing)
17
- return existing;
18
- const managed = createManagedConnection(config, () => map.delete(config.name));
19
- map.set(config.name, managed);
20
- return managed;
21
- },
22
- get(name) {
23
- return map.get(name);
24
- },
25
- async closeAll() {
26
- const closing = [...map.values()].map(c => c.close());
27
- await Promise.all(closing);
28
- },
29
- count() {
30
- return map.size;
31
- },
32
- };
33
- }
34
- function createIsolationState() {
35
- let active = 0;
36
- let totalBegins = 0;
37
- let totalEnds = 0;
38
- return {
39
- markBegin() {
40
- active++;
41
- totalBegins++;
42
- },
43
- markEnd() {
44
- if (active <= 0) {
45
- throw new InvariantViolation('isolation-end-without-begin', {
46
- activeIsolationContexts: active,
47
- totalBegins,
48
- totalEnds,
49
- });
50
- }
51
- active--;
52
- totalEnds++;
53
- },
54
- assertClean() {
55
- if (active !== 0) {
56
- throw new InvariantViolation('isolation-context-leak', {
57
- activeIsolationContexts: active,
58
- totalBegins,
59
- totalEnds,
60
- delta: totalBegins - totalEnds,
61
- });
62
- }
63
- },
64
- stats() {
65
- return { active, totalBegins, totalEnds };
66
- },
67
- reset() {
68
- active = 0;
69
- totalBegins = 0;
70
- totalEnds = 0;
71
- },
72
- };
73
- }
74
- function createConnectionTracker() {
75
- const tracked = new Map();
76
- return {
77
- track(id, name, context) {
78
- tracked.set(id, { name, createdAt: Date.now(), context });
79
- },
80
- release(id) {
81
- tracked.delete(id);
82
- },
83
- activeCount() {
84
- return tracked.size;
85
- },
86
- assertNoLeaks(maxExpected) {
87
- if (tracked.size > maxExpected) {
88
- throw new InvariantViolation('connection-pool-bounded', {
89
- active: tracked.size,
90
- maxExpected,
91
- connections: [...tracked.entries()].map(([id, c]) => ({
92
- id,
93
- name: c.name,
94
- age_ms: Date.now() - c.createdAt,
95
- context: c.context,
96
- })),
97
- });
98
- }
99
- },
100
- };
101
- }
102
- //# sourceMappingURL=trunk.js.map
package/dist/trunk.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"trunk.js","sourceRoot":"","sources":["../src/trunk.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { ValidationIssue } from './types.js';
2
- import type { SurfaceMap } from '../surface/types.js';
3
- export declare function validateSurfaceIntegrity(surfaces: SurfaceMap, configuredDatabases: readonly string[], defaultDbAvailable: boolean): ValidationIssue[];
4
- //# sourceMappingURL=surface.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/validation/surface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,UAAU,EACpB,mBAAmB,EAAE,SAAS,MAAM,EAAE,EACtC,kBAAkB,EAAE,OAAO,GAC1B,eAAe,EAAE,CAwDnB"}
@@ -1,55 +0,0 @@
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
@@ -1 +0,0 @@
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"}