@tonytang99/integration-core 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/index.d.ts +9 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +13 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/pipeline/builder.d.ts +83 -0
  6. package/dist/pipeline/builder.d.ts.map +1 -0
  7. package/dist/pipeline/builder.js +210 -0
  8. package/dist/pipeline/builder.js.map +1 -0
  9. package/dist/pipeline/context.d.ts +43 -16
  10. package/dist/pipeline/context.d.ts.map +1 -1
  11. package/dist/pipeline/context.js +80 -7
  12. package/dist/pipeline/context.js.map +1 -1
  13. package/dist/pipeline/executor.d.ts +24 -0
  14. package/dist/pipeline/executor.d.ts.map +1 -0
  15. package/dist/pipeline/executor.js +136 -0
  16. package/dist/pipeline/executor.js.map +1 -0
  17. package/dist/pipeline/iterators.d.ts +74 -0
  18. package/dist/pipeline/iterators.d.ts.map +1 -0
  19. package/dist/pipeline/iterators.js +244 -0
  20. package/dist/pipeline/iterators.js.map +1 -0
  21. package/dist/pipeline/middleware.d.ts +26 -0
  22. package/dist/pipeline/middleware.d.ts.map +1 -0
  23. package/dist/pipeline/middleware.js +69 -0
  24. package/dist/pipeline/middleware.js.map +1 -0
  25. package/dist/pipeline/phase.d.ts +25 -3
  26. package/dist/pipeline/phase.d.ts.map +1 -1
  27. package/dist/pipeline/phase.js +33 -3
  28. package/dist/pipeline/phase.js.map +1 -1
  29. package/dist/pipeline/retry.d.ts +57 -0
  30. package/dist/pipeline/retry.d.ts.map +1 -0
  31. package/dist/pipeline/retry.js +139 -0
  32. package/dist/pipeline/retry.js.map +1 -0
  33. package/dist/registry/phase-registry.d.ts +24 -0
  34. package/dist/registry/phase-registry.d.ts.map +1 -0
  35. package/dist/registry/phase-registry.js +69 -0
  36. package/dist/registry/phase-registry.js.map +1 -0
  37. package/dist/slots/well-known-slots.d.ts +27 -0
  38. package/dist/slots/well-known-slots.d.ts.map +1 -0
  39. package/dist/slots/well-known-slots.js +31 -0
  40. package/dist/slots/well-known-slots.js.map +1 -0
  41. package/dist/types/common.d.ts +45 -0
  42. package/dist/types/common.d.ts.map +1 -0
  43. package/dist/types/common.js +11 -0
  44. package/dist/types/common.js.map +1 -0
  45. package/dist/types/errors.d.ts +62 -0
  46. package/dist/types/errors.d.ts.map +1 -0
  47. package/dist/types/errors.js +262 -0
  48. package/dist/types/errors.js.map +1 -0
  49. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,3 +1,12 @@
1
+ export * from './types/common';
2
+ export * from './types/errors';
1
3
  export * from './pipeline/context';
2
4
  export * from './pipeline/phase';
5
+ export * from './pipeline/builder';
6
+ export * from './pipeline/executor';
7
+ export * from './pipeline/middleware';
8
+ export * from './pipeline/retry';
9
+ export * from './pipeline/iterators';
10
+ export * from './slots/well-known-slots';
11
+ export * from './registry/phase-registry';
3
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -14,6 +14,19 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ // Types
18
+ __exportStar(require("./types/common"), exports);
19
+ __exportStar(require("./types/errors"), exports);
20
+ // Pipeline
17
21
  __exportStar(require("./pipeline/context"), exports);
18
22
  __exportStar(require("./pipeline/phase"), exports);
