@wpkernel/pipeline 0.12.3-beta.0 → 0.12.5-beta.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/README.md +71 -88
  2. package/dist/async-utils.d.ts +14 -0
  3. package/dist/async-utils.d.ts.map +1 -1
  4. package/dist/async-utils.js +18 -13
  5. package/dist/createExtension.d.ts +7 -1
  6. package/dist/createExtension.d.ts.map +1 -1
  7. package/dist/createPipeline.d.ts.map +1 -1
  8. package/dist/createPipeline.js +6 -119
  9. package/dist/dependency-graph.d.ts +6 -0
  10. package/dist/dependency-graph.d.ts.map +1 -1
  11. package/dist/dependency-graph.js +73 -65
  12. package/dist/error-factory.d.ts +1 -1
  13. package/dist/extensions.d.ts.map +1 -1
  14. package/dist/extensions.js +61 -62
  15. package/dist/helper.d.ts +27 -16
  16. package/dist/helper.d.ts.map +1 -1
  17. package/dist/index.d.ts +3 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +22 -21
  20. package/dist/internal/pipeline-program-utils.d.ts +127 -0
  21. package/dist/internal/pipeline-program-utils.d.ts.map +1 -0
  22. package/dist/internal/pipeline-program-utils.js +161 -0
  23. package/dist/internal/pipeline-runner.types.d.ts +117 -1
  24. package/dist/internal/pipeline-runner.types.d.ts.map +1 -1
  25. package/dist/internal/runner/context.d.ts +6 -0
  26. package/dist/internal/runner/context.d.ts.map +1 -0
  27. package/dist/internal/runner/context.js +169 -0
  28. package/dist/internal/runner/execution.d.ts +6 -0
  29. package/dist/internal/runner/execution.d.ts.map +1 -0
  30. package/dist/internal/runner/execution.js +40 -0
  31. package/dist/internal/{pipeline-runner.d.ts → runner/index.d.ts} +3 -8
  32. package/dist/internal/runner/index.d.ts.map +1 -0
  33. package/dist/internal/runner/index.js +11 -0
  34. package/dist/internal/runner/program.d.ts +8 -0
  35. package/dist/internal/runner/program.d.ts.map +1 -0
  36. package/dist/internal/runner/program.js +294 -0
  37. package/dist/makePipeline.d.ts +20 -0
  38. package/dist/makePipeline.d.ts.map +1 -0
  39. package/dist/makePipeline.js +139 -0
  40. package/dist/registration.d.ts.map +1 -1
  41. package/dist/registration.js +17 -15
  42. package/dist/rollback.d.ts +94 -0
  43. package/dist/rollback.d.ts.map +1 -0
  44. package/dist/rollback.js +46 -0
  45. package/dist/types.d.ts +37 -3
  46. package/dist/types.d.ts.map +1 -1
  47. package/package.json +1 -1
  48. package/dist/internal/pipeline-runner.d.ts.map +0 -1
  49. package/dist/internal/pipeline-runner.js +0 -257
