@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.
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/builder.d.ts +83 -0
- package/dist/pipeline/builder.d.ts.map +1 -0
- package/dist/pipeline/builder.js +210 -0
- package/dist/pipeline/builder.js.map +1 -0
- package/dist/pipeline/context.d.ts +43 -16
- package/dist/pipeline/context.d.ts.map +1 -1
- package/dist/pipeline/context.js +80 -7
- package/dist/pipeline/context.js.map +1 -1
- package/dist/pipeline/executor.d.ts +24 -0
- package/dist/pipeline/executor.d.ts.map +1 -0
- package/dist/pipeline/executor.js +136 -0
- package/dist/pipeline/executor.js.map +1 -0
- package/dist/pipeline/iterators.d.ts +74 -0
- package/dist/pipeline/iterators.d.ts.map +1 -0
- package/dist/pipeline/iterators.js +244 -0
- package/dist/pipeline/iterators.js.map +1 -0
- package/dist/pipeline/middleware.d.ts +26 -0
- package/dist/pipeline/middleware.d.ts.map +1 -0
- package/dist/pipeline/middleware.js +69 -0
- package/dist/pipeline/middleware.js.map +1 -0
- package/dist/pipeline/phase.d.ts +25 -3
- package/dist/pipeline/phase.d.ts.map +1 -1
- package/dist/pipeline/phase.js +33 -3
- package/dist/pipeline/phase.js.map +1 -1
- package/dist/pipeline/retry.d.ts +57 -0
- package/dist/pipeline/retry.d.ts.map +1 -0
- package/dist/pipeline/retry.js +139 -0
- package/dist/pipeline/retry.js.map +1 -0
- package/dist/registry/phase-registry.d.ts +24 -0
- package/dist/registry/phase-registry.d.ts.map +1 -0
- package/dist/registry/phase-registry.js +69 -0
- package/dist/registry/phase-registry.js.map +1 -0
- package/dist/slots/well-known-slots.d.ts +27 -0
- package/dist/slots/well-known-slots.d.ts.map +1 -0
- package/dist/slots/well-known-slots.js +31 -0
- package/dist/slots/well-known-slots.js.map +1 -0
- package/dist/types/common.d.ts +45 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +11 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/errors.d.ts +62 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +262 -0
- package/dist/types/errors.js.map +1 -0
- 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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
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":"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"}
|
|
@@ -1,21 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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:
|
|
7
|
-
readonly
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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:
|
|
14
|
-
readonly
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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:
|
|
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":"
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/pipeline/context.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAG9B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACvC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAGhC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC;IACnD,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;IAG3C,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CAAC;IAChD,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC;IAG7C,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,eAAe,CAAC;IACpE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAAC;IAC/C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,GAAG,eAAe,CAAC;IAG3G,MAAM,IAAI,iBAAiB,CAAC;IAC5B,KAAK,IAAI,eAAe,CAAC;CAC1B;AAED,qBAAa,mBAAoB,YAAW,eAAe;aAEvC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;aACzC,MAAM,EAAE,SAAS,aAAa,EAAE;aAChC,QAAQ,EAAE,SAAS,MAAM,EAAE;aAC3B,QAAQ,EAAE,iBAAiB;aAC3B,MAAM,EAAE,YAAY;gBAJpB,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EACzC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,YAAY;IAGtC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;IAItC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAQ9B,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO;IAI/B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,eAAe;IAYlD,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe;IAY1C,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe;IAU/C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IAU5C,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,eAAe;IAUnE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAe9C,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAChC,KAAK,CAAC,EAAE,aAAa,GACpB,eAAe;IA6BlB,KAAK,IAAI,eAAe;IAUxB,MAAM,IAAI,iBAAiB;CAQ5B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,CAcnE"}
|
package/dist/pipeline/context.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PipelineContextImpl =
|
|
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
|
|
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(),
|
|
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":";;;
|
|
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"}
|