23
+ __exportStar(require("./pipeline/builder"), exports);
24
+ __exportStar(require("./pipeline/executor"), exports);
25
+ __exportStar(require("./pipeline/middleware"), exports);
26
+ __exportStar(require("./pipeline/retry"), exports);
27
+ __exportStar(require("./pipeline/iterators"), exports);
28
+ // Slots
29
+ __exportStar(require("./slots/well-known-slots"), exports);
30
+ // Registry
31
+ __exportStar(require("./registry/phase-registry"), exports);
19
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,QAAQ;AACR,iDAA+B;AAC/B,iDAA+B;AAE/B,WAAW;AACX,qDAAmC;AACnC,mDAAiC;AACjC,qDAAmC;AACnC,sDAAoC;AACpC,wDAAsC;AACtC,mDAAiC;AACjC,uDAAqC;AAErC,QAAQ;AACR,2DAAyC;AAEzC,WAAW;AACX,4DAA0C"}
@@ -0,0 +1,83 @@
1
+ import { Phase } from './phase';
2
+ import { Pipeline, ErrorHandler } from './executor';
3
+ import { SlotKey, ClientConfig, PipelineError } from '../types/common';
4
+ import { PipelineContext } from './context';
5
+ export declare class PipelineBuilder {
6
+ private phases;
7
+ private errorHandlers;
8
+ add(phase: Phase): this;
9
+ addIf(condition: boolean | ((config: ClientConfig) => boolean), phase: Phase): this;
10
+ addAll(...phases: Phase[]): this;
11
+ /**
12
+ * Adds a phase that only executes when the predicate returns true.
13
+ * Unlike addIf which checks config at build time, addWhen evaluates
14
+ * the predicate at runtime against the current pipeline context.
15
+ */
16
+ addWhen(predicate: (ctx: PipelineContext) => boolean | Promise<boolean>, phase: Phase): this;
17
+ /**
18
+ * Adds a branch that executes different phases based on a condition.
19
+ * @param condition - Predicate evaluated at runtime
20
+ * @param ifTrue - Phase(s) to execute when condition is true
21
+ * @param ifFalse - Optional phase(s) to execute when condition is false
22
+ */
23
+ addBranch(condition: (ctx: PipelineContext) => boolean | Promise<boolean>, ifTrue: Phase | Phase[], ifFalse?: Phase | Phase[]): this;
24
+ onError(phaseOrCode: string, handler: ErrorHandler): this;
25
+ build(): Pipeline;
26
+ private validate;
27
+ }
28
+ /**
29
+ * Wraps a phase and checks a condition before executing.
30
+ * Proxies all metadata (name, description, tags) to the inner phase.
31
+ */
32
+ declare class ConditionalPhase implements Phase {
33
+ private inner;
34
+ private condition;
35
+ constructor(inner: Phase, condition: (config: ClientConfig) => boolean);
36
+ get name(): string;
37
+ get description(): string;
38
+ get requires(): SlotKey[];
39
+ get produces(): SlotKey[];
40
+ get optionalReads(): SlotKey[] | undefined;
41
+ get dependsOn(): string[] | undefined;
42
+ get tags(): string[] | undefined;
43
+ execute(ctx: PipelineContext): Promise<PipelineContext>;
44
+ shouldSkip(ctx: PipelineContext): Promise<boolean>;
45
+ rollback(ctx: PipelineContext, error: PipelineError): Promise<void>;
46
+ }
47
+ /**
48
+ * Wraps a phase and checks a context-based predicate before executing.
49
+ * This enables runtime decisions based on data in the pipeline context.
50
+ */
51
+ declare class ContextConditionalPhase implements Phase {
52
+ private inner;
53
+ private predicate;
54
+ constructor(inner: Phase, predicate: (ctx: PipelineContext) => boolean | Promise<boolean>);
55
+ get name(): string;
56
+ get description(): string;
57
+ get requires(): SlotKey[];
58
+ get produces(): SlotKey[];
59
+ get optionalReads(): SlotKey[] | undefined;
60
+ get dependsOn(): string[] | undefined;
61
+ get tags(): string[] | undefined;
62
+ execute(ctx: PipelineContext): Promise<PipelineContext>;
63
+ shouldSkip(ctx: PipelineContext): Promise<boolean>;
64
+ rollback(ctx: PipelineContext, error: PipelineError): Promise<void>;
65
+ }
66
+ /**
67
+ * Implements branching logic - executes different phases based on a condition.
68
+ */
69
+ declare class BranchPhase implements Phase {
70
+ private condition;
71
+ private trueBranch;
72
+ private falseBranch;
73
+ constructor(condition: (ctx: PipelineContext) => boolean | Promise<boolean>, ifTrue: Phase | Phase[], ifFalse?: Phase | Phase[]);
74
+ get name(): string;
75
+ get description(): string;
76
+ get requires(): SlotKey<unknown>[];
77
+ get produces(): SlotKey<unknown>[];
78
+ execute(ctx: PipelineContext): Promise<PipelineContext>;
79
+ shouldSkip(): Promise<boolean>;
80
+ rollback(ctx: PipelineContext, error: PipelineError): Promise<void>;
81
+ }
82
+ export { ConditionalPhase, ContextConditionalPhase, BranchPhase };
83
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/pipeline/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BranchPhase = exports.ContextConditionalPhase = exports.ConditionalPhase = exports.PipelineBuilder = void 0;
4
+ const executor_1 = require("./executor");
5
+ class PipelineBuilder {
6
+ phases = [];
7
+ errorHandlers = new Map();
8
+ add(phase) {
9
+ this.phases.push(phase);
10
+ return this;
11
+ }
12
+ addIf(condition, phase) {
13
+ if (typeof condition === 'function') {
14
+ this.phases.push(new ConditionalPhase(phase, condition));
15
+ }
16
+ else if (condition) {
17
+ this.phases.push(phase);
18
+ }
19
+ return this;
20
+ }
21
+ addAll(...phases) {
22
+ this.phases.push(...phases);
23
+ return this;
24
+ }
25
+ /**
26
+ * Adds a phase that only executes when the predicate returns true.
27
+ * Unlike addIf which checks config at build time, addWhen evaluates
28
+ * the predicate at runtime against the current pipeline context.
29
+ */
30
+ addWhen(predicate, phase) {
31
+ this.phases.push(new ContextConditionalPhase(phase, predicate));
32
+ return this;
33
+ }
34
+ /**
35
+ * Adds a branch that executes different phases based on a condition.
36
+ * @param condition - Predicate evaluated at runtime
37
+ * @param ifTrue - Phase(s) to execute when condition is true
38
+ * @param ifFalse - Optional phase(s) to execute when condition is false
39
+ */
40
+ addBranch(condition, ifTrue, ifFalse) {
41
+ this.phases.push(new BranchPhase(condition, ifTrue, ifFalse));
42
+ return this;
43
+ }
44
+ onError(phaseOrCode, handler) {
45
+ this.errorHandlers.set(phaseOrCode, handler);
46
+ return this;
47
+ }
48
+ build() {
49
+ const errors = this.validate();
50
+ if (errors.length > 0) {
51
+ throw new Error(`Pipeline validation failed:\n${errors.join('\n')}`);
52
+ }
53
+ // In a real implementation, restore the topological sort here
54
+ // For now, we return the phases in added order
55
+ return new executor_1.Pipeline(this.phases, this.errorHandlers);
56
+ }
57
+ validate() {
58
+ const errors = [];
59
+ const produced = new Set();
60
+ for (const phase of this.phases) {
61
+ for (const req of phase.requires) {
62
+ // Cast to string for Set lookup
63
+ if (!produced.has(req)) {
64
+ // Warning: strict validation.
65
+ // If you inject slots via Context initial state, this might false-positive.
66
+ errors.push(`Phase "${phase.name}" requires slot "${req}" but no earlier phase produces it`);
67
+ }
68
+ }
69
+ for (const prod of phase.produces) {
70
+ produced.add(prod);
71
+ }
72
+ }
73
+ return errors;
74
+ }
75
+ }
76
+ exports.PipelineBuilder = PipelineBuilder;
77
+ /**
78
+ * Wraps a phase and checks a condition before executing.
79
+ * Proxies all metadata (name, description, tags) to the inner phase.
80
+ */
81
+ class ConditionalPhase {
82
+ inner;
83
+ condition;
84
+ constructor(inner, condition) {
85
+ this.inner = inner;
86
+ this.condition = condition;
87
+ }
88
+ // Required Metadata
89
+ get name() { return this.inner.name; }
90
+ get description() { return this.inner.description; }
91
+ get requires() { return this.inner.requires; }
92
+ get produces() { return this.inner.produces; }
93
+ // Optional Metadata
94
+ get optionalReads() { return this.inner.optionalReads; }
95
+ get dependsOn() { return this.inner.dependsOn; }
96
+ get tags() { return this.inner.tags; }
97
+ async execute(ctx) {
98
+ // Check condition dynamically at runtime
99
+ if (!this.condition(ctx.config)) {
100
+ return ctx; // Return context unchanged if skipped
101
+ }
102
+ return this.inner.execute(ctx);
103
+ }
104
+ async shouldSkip(ctx) {
105
+ // If the config condition fails, we definitely skip
106
+ if (!this.condition(ctx.config))
107
+ return true;
108
+ // Otherwise, check if the inner phase wants to skip
109
+ return this.inner.shouldSkip ? await this.inner.shouldSkip(ctx) : false;
110
+ }
111
+ async rollback(ctx, error) {
112
+ if (this.inner.rollback) {
113
+ await this.inner.rollback(ctx, error);
114
+ }
115
+ }
116
+ }
117
+ exports.ConditionalPhase = ConditionalPhase;
118
+ /**
119
+ * Wraps a phase and checks a context-based predicate before executing.
120
+ * This enables runtime decisions based on data in the pipeline context.
121
+ */
122
+ class ContextConditionalPhase {
123
+ inner;
124
+ predicate;
125
+ constructor(inner, predicate) {
126
+ this.inner = inner;
127
+ this.predicate = predicate;
128
+ }
129
+ get name() { return `conditional:${this.inner.name}`; }
130
+ get description() { return `Conditionally executes: ${this.inner.description}`; }
131
+ get requires() { return this.inner.requires; }
132
+ get produces() { return this.inner.produces; }
133
+ get optionalReads() { return this.inner.optionalReads; }
134
+ get dependsOn() { return this.inner.dependsOn; }
135
+ get tags() { return this.inner.tags; }
136
+ async execute(ctx) {
137
+ const shouldExecute = await this.predicate(ctx);
138
+ if (!shouldExecute) {
139
+ return ctx; // Skip execution, return context unchanged
140
+ }
141
+ return this.inner.execute(ctx);
142
+ }
143
+ async shouldSkip(ctx) {
144
+ const shouldExecute = await this.predicate(ctx);
145
+ if (!shouldExecute)
146
+ return true;
147
+ return this.inner.shouldSkip ? await this.inner.shouldSkip(ctx) : false;
148
+ }
149
+ async rollback(ctx, error) {
150
+ if (this.inner.rollback) {
151
+ await this.inner.rollback(ctx, error);
152
+ }
153
+ }
154
+ }
155
+ exports.ContextConditionalPhase = ContextConditionalPhase;
156
+ /**
157
+ * Implements branching logic - executes different phases based on a condition.
158
+ */
159
+ class BranchPhase {
160
+ condition;
161
+ trueBranch;
162
+ falseBranch;
163
+ constructor(condition, ifTrue, ifFalse) {
164
+ this.condition = condition;
165
+ this.trueBranch = Array.isArray(ifTrue) ? ifTrue : [ifTrue];
166
+ this.falseBranch = ifFalse
167
+ ? (Array.isArray(ifFalse) ? ifFalse : [ifFalse])
168
+ : [];
169
+ }
170
+ get name() { return 'branch'; }
171
+ get description() { return 'Conditional branch execution'; }
172
+ get requires() {
173
+ // Combine requires from both branches
174
+ const allReqs = new Set();
175
+ [...this.trueBranch, ...this.falseBranch].forEach(p => {
176
+ p.requires.forEach(r => allReqs.add(r));
177
+ });
178
+ return Array.from(allReqs);
179
+ }
180
+ get produces() {
181
+ // Combine produces from both branches
182
+ const allProds = new Set();
183
+ [...this.trueBranch, ...this.falseBranch].forEach(p => {
184
+ p.produces.forEach(r => allProds.add(r));
185
+ });
186
+ return Array.from(allProds);
187
+ }
188
+ async execute(ctx) {
189
+ const result = await this.condition(ctx);
190
+ const branch = result ? this.trueBranch : this.falseBranch;
191
+ let currentCtx = ctx;
192
+ for (const phase of branch) {
193
+ currentCtx = await phase.execute(currentCtx);
194
+ }
195
+ return currentCtx;
196
+ }
197
+ async shouldSkip() {
198
+ return false; // Branch itself doesn't skip, it chooses a path
199
+ }
200
+ async rollback(ctx, error) {
201
+ // Rollback all phases in both branches that might have executed
202
+ for (const phase of [...this.trueBranch, ...this.falseBranch]) {
203
+ if (phase.rollback) {
204
+ await phase.rollback(ctx, error);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ exports.BranchPhase = BranchPhase;
210
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/pipeline/builder.ts"],"names":[],"mappings":";;;AAEA,yCAAoD;AAIpD,MAAa,eAAe;IAClB,MAAM,GAAY,EAAE,CAAC;IACrB,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IAExD,GAAG,CAAC,KAAY;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CACH,SAAwD,EACxD,KAAY;QAEZ,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,GAAG,MAAe;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,OAAO,CACL,SAA+D,EAC/D,KAAY;QAEZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,SAAS,CACP,SAA+D,EAC/D,MAAuB,EACvB,OAAyB;QAEzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,WAAmB,EAAE,OAAqB;QAChD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,8DAA8D;QAC9D,+CAA+C;QAC/C,OAAO,IAAI,mBAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACvD,CAAC;IAEO,QAAQ;QACd,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjC,gCAAgC;gBAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAa,CAAC,EAAE,CAAC;oBACjC,+BAA+B;oBAC/B,4EAA4E;oBAC5E,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,oBAAoB,GAAG,oCAAoC,CAAC,CAAC;gBAC/F,CAAC;YACH,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAClC,QAAQ,CAAC,GAAG,CAAC,IAAc,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAzFD,0CAyFC;AAED;;;GAGG;AACH,MAAM,gBAAgB;IAEV;IACA;IAFV,YACU,KAAY,EACZ,SAA4C;QAD5C,UAAK,GAAL,KAAK,CAAO;QACZ,cAAS,GAAT,SAAS,CAAmC;IACnD,CAAC;IAEJ,oBAAoB;IACpB,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACpD,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,oBAAoB;IACpB,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtC,KAAK,CAAC,OAAO,CAAC,GAAoB;QAChC,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC,CAAC,sCAAsC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAoB;QACnC,oDAAoD;QACpD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAE7C,oDAAoD;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAoB,EAAE,KAAoB;QACvD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF;AA0GQ,4CAAgB;AAxGzB;;;GAGG;AACH,MAAM,uBAAuB;IAEjB;IACA;IAFV,YACU,KAAY,EACZ,SAA+D;QAD/D,UAAK,GAAL,KAAK,CAAO;QACZ,cAAS,GAAT,SAAS,CAAsD;IACtE,CAAC;IAEJ,IAAI,IAAI,KAAK,OAAO,eAAe,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,WAAW,KAAK,OAAO,2BAA2B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACjF,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtC,KAAK,CAAC,OAAO,CAAC,GAAoB;QAChC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,GAAG,CAAC,CAAC,2CAA2C;QACzD,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAoB;QACnC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAoB,EAAE,KAAoB;QACvD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF;AAmE0B,0DAAuB;AAjElD;;GAEG;AACH,MAAM,WAAW;IAKL;IAJF,UAAU,CAAU;IACpB,WAAW,CAAU;IAE7B,YACU,SAA+D,EACvE,MAAuB,EACvB,OAAyB;QAFjB,cAAS,GAAT,SAAS,CAAsD;QAIvE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,GAAG,OAAO;YACxB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,QAAQ,CAAC,CAAC,CAAC;IAC/B,IAAI,WAAW,KAAK,OAAO,8BAA8B,CAAC,CAAC,CAAC;IAE5D,IAAI,QAAQ;QACV,sCAAsC;QACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACpD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,QAAQ;QACV,sCAAsC;QACtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC7C,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACpD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAoB;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAE3D,IAAI,UAAU,GAAG,GAAG,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,UAAU,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,KAAK,CAAC,CAAC,gDAAgD;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAoB,EAAE,KAAoB;QACvD,gEAAgE;QAChE,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAGmD,kCAAW"}
@@ -1,21 +1,48 @@
1
- export type SlotKey = string & {
2
- readonly __brand: unique symbol;
3
- };
4
- export declare const createSlotKey: <T = unknown>(key: string) => SlotKey;
1
+ import { SlotKey, PipelineError, ClientConfig, ExecutionMetadata, PhaseExecution } from '../types/common';
2
+ export interface SerializedContext {
3
+ slots: Record<string, unknown>;
4
+ errors: readonly PipelineError[];
5
+ warnings: readonly string[];
6
+ metadata: ExecutionMetadata;
7
+ }
5
8
  export interface PipelineContext {
6
- readonly slots: Map<SlotKey, unknown>;
7
- readonly config: Record<string, unknown>;
8
- get<T>(key: SlotKey): T | undefined;
9
- require<T>(key: SlotKey): T;
10
- set<T>(key: SlotKey, value: T): PipelineContext;
9
+ readonly slots: ReadonlyMap<SlotKey<any>, unknown>;
10
+ readonly errors: readonly PipelineError[];
11
+ readonly warnings: readonly string[];
12
+ readonly metadata: ExecutionMetadata;
13
+ readonly config: ClientConfig;
14
+ get<T>(key: SlotKey<T>): T | undefined;
15
+ require<T>(key: SlotKey<T>): T;
16
+ has(key: SlotKey<any>): boolean;
17
+ set<T>(key: SlotKey<T>, value: T): PipelineContext;
18
+ delete(key: SlotKey<any>): PipelineContext;
19
+ addError(error: PipelineError): PipelineContext;
20
+ addWarning(message: string): PipelineContext;
21
+ updateMetadata(update: Partial<ExecutionMetadata>): PipelineContext;
22
+ startPhase(phaseName: string): PipelineContext;
23
+ completePhase(phaseName: string, status: PhaseExecution['status'], error?: PipelineError): PipelineContext;
24
+ toJSON(): SerializedContext;
25
+ clone(): PipelineContext;
11
26
  }
12
27
  export declare class PipelineContextImpl implements PipelineContext {
13
- readonly slots: Map<SlotKey, unknown>;
14
- readonly config: Record<string, unknown>;
15
- constructor(slots: Map<SlotKey, unknown>, config: Record<string, unknown>);
16
- get<T>(key: SlotKey): T | undefined;
17
- require<T>(key: SlotKey): T;
18
- set<T>(key: SlotKey, value: T): PipelineContext;
28
+ readonly slots: ReadonlyMap<SlotKey<any>, unknown>;
29
+ readonly errors: readonly PipelineError[];
30
+ readonly warnings: readonly string[];
31
+ readonly metadata: ExecutionMetadata;
32
+ readonly config: ClientConfig;
33
+ constructor(slots: ReadonlyMap<SlotKey<any>, unknown>, errors: readonly PipelineError[], warnings: readonly string[], metadata: ExecutionMetadata, config: ClientConfig);
34
+ get<T>(key: SlotKey<T>): T | undefined;
35
+ require<T>(key: SlotKey<T>): T;
36
+ has(key: SlotKey<any>): boolean;
37
+ set<T>(key: SlotKey<T>, value: T): PipelineContext;
38
+ delete(key: SlotKey<any>): PipelineContext;
39
+ addError(error: PipelineError): PipelineContext;
40
+ addWarning(message: string): PipelineContext;
41
+ updateMetadata(update: Partial<ExecutionMetadata>): PipelineContext;
42
+ startPhase(phaseName: string): PipelineContext;
43
+ completePhase(phaseName: string, status: PhaseExecution['status'], error?: PipelineError): PipelineContext;
44
+ clone(): PipelineContext;
45
+ toJSON(): SerializedContext;
19
46
  }
20
- export declare function createContext(config: Record<string, unknown>): PipelineContext;
47
+ export declare function createContext(config: ClientConfig): PipelineContext;
21
48
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/pipeline/context.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;AAEnE,eAAO,MAAM,aAAa,GAAI,CAAC,GAAG,OAAO,EAAE,KAAK,MAAM,KAAG,OAAyB,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC;IACpC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC;IAC5B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC;CACjD;AAED,qBAAa,mBAAoB,YAAW,eAAe;aAEvC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;aAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAD/B,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAGjD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS;IAInC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC;IAQ3B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,eAAe;CAKhD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAE9E"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/pipeline/context.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PipelineContextImpl = exports.createSlotKey = void 0;
3
+ exports.PipelineContextImpl = void 0;
4
4
  exports.createContext = createContext;
5
- const createSlotKey = (key) => key;
6
- exports.createSlotKey = createSlotKey;
7
5
  class PipelineContextImpl {
8
6
  slots;
7
+ errors;
8
+ warnings;
9
+ metadata;
9
10
  config;
10
- constructor(slots, config) {
11
+ constructor(slots, errors, warnings, metadata, config) {
11
12
  this.slots = slots;
13
+ this.errors = errors;
14
+ this.warnings = warnings;
15
+ this.metadata = metadata;
12
16
  this.config = config;
13
17
  }
14
18
  get(key) {
@@ -17,18 +21,87 @@ class PipelineContextImpl {
17
21
  require(key) {
18
22
  const value = this.get(key);
19
23
  if (value === undefined) {
20
- throw new Error(`Required slot "${key}" not found`);
24
+ throw new Error(`Required slot "${key}" is not present in context`);
21
25
  }
22
26
  return value;
23
27
  }
28
+ has(key) {
29
+ return this.slots.has(key);
30
+ }
24
31
  set(key, value) {
25
32
  const newSlots = new Map(this.slots);
26
33
  newSlots.set(key, value);
27
- return new PipelineContextImpl(newSlots, this.config);
34
+ return new PipelineContextImpl(newSlots, this.errors, this.warnings, this.metadata, this.config);
35
+ }
36
+ delete(key) {
37
+ const newSlots = new Map(this.slots);
38
+ newSlots.delete(key);
39
+ return new PipelineContextImpl(newSlots, this.errors, this.warnings, this.metadata, this.config);
40
+ }
41
+ addError(error) {
42
+ return new PipelineContextImpl(this.slots, [...this.errors, error], this.warnings, this.metadata, this.config);
43
+ }
44
+ addWarning(message) {
45
+ return new PipelineContextImpl(this.slots, this.errors, [...this.warnings, message], this.metadata, this.config);
46
+ }
47
+ updateMetadata(update) {
48
+ return new PipelineContextImpl(this.slots, this.errors, this.warnings, { ...this.metadata, ...update }, this.config);
49
+ }
50
+ startPhase(phaseName) {
51
+ const execution = {
52
+ phaseName,
53
+ startedAt: new Date(),
54
+ status: 'running',
55
+ slotsRead: [],
56
+ slotsWritten: [],
57
+ };
58
+ return this.updateMetadata({
59
+ currentPhase: phaseName,
60
+ phaseHistory: [...this.metadata.phaseHistory, execution],
61
+ });
62
+ }
63
+ completePhase(phaseName, status, error) {
64
+ const history = [...this.metadata.phaseHistory];
65
+ const currentPhaseIndex = history.findIndex(h => h.phaseName === phaseName && h.status === 'running');
66
+ if (currentPhaseIndex === -1) {
67
+ // Graceful handling if phase wasn't tracked as running
68
+ return this;
69
+ }
70
+ const currentPhase = history[currentPhaseIndex];
71
+ const completedAt = new Date();
72
+ const duration = completedAt.getTime() - currentPhase.startedAt.getTime();
73
+ history[currentPhaseIndex] = {
74
+ ...currentPhase,
75
+ completedAt,
76
+ duration,
77
+ status,
78
+ error,
79
+ };
80
+ return this.updateMetadata({
81
+ currentPhase: undefined,
82
+ phaseHistory: history,
83
+ });
84
+ }
85
+ clone() {
86
+ return new PipelineContextImpl(new Map(this.slots), [...this.errors], [...this.warnings], { ...this.metadata, phaseHistory: [...this.metadata.phaseHistory] }, this.config);
87
+ }
88
+ toJSON() {
89
+ return {
90
+ slots: Object.fromEntries(this.slots),
91
+ errors: this.errors,
92
+ warnings: this.warnings,
93
+ metadata: this.metadata,
94
+ };
28
95
  }
29
96
  }
30
97
  exports.PipelineContextImpl = PipelineContextImpl;
31
98
  function createContext(config) {
32
- return new PipelineContextImpl(new Map(), config);
99
+ return new PipelineContextImpl(new Map(), [], [], {
100
+ pipelineId: config.clientId,
101
+ executionId: `exec_${Date.now()}`,
102
+ traceId: `trace_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`,
103
+ startedAt: new Date(),
104
+ phaseHistory: [],
105
+ }, config);
33
106
  }
34
107
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/pipeline/context.ts"],"names":[],"mappings":";;;AAsCA,sCAEC;AAtCM,MAAM,aAAa,GAAG,CAAc,GAAW,EAAW,EAAE,CAAC,GAAc,CAAC;AAAtE,QAAA,aAAa,iBAAyD;AAWnF,MAAa,mBAAmB;IAEZ;IACA;IAFlB,YACkB,KAA4B,EAC5B,MAA+B;QAD/B,UAAK,GAAL,KAAK,CAAuB;QAC5B,WAAM,GAAN,MAAM,CAAyB;IAC9C,CAAC;IAEJ,GAAG,CAAI,GAAY;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAkB,CAAC;IAC9C,CAAC;IAED,OAAO,CAAI,GAAY;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,aAAa,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAI,GAAY,EAAE,KAAQ;QAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;CACF;AAvBD,kDAuBC;AAED,SAAgB,aAAa,CAAC,MAA+B;IAC3D,OAAO,IAAI,mBAAmB,CAAC,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/pipeline/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Phase } from './phase';
2
+ import { PipelineContext } from './context';
3
+ import { PipelineError } from '../types/common';
4
+ export interface PipelineResult {
5
+ success: boolean;
6
+ skipped?: boolean;
7
+ reason?: string;
8
+ error?: PipelineError;
9
+ context: PipelineContext;
10
+ executedPhases: string[];
11
+ duration: number;
12
+ }
13
+ export type ErrorHandler = (ctx: PipelineContext, error: PipelineError) => Promise<'continue' | 'halt' | 'retry'>;
14
+ export declare class Pipeline {
15
+ private phases;
16
+ private errorHandlers;
17
+ constructor(phases: Phase[], errorHandlers: Map<string, ErrorHandler>);
18
+ execute(initialCtx: PipelineContext): Promise<PipelineResult>;
19
+ private validateRequirements;
20
+ private handleError;
21
+ private rollback;
22
+ private toPipelineError;
23
+ }
24
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/pipeline/executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,aAAa,EAA0B,MAAM,iBAAiB,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,aAAa,KACjB,OAAO,CAAC,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAe5C,qBAAa,QAAQ;IAEjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa;gBADb,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IAG5C,OAAO,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAqEnE,OAAO,CAAC,oBAAoB;YAad,WAAW;YAaX,QAAQ;IAgBtB,OAAO,CAAC,eAAe;CAmBxB"}