@@ -0,0 +1,294 @@
1
+ import { composeK as G, maybeThen as $ } from "../../async-utils.js";
2
+ import { buildExecutionSnapshot as s, assertAllHelpersExecuted as S } from "../helper-execution.js";
3
+ import { initExtensionCoordinator as j } from "../extension-coordinator.js";
4
+ import { makeAfterFragmentsStage as q, makeFinalizeResultStage as I, makeCommitStage as J, makeFinalizeFragmentsStage as Q, makeHelperStageFactory as W, isHalt as c, runRollbackToHalt as X } from "../pipeline-program-utils.js";
5
+ const Y = "after-fragments";
6
+ function Z(o) {
7
+ const {
8
+ fragmentStage: l,
9
+ finalizeFragments: g,
10
+ builderStage: u,
11
+ commitStage: f,
12
+ finalizeResult: h,
13
+ makeLifecycleStage: x,
14
+ extensions: b
15
+ } = o, p = (b?.lifecycles ?? []).map(
16
+ x
17
+ );
18
+ return [
19
+ l,
20
+ g,
21
+ ...p,
22
+ u,
23
+ f,
24
+ h
25
+ ];
26
+ }
27
+ const ar = (o, l) => {
28
+ const g = (r) => ({
29
+ __halt: !0,
30
+ error: r
31
+ }), u = (r, t, n) => {
32
+ o.diagnosticManager.reviewUnusedHelpers(
33
+ r.fragmentEntries,
34
+ t,
35
+ o.fragmentKind
36
+ );
37
+ const e = s(
38
+ r.fragmentEntries,
39
+ t,
40
+ o.fragmentKind
41
+ );
42
+ return S(
43
+ r.fragmentEntries,
44
+ e,
45
+ o.fragmentKind,
46
+ o.diagnosticManager.describeHelper,
47
+ o.createError
48
+ ), {
49
+ ...r,
50
+ fragmentVisited: t,
51
+ fragmentExecution: e,
52
+ fragmentRollbacks: n
53
+ };
54
+ }, f = (r, t, n) => {
55
+ o.diagnosticManager.reviewUnusedHelpers(
56
+ r.builderEntries,
57
+ t,
58
+ o.builderKind
59
+ );
60
+ const e = s(
61
+ r.builderEntries,
62
+ t,
63
+ o.builderKind
64
+ );
65
+ return S(
66
+ r.builderEntries,
67
+ e,
68
+ o.builderKind,
69
+ o.diagnosticManager.describeHelper,
70
+ o.createError
71
+ ), {
72
+ ...r,
73
+ builderVisited: t,
74
+ builderExecution: e,
75
+ builderRollbacks: n
76
+ };
77
+ }, h = (r, t) => o.options.createFragmentArgs({
78
+ helper: t.helper,
79
+ options: r.runOptions,
80
+ context: r.context,
81
+ buildOptions: r.buildOptions,
82
+ draft: r.draft
83
+ }), x = (r, t) => o.options.createBuilderArgs({
84
+ helper: t.helper,
85
+ options: r.runOptions,
86
+ context: r.context,
87
+ buildOptions: r.buildOptions,
88
+ artifact: r.artifact
89
+ }), b = (r) => (t) => h(r, t), p = (r) => (t) => x(r, t), H = (r) => r.fragmentRollbacks, F = (r) => r.builderRollbacks ?? [], k = (r) => ({
90
+ context: r.context,
91
+ extensionCoordinator: r.extensionCoordinator,
92
+ extensionState: r.extensionState
93
+ }), y = (r) => r.fragmentExecution ?? s(
94
+ r.fragmentEntries,
95
+ r.fragmentVisited,
96
+ o.fragmentKind
97
+ ), z = (r) => {
98
+ const { extensionCoordinator: t, extensionState: n } = r;
99
+ if (!(!t || !n))
100
+ return t.commit(n);
101
+ }, M = (r) => ({
102
+ context: r.context,
103
+ rollbackContext: k(r),
104
+ helperRollbacks: r.builderRollbacks ?? [],
105
+ onHelperRollbackError: o.options.onHelperRollbackError
106
+ }), w = (r, t) => X(
107
+ {
108
+ rollbackPlan: M(r),
109
+ halt: g
110
+ },
111
+ t
112
+ ), P = (r) => (t) => {
113
+ const n = j(
114
+ ({ error: a, extensionKeys: i, hookSequence: m, errorMetadata: E }) => l.handleRollbackError({
115
+ error: a,
116
+ extensionKeys: i,
117
+ hookSequence: m,
118
+ errorMetadata: E,
119
+ context: t.context
120
+ })
121
+ ), e = n.runLifecycle(
122
+ r,
123
+ {
124
+ hooks: o.extensionHooks,
125
+ hookOptions: l.buildHookOptions(
126
+ t.artifact,
127
+ r
128
+ )
129
+ }
130
+ );
131
+ return $(
132
+ e,
133
+ (a) => ({
134
+ ...t,
135
+ artifact: a.artifact,
136
+ extensionCoordinator: n,
137
+ extensionState: a
138
+ })
139
+ );
140
+ }, d = (r) => r.helpers ?? {
141
+ fragments: r.fragmentExecution ?? s(
142
+ r.fragmentEntries,
143
+ r.fragmentVisited,
144
+ o.fragmentKind
145
+ ),
146
+ builders: r.builderExecution ?? s(
147
+ r.builderEntries,
148
+ r.builderVisited,
149
+ o.builderKind
150
+ )
151
+ }, B = (r) => ({
152
+ ...r,
153
+ helpers: d(r),
154
+ diagnostics: [
155
+ ...o.diagnosticManager.readDiagnostics()
156
+ ]
157
+ }), C = Q({
158
+ isHalt: c,
159
+ snapshotFragments: y,
160
+ applyArtifact: (r, t) => ({
161
+ ...r,
162
+ artifact: o.options.finalizeFragmentState({
163
+ draft: r.draft,
164
+ options: r.runOptions,
165
+ context: r.context,
166
+ buildOptions: r.buildOptions,
167
+ helpers: {
168
+ fragments: t
169
+ }
170
+ }),
171
+ fragmentExecution: t
172
+ })
173
+ }), L = (r) => q({
174
+ isHalt: c,
175
+ execute: P(r)
176
+ }), T = J({
177
+ isHalt: c,
178
+ commit: z,
179
+ rollbackToHalt: w
180
+ }), V = I({
181
+ isHalt: c,
182
+ finalize: B
183
+ }), v = {
184
+ getOrder: (r) => r.fragmentOrder,
185
+ makeArgs: b,
186
+ onVisited: (r, t, n) => u(r, t, n),
187
+ readRollbacks: H
188
+ }, U = {
189
+ getOrder: (r) => r.builderOrder,
190
+ makeArgs: p,
191
+ onVisited: (r, t, n) => f(r, t, n),
192
+ readRollbacks: F
193
+ }, R = W({
194
+ pushStep: l.pushStep,
195
+ toRollbackContext: k,
196
+ halt: g,
197
+ isHalt: c,
198
+ onHelperRollbackError: o.options.onHelperRollbackError
199
+ }), _ = R(v), N = R(U), O = {
200
+ runnerEnv: {
201
+ pushStep: l.pushStep,
202
+ toRollbackContext: k,
203
+ halt: g,
204
+ isHalt: c,
205
+ onHelperRollbackError: o.options.onHelperRollbackError
206
+ },
207
+ fragmentStage: _,
208
+ builderStage: N,
209
+ finalizeFragments: C,
210
+ commitStage: T,
211
+ finalizeResult: V,
212
+ makeLifecycleStage: L,
213
+ extensions: {
214
+ lifecycles: o.extensionHooks.length > 0 ? o.extensionLifecycles ?? [Y] : []
215
+ },
216
+ makeHelperStage: (r, t) => R(
217
+ {
218
+ getOrder: (e) => e.helperOrders?.get(r) ?? [],
219
+ makeArgs: (e) => {
220
+ if (t?.makeArgs)
221
+ return t.makeArgs(e);
222
+ if (r === o.fragmentKind)
223
+ return b(e);
224
+ if (r === o.builderKind)
225
+ return p(e);
226
+ throw new Error(`No args factory for kind "${r}"`);
227
+ },
228
+ onVisited: (e, a, i) => {
229
+ if (t?.onVisited)
230
+ return t.onVisited(
231
+ e,
232
+ a,
233
+ i
234
+ );
235
+ if (r === o.fragmentKind)
236
+ return u(
237
+ e,
238
+ a,
239
+ i
240
+ );
241
+ if (r === o.builderKind)
242
+ return f(
243
+ e,
244
+ a,
245
+ i
246
+ );
247
+ const m = e.helperOrders?.get(r) ?? [];
248
+ o.diagnosticManager.reviewUnusedHelpers(
249
+ m,
250
+ a,
251
+ r
252
+ );
253
+ const E = s(
254
+ m,
255
+ a,
256
+ r
257
+ );
258
+ S(
259
+ m,
260
+ E,
261
+ r,
262
+ o.diagnosticManager.describeHelper,
263
+ o.createError
264
+ );
265
+ const A = new Map(
266
+ e.helperExecution ?? []
267
+ );
268
+ A.set(r, E);
269
+ const K = new Map(
270
+ e.helperRollbacks ?? []
271
+ );
272
+ return K.set(
273
+ r,
274
+ i
275
+ ), {
276
+ ...e,
277
+ helperExecution: A,
278
+ helperRollbacks: K
279
+ };
280
+ },
281
+ readRollbacks: (e) => r === o.fragmentKind ? H(
282
+ e
283
+ ) : r === o.builderKind ? F(
284
+ e
285
+ ) : e.helperRollbacks?.get(r)
286
+ }
287
+ )
288
+ }, D = o.stages ? o.stages(O) : Z(O);
289
+ return G(...[...D].reverse());
290
+ };
291
+ export {
292
+ ar as createCoreProgram,
293
+ Z as defaultStages
294
+ };
@@ -0,0 +1,20 @@
1
+ import { CreatePipelineOptions, Helper, HelperKind, Pipeline, PipelineDiagnostic, PipelineReporter, PipelineRunState } from './types';
2
+ import { DefaultStageDeps, PipelineStage, PipelineState, Halt } from './internal/pipeline-runner.types';
3
+ export { DefaultStageDeps, PipelineStage, } from "./internal/pipeline-runner.types";
4
+ export { defaultStages } from './internal/runner/program';
5
+ export type MakePipelineArgs<TRunOptions, TReporter extends PipelineReporter = PipelineReporter, TContext extends {
6
+ reporter: TReporter;
7
+ } = {
8
+ reporter: TReporter;
9
+ }, TArtifact = unknown, TDiagnostic extends PipelineDiagnostic = PipelineDiagnostic, TRunResult = PipelineRunState<TArtifact, TDiagnostic>, TBuildOptions = unknown, TDraft = unknown, TFragmentInput = unknown, TFragmentOutput = unknown, TBuilderInput = unknown, TBuilderOutput = unknown, TFragmentKind extends HelperKind = 'fragment', TBuilderKind extends HelperKind = 'builder', TFragmentHelper extends Helper<TContext, TFragmentInput, TFragmentOutput, TReporter, TFragmentKind> = Helper<TContext, TFragmentInput, TFragmentOutput, TReporter, TFragmentKind>, TBuilderHelper extends Helper<TContext, TBuilderInput, TBuilderOutput, TReporter, TBuilderKind> = Helper<TContext, TBuilderInput, TBuilderOutput, TReporter, TBuilderKind>> = CreatePipelineOptions<TRunOptions, TBuildOptions, TContext, TReporter, TDraft, TArtifact, TDiagnostic, TRunResult, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind, TBuilderKind, TFragmentHelper, TBuilderHelper> & {
10
+ extensions?: {
11
+ lifecycles?: string[];
12
+ };
13
+ stages?: (deps: DefaultStageDeps<PipelineState<TRunOptions, TBuildOptions, TContext, TReporter, TDraft, TArtifact, TDiagnostic, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind, TBuilderKind, TFragmentHelper, TBuilderHelper>, TRunResult, TContext, TRunOptions, TArtifact, TReporter>) => PipelineStage<PipelineState<TRunOptions, TBuildOptions, TContext, TReporter, TDraft, TArtifact, TDiagnostic, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind, TBuilderKind, TFragmentHelper, TBuilderHelper>, Halt<TRunResult>>[];
14
+ };
15
+ export declare function makePipeline<TRunOptions, TReporter extends PipelineReporter = PipelineReporter, TContext extends {
16
+ reporter: TReporter;
17
+ } = {
18
+ reporter: TReporter;
19
+ }, TArtifact = unknown, TDiagnostic extends PipelineDiagnostic = PipelineDiagnostic, TRunResult = PipelineRunState<TArtifact, TDiagnostic>, TBuildOptions = unknown, TDraft = unknown, TFragmentInput = unknown, TFragmentOutput = unknown, TBuilderInput = unknown, TBuilderOutput = unknown, TFragmentKind extends HelperKind = 'fragment', TBuilderKind extends HelperKind = 'builder', TFragmentHelper extends Helper<TContext, TFragmentInput, TFragmentOutput, TReporter, TFragmentKind> = Helper<TContext, TFragmentInput, TFragmentOutput, TReporter, TFragmentKind>, TBuilderHelper extends Helper<TContext, TBuilderInput, TBuilderOutput, TReporter, TBuilderKind> = Helper<TContext, TBuilderInput, TBuilderOutput, TReporter, TBuilderKind>>(options: MakePipelineArgs<TRunOptions, TReporter, TContext, TArtifact, TDiagnostic, TRunResult, TBuildOptions, TDraft, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind, TBuilderKind, TFragmentHelper, TBuilderHelper>): Pipeline<TRunOptions, TRunResult, TContext, TReporter, TBuildOptions, TArtifact, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TDiagnostic, TFragmentKind, TBuilderKind, TFragmentHelper, TBuilderHelper>;
20
+ //# sourceMappingURL=makePipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makePipeline.d.ts","sourceRoot":"","sources":["../src/makePipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import { maybeThen as K, isPromiseLike as C } from "./async-utils.js";
2
+ import { registerHelper as g, handleExtensionRegisterResult as F } from "./registration.js";
3
+ import { initDiagnosticManager as L } from "./internal/diagnostic-manager.js";
4
+ import { initPipelineRunner as V } from "./internal/runner/index.js";
5
+ function j(r) {
6
+ const i = r.fragmentKind ?? "fragment", s = r.builderKind ?? "builder", a = r.createError ?? ((e, n) => new Error(`[${e}] ${n}`)), u = /* @__PURE__ */ new Map(), d = (e) => (u.has(e) || u.set(e, []), u.get(e)), f = d(
7
+ i
8
+ ), m = d(
9
+ s
10
+ ), R = [], c = [], l = L({
11
+ options: r,
12
+ fragmentKind: i,
13
+ builderKind: s
14
+ }), P = r.createRunResult ?? ((e) => ({
15
+ artifact: e.artifact,
16
+ diagnostics: e.diagnostics,
17
+ steps: e.steps
18
+ })), H = {
19
+ options: r,
20
+ fragmentEntries: f,
21
+ builderEntries: m,
22
+ helperRegistries: u,
23
+ fragmentKind: i,
24
+ builderKind: s,
25
+ diagnosticManager: l,
26
+ createError: a,
27
+ resolveRunResult: P,
28
+ extensionHooks: R,
29
+ extensionLifecycles: r.extensions?.lifecycles,
30
+ stages: r.stages
31
+ }, x = V(H), p = i, E = s, h = (e) => g(
32
+ e,
33
+ i,
34
+ f,
35
+ p,
36
+ (n, t, o) => l.flagConflict(
37
+ n,
38
+ t,
39
+ p,
40
+ o
41
+ ),
42
+ a
43
+ ), v = (e) => g(
44
+ e,
45
+ s,
46
+ m,
47
+ E,
48
+ (n, t, o) => l.flagConflict(
49
+ n,
50
+ t,
51
+ E,
52
+ o
53
+ ),
54
+ a
55
+ ), b = (e, n) => F(e, n, R), w = (e) => {
56
+ if (e && C(e)) {
57
+ Promise.resolve(e).catch(() => {
58
+ });
59
+ const n = Promise.resolve(e).then(() => {
60
+ });
61
+ n.catch(() => {
62
+ }), c.push(n), n.finally(() => {
63
+ const t = c.indexOf(n);
64
+ t !== -1 && c.splice(t, 1);
65
+ }).catch(() => {
66
+ });
67
+ }
68
+ return e;
69
+ }, M = () => {
70
+ if (c.length !== 0)
71
+ return Promise.all([...c]).then(
72
+ () => {
73
+ }
74
+ );
75
+ }, k = {
76
+ fragmentKind: i,
77
+ builderKind: s,
78
+ ir: {
79
+ use(e) {
80
+ h(e);
81
+ }
82
+ },
83
+ builders: {
84
+ use(e) {
85
+ v(e);
86
+ }
87
+ },
88
+ extensions: {
89
+ use(e) {
90
+ const n = e.register(k);
91
+ n && C(n) && Promise.resolve(n).catch(() => {
92
+ });
93
+ const t = K(
94
+ n,
95
+ (o) => b(e.key, o)
96
+ );
97
+ return w(t);
98
+ }
99
+ },
100
+ use(e) {
101
+ if (e.kind === i) {
102
+ h(e);
103
+ return;
104
+ }
105
+ if (e.kind === s) {
106
+ v(e);
107
+ return;
108
+ }
109
+ const n = e.kind, t = d(n);
110
+ g(
111
+ e,
112
+ n,
113
+ t,
114
+ n,
115
+ (o, y, D) => l.flagConflict(
116
+ o,
117
+ y,
118
+ n,
119
+ D
120
+ ),
121
+ a
122
+ );
123
+ },
124
+ run(e) {
125
+ const n = () => {
126
+ const t = x.prepareContext(e);
127
+ return x.executeRun(t);
128
+ };
129
+ return K(
130
+ M(),
131
+ () => n()
132
+ );
133
+ }
134
+ };
135
+ return k;
136
+ }
137
+ export {
138
+ j as makePipeline
139
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../src/registration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EACN,UAAU,EACV,qBAAqB,EAErB,0BAA0B,EAC1B,gBAAgB,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC7B,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,SAAS,gBAAgB,EAClC,KAAK,SAAS,UAAU,EACxB,OAAO,SAAS,MAAM,CACrB,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,CACL,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAEvD,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,UAAU,EACxB,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,EACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,EACzE,WAAW,EAAE,YAAY,GACvB,IAAI,CA6BN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAClE,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,EAAE,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAC1D,cAAc,EAAE,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,EACnE,SAAS,GAAE,0BAA8C,GACvD,MAAM,CASR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAC1E,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,MAAM,EAAE,OAAO,EACf,cAAc,EAAE,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,GACjE,OAAO,CAqCT"}
1
+ {"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../src/registration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EACN,UAAU,EACV,qBAAqB,EAErB,0BAA0B,EAC1B,gBAAgB,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC7B,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,SAAS,gBAAgB,EAClC,KAAK,SAAS,UAAU,EACxB,OAAO,SAAS,MAAM,CACrB,QAAQ,EACR,MAAM,EACN,OAAO,EACP,SAAS,EACT,KAAK,CACL,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAEvD,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,UAAU,EACxB,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,EACpC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,EACzE,WAAW,EAAE,YAAY,GACvB,IAAI,CAqCN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAClE,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,EAAE,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAC1D,cAAc,EAAE,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,EACnE,SAAS,GAAE,0BAA8C,GACvD,MAAM,CASR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAC1E,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,MAAM,EAAE,OAAO,EACf,cAAc,EAAE,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,GACjE,OAAO,CAqCT"}
@@ -1,35 +1,37 @@
1
- import { createHelperId as a } from "./dependency-graph.js";
2
- function p(e, i, o, t, r, d) {
1
+ import { createHelperId as k } from "./dependency-graph.js";
2
+ function a(e, i, o, n, r, d) {
3
3
  if (e.kind !== i)
4
4
  throw d(
5
5
  "ValidationError",
6
- `Attempted to register helper "${e.key}" as ${t} but received kind "${e.kind}".`
6
+ `Attempted to register helper "${e.key}" as ${n} but received kind "${e.kind}".`
7
7
  );
8
8
  if (e.mode === "override") {
9
9
  const c = o.find(
10
- (n) => n.helper.key === e.key && n.helper.mode === "override"
10
+ (t) => t.helper.key === e.key && t.helper.mode === "override"
11
11
  );
12
12
  if (c) {
13
- const n = `Multiple overrides registered for helper "${e.key}".`;
14
- throw r(e, c.helper, n), d("ValidationError", n);
13
+ const t = `Multiple overrides registered for helper "${e.key}".`;
14
+ throw r(e, c.helper, t), d("ValidationError", t);
15
15
  }
16
+ for (let t = o.length - 1; t >= 0; t--)
17
+ o[t].helper.key === e.key && o.splice(t, 1);
16
18
  }
17
19
  const f = o.length;
18
20
  o.push({
19
21
  helper: e,
20
- id: a(e, f),
22
+ id: k(e, f),
21
23
  index: f
22
24
  });
23
25
  }
24
- function g(e, i, o, t = "after-fragments") {
26
+ function g(e, i, o, n = "after-fragments") {
25
27
  const r = e ?? `pipeline.extension#${o.length + 1}`;
26
28
  return o.push({
27
29
  key: r,
28
- lifecycle: t,
30
+ lifecycle: n,
29
31
  hook: i
30
32
  }), r;
31
33
  }
32
- function s(e, i, o) {
34
+ function y(e, i, o) {
33
35
  if (typeof i == "function") {
34
36
  g(
35
37
  e,
@@ -39,19 +41,19 @@ function s(e, i, o) {
39
41
  return;
40
42
  }
41
43
  if (i && typeof i == "object" && "hook" in i && typeof i.hook == "function") {
42
- const t = i;
44
+ const n = i;
43
45
  g(
44
46
  e,
45
- t.hook,
47
+ n.hook,
46
48
  o,
47
- t.lifecycle
49
+ n.lifecycle
48
50
  );
49
51
  return;
50
52
  }
51
53
  return i;
52
54
  }
53
55
  export {
54
- s as handleExtensionRegisterResult,
56
+ y as handleExtensionRegisterResult,
55
57
  g as registerExtensionHook,
56
- p as registerHelper
58
+ a as registerHelper
57
59
  };
@@ -0,0 +1,94 @@
1
+ import { MaybePromise } from './types.js';
2
+ /**
3
+ * Metadata about an error during rollback execution.
4
+ * @public
5
+ */
6
+ export interface PipelineRollbackErrorMetadata {
7
+ readonly name?: string;
8
+ readonly message?: string;
9
+ readonly stack?: string;
10
+ readonly cause?: unknown;
11
+ }
12
+ /**
13
+ * A rollback operation that can be executed to undo changes.
14
+ *
15
+ * Rollbacks are collected during helper/extension execution and invoked in reverse order
16
+ * if the pipeline encounters a failure, enabling cleanup and state restoration.
17
+ *
18
+ * @public
19
+ */
20
+ export interface PipelineRollback {
21
+ readonly key?: string;
22
+ readonly label?: string;
23
+ readonly run: () => unknown | Promise<unknown>;
24
+ }
25
+ /**
26
+ * Options for executing a rollback stack.
27
+ * @public
28
+ */
29
+ export interface RunRollbackStackOptions {
30
+ readonly source: 'extension' | 'helper';
31
+ readonly onError?: (args: {
32
+ readonly error: unknown;
33
+ readonly entry: PipelineRollback;
34
+ readonly metadata: PipelineRollbackErrorMetadata;
35
+ }) => void;
36
+ }
37
+ /**
38
+ * Creates a pipeline rollback object with metadata.
39
+ *
40
+ * This is a lightweight wrapper that helps distinguish rollback operations in diagnostics
41
+ * and error handling. It's used by both helpers and extensions to declare cleanup functions.
42
+ *
43
+ * @param run - The rollback function to execute
44
+ * @param options - Optional metadata (key, label) for diagnostics
45
+ * @param options.key
46
+ * @param options.label
47
+ * @returns A rollback descriptor with the run function and metadata
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const rollback = createPipelineRollback(
52
+ * () => {
53
+ * cleanup();
54
+ * },
55
+ * {
56
+ * key: 'my-helper',
57
+ * label: 'Restore previous state',
58
+ * }
59
+ * );
60
+ * ```
61
+ *
62
+ * @public
63
+ */
64
+ export declare function createPipelineRollback(run: () => unknown | Promise<unknown>, options?: {
65
+ readonly key?: string;
66
+ readonly label?: string;
67
+ }): PipelineRollback;
68
+ /**
69
+ * Converts an error into a serializable metadata object.
70
+ *
71
+ * Extracts `name`, `message`, `stack`, and `cause` from Error instances.
72
+ * Falls back to a plain message string for non-Error values.
73
+ *
74
+ * @param error - The error to convert
75
+ * @returns Serializable error metadata
76
+ *
77
+ * @internal
78
+ */
79
+ export declare function createRollbackErrorMetadata(error: unknown): PipelineRollbackErrorMetadata;
80
+ /**
81
+ * Executes a stack of rollback operations in reverse order.
82
+ *
83
+ * Each rollback is executed sequentially in reverse (LIFO) order. If any rollback fails,
84
+ * the error is reported via the onError callback but execution continues with remaining
85
+ * rollbacks. This ensures all cleanup functions are attempted even if some fail.
86
+ *
87
+ * @param entries - The rollback entries to execute in reverse order
88
+ * @param options - Configuration including error handler and rollback source
89
+ * @returns A promise if any rollback is async, otherwise `void`
90
+ *
91
+ * @internal
92
+ */
93
+ export declare function runRollbackStack(entries: readonly PipelineRollback[], options: RunRollbackStackOptions): MaybePromise<void>;
94
+ //# sourceMappingURL=rollback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../src/rollback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;QACjC,QAAQ,CAAC,QAAQ,EAAE,6BAA6B,CAAC;KACjD,KAAK,IAAI,CAAC;CACX;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,sBAAsB,CACrC,GAAG,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EACrC,OAAO,GAAE;IACR,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACnB,GACJ,gBAAgB,CAElB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,OAAO,GACZ,6BAA6B,CAoB/B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC/B,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,OAAO,EAAE,uBAAuB,GAC9B,YAAY,CAAC,IAAI,CAAC,CAyCpB"}
@@ -0,0 +1,46 @@
1
+ import { isPromiseLike as u, maybeTry as f } from "./async-utils.js";
2
+ function v(e, t = {}) {
3
+ return { run: e, ...t };
4
+ }
5
+ function m(e) {
6
+ if (e instanceof Error) {
7
+ const { name: t, message: r, stack: n } = e, o = e.cause;
8
+ return {
9
+ name: t,
10
+ message: r,
11
+ stack: n,
12
+ cause: o
13
+ };
14
+ }
15
+ return typeof e == "string" ? {
16
+ message: e
17
+ } : {};
18
+ }
19
+ function b(e, t) {
20
+ const r = [...e].reverse(), n = (s) => {
21
+ if (s >= r.length)
22
+ return;
23
+ const a = r[s], i = f(
24
+ () => a.run(),
25
+ (c) => {
26
+ const l = m(c);
27
+ t.onError?.({
28
+ error: c,
29
+ entry: a,
30
+ metadata: l
31
+ });
32
+ }
33
+ );
34
+ return u(i) ? Promise.resolve(i).then(
35
+ () => n(s + 1)
36
+ ) : n(s + 1);
37
+ }, o = n(0);
38
+ if (u(o))
39
+ return Promise.resolve(o).then(() => {
40
+ });
41
+ }
42
+ export {
43
+ v as createPipelineRollback,
44
+ m as createRollbackErrorMetadata,
45
+ b as runRollbackStack
46
+ };