@generacy-ai/workflow-engine 0.0.0-preview-20260304013206
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/LICENSE +191 -0
- package/README.md +265 -0
- package/dist/actions/base-action.d.ts +63 -0
- package/dist/actions/base-action.d.ts.map +1 -0
- package/dist/actions/base-action.js +130 -0
- package/dist/actions/base-action.js.map +1 -0
- package/dist/actions/builtin/agent-invoke.d.ts +16 -0
- package/dist/actions/builtin/agent-invoke.d.ts.map +1 -0
- package/dist/actions/builtin/agent-invoke.js +108 -0
- package/dist/actions/builtin/agent-invoke.js.map +1 -0
- package/dist/actions/builtin/humancy-api-handler.d.ts +191 -0
- package/dist/actions/builtin/humancy-api-handler.d.ts.map +1 -0
- package/dist/actions/builtin/humancy-api-handler.js +521 -0
- package/dist/actions/builtin/humancy-api-handler.js.map +1 -0
- package/dist/actions/builtin/humancy-review.d.ts +83 -0
- package/dist/actions/builtin/humancy-review.d.ts.map +1 -0
- package/dist/actions/builtin/humancy-review.js +250 -0
- package/dist/actions/builtin/humancy-review.js.map +1 -0
- package/dist/actions/builtin/pr-create.d.ts +16 -0
- package/dist/actions/builtin/pr-create.d.ts.map +1 -0
- package/dist/actions/builtin/pr-create.js +110 -0
- package/dist/actions/builtin/pr-create.js.map +1 -0
- package/dist/actions/builtin/shell.d.ts +16 -0
- package/dist/actions/builtin/shell.d.ts.map +1 -0
- package/dist/actions/builtin/shell.js +80 -0
- package/dist/actions/builtin/shell.js.map +1 -0
- package/dist/actions/builtin/speckit/index.d.ts +47 -0
- package/dist/actions/builtin/speckit/index.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/index.js +347 -0
- package/dist/actions/builtin/speckit/index.js.map +1 -0
- package/dist/actions/builtin/speckit/lib/feature.d.ts +17 -0
- package/dist/actions/builtin/speckit/lib/feature.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/lib/feature.js +430 -0
- package/dist/actions/builtin/speckit/lib/feature.js.map +1 -0
- package/dist/actions/builtin/speckit/lib/fs.d.ts +62 -0
- package/dist/actions/builtin/speckit/lib/fs.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/lib/fs.js +181 -0
- package/dist/actions/builtin/speckit/lib/fs.js.map +1 -0
- package/dist/actions/builtin/speckit/lib/paths.d.ts +7 -0
- package/dist/actions/builtin/speckit/lib/paths.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/lib/paths.js +161 -0
- package/dist/actions/builtin/speckit/lib/paths.js.map +1 -0
- package/dist/actions/builtin/speckit/lib/prereqs.d.ts +8 -0
- package/dist/actions/builtin/speckit/lib/prereqs.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/lib/prereqs.js +194 -0
- package/dist/actions/builtin/speckit/lib/prereqs.js.map +1 -0
- package/dist/actions/builtin/speckit/lib/stream-batcher.d.ts +14 -0
- package/dist/actions/builtin/speckit/lib/stream-batcher.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/lib/stream-batcher.js +31 -0
- package/dist/actions/builtin/speckit/lib/stream-batcher.js.map +1 -0
- package/dist/actions/builtin/speckit/lib/templates.d.ts +15 -0
- package/dist/actions/builtin/speckit/lib/templates.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/lib/templates.js +176 -0
- package/dist/actions/builtin/speckit/lib/templates.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/check-prereqs.d.ts +11 -0
- package/dist/actions/builtin/speckit/operations/check-prereqs.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/check-prereqs.js +22 -0
- package/dist/actions/builtin/speckit/operations/check-prereqs.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/clarify.d.ts +7 -0
- package/dist/actions/builtin/speckit/operations/clarify.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/clarify.js +302 -0
- package/dist/actions/builtin/speckit/operations/clarify.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/copy-template.d.ts +11 -0
- package/dist/actions/builtin/speckit/operations/copy-template.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/copy-template.js +23 -0
- package/dist/actions/builtin/speckit/operations/copy-template.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/create-feature.d.ts +11 -0
- package/dist/actions/builtin/speckit/operations/create-feature.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/create-feature.js +25 -0
- package/dist/actions/builtin/speckit/operations/create-feature.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/get-paths.d.ts +11 -0
- package/dist/actions/builtin/speckit/operations/get-paths.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/get-paths.js +17 -0
- package/dist/actions/builtin/speckit/operations/get-paths.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/implement.d.ts +7 -0
- package/dist/actions/builtin/speckit/operations/implement.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/implement.js +246 -0
- package/dist/actions/builtin/speckit/operations/implement.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/plan.d.ts +7 -0
- package/dist/actions/builtin/speckit/operations/plan.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/plan.js +253 -0
- package/dist/actions/builtin/speckit/operations/plan.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/specify.d.ts +7 -0
- package/dist/actions/builtin/speckit/operations/specify.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/specify.js +178 -0
- package/dist/actions/builtin/speckit/operations/specify.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/tasks-to-issues.d.ts +42 -0
- package/dist/actions/builtin/speckit/operations/tasks-to-issues.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/tasks-to-issues.js +386 -0
- package/dist/actions/builtin/speckit/operations/tasks-to-issues.js.map +1 -0
- package/dist/actions/builtin/speckit/operations/tasks.d.ts +7 -0
- package/dist/actions/builtin/speckit/operations/tasks.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/operations/tasks.js +234 -0
- package/dist/actions/builtin/speckit/operations/tasks.js.map +1 -0
- package/dist/actions/builtin/speckit/types.d.ts +268 -0
- package/dist/actions/builtin/speckit/types.d.ts.map +1 -0
- package/dist/actions/builtin/speckit/types.js +11 -0
- package/dist/actions/builtin/speckit/types.js.map +1 -0
- package/dist/actions/builtin/verification-check.d.ts +16 -0
- package/dist/actions/builtin/verification-check.d.ts.map +1 -0
- package/dist/actions/builtin/verification-check.js +99 -0
- package/dist/actions/builtin/verification-check.js.map +1 -0
- package/dist/actions/builtin/workspace-prepare.d.ts +16 -0
- package/dist/actions/builtin/workspace-prepare.d.ts.map +1 -0
- package/dist/actions/builtin/workspace-prepare.js +108 -0
- package/dist/actions/builtin/workspace-prepare.js.map +1 -0
- package/dist/actions/cli-utils.d.ts +76 -0
- package/dist/actions/cli-utils.d.ts.map +1 -0
- package/dist/actions/cli-utils.js +278 -0
- package/dist/actions/cli-utils.js.map +1 -0
- package/dist/actions/epic/check-completion.d.ts +14 -0
- package/dist/actions/epic/check-completion.d.ts.map +1 -0
- package/dist/actions/epic/check-completion.js +57 -0
- package/dist/actions/epic/check-completion.js.map +1 -0
- package/dist/actions/epic/close.d.ts +18 -0
- package/dist/actions/epic/close.d.ts.map +1 -0
- package/dist/actions/epic/close.js +76 -0
- package/dist/actions/epic/close.js.map +1 -0
- package/dist/actions/epic/create-pr.d.ts +22 -0
- package/dist/actions/epic/create-pr.d.ts.map +1 -0
- package/dist/actions/epic/create-pr.js +140 -0
- package/dist/actions/epic/create-pr.js.map +1 -0
- package/dist/actions/epic/dispatch-children.d.ts +16 -0
- package/dist/actions/epic/dispatch-children.d.ts.map +1 -0
- package/dist/actions/epic/dispatch-children.js +95 -0
- package/dist/actions/epic/dispatch-children.js.map +1 -0
- package/dist/actions/epic/find-children.d.ts +16 -0
- package/dist/actions/epic/find-children.d.ts.map +1 -0
- package/dist/actions/epic/find-children.js +92 -0
- package/dist/actions/epic/find-children.js.map +1 -0
- package/dist/actions/epic/index.d.ts +20 -0
- package/dist/actions/epic/index.d.ts.map +1 -0
- package/dist/actions/epic/index.js +35 -0
- package/dist/actions/epic/index.js.map +1 -0
- package/dist/actions/epic/post-tasks-summary.d.ts +18 -0
- package/dist/actions/epic/post-tasks-summary.d.ts.map +1 -0
- package/dist/actions/epic/post-tasks-summary.js +123 -0
- package/dist/actions/epic/post-tasks-summary.js.map +1 -0
- package/dist/actions/epic/update-status.d.ts +22 -0
- package/dist/actions/epic/update-status.d.ts.map +1 -0
- package/dist/actions/epic/update-status.js +105 -0
- package/dist/actions/epic/update-status.js.map +1 -0
- package/dist/actions/github/add-comment.d.ts +14 -0
- package/dist/actions/github/add-comment.d.ts.map +1 -0
- package/dist/actions/github/add-comment.js +44 -0
- package/dist/actions/github/add-comment.js.map +1 -0
- package/dist/actions/github/client/gh-cli.d.ts +68 -0
- package/dist/actions/github/client/gh-cli.d.ts.map +1 -0
- package/dist/actions/github/client/gh-cli.js +781 -0
- package/dist/actions/github/client/gh-cli.js.map +1 -0
- package/dist/actions/github/client/index.d.ts +12 -0
- package/dist/actions/github/client/index.d.ts.map +1 -0
- package/dist/actions/github/client/index.js +10 -0
- package/dist/actions/github/client/index.js.map +1 -0
- package/dist/actions/github/client/interface.d.ts +270 -0
- package/dist/actions/github/client/interface.d.ts.map +1 -0
- package/dist/actions/github/client/interface.js +2 -0
- package/dist/actions/github/client/interface.js.map +1 -0
- package/dist/actions/github/commit-and-push.d.ts +19 -0
- package/dist/actions/github/commit-and-push.d.ts.map +1 -0
- package/dist/actions/github/commit-and-push.js +86 -0
- package/dist/actions/github/commit-and-push.js.map +1 -0
- package/dist/actions/github/create-draft-pr.d.ts +18 -0
- package/dist/actions/github/create-draft-pr.d.ts.map +1 -0
- package/dist/actions/github/create-draft-pr.js +76 -0
- package/dist/actions/github/create-draft-pr.js.map +1 -0
- package/dist/actions/github/get-context.d.ts +23 -0
- package/dist/actions/github/get-context.d.ts.map +1 -0
- package/dist/actions/github/get-context.js +109 -0
- package/dist/actions/github/get-context.js.map +1 -0
- package/dist/actions/github/index.d.ts +32 -0
- package/dist/actions/github/index.d.ts.map +1 -0
- package/dist/actions/github/index.js +67 -0
- package/dist/actions/github/index.js.map +1 -0
- package/dist/actions/github/label-definitions.d.ts +19 -0
- package/dist/actions/github/label-definitions.d.ts.map +1 -0
- package/dist/actions/github/label-definitions.js +71 -0
- package/dist/actions/github/label-definitions.js.map +1 -0
- package/dist/actions/github/mark-pr-ready.d.ts +14 -0
- package/dist/actions/github/mark-pr-ready.d.ts.map +1 -0
- package/dist/actions/github/mark-pr-ready.js +43 -0
- package/dist/actions/github/mark-pr-ready.js.map +1 -0
- package/dist/actions/github/merge-from-base.d.ts +15 -0
- package/dist/actions/github/merge-from-base.d.ts.map +1 -0
- package/dist/actions/github/merge-from-base.js +120 -0
- package/dist/actions/github/merge-from-base.js.map +1 -0
- package/dist/actions/github/preflight.d.ts +36 -0
- package/dist/actions/github/preflight.d.ts.map +1 -0
- package/dist/actions/github/preflight.js +292 -0
- package/dist/actions/github/preflight.js.map +1 -0
- package/dist/actions/github/read-pr-feedback.d.ts +14 -0
- package/dist/actions/github/read-pr-feedback.d.ts.map +1 -0
- package/dist/actions/github/read-pr-feedback.js +53 -0
- package/dist/actions/github/read-pr-feedback.js.map +1 -0
- package/dist/actions/github/respond-pr-feedback.d.ts +14 -0
- package/dist/actions/github/respond-pr-feedback.d.ts.map +1 -0
- package/dist/actions/github/respond-pr-feedback.js +58 -0
- package/dist/actions/github/respond-pr-feedback.js.map +1 -0
- package/dist/actions/github/review-changes.d.ts +19 -0
- package/dist/actions/github/review-changes.d.ts.map +1 -0
- package/dist/actions/github/review-changes.js +95 -0
- package/dist/actions/github/review-changes.js.map +1 -0
- package/dist/actions/github/sync-labels.d.ts +14 -0
- package/dist/actions/github/sync-labels.d.ts.map +1 -0
- package/dist/actions/github/sync-labels.js +81 -0
- package/dist/actions/github/sync-labels.js.map +1 -0
- package/dist/actions/github/update-pr.d.ts +14 -0
- package/dist/actions/github/update-pr.d.ts.map +1 -0
- package/dist/actions/github/update-pr.js +63 -0
- package/dist/actions/github/update-pr.js.map +1 -0
- package/dist/actions/index.d.ts +109 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +233 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/workflow/check-gate.d.ts +15 -0
- package/dist/actions/workflow/check-gate.d.ts.map +1 -0
- package/dist/actions/workflow/check-gate.js +75 -0
- package/dist/actions/workflow/check-gate.js.map +1 -0
- package/dist/actions/workflow/index.d.ts +21 -0
- package/dist/actions/workflow/index.d.ts.map +1 -0
- package/dist/actions/workflow/index.js +31 -0
- package/dist/actions/workflow/index.js.map +1 -0
- package/dist/actions/workflow/update-phase.d.ts +15 -0
- package/dist/actions/workflow/update-phase.d.ts.map +1 -0
- package/dist/actions/workflow/update-phase.js +143 -0
- package/dist/actions/workflow/update-phase.js.map +1 -0
- package/dist/actions/workflow/update-stage.d.ts +19 -0
- package/dist/actions/workflow/update-stage.d.ts.map +1 -0
- package/dist/actions/workflow/update-stage.js +137 -0
- package/dist/actions/workflow/update-stage.js.map +1 -0
- package/dist/errors/base-workflow-not-found.d.ts +10 -0
- package/dist/errors/base-workflow-not-found.d.ts.map +1 -0
- package/dist/errors/base-workflow-not-found.js +18 -0
- package/dist/errors/base-workflow-not-found.js.map +1 -0
- package/dist/errors/circular-extends.d.ts +9 -0
- package/dist/errors/circular-extends.d.ts.map +1 -0
- package/dist/errors/circular-extends.js +13 -0
- package/dist/errors/circular-extends.js.map +1 -0
- package/dist/errors/correlation-timeout.d.ts +9 -0
- package/dist/errors/correlation-timeout.d.ts.map +1 -0
- package/dist/errors/correlation-timeout.js +13 -0
- package/dist/errors/correlation-timeout.js.map +1 -0
- package/dist/errors/workflow-override.d.ts +9 -0
- package/dist/errors/workflow-override.d.ts.map +1 -0
- package/dist/errors/workflow-override.js +12 -0
- package/dist/errors/workflow-override.js.map +1 -0
- package/dist/executor/events.d.ts +55 -0
- package/dist/executor/events.d.ts.map +1 -0
- package/dist/executor/events.js +72 -0
- package/dist/executor/events.js.map +1 -0
- package/dist/executor/gate-handler.d.ts +55 -0
- package/dist/executor/gate-handler.d.ts.map +1 -0
- package/dist/executor/gate-handler.js +139 -0
- package/dist/executor/gate-handler.js.map +1 -0
- package/dist/executor/index.d.ts +140 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +681 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/interpolation/context.d.ts +117 -0
- package/dist/interpolation/context.d.ts.map +1 -0
- package/dist/interpolation/context.js +256 -0
- package/dist/interpolation/context.js.map +1 -0
- package/dist/interpolation/index.d.ts +76 -0
- package/dist/interpolation/index.d.ts.map +1 -0
- package/dist/interpolation/index.js +264 -0
- package/dist/interpolation/index.js.map +1 -0
- package/dist/loader/extends.d.ts +48 -0
- package/dist/loader/extends.d.ts.map +1 -0
- package/dist/loader/extends.js +140 -0
- package/dist/loader/extends.js.map +1 -0
- package/dist/loader/index.d.ts +50 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +190 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/schema.d.ts +506 -0
- package/dist/loader/schema.d.ts.map +1 -0
- package/dist/loader/schema.js +63 -0
- package/dist/loader/schema.js.map +1 -0
- package/dist/loader/validator.d.ts +33 -0
- package/dist/loader/validator.d.ts.map +1 -0
- package/dist/loader/validator.js +135 -0
- package/dist/loader/validator.js.map +1 -0
- package/dist/registry/index.d.ts +42 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +77 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/retry/index.d.ts +37 -0
- package/dist/retry/index.d.ts.map +1 -0
- package/dist/retry/index.js +225 -0
- package/dist/retry/index.js.map +1 -0
- package/dist/retry/strategies.d.ts +74 -0
- package/dist/retry/strategies.d.ts.map +1 -0
- package/dist/retry/strategies.js +136 -0
- package/dist/retry/strategies.js.map +1 -0
- package/dist/store/filesystem-store.d.ts +52 -0
- package/dist/store/filesystem-store.d.ts.map +1 -0
- package/dist/store/filesystem-store.js +230 -0
- package/dist/store/filesystem-store.js.map +1 -0
- package/dist/store/index.d.ts +7 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +6 -0
- package/dist/store/index.js.map +1 -0
- package/dist/types/action.d.ts +358 -0
- package/dist/types/action.d.ts.map +1 -0
- package/dist/types/action.js +96 -0
- package/dist/types/action.js.map +1 -0
- package/dist/types/events.d.ts +25 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +6 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/execution.d.ts +145 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/execution.js +2 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/gate.d.ts +98 -0
- package/dist/types/gate.d.ts.map +1 -0
- package/dist/types/gate.js +41 -0
- package/dist/types/gate.js.map +1 -0
- package/dist/types/github.d.ts +706 -0
- package/dist/types/github.d.ts.map +1 -0
- package/dist/types/github.js +6 -0
- package/dist/types/github.js.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logger.d.ts +60 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logger.js +66 -0
- package/dist/types/logger.js.map +1 -0
- package/dist/types/retry.d.ts +36 -0
- package/dist/types/retry.d.ts.map +1 -0
- package/dist/types/retry.js +6 -0
- package/dist/types/retry.js.map +1 -0
- package/dist/types/store.d.ts +88 -0
- package/dist/types/store.d.ts.map +1 -0
- package/dist/types/store.js +6 -0
- package/dist/types/store.js.map +1 -0
- package/dist/types/workflow.d.ts +105 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +6 -0
- package/dist/types/workflow.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regular expression for matching variable expressions
|
|
3
|
+
* Matches both ${{ ... }} (double-brace, GitHub Actions style) and ${...} (single-brace) patterns.
|
|
4
|
+
* Double-brace is checked first so ${{ expr }} doesn't partially match as ${ expr }.
|
|
5
|
+
*/
|
|
6
|
+
const VARIABLE_PATTERN = /\$\{\{\s*([^}]+?)\s*\}\}|\$\{([^}]+)\}/g;
|
|
7
|
+
/**
|
|
8
|
+
* Parse a variable reference from an expression
|
|
9
|
+
* @param expression The expression inside ${...}
|
|
10
|
+
* @returns Parsed variable reference
|
|
11
|
+
*/
|
|
12
|
+
export function parseVariableReference(expression) {
|
|
13
|
+
const trimmed = expression.trim();
|
|
14
|
+
const segments = trimmed.split('.');
|
|
15
|
+
const [type, ...path] = segments;
|
|
16
|
+
let refType = 'unknown';
|
|
17
|
+
if (type === 'inputs')
|
|
18
|
+
refType = 'inputs';
|
|
19
|
+
else if (type === 'steps')
|
|
20
|
+
refType = 'steps';
|
|
21
|
+
else if (type === 'env')
|
|
22
|
+
refType = 'env';
|
|
23
|
+
else if (['success', 'failure', 'always'].includes(type ?? '')) {
|
|
24
|
+
refType = 'function';
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
expression: trimmed,
|
|
28
|
+
type: refType,
|
|
29
|
+
path,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolve a variable reference in the given context
|
|
34
|
+
* @param ref The variable reference to resolve
|
|
35
|
+
* @param context The interpolation context
|
|
36
|
+
* @returns The resolved value
|
|
37
|
+
*/
|
|
38
|
+
export function resolveVariableReference(ref, context) {
|
|
39
|
+
switch (ref.type) {
|
|
40
|
+
case 'inputs':
|
|
41
|
+
return resolvePath(context.inputs, ref.path);
|
|
42
|
+
case 'steps': {
|
|
43
|
+
const [stepId, ...fieldPath] = ref.path;
|
|
44
|
+
if (!stepId)
|
|
45
|
+
return undefined;
|
|
46
|
+
const output = context.steps[stepId];
|
|
47
|
+
if (!output)
|
|
48
|
+
return undefined;
|
|
49
|
+
// If no field path, return the entire output
|
|
50
|
+
if (fieldPath.length === 0) {
|
|
51
|
+
return output.parsed ?? output.raw;
|
|
52
|
+
}
|
|
53
|
+
// Handle 'output' prefix (${steps.stepId.output.field})
|
|
54
|
+
if (fieldPath[0] === 'output') {
|
|
55
|
+
const outputPath = fieldPath.slice(1);
|
|
56
|
+
if (outputPath.length === 0) {
|
|
57
|
+
return output.parsed ?? output.raw;
|
|
58
|
+
}
|
|
59
|
+
// Resolve path in parsed output
|
|
60
|
+
if (output.parsed !== null && typeof output.parsed === 'object') {
|
|
61
|
+
return resolvePath(output.parsed, outputPath);
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
// Direct field access
|
|
66
|
+
if (fieldPath[0] === 'raw')
|
|
67
|
+
return output.raw;
|
|
68
|
+
if (fieldPath[0] === 'exitCode')
|
|
69
|
+
return output.exitCode;
|
|
70
|
+
if (fieldPath[0] === 'completedAt')
|
|
71
|
+
return output.completedAt;
|
|
72
|
+
if (fieldPath[0] === 'parsed') {
|
|
73
|
+
const parsedPath = fieldPath.slice(1);
|
|
74
|
+
if (parsedPath.length === 0)
|
|
75
|
+
return output.parsed;
|
|
76
|
+
if (output.parsed !== null && typeof output.parsed === 'object') {
|
|
77
|
+
return resolvePath(output.parsed, parsedPath);
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
// Try to resolve in parsed output
|
|
82
|
+
if (output.parsed !== null && typeof output.parsed === 'object') {
|
|
83
|
+
return resolvePath(output.parsed, fieldPath);
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
case 'env':
|
|
88
|
+
return ref.path.length > 0 ? context.env[ref.path[0]] : undefined;
|
|
89
|
+
case 'function': {
|
|
90
|
+
const funcName = ref.expression.replace('()', '').trim();
|
|
91
|
+
if (funcName === 'success')
|
|
92
|
+
return context.functions.success();
|
|
93
|
+
if (funcName === 'failure')
|
|
94
|
+
return context.functions.failure();
|
|
95
|
+
if (funcName === 'always')
|
|
96
|
+
return context.functions.always();
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
default:
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Helper to resolve a path in a nested object
|
|
105
|
+
*/
|
|
106
|
+
function resolvePath(obj, path) {
|
|
107
|
+
let current = obj;
|
|
108
|
+
for (const segment of path) {
|
|
109
|
+
if (current === null || current === undefined) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
// Handle array indexing (e.g., 'items[0]')
|
|
113
|
+
const arrayMatch = segment.match(/^(\w+)\[(\d+)\]$/);
|
|
114
|
+
if (arrayMatch) {
|
|
115
|
+
const [, key, indexStr] = arrayMatch;
|
|
116
|
+
if (typeof current !== 'object')
|
|
117
|
+
return undefined;
|
|
118
|
+
const arr = current[key];
|
|
119
|
+
if (!Array.isArray(arr))
|
|
120
|
+
return undefined;
|
|
121
|
+
const index = parseInt(indexStr, 10);
|
|
122
|
+
current = arr[index];
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
// Handle numeric index for arrays
|
|
126
|
+
if (Array.isArray(current) && /^\d+$/.test(segment)) {
|
|
127
|
+
const index = parseInt(segment, 10);
|
|
128
|
+
current = current[index];
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
// Handle object property access
|
|
132
|
+
if (typeof current === 'object') {
|
|
133
|
+
current = current[segment];
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return current;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolve a path safely, returning undefined for any errors
|
|
143
|
+
*/
|
|
144
|
+
export function resolvePathSafe(obj, path) {
|
|
145
|
+
try {
|
|
146
|
+
if (obj === null || obj === undefined)
|
|
147
|
+
return undefined;
|
|
148
|
+
if (typeof obj !== 'object')
|
|
149
|
+
return undefined;
|
|
150
|
+
return resolvePath(obj, path.split('.'));
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Convert a value to string for interpolation
|
|
158
|
+
*/
|
|
159
|
+
function valueToString(value) {
|
|
160
|
+
if (value === undefined || value === null) {
|
|
161
|
+
return '';
|
|
162
|
+
}
|
|
163
|
+
if (typeof value === 'string') {
|
|
164
|
+
return value;
|
|
165
|
+
}
|
|
166
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
167
|
+
return String(value);
|
|
168
|
+
}
|
|
169
|
+
if (typeof value === 'object') {
|
|
170
|
+
try {
|
|
171
|
+
return JSON.stringify(value);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return String(value);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return String(value);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Interpolate variables in a template string
|
|
181
|
+
* @param template The template string with ${...} patterns
|
|
182
|
+
* @param context The interpolation context
|
|
183
|
+
* @param options Interpolation options
|
|
184
|
+
* @returns The interpolated string
|
|
185
|
+
* @throws Error if strict mode and variable not found
|
|
186
|
+
*/
|
|
187
|
+
export function interpolate(template, context, options = {}) {
|
|
188
|
+
const { strict = false, defaultValue = '', coerceToString = true } = options;
|
|
189
|
+
return template.replace(VARIABLE_PATTERN, (match, doubleBrace, singleBrace) => {
|
|
190
|
+
const expression = (doubleBrace ?? singleBrace ?? '').trim();
|
|
191
|
+
const ref = parseVariableReference(expression);
|
|
192
|
+
const value = resolveVariableReference(ref, context);
|
|
193
|
+
if (value === undefined) {
|
|
194
|
+
if (strict) {
|
|
195
|
+
throw new Error(`Unresolved variable: ${expression}`);
|
|
196
|
+
}
|
|
197
|
+
return defaultValue;
|
|
198
|
+
}
|
|
199
|
+
if (coerceToString) {
|
|
200
|
+
return valueToString(value);
|
|
201
|
+
}
|
|
202
|
+
// For non-string coercion, only return if already a string
|
|
203
|
+
if (typeof value === 'string') {
|
|
204
|
+
return value;
|
|
205
|
+
}
|
|
206
|
+
// Return the original match if can't coerce
|
|
207
|
+
return match;
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Interpolate a value that may be a string, object, or array
|
|
212
|
+
* Recursively processes all string values
|
|
213
|
+
* @param value The value to interpolate
|
|
214
|
+
* @param context The interpolation context
|
|
215
|
+
* @param options Interpolation options
|
|
216
|
+
* @returns The interpolated value
|
|
217
|
+
*/
|
|
218
|
+
export function interpolateValue(value, context, options = {}) {
|
|
219
|
+
if (typeof value === 'string') {
|
|
220
|
+
return interpolate(value, context, options);
|
|
221
|
+
}
|
|
222
|
+
if (Array.isArray(value)) {
|
|
223
|
+
return value.map(item => interpolateValue(item, context, options));
|
|
224
|
+
}
|
|
225
|
+
if (value !== null && typeof value === 'object') {
|
|
226
|
+
const result = {};
|
|
227
|
+
for (const [key, val] of Object.entries(value)) {
|
|
228
|
+
result[key] = interpolateValue(val, context, options);
|
|
229
|
+
}
|
|
230
|
+
return result;
|
|
231
|
+
}
|
|
232
|
+
// Return primitives as-is
|
|
233
|
+
return value;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Extract all variable references from a template
|
|
237
|
+
* @param template The template string
|
|
238
|
+
* @returns Array of variable references found
|
|
239
|
+
*/
|
|
240
|
+
export function extractVariableReferences(template) {
|
|
241
|
+
const refs = [];
|
|
242
|
+
let match;
|
|
243
|
+
while ((match = VARIABLE_PATTERN.exec(template)) !== null) {
|
|
244
|
+
const expression = (match[1] ?? match[2] ?? '').trim();
|
|
245
|
+
refs.push(parseVariableReference(expression));
|
|
246
|
+
}
|
|
247
|
+
// Reset lastIndex for subsequent calls
|
|
248
|
+
VARIABLE_PATTERN.lastIndex = 0;
|
|
249
|
+
return refs;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Check if a template contains any variable references
|
|
253
|
+
* @param template The template string
|
|
254
|
+
* @returns true if template contains ${...} patterns
|
|
255
|
+
*/
|
|
256
|
+
export function hasVariables(template) {
|
|
257
|
+
VARIABLE_PATTERN.lastIndex = 0;
|
|
258
|
+
const result = VARIABLE_PATTERN.test(template);
|
|
259
|
+
VARIABLE_PATTERN.lastIndex = 0;
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
// Re-export context
|
|
263
|
+
export { ExecutionContext } from './context.js';
|
|
264
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interpolation/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { WorkflowDefinition, PhaseDefinition, StepDefinition, InputDefinition, RetryConfig } from '../types/workflow.js';
|
|
2
|
+
/**
|
|
3
|
+
* Override definition for a single phase.
|
|
4
|
+
* Used within the `overrides.phases` block of an extending workflow.
|
|
5
|
+
*/
|
|
6
|
+
export interface PhaseOverride {
|
|
7
|
+
/** Replacement steps for an existing phase */
|
|
8
|
+
steps?: StepDefinition[];
|
|
9
|
+
/** Override condition for an existing phase */
|
|
10
|
+
condition?: string;
|
|
11
|
+
/** Insert this new phase before the named phase */
|
|
12
|
+
before?: string;
|
|
13
|
+
/** Insert this new phase after the named phase */
|
|
14
|
+
after?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The `overrides:` block from an extending workflow YAML.
|
|
18
|
+
*/
|
|
19
|
+
export interface WorkflowOverride {
|
|
20
|
+
phases?: Record<string, PhaseOverride>;
|
|
21
|
+
inputs?: InputDefinition[];
|
|
22
|
+
env?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The override data extracted from an extending workflow's YAML.
|
|
26
|
+
* Contains both top-level scalar overrides and the structured `overrides` block.
|
|
27
|
+
*/
|
|
28
|
+
export interface WorkflowOverrideData {
|
|
29
|
+
name?: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
version?: string;
|
|
32
|
+
timeout?: number;
|
|
33
|
+
retry?: RetryConfig;
|
|
34
|
+
overrides?: WorkflowOverride;
|
|
35
|
+
/** Full replacement mode: replace all phases instead of merging */
|
|
36
|
+
phases?: PhaseDefinition[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Merge a base WorkflowDefinition with override data from an extending workflow.
|
|
40
|
+
*
|
|
41
|
+
* @param base - The fully resolved base workflow definition
|
|
42
|
+
* @param overrideData - Override data from the extending workflow
|
|
43
|
+
* @returns A new WorkflowDefinition with overrides applied
|
|
44
|
+
* @throws WorkflowOverrideError if phases and overrides.phases are both present,
|
|
45
|
+
* or if a phase override references an unknown phase without a positional directive
|
|
46
|
+
*/
|
|
47
|
+
export declare function mergeWorkflows(base: WorkflowDefinition, overrideData: WorkflowOverrideData): WorkflowDefinition;
|
|
48
|
+
//# sourceMappingURL=extends.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extends.d.ts","sourceRoot":"","sources":["../../src/loader/extends.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,mEAAmE;IACnE,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,kBAAkB,EACxB,YAAY,EAAE,oBAAoB,GACjC,kBAAkB,CA6CpB"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow merge logic for the `extends` inheritance mechanism.
|
|
3
|
+
*
|
|
4
|
+
* Merge semantics:
|
|
5
|
+
* - Top-level scalars (name, description, version, timeout, retry): override wins if present
|
|
6
|
+
* - Phases: matched by name from overrides.phases
|
|
7
|
+
* - Existing phase matched by name: steps replaced entirely, condition overridden if provided
|
|
8
|
+
* - New phase with before:/after: directive: inserted at specified position
|
|
9
|
+
* - New phase without positional directive: throws WorkflowOverrideError (fail fast on typos)
|
|
10
|
+
* - Inputs: merged (base + override, override wins on name collision)
|
|
11
|
+
* - Env: shallow merge, override wins on key collision
|
|
12
|
+
* - `phases` and `overrides.phases` are mutually exclusive — throws WorkflowOverrideError if both present
|
|
13
|
+
*/
|
|
14
|
+
import { WorkflowOverrideError } from '../errors/workflow-override.js';
|
|
15
|
+
/**
|
|
16
|
+
* Merge a base WorkflowDefinition with override data from an extending workflow.
|
|
17
|
+
*
|
|
18
|
+
* @param base - The fully resolved base workflow definition
|
|
19
|
+
* @param overrideData - Override data from the extending workflow
|
|
20
|
+
* @returns A new WorkflowDefinition with overrides applied
|
|
21
|
+
* @throws WorkflowOverrideError if phases and overrides.phases are both present,
|
|
22
|
+
* or if a phase override references an unknown phase without a positional directive
|
|
23
|
+
*/
|
|
24
|
+
export function mergeWorkflows(base, overrideData) {
|
|
25
|
+
// Mutual exclusivity: phases and overrides.phases cannot coexist
|
|
26
|
+
if (overrideData.phases && overrideData.overrides?.phases) {
|
|
27
|
+
throw new WorkflowOverrideError('Cannot specify both "phases" and "overrides.phases" — use "phases" for full replacement or "overrides.phases" for selective override, not both.');
|
|
28
|
+
}
|
|
29
|
+
// Start with a copy of the base
|
|
30
|
+
const merged = {
|
|
31
|
+
...base,
|
|
32
|
+
phases: [...base.phases.map(p => ({ ...p, steps: [...p.steps] }))],
|
|
33
|
+
};
|
|
34
|
+
// Top-level scalar overrides: override wins if present
|
|
35
|
+
if (overrideData.name !== undefined)
|
|
36
|
+
merged.name = overrideData.name;
|
|
37
|
+
if (overrideData.description !== undefined)
|
|
38
|
+
merged.description = overrideData.description;
|
|
39
|
+
if (overrideData.version !== undefined)
|
|
40
|
+
merged.version = overrideData.version;
|
|
41
|
+
if (overrideData.timeout !== undefined)
|
|
42
|
+
merged.timeout = overrideData.timeout;
|
|
43
|
+
if (overrideData.retry !== undefined)
|
|
44
|
+
merged.retry = overrideData.retry;
|
|
45
|
+
// Full replacement mode: overrideData.phases replaces all base phases
|
|
46
|
+
if (overrideData.phases) {
|
|
47
|
+
merged.phases = overrideData.phases;
|
|
48
|
+
}
|
|
49
|
+
// Selective phase overrides via overrides.phases
|
|
50
|
+
if (overrideData.overrides?.phases) {
|
|
51
|
+
merged.phases = mergePhases(merged.phases, overrideData.overrides.phases);
|
|
52
|
+
}
|
|
53
|
+
// Input merging: base + override, override wins on name collision
|
|
54
|
+
if (overrideData.overrides?.inputs) {
|
|
55
|
+
merged.inputs = mergeInputs(base.inputs, overrideData.overrides.inputs);
|
|
56
|
+
}
|
|
57
|
+
// Env merging: shallow merge, override wins on key collision
|
|
58
|
+
if (overrideData.overrides?.env) {
|
|
59
|
+
merged.env = {
|
|
60
|
+
...base.env,
|
|
61
|
+
...overrideData.overrides.env,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return merged;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Merge base phases with phase overrides.
|
|
68
|
+
*
|
|
69
|
+
* - Existing phase matched by name: steps replaced entirely, condition overridden if provided
|
|
70
|
+
* - New phase with before:/after: directive: inserted at specified position
|
|
71
|
+
* - New phase without positional directive: throws WorkflowOverrideError
|
|
72
|
+
*/
|
|
73
|
+
function mergePhases(basePhases, phaseOverrides) {
|
|
74
|
+
const result = basePhases.map(p => ({ ...p, steps: [...p.steps] }));
|
|
75
|
+
const basePhaseNames = new Set(basePhases.map(p => p.name));
|
|
76
|
+
// Track insertions to apply after processing all overrides
|
|
77
|
+
const insertions = [];
|
|
78
|
+
for (const [phaseName, override] of Object.entries(phaseOverrides)) {
|
|
79
|
+
if (basePhaseNames.has(phaseName)) {
|
|
80
|
+
// Override existing phase
|
|
81
|
+
const idx = result.findIndex(p => p.name === phaseName);
|
|
82
|
+
if (override.steps) {
|
|
83
|
+
result[idx].steps = override.steps;
|
|
84
|
+
}
|
|
85
|
+
if (override.condition !== undefined) {
|
|
86
|
+
result[idx].condition = override.condition;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (override.before || override.after) {
|
|
90
|
+
// New phase with positional directive
|
|
91
|
+
if (!override.steps || override.steps.length === 0) {
|
|
92
|
+
throw new WorkflowOverrideError(`New phase "${phaseName}" requires at least one step.`);
|
|
93
|
+
}
|
|
94
|
+
const anchor = (override.before ?? override.after);
|
|
95
|
+
if (!basePhaseNames.has(anchor)) {
|
|
96
|
+
throw new WorkflowOverrideError(`Phase "${phaseName}" references anchor phase "${anchor}" which does not exist in the base workflow.`);
|
|
97
|
+
}
|
|
98
|
+
insertions.push({
|
|
99
|
+
phase: {
|
|
100
|
+
name: phaseName,
|
|
101
|
+
steps: override.steps,
|
|
102
|
+
condition: override.condition,
|
|
103
|
+
},
|
|
104
|
+
position: override.before ? 'before' : 'after',
|
|
105
|
+
anchor,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// Unknown phase without positional directive — fail fast on typos
|
|
110
|
+
throw new WorkflowOverrideError(`Phase "${phaseName}" does not exist in the base workflow and has no "before" or "after" directive. ` +
|
|
111
|
+
`Did you mean one of: ${[...basePhaseNames].join(', ')}?`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Apply insertions (process in reverse order of anchor index to maintain correct positions)
|
|
115
|
+
for (const insertion of insertions) {
|
|
116
|
+
const anchorIdx = result.findIndex(p => p.name === insertion.anchor);
|
|
117
|
+
const insertIdx = insertion.position === 'before' ? anchorIdx : anchorIdx + 1;
|
|
118
|
+
result.splice(insertIdx, 0, insertion.phase);
|
|
119
|
+
}
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Merge base inputs with override inputs.
|
|
124
|
+
* Override wins on name collision.
|
|
125
|
+
*/
|
|
126
|
+
function mergeInputs(baseInputs, overrideInputs) {
|
|
127
|
+
const inputMap = new Map();
|
|
128
|
+
// Add base inputs first
|
|
129
|
+
if (baseInputs) {
|
|
130
|
+
for (const input of baseInputs) {
|
|
131
|
+
inputMap.set(input.name, input);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Override inputs win on name collision
|
|
135
|
+
for (const input of overrideInputs) {
|
|
136
|
+
inputMap.set(input.name, input);
|
|
137
|
+
}
|
|
138
|
+
return [...inputMap.values()];
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=extends.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extends.js","sourceRoot":"","sources":["../../src/loader/extends.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { WorkflowDefinition } from '../types/workflow.js';
|
|
2
|
+
import type { ExecutableWorkflow } from '../types/execution.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves a workflow name to a file path.
|
|
5
|
+
* Used by `loadWorkflowWithExtends` to find base workflows.
|
|
6
|
+
*
|
|
7
|
+
* @param name - The workflow name or path to resolve
|
|
8
|
+
* @param excludePath - Optional file path to exclude from resolution (prevents self-resolution)
|
|
9
|
+
* @returns The resolved absolute file path
|
|
10
|
+
* @throws BaseWorkflowNotFoundError if the workflow cannot be found
|
|
11
|
+
*/
|
|
12
|
+
export type WorkflowResolver = (name: string, excludePath?: string) => string;
|
|
13
|
+
/**
|
|
14
|
+
* Load a workflow from a YAML file
|
|
15
|
+
* @param filePath Path to the workflow YAML file
|
|
16
|
+
* @returns Parsed and validated WorkflowDefinition
|
|
17
|
+
* @throws Error if file cannot be read or validation fails
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadWorkflow(filePath: string): Promise<WorkflowDefinition>;
|
|
20
|
+
/**
|
|
21
|
+
* Load a workflow from a YAML string
|
|
22
|
+
* @param content YAML content string
|
|
23
|
+
* @returns Parsed and validated WorkflowDefinition
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadWorkflowFromString(content: string): WorkflowDefinition;
|
|
26
|
+
/**
|
|
27
|
+
* Convert a WorkflowDefinition to an ExecutableWorkflow
|
|
28
|
+
* @param definition The workflow definition
|
|
29
|
+
* @param inputs Runtime input values
|
|
30
|
+
* @param env Additional environment variables
|
|
31
|
+
* @returns ExecutableWorkflow ready for execution
|
|
32
|
+
*/
|
|
33
|
+
export declare function prepareWorkflow(definition: WorkflowDefinition, inputs?: Record<string, unknown>, env?: Record<string, string>): ExecutableWorkflow;
|
|
34
|
+
/**
|
|
35
|
+
* Load a workflow with `extends` inheritance support.
|
|
36
|
+
*
|
|
37
|
+
* Uses two-pass validation:
|
|
38
|
+
* 1. Parse YAML loosely (no schema validation)
|
|
39
|
+
* 2. If `extends` present, resolve base, recurse, merge
|
|
40
|
+
* 3. Validate final merged result against WorkflowDefinitionSchema
|
|
41
|
+
*
|
|
42
|
+
* @param filePath - Path to the workflow YAML file
|
|
43
|
+
* @param resolver - Function to resolve workflow names to file paths
|
|
44
|
+
* @param _seen - Internal: set of resolved file paths for circular detection
|
|
45
|
+
* @returns Parsed, merged, and validated WorkflowDefinition
|
|
46
|
+
*/
|
|
47
|
+
export declare function loadWorkflowWithExtends(filePath: string, resolver: WorkflowResolver, _seen?: Set<string>): Promise<WorkflowDefinition>;
|
|
48
|
+
export { validateWorkflow, isValidWorkflow, WorkflowValidationError } from './validator.js';
|
|
49
|
+
export { WorkflowDefinitionSchema, PhaseDefinitionSchema, StepDefinitionSchema, InputDefinitionSchema, RetryConfigSchema, } from './schema.js';
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loader/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;AAE9E;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsBhF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAW1E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,kBAAkB,EAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,kBAAkB,CAqCpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAClB,OAAO,CAAC,kBAAkB,CAAC,CA6E7B;AAGD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|