@wpkernel/pipeline 0.12.3-beta.2 → 0.12.6-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 (120) hide show
  1. package/README.md +130 -86
  2. package/dist/{async-utils.d.ts → core/async-utils.d.ts} +9 -0
  3. package/dist/core/async-utils.d.ts.map +1 -0
  4. package/dist/core/async-utils.js +46 -0
  5. package/dist/core/createExtension.d.ts.map +1 -0
  6. package/dist/core/dependency-graph.d.ts.map +1 -0
  7. package/dist/core/error-factory.d.ts.map +1 -0
  8. package/dist/{executor.d.ts → core/execution-utils.d.ts} +1 -1
  9. package/dist/core/execution-utils.d.ts.map +1 -0
  10. package/dist/core/executor.d.ts +2 -0
  11. package/dist/core/executor.d.ts.map +1 -0
  12. package/dist/{extensions → core/extensions}/index.d.ts +1 -0
  13. package/dist/core/extensions/index.d.ts.map +1 -0
  14. package/dist/core/extensions/official.d.ts.map +1 -0
  15. package/dist/{extensions.d.ts → core/extensions/runner.d.ts} +2 -5
  16. package/dist/core/extensions/runner.d.ts.map +1 -0
  17. package/dist/core/extensions/runner.js +73 -0
  18. package/dist/core/helper.d.ts.map +1 -0
  19. package/dist/core/index.d.ts +11 -0
  20. package/dist/core/index.d.ts.map +1 -0
  21. package/dist/core/index.js +36 -0
  22. package/dist/{internal → core/internal}/extension-coordinator.d.ts +1 -1
  23. package/dist/core/internal/extension-coordinator.d.ts.map +1 -0
  24. package/dist/{internal → core/internal}/extension-coordinator.js +7 -6
  25. package/dist/{internal → core/internal}/extension-coordinator.types.d.ts +14 -14
  26. package/dist/core/internal/extension-coordinator.types.d.ts.map +1 -0
  27. package/dist/core/makePipeline.d.ts +5 -0
  28. package/dist/core/makePipeline.d.ts.map +1 -0
  29. package/dist/core/makePipeline.js +147 -0
  30. package/dist/core/registration.d.ts.map +1 -0
  31. package/dist/core/registration.js +59 -0
  32. package/dist/core/rollback.d.ts.map +1 -0
  33. package/dist/core/runner/context.d.ts +13 -0
  34. package/dist/core/runner/context.d.ts.map +1 -0
  35. package/dist/core/runner/context.js +86 -0
  36. package/dist/core/runner/diagnostics.d.ts +48 -0
  37. package/dist/core/runner/diagnostics.d.ts.map +1 -0
  38. package/dist/core/runner/diagnostics.js +82 -0
  39. package/dist/core/runner/execution.d.ts +6 -0
  40. package/dist/core/runner/execution.d.ts.map +1 -0
  41. package/dist/core/runner/execution.js +66 -0
  42. package/dist/core/runner/index.d.ts +14 -0
  43. package/dist/core/runner/index.d.ts.map +1 -0
  44. package/dist/core/runner/index.js +9 -0
  45. package/dist/core/runner/program.d.ts +7 -0
  46. package/dist/core/runner/program.d.ts.map +1 -0
  47. package/dist/core/runner/program.js +146 -0
  48. package/dist/core/runner/rollback.d.ts +48 -0
  49. package/dist/core/runner/rollback.d.ts.map +1 -0
  50. package/dist/core/runner/rollback.js +75 -0
  51. package/dist/core/runner/stage-factories.d.ts +69 -0
  52. package/dist/core/runner/stage-factories.d.ts.map +1 -0
  53. package/dist/core/runner/stage-factories.js +121 -0
  54. package/dist/core/runner/types.d.ts +202 -0
  55. package/dist/core/runner/types.d.ts.map +1 -0
  56. package/dist/{types.d.ts → core/types.d.ts} +62 -97
  57. package/dist/core/types.d.ts.map +1 -0
  58. package/dist/extensions/index.js +6 -2
  59. package/dist/index.d.ts +20 -17
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +19 -17
  62. package/dist/standard-pipeline/createPipeline.d.ts +6 -0
  63. package/dist/standard-pipeline/createPipeline.d.ts.map +1 -0
  64. package/dist/standard-pipeline/createPipeline.js +7 -0
  65. package/dist/standard-pipeline/runner/index.d.ts +21 -0
  66. package/dist/standard-pipeline/runner/index.d.ts.map +1 -0
  67. package/dist/standard-pipeline/runner/index.js +244 -0
  68. package/dist/standard-pipeline/types.d.ts +150 -0
  69. package/dist/standard-pipeline/types.d.ts.map +1 -0
  70. package/package.json +16 -1
  71. package/dist/async-utils.d.ts.map +0 -1
  72. package/dist/async-utils.js +0 -40
  73. package/dist/createExtension.d.ts.map +0 -1
  74. package/dist/createPipeline.d.ts +0 -45
  75. package/dist/createPipeline.d.ts.map +0 -1
  76. package/dist/createPipeline.js +0 -122
  77. package/dist/dependency-graph.d.ts.map +0 -1
  78. package/dist/error-factory.d.ts.map +0 -1
  79. package/dist/executor.d.ts.map +0 -1
  80. package/dist/extensions/index.d.ts.map +0 -1
  81. package/dist/extensions/official.d.ts.map +0 -1
  82. package/dist/extensions.d.ts.map +0 -1
  83. package/dist/extensions.js +0 -88
  84. package/dist/helper.d.ts.map +0 -1
  85. package/dist/internal/diagnostic-manager.d.ts +0 -29
  86. package/dist/internal/diagnostic-manager.d.ts.map +0 -1
  87. package/dist/internal/diagnostic-manager.js +0 -90
  88. package/dist/internal/diagnostic-manager.types.d.ts +0 -70
  89. package/dist/internal/diagnostic-manager.types.d.ts.map +0 -1
  90. package/dist/internal/extension-coordinator.d.ts.map +0 -1
  91. package/dist/internal/extension-coordinator.types.d.ts.map +0 -1
  92. package/dist/internal/helper-execution.d.ts +0 -32
  93. package/dist/internal/helper-execution.d.ts.map +0 -1
  94. package/dist/internal/helper-execution.js +0 -33
  95. package/dist/internal/pipeline-program-utils.d.ts +0 -127
  96. package/dist/internal/pipeline-program-utils.d.ts.map +0 -1
  97. package/dist/internal/pipeline-program-utils.js +0 -161
  98. package/dist/internal/pipeline-runner.d.ts +0 -18
  99. package/dist/internal/pipeline-runner.d.ts.map +0 -1
  100. package/dist/internal/pipeline-runner.js +0 -343
  101. package/dist/internal/pipeline-runner.types.d.ts +0 -167
  102. package/dist/internal/pipeline-runner.types.d.ts.map +0 -1
  103. package/dist/registration.d.ts.map +0 -1
  104. package/dist/registration.js +0 -57
  105. package/dist/rollback.d.ts.map +0 -1
  106. package/dist/types.d.ts.map +0 -1
  107. /package/dist/{createExtension.d.ts → core/createExtension.d.ts} +0 -0
  108. /package/dist/{createExtension.js → core/createExtension.js} +0 -0
  109. /package/dist/{dependency-graph.d.ts → core/dependency-graph.d.ts} +0 -0
  110. /package/dist/{dependency-graph.js → core/dependency-graph.js} +0 -0
  111. /package/dist/{error-factory.d.ts → core/error-factory.d.ts} +0 -0
  112. /package/dist/{error-factory.js → core/error-factory.js} +0 -0
  113. /package/dist/{executor.js → core/execution-utils.js} +0 -0
  114. /package/dist/{extensions → core/extensions}/official.d.ts +0 -0
  115. /package/dist/{extensions → core/extensions}/official.js +0 -0
  116. /package/dist/{helper.d.ts → core/helper.d.ts} +0 -0
  117. /package/dist/{helper.js → core/helper.js} +0 -0
  118. /package/dist/{registration.d.ts → core/registration.d.ts} +0 -0
  119. /package/dist/{rollback.d.ts → core/rollback.d.ts} +0 -0
  120. /package/dist/{rollback.js → core/rollback.js} +0 -0
