@wpkernel/pipeline 0.12.5-beta.0 → 0.12.6-beta.1
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 +69 -8
- package/dist/{async-utils.d.ts → core/async-utils.d.ts} +9 -0
- package/dist/core/async-utils.d.ts.map +1 -0
- package/dist/core/async-utils.js +46 -0
- package/dist/core/createExtension.d.ts.map +1 -0
- package/dist/core/dependency-graph.d.ts.map +1 -0
- package/dist/core/error-factory.d.ts.map +1 -0
- package/dist/{executor.d.ts → core/execution-utils.d.ts} +1 -1
- package/dist/core/execution-utils.d.ts.map +1 -0
- package/dist/core/executor.d.ts +2 -0
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/core/extensions/index.d.ts +4 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/official.d.ts.map +1 -0
- package/dist/{extensions.d.ts → core/extensions/runner.d.ts} +2 -5
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +73 -0
- package/dist/core/helper.d.ts.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +36 -0
- package/dist/{internal → core/internal}/extension-coordinator.d.ts +3 -3
- package/dist/core/internal/extension-coordinator.d.ts.map +1 -0
- package/dist/{internal → core/internal}/extension-coordinator.js +7 -6
- package/dist/{internal → core/internal}/extension-coordinator.types.d.ts +14 -14
- package/dist/core/internal/extension-coordinator.types.d.ts.map +1 -0
- package/dist/core/makePipeline.d.ts +5 -0
- package/dist/core/makePipeline.d.ts.map +1 -0
- package/dist/core/makePipeline.js +148 -0
- package/dist/core/registration.d.ts.map +1 -0
- package/dist/core/registration.js +59 -0
- package/dist/core/rollback.d.ts.map +1 -0
- package/dist/core/runner/context.d.ts +13 -0
- package/dist/core/runner/context.d.ts.map +1 -0
- package/dist/core/runner/context.js +86 -0
- package/dist/core/runner/diagnostics.d.ts +48 -0
- package/dist/core/runner/diagnostics.d.ts.map +1 -0
- package/dist/core/runner/diagnostics.js +82 -0
- package/dist/core/runner/execution.d.ts +6 -0
- package/dist/core/runner/execution.d.ts.map +1 -0
- package/dist/core/runner/execution.js +66 -0
- package/dist/core/runner/index.d.ts +14 -0
- package/dist/core/runner/index.d.ts.map +1 -0
- package/dist/core/runner/index.js +9 -0
- package/dist/core/runner/program.d.ts +7 -0
- package/dist/core/runner/program.d.ts.map +1 -0
- package/dist/core/runner/program.js +146 -0
- package/dist/core/runner/rollback.d.ts +48 -0
- package/dist/core/runner/rollback.d.ts.map +1 -0
- package/dist/core/runner/rollback.js +75 -0
- package/dist/core/runner/stage-factories.d.ts +69 -0
- package/dist/core/runner/stage-factories.d.ts.map +1 -0
- package/dist/core/runner/stage-factories.js +121 -0
- package/dist/core/runner/types.d.ts +202 -0
- package/dist/core/runner/types.d.ts.map +1 -0
- package/dist/{types.d.ts → core/types.d.ts} +62 -97
- package/dist/core/types.d.ts.map +1 -0
- package/dist/extensions/index.js +6 -2
- package/dist/index.d.ts +21 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -17
- package/dist/standard-pipeline/createPipeline.d.ts +6 -0
- package/dist/standard-pipeline/createPipeline.d.ts.map +1 -0
- package/dist/standard-pipeline/createPipeline.js +7 -0
- package/dist/standard-pipeline/runner/index.d.ts +21 -0
- package/dist/standard-pipeline/runner/index.d.ts.map +1 -0
- package/dist/standard-pipeline/runner/index.js +244 -0
- package/dist/standard-pipeline/types.d.ts +150 -0
- package/dist/standard-pipeline/types.d.ts.map +1 -0
- package/package.json +6 -1
- package/dist/async-utils.d.ts.map +0 -1
- package/dist/async-utils.js +0 -40
- package/dist/createExtension.d.ts.map +0 -1
- package/dist/createPipeline.d.ts +0 -45
- package/dist/createPipeline.d.ts.map +0 -1
- package/dist/createPipeline.js +0 -9
- package/dist/dependency-graph.d.ts.map +0 -1
- package/dist/error-factory.d.ts.map +0 -1
- package/dist/executor.d.ts.map +0 -1
- package/dist/extensions/index.d.ts +0 -3
- package/dist/extensions/index.d.ts.map +0 -1
- package/dist/extensions/official.d.ts.map +0 -1
- package/dist/extensions.d.ts.map +0 -1
- package/dist/extensions.js +0 -88
- package/dist/helper.d.ts.map +0 -1
- package/dist/internal/diagnostic-manager.d.ts +0 -29
- package/dist/internal/diagnostic-manager.d.ts.map +0 -1
- package/dist/internal/diagnostic-manager.js +0 -90
- package/dist/internal/diagnostic-manager.types.d.ts +0 -70
- package/dist/internal/diagnostic-manager.types.d.ts.map +0 -1
- package/dist/internal/extension-coordinator.d.ts.map +0 -1
- package/dist/internal/extension-coordinator.types.d.ts.map +0 -1
- package/dist/internal/helper-execution.d.ts +0 -32
- package/dist/internal/helper-execution.d.ts.map +0 -1
- package/dist/internal/helper-execution.js +0 -33
- package/dist/internal/pipeline-program-utils.d.ts +0 -127
- package/dist/internal/pipeline-program-utils.d.ts.map +0 -1
- package/dist/internal/pipeline-program-utils.js +0 -161
- package/dist/internal/pipeline-runner.types.d.ts +0 -195
- package/dist/internal/pipeline-runner.types.d.ts.map +0 -1
- package/dist/internal/runner/context.d.ts +0 -6
- package/dist/internal/runner/context.d.ts.map +0 -1
- package/dist/internal/runner/context.js +0 -169
- package/dist/internal/runner/execution.d.ts +0 -6
- package/dist/internal/runner/execution.d.ts.map +0 -1
- package/dist/internal/runner/execution.js +0 -40
- package/dist/internal/runner/index.d.ts +0 -13
- package/dist/internal/runner/index.d.ts.map +0 -1
- package/dist/internal/runner/index.js +0 -11
- package/dist/internal/runner/program.d.ts +0 -8
- package/dist/internal/runner/program.d.ts.map +0 -1
- package/dist/internal/runner/program.js +0 -294
- package/dist/makePipeline.d.ts +0 -20
- package/dist/makePipeline.d.ts.map +0 -1
- package/dist/makePipeline.js +0 -139
- package/dist/registration.d.ts.map +0 -1
- package/dist/registration.js +0 -59
- package/dist/rollback.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- /package/dist/{createExtension.d.ts → core/createExtension.d.ts} +0 -0
- /package/dist/{createExtension.js → core/createExtension.js} +0 -0
- /package/dist/{dependency-graph.d.ts → core/dependency-graph.d.ts} +0 -0
- /package/dist/{dependency-graph.js → core/dependency-graph.js} +0 -0
- /package/dist/{error-factory.d.ts → core/error-factory.d.ts} +0 -0
- /package/dist/{error-factory.js → core/error-factory.js} +0 -0
- /package/dist/{executor.js → core/execution-utils.js} +0 -0
- /package/dist/{extensions → core/extensions}/official.d.ts +0 -0
- /package/dist/{extensions → core/extensions}/official.js +0 -0
- /package/dist/{helper.d.ts → core/helper.d.ts} +0 -0
- /package/dist/{helper.js → core/helper.js} +0 -0
- /package/dist/{registration.d.ts → core/registration.d.ts} +0 -0
- /package/dist/{rollback.d.ts → core/rollback.d.ts} +0 -0
- /package/dist/{rollback.js → core/rollback.js} +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { composeK as h, maybeThen as b } from "../async-utils.js";
|
|
2
|
+
import { makeCommitStage as R, makeAfterFragmentsStage as H, makeFinalizeResultStage as A, isHalt as c, makeHelperStageFactory as w } from "./stage-factories.js";
|
|
3
|
+
const L = (r, l) => {
|
|
4
|
+
const f = (o) => ({
|
|
5
|
+
__halt: !0,
|
|
6
|
+
error: o
|
|
7
|
+
}), g = (o) => (t) => ({
|
|
8
|
+
context: o.context,
|
|
9
|
+
reporter: o.reporter,
|
|
10
|
+
userState: o.userState
|
|
11
|
+
}), u = {
|
|
12
|
+
pushStep: l.pushStep,
|
|
13
|
+
toRollbackContext: (o) => ({
|
|
14
|
+
context: o.context,
|
|
15
|
+
extensionCoordinator: o.extensionCoordinator,
|
|
16
|
+
extensionState: o.extensionState,
|
|
17
|
+
extensionStack: o.extensionStack
|
|
18
|
+
}),
|
|
19
|
+
halt: f,
|
|
20
|
+
isHalt: c,
|
|
21
|
+
onHelperRollbackError: r.options.onHelperRollbackError
|
|
22
|
+
}, x = w({
|
|
23
|
+
pushStep: l.pushStep,
|
|
24
|
+
toRollbackContext: (o) => ({
|
|
25
|
+
context: o.context,
|
|
26
|
+
extensionCoordinator: o.extensionCoordinator,
|
|
27
|
+
extensionState: o.extensionState,
|
|
28
|
+
extensionStack: o.extensionStack
|
|
29
|
+
}),
|
|
30
|
+
halt: f,
|
|
31
|
+
isHalt: c,
|
|
32
|
+
onHelperRollbackError: r.options.onHelperRollbackError
|
|
33
|
+
}), k = (o, t, i) => {
|
|
34
|
+
const a = {
|
|
35
|
+
getOrder: (e) => e.helperOrders?.get(o) ?? [],
|
|
36
|
+
makeArgs: g,
|
|
37
|
+
onVisited: (e, n, s) => t?.onVisited ? t.onVisited(e, n, s) : e,
|
|
38
|
+
readRollbacks: (e) => e.helperRollbacks?.get(o)?.map((n) => n.helper) ?? [],
|
|
39
|
+
invoke: ({
|
|
40
|
+
helper: e,
|
|
41
|
+
args: n,
|
|
42
|
+
next: s
|
|
43
|
+
}) => {
|
|
44
|
+
if (typeof e == "function")
|
|
45
|
+
return e(n, s);
|
|
46
|
+
if (typeof e == "object" && e !== null && "apply" in e && typeof e.apply == "function")
|
|
47
|
+
return e.apply(n, s);
|
|
48
|
+
throw new Error(
|
|
49
|
+
`Invalid helper: expected function or object with .apply method. Got: ${typeof e}`
|
|
50
|
+
);
|
|
51
|
+
},
|
|
52
|
+
...t
|
|
53
|
+
};
|
|
54
|
+
return t?.makeArgs ? a.makeArgs = t.makeArgs : i && (a.makeArgs = (e) => (n) => i({
|
|
55
|
+
state: e,
|
|
56
|
+
helper: n.helper,
|
|
57
|
+
context: e.context
|
|
58
|
+
})), x(
|
|
59
|
+
o,
|
|
60
|
+
a
|
|
61
|
+
);
|
|
62
|
+
}, m = (o) => H({
|
|
63
|
+
isHalt: c,
|
|
64
|
+
execute: (t) => {
|
|
65
|
+
t.executedLifecycles.add(o);
|
|
66
|
+
const i = t.extensionCoordinator;
|
|
67
|
+
if (!i)
|
|
68
|
+
return t;
|
|
69
|
+
const a = l.buildHookOptions(
|
|
70
|
+
t,
|
|
71
|
+
o
|
|
72
|
+
);
|
|
73
|
+
return b(
|
|
74
|
+
i.runLifecycle(
|
|
75
|
+
o,
|
|
76
|
+
{
|
|
77
|
+
hooks: r.extensionHooks,
|
|
78
|
+
hookOptions: a
|
|
79
|
+
}
|
|
80
|
+
),
|
|
81
|
+
(e) => ({
|
|
82
|
+
...t,
|
|
83
|
+
extensionState: e,
|
|
84
|
+
extensionStack: [
|
|
85
|
+
...t.extensionStack ?? [],
|
|
86
|
+
{
|
|
87
|
+
coordinator: i,
|
|
88
|
+
state: e
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
userState: e.artifact
|
|
92
|
+
})
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}), S = R({
|
|
96
|
+
isHalt: c,
|
|
97
|
+
commit: (o) => {
|
|
98
|
+
const t = o.extensionCoordinator;
|
|
99
|
+
if (t)
|
|
100
|
+
return t.commit(o.extensionState);
|
|
101
|
+
},
|
|
102
|
+
rollbackToHalt: (o, t) => ({
|
|
103
|
+
__halt: !0,
|
|
104
|
+
error: t
|
|
105
|
+
})
|
|
106
|
+
}), p = A({
|
|
107
|
+
isHalt: c,
|
|
108
|
+
finalize: (o) => {
|
|
109
|
+
const i = {
|
|
110
|
+
...o,
|
|
111
|
+
diagnostics: r.diagnosticManager.readDiagnostics()
|
|
112
|
+
};
|
|
113
|
+
if (r.extensionHooks.length > 0) {
|
|
114
|
+
const a = i.executedLifecycles, e = /* @__PURE__ */ new Set();
|
|
115
|
+
for (const n of r.extensionHooks)
|
|
116
|
+
a?.has(n.lifecycle) || e.add(n.lifecycle);
|
|
117
|
+
if (e.size > 0) {
|
|
118
|
+
const n = Array.from(e).map((s) => `"${s}"`).join(", ");
|
|
119
|
+
i.reporter.warn?.(
|
|
120
|
+
`The following extension hooks will be ignored because their lifecycles were not executed: ${n}`
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return i;
|
|
125
|
+
}
|
|
126
|
+
}), y = {
|
|
127
|
+
runnerEnv: u,
|
|
128
|
+
finalizeResult: p,
|
|
129
|
+
makeLifecycleStage: m,
|
|
130
|
+
commitStage: S,
|
|
131
|
+
makeHelperStage: k,
|
|
132
|
+
extensions: {
|
|
133
|
+
lifecycles: r.extensionLifecycles
|
|
134
|
+
},
|
|
135
|
+
diagnosticManager: r.diagnosticManager
|
|
136
|
+
};
|
|
137
|
+
if (!r.stages)
|
|
138
|
+
throw new Error(
|
|
139
|
+
"Agnostic Runner requires 'stages' factory to be defined."
|
|
140
|
+
);
|
|
141
|
+
const d = r.stages(y);
|
|
142
|
+
return h(...[...d].reverse());
|
|
143
|
+
};
|
|
144
|
+
export {
|
|
145
|
+
L as createAgnosticProgram
|
|
146
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Program } from '../async-utils';
|
|
2
|
+
import { MaybePromise, PipelineExtensionRollbackErrorMetadata } from '../types';
|
|
3
|
+
import { Halt, HelperRollbackPlan, RollbackContext, RollbackEntry } from './types';
|
|
4
|
+
export type RollbackToHaltPlan<TRunResult, TContext, TOptions, TArtifact, THelper extends {
|
|
5
|
+
key: string;
|
|
6
|
+
}> = {
|
|
7
|
+
readonly rollbackPlan: HelperRollbackPlan<TContext, TOptions, TArtifact, THelper>;
|
|
8
|
+
readonly halt: (error?: unknown) => Halt<TRunResult>;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Executes a rollback plan for a helper stage failure.
|
|
12
|
+
* It coordinates helper-specific rollbacks and extension rollbacks.
|
|
13
|
+
* @param plan
|
|
14
|
+
* @param error
|
|
15
|
+
*/
|
|
16
|
+
export declare function runHelperRollbackPlan<TContext, TOptions, TArtifact, THelper extends {
|
|
17
|
+
key: string;
|
|
18
|
+
}>(plan: HelperRollbackPlan<TContext, TOptions, TArtifact, THelper>, error: unknown): MaybePromise<void>;
|
|
19
|
+
export type HelperStageRunPlan<TState, TRunResult, TContext, TOptions, TArtifact, THelper extends {
|
|
20
|
+
key: string;
|
|
21
|
+
}> = {
|
|
22
|
+
readonly state: TState;
|
|
23
|
+
readonly program: Program<TState>;
|
|
24
|
+
readonly rollbackPlan: HelperRollbackPlan<TContext, TOptions, TArtifact, THelper>;
|
|
25
|
+
readonly halt: (error?: unknown) => Halt<TRunResult>;
|
|
26
|
+
};
|
|
27
|
+
export declare function runHelperStageWithRollback<TState, TRunResult, TContext, TOptions, TArtifact, THelper extends {
|
|
28
|
+
key: string;
|
|
29
|
+
}>(plan: HelperStageRunPlan<TState, TRunResult, TContext, TOptions, TArtifact, THelper>): MaybePromise<TState | Halt<TRunResult>>;
|
|
30
|
+
export declare function runRollbackToHalt<TRunResult, TContext, TOptions, TArtifact, THelper extends {
|
|
31
|
+
key: string;
|
|
32
|
+
}>(plan: RollbackToHaltPlan<TRunResult, TContext, TOptions, TArtifact, THelper>, error: unknown): MaybePromise<Halt<TRunResult>>;
|
|
33
|
+
/**
|
|
34
|
+
* Builds a rollback handler that first drains helper rollbacks (when present) and then defers to
|
|
35
|
+
* extension rollback handling.
|
|
36
|
+
* @param state
|
|
37
|
+
* @param helperRollbacks
|
|
38
|
+
* @param onHelperRollbackError
|
|
39
|
+
*/
|
|
40
|
+
export declare function makeRollbackHandler<TContext, TOptions, TArtifact, THelper extends {
|
|
41
|
+
key: string;
|
|
42
|
+
}>(state: RollbackContext<TContext, TOptions, TArtifact>, helperRollbacks: RollbackEntry<THelper>[], onHelperRollbackError?: (options: {
|
|
43
|
+
readonly error: unknown;
|
|
44
|
+
readonly helper: THelper;
|
|
45
|
+
readonly errorMetadata: PipelineExtensionRollbackErrorMetadata;
|
|
46
|
+
readonly context: TContext;
|
|
47
|
+
}) => void): (error: unknown) => MaybePromise<void>;
|
|
48
|
+
//# sourceMappingURL=rollback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../../src/core/runner/rollback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { maybeTry as p, maybeThen as b } from "../async-utils.js";
|
|
2
|
+
import { runRollbackStack as R } from "../rollback.js";
|
|
3
|
+
function m(n, o) {
|
|
4
|
+
const { context: u, rollbackContext: e, helperRollbacks: c, onHelperRollbackError: k } = n, l = (e.extensionStack ?? []).map(
|
|
5
|
+
({ coordinator: r, state: t }) => r.createRollbackHandler(t)
|
|
6
|
+
);
|
|
7
|
+
l.length === 0 && e.extensionCoordinator && e.extensionState && l.push(
|
|
8
|
+
e.extensionCoordinator.createRollbackHandler(
|
|
9
|
+
e.extensionState
|
|
10
|
+
)
|
|
11
|
+
);
|
|
12
|
+
const h = (r) => {
|
|
13
|
+
if (l.length === 0)
|
|
14
|
+
throw r;
|
|
15
|
+
const t = (a) => {
|
|
16
|
+
if (a < 0)
|
|
17
|
+
return;
|
|
18
|
+
const s = l[a], i = () => t(a - 1);
|
|
19
|
+
return p(
|
|
20
|
+
() => b(s(r), i),
|
|
21
|
+
i
|
|
22
|
+
);
|
|
23
|
+
};
|
|
24
|
+
return t(l.length - 1);
|
|
25
|
+
};
|
|
26
|
+
return p(() => b(
|
|
27
|
+
R(
|
|
28
|
+
c.map((r) => ({
|
|
29
|
+
...r.rollback,
|
|
30
|
+
key: r.helper.key
|
|
31
|
+
})),
|
|
32
|
+
{
|
|
33
|
+
source: "helper",
|
|
34
|
+
onError: ({
|
|
35
|
+
error: r,
|
|
36
|
+
metadata: t,
|
|
37
|
+
entry: a
|
|
38
|
+
}) => {
|
|
39
|
+
const s = c.find(
|
|
40
|
+
(i) => i.helper.key === (a.key ?? "")
|
|
41
|
+
);
|
|
42
|
+
s && k && k({
|
|
43
|
+
error: r,
|
|
44
|
+
helper: s.helper,
|
|
45
|
+
errorMetadata: t,
|
|
46
|
+
context: u
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
),
|
|
51
|
+
() => h(o)
|
|
52
|
+
), () => {
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function y(n) {
|
|
56
|
+
const { state: o, program: u, rollbackPlan: e, halt: c } = n;
|
|
57
|
+
return p(() => u(o), (h) => d(
|
|
58
|
+
{
|
|
59
|
+
rollbackPlan: e,
|
|
60
|
+
halt: c
|
|
61
|
+
},
|
|
62
|
+
h
|
|
63
|
+
));
|
|
64
|
+
}
|
|
65
|
+
function d(n, o) {
|
|
66
|
+
return b(
|
|
67
|
+
m(n.rollbackPlan, o),
|
|
68
|
+
() => n.halt(o)
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
m as runHelperRollbackPlan,
|
|
73
|
+
y as runHelperStageWithRollback,
|
|
74
|
+
d as runRollbackToHalt
|
|
75
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Program } from '../async-utils';
|
|
2
|
+
import { Helper, HelperApplyOptions, HelperKind, MaybePromise, PipelineReporter } from '../types';
|
|
3
|
+
import { RegisteredHelper } from '../dependency-graph';
|
|
4
|
+
import { Halt, HelperInvokeOptions, StageEnv, HelperStageSpec } from './types';
|
|
5
|
+
export declare function isHalt<TRunResult>(value: unknown): value is Halt<TRunResult>;
|
|
6
|
+
/**
|
|
7
|
+
* Generic stage constructor that executes an ordered helper list with middleware-style `next()`.
|
|
8
|
+
* @param options
|
|
9
|
+
* @param options.getOrder
|
|
10
|
+
* @param options.makeArgs
|
|
11
|
+
* @param options.invoke
|
|
12
|
+
* @param options.recordStep
|
|
13
|
+
* @param options.onVisited
|
|
14
|
+
* @param options.registerRollback
|
|
15
|
+
*/
|
|
16
|
+
export declare function createHelpersProgram<TContext, TReporter extends PipelineReporter, TKind extends HelperKind, THelper extends Helper<TContext, TInput, TOutput, TReporter, TKind>, TInput, TOutput, TState>(options: {
|
|
17
|
+
getOrder: (state: TState) => RegisteredHelper<THelper>[];
|
|
18
|
+
makeArgs: (state: TState) => (entry: RegisteredHelper<THelper>) => HelperApplyOptions<TContext, TInput, TOutput, TReporter>;
|
|
19
|
+
invoke: (invokeOptions: HelperInvokeOptions<THelper, TInput, TOutput, TContext, TReporter>) => MaybePromise<void>;
|
|
20
|
+
recordStep: (entry: RegisteredHelper<unknown>) => void;
|
|
21
|
+
onVisited: (state: TState, visited: Set<string>) => TState;
|
|
22
|
+
registerRollback?: (helper: THelper, result: unknown) => void;
|
|
23
|
+
}): (state: TState) => MaybePromise<TState>;
|
|
24
|
+
/**
|
|
25
|
+
* Pure finalizer for fragment state.
|
|
26
|
+
* @param options
|
|
27
|
+
* @param options.isHalt
|
|
28
|
+
* @param options.snapshotFragments
|
|
29
|
+
* @param options.applyArtifact
|
|
30
|
+
*/
|
|
31
|
+
export declare function makeFinalizeFragmentsStage<TState, THalt extends Halt<unknown>, TFragments>(options: {
|
|
32
|
+
isHalt: (value: TState | THalt) => value is THalt;
|
|
33
|
+
snapshotFragments: (state: TState) => TFragments;
|
|
34
|
+
applyArtifact: (state: TState, fragments: TFragments) => TState;
|
|
35
|
+
}): Program<TState | THalt>;
|
|
36
|
+
/**
|
|
37
|
+
* Generic stage builder for "after fragments" style hooks.
|
|
38
|
+
* @param options
|
|
39
|
+
* @param options.isHalt
|
|
40
|
+
* @param options.execute
|
|
41
|
+
*/
|
|
42
|
+
export declare function makeAfterFragmentsStage<TState, THalt extends Halt<unknown>>(options: {
|
|
43
|
+
isHalt: (value: TState | THalt) => value is THalt;
|
|
44
|
+
execute: (state: TState) => MaybePromise<TState>;
|
|
45
|
+
}): Program<TState | THalt>;
|
|
46
|
+
/**
|
|
47
|
+
* Commit stage builder.
|
|
48
|
+
* @param options
|
|
49
|
+
* @param options.isHalt
|
|
50
|
+
* @param options.commit
|
|
51
|
+
* @param options.rollbackToHalt
|
|
52
|
+
*/
|
|
53
|
+
export declare function makeCommitStage<TState, THalt extends Halt<unknown>>(options: {
|
|
54
|
+
isHalt: (value: TState | THalt) => value is THalt;
|
|
55
|
+
commit: (state: TState) => MaybePromise<void>;
|
|
56
|
+
rollbackToHalt: (state: TState, error: unknown) => MaybePromise<THalt>;
|
|
57
|
+
}): Program<TState | THalt>;
|
|
58
|
+
/**
|
|
59
|
+
* Simple finalizer that snapshots helpers/diagnostics into state.
|
|
60
|
+
* @param options
|
|
61
|
+
* @param options.isHalt
|
|
62
|
+
* @param options.finalize
|
|
63
|
+
*/
|
|
64
|
+
export declare function makeFinalizeResultStage<TState, THalt extends Halt<unknown>>(options: {
|
|
65
|
+
isHalt: (value: TState | THalt) => value is THalt;
|
|
66
|
+
finalize: (state: TState) => TState;
|
|
67
|
+
}): Program<TState | THalt>;
|
|
68
|
+
export declare function makeHelperStageFactory<TState, TRunResult, TContext, TOptions, TReporter extends PipelineReporter, TUserState>(config: StageEnv<TState, TRunResult, TContext, TOptions, TReporter, TUserState>): <TKind extends HelperKind, THelper extends Helper<TContext, TInput, TOutput, TReporter, TKind>, TInput, TOutput>(kind: string, spec: HelperStageSpec<TState, TContext, TReporter, TKind, THelper, TInput, TOutput>) => Program<TState | Halt<TRunResult>>;
|
|
69
|
+
//# sourceMappingURL=stage-factories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage-factories.d.ts","sourceRoot":"","sources":["../../../src/core/runner/stage-factories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { maybeTry as y, maybeThen as S, isPromiseLike as C } from "../async-utils.js";
|
|
2
|
+
import { executeHelpers as E } from "../execution-utils.js";
|
|
3
|
+
import { runHelperStageWithRollback as F } from "./rollback.js";
|
|
4
|
+
function _(r) {
|
|
5
|
+
return !!(r && typeof r == "object" && "__halt" in r && r.__halt === !0);
|
|
6
|
+
}
|
|
7
|
+
function v(r) {
|
|
8
|
+
const {
|
|
9
|
+
getOrder: c,
|
|
10
|
+
makeArgs: t,
|
|
11
|
+
invoke: e,
|
|
12
|
+
recordStep: a,
|
|
13
|
+
onVisited: i,
|
|
14
|
+
registerRollback: u
|
|
15
|
+
} = r, f = (n, k, p) => {
|
|
16
|
+
const s = e({ helper: n, args: k, next: p });
|
|
17
|
+
return u ? C(s) ? s.then((o) => {
|
|
18
|
+
u(n, o);
|
|
19
|
+
}) : (u(n, s), s) : s;
|
|
20
|
+
};
|
|
21
|
+
return (n) => {
|
|
22
|
+
const k = c(n), p = E(k, t(n), f, a);
|
|
23
|
+
return S(
|
|
24
|
+
p,
|
|
25
|
+
(s) => i(n, s)
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function z(r) {
|
|
30
|
+
const { isHalt: c, snapshotFragments: t, applyArtifact: e } = r;
|
|
31
|
+
return (a) => c(a) ? a : e(a, t(a));
|
|
32
|
+
}
|
|
33
|
+
function T(r) {
|
|
34
|
+
const { isHalt: c, execute: t } = r;
|
|
35
|
+
return (e) => c(e) ? e : t(e);
|
|
36
|
+
}
|
|
37
|
+
function V(r) {
|
|
38
|
+
const { isHalt: c, commit: t, rollbackToHalt: e } = r, a = (i) => {
|
|
39
|
+
const u = () => i;
|
|
40
|
+
return y(
|
|
41
|
+
() => S(t(i), u),
|
|
42
|
+
(n) => e(i, n)
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
return (i) => c(i) ? i : a(i);
|
|
46
|
+
}
|
|
47
|
+
function j(r) {
|
|
48
|
+
const { isHalt: c, finalize: t } = r;
|
|
49
|
+
return (e) => c(e) ? e : t(e);
|
|
50
|
+
}
|
|
51
|
+
function M(r) {
|
|
52
|
+
return function(t, e) {
|
|
53
|
+
const {
|
|
54
|
+
pushStep: a,
|
|
55
|
+
toRollbackContext: i,
|
|
56
|
+
halt: u,
|
|
57
|
+
isHalt: f,
|
|
58
|
+
onHelperRollbackError: n
|
|
59
|
+
} = r, k = ({
|
|
60
|
+
helper: o,
|
|
61
|
+
args: m,
|
|
62
|
+
next: l
|
|
63
|
+
}) => o.apply(m, l), p = (o) => (m, l) => {
|
|
64
|
+
if (!(!l || typeof l != "object") && "rollback" in l) {
|
|
65
|
+
const g = l.rollback;
|
|
66
|
+
g && o.push({ helper: m, rollback: g });
|
|
67
|
+
}
|
|
68
|
+
}, s = () => n ? (o) => n({
|
|
69
|
+
...o,
|
|
70
|
+
helper: o.helper
|
|
71
|
+
}) : void 0;
|
|
72
|
+
return (o) => {
|
|
73
|
+
if (f(o))
|
|
74
|
+
return o;
|
|
75
|
+
let m = o.helperExecution;
|
|
76
|
+
m || (m = /* @__PURE__ */ new Map(), o.helperExecution = m);
|
|
77
|
+
let l = m.get(t);
|
|
78
|
+
l || (l = {
|
|
79
|
+
kind: t,
|
|
80
|
+
executed: [],
|
|
81
|
+
missing: [],
|
|
82
|
+
registered: []
|
|
83
|
+
// Registered populated by getOrder result?
|
|
84
|
+
}, m.set(t, l));
|
|
85
|
+
const g = (b) => {
|
|
86
|
+
a(b), l.executed.push(
|
|
87
|
+
b.helper.key
|
|
88
|
+
);
|
|
89
|
+
}, H = [
|
|
90
|
+
...e.readRollbacks?.(o) ?? []
|
|
91
|
+
], h = i(o), d = v({
|
|
92
|
+
getOrder: e.getOrder,
|
|
93
|
+
makeArgs: e.makeArgs,
|
|
94
|
+
invoke: k,
|
|
95
|
+
recordStep: g,
|
|
96
|
+
onVisited: (b, R) => e.onVisited(b, R, H),
|
|
97
|
+
registerRollback: p(H)
|
|
98
|
+
}), x = {
|
|
99
|
+
context: h.context,
|
|
100
|
+
rollbackContext: h,
|
|
101
|
+
helperRollbacks: H,
|
|
102
|
+
onHelperRollbackError: s()
|
|
103
|
+
};
|
|
104
|
+
return F({
|
|
105
|
+
state: o,
|
|
106
|
+
program: d,
|
|
107
|
+
rollbackPlan: x,
|
|
108
|
+
halt: u
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export {
|
|
114
|
+
v as createHelpersProgram,
|
|
115
|
+
_ as isHalt,
|
|
116
|
+
T as makeAfterFragmentsStage,
|
|
117
|
+
V as makeCommitStage,
|
|
118
|
+
z as makeFinalizeFragmentsStage,
|
|
119
|
+
j as makeFinalizeResultStage,
|
|
120
|
+
M as makeHelperStageFactory
|
|
121
|
+
};
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { RegisteredHelper } from '../dependency-graph';
|
|
2
|
+
import { Program } from '../async-utils';
|
|
3
|
+
import { ErrorFactory } from '../error-factory';
|
|
4
|
+
import { Helper, HelperApplyOptions, HelperExecutionSnapshot, HelperKind, MaybePromise, PipelineDiagnostic, PipelineExtensionHookOptions, PipelineExtensionLifecycle, PipelineExtensionRollbackErrorMetadata, PipelineReporter, PipelineStep } from '../types';
|
|
5
|
+
import { PipelineRollback } from '../rollback';
|
|
6
|
+
import { ExtensionCoordinator, ExtensionLifecycleState } from '../internal/extension-coordinator.types';
|
|
7
|
+
import { AgnosticDiagnosticManager } from './diagnostics';
|
|
8
|
+
import { ExtensionHookEntry } from '../extensions';
|
|
9
|
+
export type { HelperExecutionSnapshot };
|
|
10
|
+
export type { ExtensionCoordinator, ExtensionLifecycleState };
|
|
11
|
+
export interface AgnosticRunnerOptions<TRunOptions, TUserState, TContext extends {
|
|
12
|
+
reporter: TReporter;
|
|
13
|
+
}, TReporter extends PipelineReporter> {
|
|
14
|
+
readonly createContext: (options: TRunOptions) => TContext;
|
|
15
|
+
readonly createState: (options: {
|
|
16
|
+
readonly context: TContext;
|
|
17
|
+
readonly options: TRunOptions;
|
|
18
|
+
}) => TUserState;
|
|
19
|
+
readonly createError: ErrorFactory;
|
|
20
|
+
readonly onExtensionRollbackError?: (options: {
|
|
21
|
+
readonly error: unknown;
|
|
22
|
+
readonly extensionKeys: readonly string[];
|
|
23
|
+
readonly hookSequence: readonly string[];
|
|
24
|
+
readonly errorMetadata: PipelineExtensionRollbackErrorMetadata;
|
|
25
|
+
readonly context: TContext;
|
|
26
|
+
}) => void;
|
|
27
|
+
readonly onHelperRollbackError?: (options: {
|
|
28
|
+
readonly error: unknown;
|
|
29
|
+
readonly helper: unknown;
|
|
30
|
+
readonly errorMetadata: PipelineExtensionRollbackErrorMetadata;
|
|
31
|
+
readonly context: TContext;
|
|
32
|
+
}) => void;
|
|
33
|
+
readonly providedKeys?: Record<string, readonly string[]>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Mutable state captured while preparing a pipeline run.
|
|
37
|
+
*
|
|
38
|
+
* @category Pipeline
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
export interface AgnosticRunContext<TRunOptions, TUserState, TContext extends {
|
|
42
|
+
reporter: TReporter;
|
|
43
|
+
}, TReporter extends PipelineReporter, TDiagnostic extends PipelineDiagnostic> {
|
|
44
|
+
readonly runOptions: TRunOptions;
|
|
45
|
+
readonly context: TContext;
|
|
46
|
+
readonly state: AgnosticState<TRunOptions, TUserState, TContext, TReporter, TDiagnostic>;
|
|
47
|
+
readonly steps: PipelineStep[];
|
|
48
|
+
readonly pushStep: (entry: RegisteredHelper<unknown>) => void;
|
|
49
|
+
readonly helperRegistries: Map<string, RegisteredHelper<unknown>[]>;
|
|
50
|
+
readonly helperOrders: Map<string, RegisteredHelper<unknown>[]>;
|
|
51
|
+
readonly buildHookOptions: (state: AgnosticState<TRunOptions, TUserState, TContext, TReporter, TDiagnostic>, lifecycle: PipelineExtensionLifecycle) => PipelineExtensionHookOptions<TContext, TRunOptions, TUserState>;
|
|
52
|
+
readonly handleRollbackError: (options: {
|
|
53
|
+
readonly error: unknown;
|
|
54
|
+
readonly extensionKeys: readonly string[];
|
|
55
|
+
readonly hookSequence: readonly string[];
|
|
56
|
+
readonly errorMetadata: PipelineExtensionRollbackErrorMetadata;
|
|
57
|
+
readonly context: TContext;
|
|
58
|
+
}) => void;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Closed-world state threaded through composed pipeline programs.
|
|
62
|
+
*
|
|
63
|
+
* @category Pipeline
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
export interface AgnosticState<TRunOptions, TUserState, TContext extends {
|
|
67
|
+
reporter: TReporter;
|
|
68
|
+
}, TReporter extends PipelineReporter, TDiagnostic extends PipelineDiagnostic> {
|
|
69
|
+
readonly context: TContext;
|
|
70
|
+
readonly reporter: TReporter;
|
|
71
|
+
readonly runOptions: TRunOptions;
|
|
72
|
+
readonly userState: TUserState;
|
|
73
|
+
readonly helperRegistries: Map<string, RegisteredHelper<unknown>[]>;
|
|
74
|
+
readonly helperOrders?: Map<string, RegisteredHelper<unknown>[]>;
|
|
75
|
+
readonly steps: PipelineStep[];
|
|
76
|
+
readonly diagnostics: TDiagnostic[];
|
|
77
|
+
readonly executedLifecycles: Set<string>;
|
|
78
|
+
readonly helperExecution?: Map<string, HelperExecutionSnapshot>;
|
|
79
|
+
readonly helperRollbacks?: Map<string, Array<{
|
|
80
|
+
readonly helper: unknown;
|
|
81
|
+
readonly rollback: PipelineRollback;
|
|
82
|
+
}>>;
|
|
83
|
+
readonly extensionCoordinator?: ExtensionCoordinator<TContext, TRunOptions, TUserState>;
|
|
84
|
+
readonly extensionState?: ExtensionLifecycleState<TContext, TRunOptions, TUserState>;
|
|
85
|
+
readonly extensionStack?: Array<{
|
|
86
|
+
readonly coordinator: ExtensionCoordinator<TContext, TRunOptions, TUserState>;
|
|
87
|
+
readonly state: ExtensionLifecycleState<TContext, TRunOptions, TUserState>;
|
|
88
|
+
}>;
|
|
89
|
+
}
|
|
90
|
+
export type { ExtensionHookEntry };
|
|
91
|
+
export type RollbackCapableCoordinator<TContext, TOptions, TUserState> = {
|
|
92
|
+
createRollbackHandler: <TResult>(state: ExtensionLifecycleState<TContext, TOptions, TUserState>) => (error: unknown) => MaybePromise<TResult>;
|
|
93
|
+
};
|
|
94
|
+
export type RollbackEntry<THelper> = {
|
|
95
|
+
readonly helper: THelper;
|
|
96
|
+
readonly rollback: PipelineRollback;
|
|
97
|
+
};
|
|
98
|
+
export type Halt<TRunResult> = {
|
|
99
|
+
readonly __halt: true;
|
|
100
|
+
readonly error?: unknown;
|
|
101
|
+
readonly result?: TRunResult;
|
|
102
|
+
};
|
|
103
|
+
export type RollbackContext<TContext, TOptions, TUserState> = {
|
|
104
|
+
readonly context: TContext;
|
|
105
|
+
readonly extensionCoordinator?: RollbackCapableCoordinator<TContext, TOptions, TUserState>;
|
|
106
|
+
readonly extensionState?: ExtensionLifecycleState<TContext, TOptions, TUserState>;
|
|
107
|
+
readonly extensionStack?: Array<{
|
|
108
|
+
readonly coordinator: RollbackCapableCoordinator<TContext, TOptions, TUserState>;
|
|
109
|
+
readonly state: ExtensionLifecycleState<TContext, TOptions, TUserState>;
|
|
110
|
+
}>;
|
|
111
|
+
};
|
|
112
|
+
export type StageEnv<TState, TRunResult, TContext, TOptions, TReporter extends PipelineReporter, TUserState> = {
|
|
113
|
+
pushStep: (entry: RegisteredHelper<unknown>) => void;
|
|
114
|
+
toRollbackContext: (state: TState) => RollbackContext<TContext, TOptions, TUserState>;
|
|
115
|
+
halt: (error?: unknown) => Halt<TRunResult>;
|
|
116
|
+
isHalt: (value: unknown) => value is Halt<TRunResult>;
|
|
117
|
+
onHelperRollbackError?: (options: {
|
|
118
|
+
readonly error: unknown;
|
|
119
|
+
readonly helper: Helper<TContext, unknown, unknown, TReporter, HelperKind>;
|
|
120
|
+
readonly errorMetadata: PipelineExtensionRollbackErrorMetadata;
|
|
121
|
+
readonly context: TContext;
|
|
122
|
+
}) => void;
|
|
123
|
+
};
|
|
124
|
+
export type PipelineStage<TState, TResult> = Program<TState | TResult>;
|
|
125
|
+
export type AgnosticStageDeps<TState, TResult, TContext, TRunOptions, TReporter extends PipelineReporter, TDiagnostic extends PipelineDiagnostic, TUserState> = {
|
|
126
|
+
readonly runnerEnv: StageEnv<TState, TResult, TContext, TRunOptions, TReporter, TUserState>;
|
|
127
|
+
readonly finalizeResult: PipelineStage<TState, Halt<TResult>>;
|
|
128
|
+
readonly makeLifecycleStage: (lifecycle: string) => PipelineStage<TState, Halt<TResult>>;
|
|
129
|
+
readonly commitStage: PipelineStage<TState, Halt<TResult>>;
|
|
130
|
+
readonly makeHelperStage: (kind: string, spec?: {
|
|
131
|
+
makeArgs?: (state: TState) => (entry: RegisteredHelper<unknown>) => unknown;
|
|
132
|
+
onVisited?: (state: TState, visited: Set<string>, rollbacks: unknown[]) => TState;
|
|
133
|
+
}) => PipelineStage<TState, Halt<TResult>>;
|
|
134
|
+
readonly extensions: {
|
|
135
|
+
readonly lifecycles?: readonly string[];
|
|
136
|
+
};
|
|
137
|
+
readonly diagnosticManager: AgnosticDiagnosticManager<TReporter, TDiagnostic>;
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Dependency bundle consumed by {@link initAgnosticRunner}.
|
|
141
|
+
*
|
|
142
|
+
* @category Pipeline
|
|
143
|
+
* @internal
|
|
144
|
+
*/
|
|
145
|
+
export interface AgnosticRunnerDependencies<TRunOptions, TUserState, TContext extends {
|
|
146
|
+
reporter: TReporter;
|
|
147
|
+
}, TReporter extends PipelineReporter, TDiagnostic extends PipelineDiagnostic, TRunResult> {
|
|
148
|
+
readonly options: AgnosticRunnerOptions<TRunOptions, TUserState, TContext, TReporter>;
|
|
149
|
+
readonly helperRegistries: Map<string, RegisteredHelper<unknown>[]>;
|
|
150
|
+
readonly diagnosticManager: AgnosticDiagnosticManager<TReporter, TDiagnostic>;
|
|
151
|
+
readonly resolveRunResult: (state: {
|
|
152
|
+
readonly diagnostics: readonly TDiagnostic[];
|
|
153
|
+
readonly steps: readonly PipelineStep[];
|
|
154
|
+
readonly context: TContext;
|
|
155
|
+
readonly userState: TUserState;
|
|
156
|
+
readonly options: TRunOptions;
|
|
157
|
+
readonly helpers: unknown;
|
|
158
|
+
readonly state: AgnosticState<TRunOptions, TUserState, TContext, TReporter, TDiagnostic>;
|
|
159
|
+
}) => TRunResult;
|
|
160
|
+
readonly extensionHooks: ExtensionHookEntry<TContext, TRunOptions, TUserState>[];
|
|
161
|
+
readonly extensionLifecycles?: readonly string[];
|
|
162
|
+
readonly stages?: (deps: AgnosticStageDeps<AgnosticState<TRunOptions, TUserState, TContext, TReporter, TDiagnostic>, TRunResult, TContext, TRunOptions, TReporter, TDiagnostic, TUserState>) => PipelineStage<AgnosticState<TRunOptions, TUserState, TContext, TReporter, TDiagnostic>, Halt<TRunResult>>[];
|
|
163
|
+
}
|
|
164
|
+
export interface AgnosticRunner<TRunOptions, TUserState, TContext extends {
|
|
165
|
+
reporter: TReporter;
|
|
166
|
+
}, TReporter extends PipelineReporter, TDiagnostic extends PipelineDiagnostic, TRunResult> {
|
|
167
|
+
readonly prepareContext: (runOptions: TRunOptions) => AgnosticRunContext<TRunOptions, TUserState, TContext, TReporter, TDiagnostic>;
|
|
168
|
+
readonly executeRun: (context: AgnosticRunContext<TRunOptions, TUserState, TContext, TReporter, TDiagnostic>) => MaybePromise<TRunResult>;
|
|
169
|
+
}
|
|
170
|
+
export type HelperInvokeOptions<THelper, TInput, TOutput, TContext, TReporter extends PipelineReporter> = {
|
|
171
|
+
readonly helper: THelper;
|
|
172
|
+
readonly args: HelperApplyOptions<TContext, TInput, TOutput, TReporter>;
|
|
173
|
+
readonly next: () => MaybePromise<void>;
|
|
174
|
+
};
|
|
175
|
+
export type HelperStageSpec<TState, TContext, TReporter extends PipelineReporter, TKind extends HelperKind, THelper extends Helper<TContext, TInput, TOutput, TReporter, TKind>, TInput, TOutput> = {
|
|
176
|
+
readonly getOrder: (state: TState) => RegisteredHelper<THelper>[];
|
|
177
|
+
readonly makeArgs: (state: TState) => (entry: RegisteredHelper<THelper>) => HelperApplyOptions<TContext, TInput, TOutput, TReporter>;
|
|
178
|
+
readonly onVisited: (state: TState, visited: Set<string>, rollbacks: RollbackEntry<THelper>[]) => TState;
|
|
179
|
+
readonly readRollbacks?: (state: TState) => RollbackEntry<THelper>[] | undefined;
|
|
180
|
+
};
|
|
181
|
+
export type HelperStageRunPlan<TState, TRunResult, TContext, TOptions, TUserState, THelper extends {
|
|
182
|
+
key: string;
|
|
183
|
+
}> = {
|
|
184
|
+
readonly state: TState;
|
|
185
|
+
readonly program: Program<TState>;
|
|
186
|
+
readonly rollbackPlan: HelperRollbackPlan<TContext, TOptions, TUserState, THelper>;
|
|
187
|
+
readonly halt: (error?: unknown) => Halt<TRunResult>;
|
|
188
|
+
};
|
|
189
|
+
export type HelperRollbackPlan<TContext, TOptions, TUserState, THelper extends {
|
|
190
|
+
key: string;
|
|
191
|
+
}> = {
|
|
192
|
+
readonly context: TContext;
|
|
193
|
+
readonly rollbackContext: RollbackContext<TContext, TOptions, TUserState>;
|
|
194
|
+
readonly helperRollbacks: readonly RollbackEntry<THelper>[];
|
|
195
|
+
readonly onHelperRollbackError?: (options: {
|
|
196
|
+
readonly error: unknown;
|
|
197
|
+
readonly helper: THelper;
|
|
198
|
+
readonly errorMetadata: PipelineExtensionRollbackErrorMetadata;
|
|
199
|
+
readonly context: TContext;
|
|
200
|
+
}) => void;
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=types.d.ts.map
|