@@ -1,161 +0,0 @@
1
- import { maybeTry as g, maybeThen as H, isPromiseLike as S } from "../async-utils.js";
2
- import { executeHelpers as x } from "../executor.js";
3
- import { runRollbackStack as y } from "../rollback.js";
4
- function O(r) {
5
- return !!(r && typeof r == "object" && "__halt" in r && r.__halt === !0);
6
- }
7
- function C(r) {
8
- const {
9
- getOrder: t,
10
- makeArgs: n,
11
- invoke: o,
12
- recordStep: l,
13
- onVisited: a,
14
- registerRollback: k
15
- } = r, b = (c, i, p) => {
16
- const s = o({ helper: c, args: i, next: p });
17
- return k ? S(s) ? s.then((e) => {
18
- k(c, e);
19
- }) : (k(c, s), s) : s;
20
- };
21
- return (c) => {
22
- const i = t(c), p = x(i, n(c), b, l);
23
- return H(
24
- p,
25
- (s) => a(c, s)
26
- );
27
- };
28
- }
29
- function T(r) {
30
- const { isHalt: t, snapshotFragments: n, applyArtifact: o } = r;
31
- return (l) => t(l) ? l : o(l, n(l));
32
- }
33
- function _(r) {
34
- const { isHalt: t, execute: n } = r;
35
- return (o) => t(o) ? o : n(o);
36
- }
37
- function z(r) {
38
- const { isHalt: t, commit: n, rollbackToHalt: o } = r, l = (a) => {
39
- const k = () => a;
40
- return g(
41
- () => H(n(a), k),
42
- (c) => o(a, c)
43
- );
44
- };
45
- return (a) => t(a) ? a : l(a);
46
- }
47
- function V(r) {
48
- const { isHalt: t, finalize: n } = r;
49
- return (o) => t(o) ? o : n(o);
50
- }
51
- function E(r, t) {
52
- const { context: n, rollbackContext: o, helperRollbacks: l, onHelperRollbackError: a } = r, k = o.extensionCoordinator && o.extensionState ? o.extensionCoordinator.createRollbackHandler(
53
- o.extensionState
54
- ) : (i) => {
55
- throw i;
56
- };
57
- return g(() => H(
58
- y(
59
- l.map((i) => ({
60
- ...i.rollback,
61
- key: i.helper.key
62
- })),
63
- {
64
- source: "helper",
65
- onError: ({
66
- error: i,
67
- metadata: p,
68
- entry: s
69
- }) => {
70
- const e = l.find(
71
- (u) => u.helper.key === (s.key ?? "")
72
- );
73
- e && a && a({
74
- error: i,
75
- helper: e.helper,
76
- errorMetadata: p,
77
- context: n
78
- });
79
- }
80
- }
81
- ),
82
- () => k(t)
83
- ), () => {
84
- });
85
- }
86
- function P(r) {
87
- const { state: t, program: n, rollbackPlan: o, halt: l } = r;
88
- return g(() => n(t), (b) => F(
89
- {
90
- rollbackPlan: o,
91
- halt: l
92
- },
93
- b
94
- ));
95
- }
96
- function F(r, t) {
97
- return H(
98
- E(r.rollbackPlan, t),
99
- () => r.halt(t)
100
- );
101
- }
102
- function j(r) {
103
- return function(n) {
104
- const {
105
- pushStep: o,
106
- toRollbackContext: l,
107
- halt: a,
108
- isHalt: k,
109
- onHelperRollbackError: b
110
- } = r, c = ({
111
- helper: e,
112
- args: u,
113
- next: m
114
- }) => e.apply(u, m), i = (e) => o(e), p = (e) => (u, m) => {
115
- if (!(!m || typeof m != "object") && "rollback" in m) {
116
- const f = m.rollback;
117
- f && e.push({ helper: u, rollback: f });
118
- }
119
- }, s = () => b ? (e) => b({
120
- ...e,
121
- helper: e.helper
122
- }) : void 0;
123
- return (e) => {
124
- if (k(e))
125
- return e;
126
- const u = [
127
- ...n.readRollbacks?.(e) ?? []
128
- ], m = l(e), f = C({
129
- getOrder: n.getOrder,
130
- makeArgs: n.makeArgs,
131
- invoke: c,
132
- recordStep: i,
133
- onVisited: (h, R) => n.onVisited(h, R, u),
134
- registerRollback: p(u)
135
- }), d = {
136
- context: m.context,
137
- rollbackContext: m,
138
- helperRollbacks: u,
139
- onHelperRollbackError: s()
140
- };
141
- return P({
142
- state: e,
143
- program: f,
144
- rollbackPlan: d,
145
- halt: a
146
- });
147
- };
148
- };
149
- }
150
- export {
151
- C as createHelpersProgram,
152
- O as isHalt,
153
- _ as makeAfterFragmentsStage,
154
- z as makeCommitStage,
155
- T as makeFinalizeFragmentsStage,
156
- V as makeFinalizeResultStage,
157
- j as makeHelperStageFactory,
158
- E as runHelperRollbackPlan,
159
- P as runHelperStageWithRollback,
160
- F as runRollbackToHalt
161
- };
@@ -1,18 +0,0 @@
1
- import { Helper, HelperKind, PipelineReporter, PipelineDiagnostic } from '../types';
2
- import { PipelineRunner, PipelineRunnerDependencies } from './pipeline-runner.types';
3
- /**
4
- * Creates the orchestrator responsible for executing pipeline runs.
5
- *
6
- * The runner wires together dependency graph resolution, helper execution, and the official
7
- * extension framework via the {@link initExtensionCoordinator}. By extracting this logic, the
8
- * public {@link createPipeline} entry point remains focused on registration while the runner keeps
9
- * lifecycle sequencing isolated and testable.
10
- *
11
- * @param dependencies - Bundled factory methods, diagnostics, and registered helpers
12
- * @category Pipeline
13
- * @internal
14
- */
15
- export declare function initPipelineRunner<TRunOptions, TBuildOptions, TContext extends {
16
- reporter: TReporter;
17
- }, TReporter extends PipelineReporter, TDraft, TArtifact, TDiagnostic extends PipelineDiagnostic, TRunResult, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind extends HelperKind, TBuilderKind extends HelperKind, TFragmentHelper extends Helper<TContext, TFragmentInput, TFragmentOutput, TReporter, TFragmentKind>, TBuilderHelper extends Helper<TContext, TBuilderInput, TBuilderOutput, TReporter, TBuilderKind>>(dependencies: PipelineRunnerDependencies<TRunOptions, TBuildOptions, TContext, TReporter, TDraft, TArtifact, TDiagnostic, TRunResult, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind, TBuilderKind, TFragmentHelper, TBuilderHelper>): PipelineRunner<TRunOptions, TBuildOptions, TContext, TReporter, TDraft, TArtifact, TDiagnostic, TRunResult, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind, TBuilderKind, TFragmentHelper, TBuilderHelper>;
18
- //# sourceMappingURL=pipeline-runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipeline-runner.d.ts","sourceRoot":"","sources":["../../src/internal/pipeline-runner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEX,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAQlB,MAAM,UAAU,CAAC;AAMlB,OAAO,KAAK,EAEX,cAAc,EACd,0BAA0B,EAM1B,MAAM,yBAAyB,CAAC;AAejC;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CACjC,WAAW,EACX,aAAa,EACb,QAAQ,SAAS;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,EACxC,SAAS,SAAS,gBAAgB,EAClC,MAAM,EACN,SAAS,EACT,WAAW,SAAS,kBAAkB,EACtC,UAAU,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,SAAS,UAAU,EAChC,YAAY,SAAS,UAAU,EAC/B,eAAe,SAAS,MAAM,CAC7B,QAAQ,EACR,cAAc,EACd,eAAe,EACf,SAAS,EACT,aAAa,CACb,EACD,cAAc,SAAS,MAAM,CAC5B,QAAQ,EACR,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,CACZ,EAED,YAAY,EAAE,0BAA0B,CACvC,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,EACT,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,CACd,GACC,cAAc,CAChB,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,EACT,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,CACd,CA2pBA"}
@@ -1,343 +0,0 @@
1
- import { maybeThen as b, composeK as j } from "../async-utils.js";
2
- import { createDependencyGraph as x } from "../dependency-graph.js";
3
- import { buildExecutionSnapshot as u, assertAllHelpersExecuted as E } from "./helper-execution.js";
4
- import { initExtensionCoordinator as I } from "./extension-coordinator.js";
5
- import { isHalt as g, makeFinalizeResultStage as J, makeCommitStage as Q, makeHelperStageFactory as W, makeAfterFragmentsStage as X, makeFinalizeFragmentsStage as Y, runRollbackToHalt as Z } from "./pipeline-program-utils.js";
6
- const h = "after-fragments";
7
- function ar(o) {
8
- const p = (r) => ({
9
- __halt: !0,
10
- error: r
11
- }), k = (r) => {
12
- const t = o.options.createBuildOptions(r), n = o.options.createContext(r);
13
- o.diagnosticManager.setReporter(n.reporter);
14
- const l = o.options.createFragmentState({
15
- options: r,
16
- context: n,
17
- buildOptions: t
18
- }), c = x(
19
- o.fragmentEntries,
20
- {
21
- providedKeys: o.options.fragmentProvidedKeys,
22
- onMissingDependency: ({ dependant: e, dependencyKey: i }) => {
23
- const a = e.helper;
24
- o.diagnosticManager.flagMissingDependency(
25
- a,
26
- i,
27
- o.fragmentKind
28
- ), o.diagnosticManager.flagUnusedHelper(
29
- a,
30
- o.fragmentKind,
31
- `could not execute because dependency "${i}" was not found`,
32
- a.dependsOn
33
- );
34
- },
35
- onUnresolvedHelpers: ({ unresolved: e }) => {
36
- for (const i of e) {
37
- const a = i.helper;
38
- o.diagnosticManager.flagUnusedHelper(
39
- a,
40
- o.fragmentKind,
41
- "could not execute because its dependencies never resolved",
42
- a.dependsOn
43
- );
44
- }
45
- }
46
- },
47
- o.createError
48
- ).order, s = [], m = (e) => {
49
- const i = e.helper;
50
- s.push({
51
- id: e.id,
52
- index: s.length,
53
- key: i.key,
54
- kind: i.kind,
55
- mode: i.mode,
56
- priority: i.priority,
57
- dependsOn: i.dependsOn,
58
- origin: i.origin
59
- });
60
- }, f = {
61
- providedKeys: o.options.builderProvidedKeys,
62
- onMissingDependency: ({ dependant: e, dependencyKey: i }) => {
63
- const a = e.helper;
64
- o.diagnosticManager.flagMissingDependency(
65
- a,
66
- i,
67
- o.builderKind
68
- ), o.diagnosticManager.flagUnusedHelper(
69
- a,
70
- o.builderKind,
71
- `could not execute because dependency "${i}" was not found`,
72
- a.dependsOn
73
- );
74
- },
75
- onUnresolvedHelpers: ({ unresolved: e }) => {
76
- for (const i of e) {
77
- const a = i.helper;
78
- o.diagnosticManager.flagUnusedHelper(
79
- a,
80
- o.builderKind,
81
- "could not execute because its dependencies never resolved",
82
- a.dependsOn
83
- );
84
- }
85
- }
86
- }, N = o.options.createExtensionHookOptions ?? ((e) => ({
87
- context: e.context,
88
- options: e.options,
89
- artifact: e.artifact,
90
- lifecycle: e.lifecycle
91
- })), $ = (e, i) => N({
92
- context: n,
93
- options: r,
94
- buildOptions: t,
95
- artifact: e,
96
- lifecycle: i
97
- }), q = o.options.onExtensionRollbackError ?? ((e) => {
98
- const { reporter: i } = e.context, a = i.warn;
99
- typeof a == "function" && a.call(i, "Pipeline extension rollback failed.", {
100
- error: e.error,
101
- errorName: e.errorMetadata.name,
102
- errorMessage: e.errorMetadata.message,
103
- errorStack: e.errorMetadata.stack,
104
- errorCause: e.errorMetadata.cause,
105
- extensions: e.extensionKeys,
106
- hookKeys: e.hookSequence
107
- });
108
- });
109
- return {
110
- runOptions: r,
111
- buildOptions: t,
112
- context: n,
113
- draft: l,
114
- fragmentOrder: c,
115
- steps: s,
116
- pushStep: m,
117
- builderGraphOptions: f,
118
- buildHookOptions: $,
119
- handleRollbackError: q
120
- };
121
- }, R = (r, t, n) => {
122
- o.diagnosticManager.reviewUnusedHelpers(
123
- r.fragmentEntries,
124
- t,
125
- o.fragmentKind
126
- );
127
- const l = u(
128
- r.fragmentEntries,
129
- t,
130
- o.fragmentKind
131
- );
132
- return E(
133
- r.fragmentEntries,
134
- l,
135
- o.fragmentKind,
136
- o.diagnosticManager.describeHelper,
137
- o.createError
138
- ), {
139
- ...r,
140
- fragmentVisited: t,
141
- fragmentExecution: l,
142
- fragmentRollbacks: n
143
- };
144
- }, H = (r, t, n) => {
145
- o.diagnosticManager.reviewUnusedHelpers(
146
- r.builderEntries,
147
- t,
148
- o.builderKind
149
- );
150
- const l = u(
151
- r.builderEntries,
152
- t,
153
- o.builderKind
154
- );
155
- return E(
156
- r.builderEntries,
157
- l,
158
- o.builderKind,
159
- o.diagnosticManager.describeHelper,
160
- o.createError
161
- ), {
162
- ...r,
163
- builderVisited: t,
164
- builderExecution: l,
165
- builderRollbacks: n
166
- };
167
- }, O = (r, t) => o.options.createFragmentArgs({
168
- helper: t.helper,
169
- options: r.runOptions,
170
- context: r.context,
171
- buildOptions: r.buildOptions,
172
- draft: r.draft
173
- }), y = (r, t) => o.options.createBuilderArgs({
174
- helper: t.helper,
175
- options: r.runOptions,
176
- context: r.context,
177
- buildOptions: r.buildOptions,
178
- artifact: r.artifact
179
- }), M = (r) => (t) => O(r, t), F = (r) => (t) => y(r, t), K = (r) => r.fragmentRollbacks, S = (r) => r.builderRollbacks ?? [], d = (r) => ({
180
- context: r.context,
181
- extensionCoordinator: r.extensionCoordinator,
182
- extensionState: r.extensionState
183
- }), A = (r) => r.fragmentExecution ?? u(
184
- r.fragmentEntries,
185
- r.fragmentVisited,
186
- o.fragmentKind
187
- ), P = (r) => {
188
- const { extensionCoordinator: t, extensionState: n } = r;
189
- if (!(!t || !n))
190
- return t.commit(n);
191
- }, v = (r) => ({
192
- context: r.context,
193
- rollbackContext: d(r),
194
- helperRollbacks: r.builderRollbacks ?? [],
195
- onHelperRollbackError: o.options.onHelperRollbackError
196
- }), w = (r, t) => Z(
197
- {
198
- rollbackPlan: v(r),
199
- halt: p
200
- },
201
- t
202
- ), B = (r) => (t) => {
203
- const n = I(
204
- ({ error: c, extensionKeys: s, hookSequence: m, errorMetadata: f }) => r.handleRollbackError({
205
- error: c,
206
- extensionKeys: s,
207
- hookSequence: m,
208
- errorMetadata: f,
209
- context: t.context
210
- })
211
- ), l = n.runLifecycle(
212
- h,
213
- {
214
- hooks: o.extensionHooks,
215
- hookOptions: r.buildHookOptions(
216
- t.artifact,
217
- h
218
- )
219
- }
220
- );
221
- return b(
222
- l,
223
- (c) => ({
224
- ...t,
225
- artifact: c.artifact,
226
- extensionCoordinator: n,
227
- extensionState: c
228
- })
229
- );
230
- }, U = (r) => r.helpers ?? {
231
- fragments: r.fragmentExecution ?? u(
232
- r.fragmentEntries,
233
- r.fragmentVisited,
234
- o.fragmentKind
235
- ),
236
- builders: r.builderExecution ?? u(
237
- r.builderEntries,
238
- r.builderVisited,
239
- o.builderKind
240
- )
241
- }, z = (r) => ({
242
- ...r,
243
- helpers: U(r),
244
- diagnostics: [
245
- ...o.diagnosticManager.readDiagnostics()
246
- ]
247
- }), D = Y({
248
- isHalt: g,
249
- snapshotFragments: A,
250
- applyArtifact: (r, t) => ({
251
- ...r,
252
- artifact: o.options.finalizeFragmentState({
253
- draft: r.draft,
254
- options: r.runOptions,
255
- context: r.context,
256
- buildOptions: r.buildOptions,
257
- helpers: {
258
- fragments: t
259
- }
260
- }),
261
- fragmentExecution: t
262
- })
263
- }), T = (r) => X({
264
- isHalt: g,
265
- execute: B(r)
266
- }), G = Q({
267
- isHalt: g,
268
- commit: P,
269
- rollbackToHalt: w
270
- }), V = J({
271
- isHalt: g,
272
- finalize: z
273
- }), _ = {
274
- getOrder: (r) => r.fragmentOrder,
275
- makeArgs: M,
276
- onVisited: (r, t, n) => R(r, t, n),
277
- readRollbacks: K
278
- }, C = {
279
- getOrder: (r) => r.builderOrder,
280
- makeArgs: F,
281
- onVisited: (r, t, n) => H(r, t, n),
282
- readRollbacks: S
283
- }, L = (r) => {
284
- const t = W({
285
- pushStep: r.pushStep,
286
- toRollbackContext: d,
287
- halt: p,
288
- isHalt: g,
289
- onHelperRollbackError: o.options.onHelperRollbackError
290
- }), n = t(_), l = t(C), c = [
291
- V,
292
- G,
293
- l,
294
- T(r),
295
- D,
296
- n
297
- ];
298
- return j(...c);
299
- };
300
- return {
301
- prepareContext: k,
302
- executeRun: (r) => {
303
- const t = x(
304
- o.builderEntries,
305
- r.builderGraphOptions,
306
- o.createError
307
- ).order, n = {
308
- context: r.context,
309
- reporter: r.context.reporter,
310
- runOptions: r.runOptions,
311
- buildOptions: r.buildOptions,
312
- fragmentEntries: o.fragmentEntries,
313
- builderEntries: o.builderEntries,
314
- fragmentOrder: r.fragmentOrder,
315
- builderOrder: t,
316
- fragmentVisited: /* @__PURE__ */ new Set(),
317
- builderVisited: /* @__PURE__ */ new Set(),
318
- draft: r.draft,
319
- artifact: null,
320
- steps: r.steps,
321
- diagnostics: [],
322
- fragmentRollbacks: [],
323
- builderRollbacks: []
324
- }, l = L(r), c = (s) => {
325
- if (g(s))
326
- throw s.error ?? new Error("Pipeline halted");
327
- return o.resolveRunResult({
328
- artifact: s.artifact,
329
- diagnostics: s.diagnostics,
330
- steps: s.steps,
331
- context: s.context,
332
- buildOptions: s.buildOptions,
333
- options: s.runOptions,
334
- helpers: s.helpers
335
- });
336
- };
337
- return b(l(n), c);
338
- }
339
- };
340
- }
341
- export {
342
- ar as initPipelineRunner
343
- };
@@ -1,167 +0,0 @@
1
- import { CreateDependencyGraphOptions, RegisteredHelper } from '../dependency-graph';
2
- import { ErrorFactory } from '../error-factory';
3
- import { CreatePipelineOptions, Helper, HelperApplyOptions, HelperExecutionSnapshot, HelperKind, MaybePromise, PipelineDiagnostic, PipelineExecutionMetadata, PipelineExtensionHookOptions, PipelineExtensionLifecycle, PipelineExtensionRollbackErrorMetadata, PipelineReporter, PipelineStep } from '../types';
4
- import { PipelineRollback } from '../rollback';
5
- import { ExtensionCoordinator, ExtensionLifecycleState } from './extension-coordinator.types';
6
- import { DiagnosticManager } from './diagnostic-manager.types';
7
- import { ExtensionHookEntry } from '../extensions';
8
- /**
9
- * Mutable state captured while preparing a pipeline run. This mirrors the context consumed by
10
- * {@link executeHelpers} and downstream extension orchestration.
11
- *
12
- * @category Pipeline
13
- * @internal
14
- */
15
- export interface PipelineRunContext<TRunOptions, TBuildOptions, TContext, TDraft, TArtifact, TFragmentHelper, TBuilderHelper> {
16
- readonly runOptions: TRunOptions;
17
- readonly buildOptions: TBuildOptions;
18
- readonly context: TContext;
19
- readonly draft: TDraft;
20
- readonly fragmentOrder: RegisteredHelper<TFragmentHelper>[];
21
- readonly steps: PipelineStep[];
22
- readonly pushStep: (entry: RegisteredHelper<unknown>) => void;
23
- readonly builderGraphOptions: CreateDependencyGraphOptions<TBuilderHelper>;
24
- readonly buildHookOptions: (artifact: TArtifact, lifecycle: PipelineExtensionLifecycle) => PipelineExtensionHookOptions<TContext, TRunOptions, TArtifact>;
25
- readonly handleRollbackError: (options: {
26
- readonly error: unknown;
27
- readonly extensionKeys: readonly string[];
28
- readonly hookSequence: readonly string[];
29
- readonly errorMetadata: PipelineExtensionRollbackErrorMetadata;
30
- readonly context: TContext;
31
- }) => void;
32
- }
33
- /**
34
- * Dependency bundle consumed by {@link initPipelineRunner}. Splitting the type into a dedicated
35
- * module improves cognitive load in the implementation file and keeps the generics re-usable for
36
- * test doubles.
37
- *
38
- * @category Pipeline
39
- * @internal
40
- */
41
- export interface PipelineRunnerDependencies<TRunOptions, TBuildOptions, TContext extends {
42
- reporter: TReporter;
43
- }, TReporter extends PipelineReporter, TDraft, TArtifact, TDiagnostic extends PipelineDiagnostic, TRunResult, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind extends HelperKind, TBuilderKind extends HelperKind, TFragmentHelper extends Helper<TContext, TFragmentInput, TFragmentOutput, TReporter, TFragmentKind>, TBuilderHelper extends Helper<TContext, TBuilderInput, TBuilderOutput, TReporter, TBuilderKind>> {
44
- readonly options: CreatePipelineOptions<TRunOptions, TBuildOptions, TContext, TReporter, TDraft, TArtifact, TDiagnostic, TRunResult, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind, TBuilderKind, TFragmentHelper, TBuilderHelper>;
45
- readonly fragmentEntries: RegisteredHelper<TFragmentHelper>[];
46
- readonly builderEntries: RegisteredHelper<TBuilderHelper>[];
47
- readonly fragmentKind: TFragmentKind;
48
- readonly builderKind: TBuilderKind;
49
- readonly diagnosticManager: DiagnosticManager<TRunOptions, TBuildOptions, TContext, TReporter, TDraft, TArtifact, TDiagnostic, TRunResult, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind, TBuilderKind, TFragmentHelper, TBuilderHelper>;
50
- readonly createError: ErrorFactory;
51
- readonly resolveRunResult: (state: {
52
- readonly artifact: TArtifact;
53
- readonly diagnostics: readonly TDiagnostic[];
54
- readonly steps: readonly PipelineStep[];
55
- readonly context: TContext;
56
- readonly buildOptions: TBuildOptions;
57
- readonly options: TRunOptions;
58
- readonly helpers: PipelineExecutionMetadata<TFragmentKind, TBuilderKind>;
59
- }) => TRunResult;
60
- readonly extensionHooks: ExtensionHookEntry<TContext, TRunOptions, TArtifact>[];
61
- }
62
- /**
63
- * Public surface returned by {@link initPipelineRunner}. Downstream consumers receive a helper to
64
- * prepare the context (building dependency graphs, instantiating drafts) and an executor that runs
65
- * the prepared context through fragments, extensions, and builders.
66
- *
67
- * @category Pipeline
68
- * @internal
69
- */
70
- export interface PipelineRunner<TRunOptions, TBuildOptions, TContext extends {
71
- reporter: TReporter;
72
- }, TReporter extends PipelineReporter, TDraft, TArtifact, TDiagnostic extends PipelineDiagnostic, TRunResult, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind extends HelperKind, TBuilderKind extends HelperKind, TFragmentHelper extends Helper<TContext, TFragmentInput, TFragmentOutput, TReporter, TFragmentKind>, TBuilderHelper extends Helper<TContext, TBuilderInput, TBuilderOutput, TReporter, TBuilderKind>> {
73
- readonly prepareContext: (runOptions: TRunOptions) => PipelineRunContext<TRunOptions, TBuildOptions, TContext, TDraft, TArtifact, TFragmentHelper, TBuilderHelper>;
74
- readonly executeRun: (context: PipelineRunContext<TRunOptions, TBuildOptions, TContext, TDraft, TArtifact, TFragmentHelper, TBuilderHelper>) => MaybePromise<TRunResult>;
75
- readonly __types?: {
76
- diagnostic: TDiagnostic;
77
- helperArgs: HelperApplyOptions<unknown, unknown, unknown>;
78
- };
79
- }
80
- /**
81
- * Closed-world state threaded through composed pipeline programs. While the implementation still
82
- * mutates some nested values (e.g. `steps`), every program returns a new state value to keep the
83
- * orchestrator closed under composition.
84
- *
85
- * @category Pipeline
86
- * @internal
87
- */
88
- export interface PipelineState<TRunOptions, TBuildOptions, TContext extends {
89
- reporter: TReporter;
90
- }, TReporter extends PipelineReporter, TDraft, TArtifact, TDiagnostic extends PipelineDiagnostic, TFragmentInput, TFragmentOutput, TBuilderInput, TBuilderOutput, TFragmentKind extends HelperKind, TBuilderKind extends HelperKind, TFragmentHelper extends Helper<TContext, TFragmentInput, TFragmentOutput, TReporter, TFragmentKind>, TBuilderHelper extends Helper<TContext, TBuilderInput, TBuilderOutput, TReporter, TBuilderKind>> {
91
- readonly context: TContext;
92
- readonly reporter: TReporter;
93
- readonly runOptions: TRunOptions;
94
- readonly buildOptions: TBuildOptions;
95
- readonly fragmentEntries: RegisteredHelper<TFragmentHelper>[];
96
- readonly builderEntries: RegisteredHelper<TBuilderHelper>[];
97
- readonly fragmentOrder: RegisteredHelper<TFragmentHelper>[];
98
- readonly builderOrder: RegisteredHelper<TBuilderHelper>[];
99
- readonly fragmentVisited: Set<string>;
100
- readonly builderVisited: Set<string>;
101
- readonly draft: TDraft;
102
- readonly artifact: TArtifact | null;
103
- readonly steps: PipelineStep[];
104
- readonly diagnostics: TDiagnostic[];
105
- readonly fragmentExecution?: HelperExecutionSnapshot<TFragmentKind>;
106
- readonly builderExecution?: HelperExecutionSnapshot<TBuilderKind>;
107
- readonly helpers?: PipelineExecutionMetadata<TFragmentKind, TBuilderKind>;
108
- readonly fragmentRollbacks?: Array<{
109
- readonly helper: TFragmentHelper;
110
- readonly rollback: PipelineRollback;
111
- }>;
112
- readonly builderRollbacks?: Array<{
113
- readonly helper: TBuilderHelper;
114
- readonly rollback: PipelineRollback;
115
- }>;
116
- readonly extensionCoordinator?: ExtensionCoordinator<TContext, TRunOptions, TArtifact>;
117
- readonly extensionState?: ExtensionLifecycleState<TContext, TRunOptions, TArtifact>;
118
- }
119
- export type { ExtensionHookEntry };
120
- export type RollbackCapableCoordinator<TContext, TOptions, TArtifact> = {
121
- createRollbackHandler: <TResult>(state: ExtensionLifecycleState<TContext, TOptions, TArtifact>) => (error: unknown) => MaybePromise<TResult>;
122
- };
123
- export type RollbackEntry<THelper> = {
124
- readonly helper: THelper;
125
- readonly rollback: PipelineRollback;
126
- };
127
- export type Halt<TRunResult> = {
128
- readonly __halt: true;
129
- readonly error?: unknown;
130
- readonly result?: TRunResult;
131
- };
132
- export type RollbackContext<TContext, TOptions, TArtifact> = {
133
- readonly context: TContext;
134
- readonly extensionCoordinator?: RollbackCapableCoordinator<TContext, TOptions, TArtifact>;
135
- readonly extensionState?: ExtensionLifecycleState<TContext, TOptions, TArtifact>;
136
- };
137
- export type HelperInvokeOptions<THelper, TInput, TOutput, TContext, TReporter extends PipelineReporter> = {
138
- readonly helper: THelper;
139
- readonly args: HelperApplyOptions<TContext, TInput, TOutput, TReporter>;
140
- readonly next: () => MaybePromise<void>;
141
- };
142
- export type StageEnv<TState, TRunResult, TContext, TOptions, TArtifact, TReporter extends PipelineReporter> = {
143
- pushStep: (entry: RegisteredHelper<unknown>) => void;
144
- toRollbackContext: (state: TState) => RollbackContext<TContext, TOptions, TArtifact>;
145
- halt: (error?: unknown) => Halt<TRunResult>;
146
- isHalt: (value: unknown) => value is Halt<TRunResult>;
147
- onHelperRollbackError?: (options: {
148
- readonly error: unknown;
149
- readonly helper: Helper<TContext, unknown, unknown, TReporter, HelperKind>;
150
- readonly errorMetadata: PipelineExtensionRollbackErrorMetadata;
151
- readonly context: TContext;
152
- }) => void;
153
- };
154
- export type HelperRollbackPlan<TContext, TOptions, TArtifact, THelper extends {
155
- key: string;
156
- }> = {
157
- readonly context: TContext;
158
- readonly rollbackContext: RollbackContext<TContext, TOptions, TArtifact>;
159
- readonly helperRollbacks: readonly RollbackEntry<THelper>[];
160
- readonly onHelperRollbackError?: (options: {
161
- readonly error: unknown;
162
- readonly helper: THelper;
163
- readonly errorMetadata: PipelineExtensionRollbackErrorMetadata;
164
- readonly context: TContext;
165
- }) => void;
166
- };
167
- //# sourceMappingURL=pipeline-runner.types.d.ts.map