gagen 0.2.6 → 0.2.8
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/esm/expression.d.ts +20 -5
- package/esm/expression.d.ts.map +1 -1
- package/esm/expression.js +123 -11
- package/esm/job.d.ts +2 -2
- package/esm/job.d.ts.map +1 -1
- package/esm/job.js +9 -6
- package/esm/mod.d.ts +3 -3
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +1 -1
- package/esm/step.d.ts +12 -13
- package/esm/step.d.ts.map +1 -1
- package/esm/step.js +40 -15
- package/package.json +1 -1
package/esm/expression.d.ts
CHANGED
|
@@ -23,11 +23,6 @@ export declare class ExpressionValue {
|
|
|
23
23
|
/** wrap in `${{ }}` for use in YAML */
|
|
24
24
|
toString(): string;
|
|
25
25
|
}
|
|
26
|
-
/**
|
|
27
|
-
* A boolean condition used in `if` fields. Supports fluent `.and()`, `.or()`,
|
|
28
|
-
* `.not()` composition. Tracks all ExpressionSources referenced so that
|
|
29
|
-
* dependencies can be inferred automatically.
|
|
30
|
-
*/
|
|
31
26
|
export declare abstract class Condition {
|
|
32
27
|
readonly sources: ReadonlySet<ExpressionSource>;
|
|
33
28
|
constructor(sources: ReadonlySet<ExpressionSource>);
|
|
@@ -52,6 +47,8 @@ export declare abstract class Condition {
|
|
|
52
47
|
flattenAnd(): Condition[];
|
|
53
48
|
/** returns the flat OR children of this condition as Condition objects */
|
|
54
49
|
flattenOr(): Condition[];
|
|
50
|
+
/** returns true if this condition always evaluates to true */
|
|
51
|
+
isAlwaysTrue(): boolean;
|
|
55
52
|
/** render without `${{ }}` wrapping */
|
|
56
53
|
abstract toExpression(): string;
|
|
57
54
|
/** render wrapped in `${{ }}` for YAML `if` fields */
|
|
@@ -74,6 +71,8 @@ export declare class FunctionCallCondition extends Condition {
|
|
|
74
71
|
export declare class RawCondition extends Condition {
|
|
75
72
|
#private;
|
|
76
73
|
constructor(expression: string, sources: ReadonlySet<ExpressionSource>);
|
|
74
|
+
isAlwaysTrue(): boolean;
|
|
75
|
+
not(): Condition;
|
|
77
76
|
toExpression(): string;
|
|
78
77
|
}
|
|
79
78
|
/** Creates an ExpressionValue from a raw expression string. */
|
|
@@ -171,6 +170,10 @@ export declare const conditions: {
|
|
|
171
170
|
*/
|
|
172
171
|
readonly isRunnerArch: (arch: "X86" | "X64" | "ARM" | "ARM64") => Condition;
|
|
173
172
|
};
|
|
173
|
+
/** Checks if a condition-like value always evaluates to true. */
|
|
174
|
+
export declare function isAlwaysTrue(c: Condition | ExpressionValue | string): boolean;
|
|
175
|
+
/** Checks if a condition-like value always evaluates to false. */
|
|
176
|
+
export declare function isAlwaysFalse(c: Condition | ExpressionValue | string): boolean;
|
|
174
177
|
export declare function formatLiteral(value: string | number | boolean): string;
|
|
175
178
|
export declare function sourcesFrom(...sourceables: ({
|
|
176
179
|
source?: ExpressionSource;
|
|
@@ -208,5 +211,17 @@ export declare class ElseIfBuilder {
|
|
|
208
211
|
/** Provide the value for this branch. */
|
|
209
212
|
then(value: TernaryValue): ThenBuilder;
|
|
210
213
|
}
|
|
214
|
+
/** Maps a property type to Condition (for booleans/conditions) or ExpressionValue (for values). */
|
|
215
|
+
export type ExprOf<T> = [T] extends [boolean | Condition] ? Condition : ExpressionValue;
|
|
216
|
+
/** Maps all properties of an object to their expression/condition form. */
|
|
217
|
+
export type ExprMap<T extends Record<string, unknown>> = {
|
|
218
|
+
readonly [K in keyof T & string]: ExprOf<T[K]>;
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Converts an object with plain values into an object with typed
|
|
222
|
+
* Condition/ExpressionValue properties. Booleans become Conditions,
|
|
223
|
+
* strings/numbers become ExpressionValues that serialize inline.
|
|
224
|
+
*/
|
|
225
|
+
export declare function defineExprObj<const T extends Record<string, unknown>>(obj: T): ExprMap<T>;
|
|
211
226
|
export {};
|
|
212
227
|
//# sourceMappingURL=expression.d.ts.map
|
package/esm/expression.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../src/expression.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,gBAAgB,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAIvD,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,eAAe,CAAC;AAEvE;;;GAGG;AACH,qBAAa,eAAe;;IAE1B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;gBAI5C,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,CAAC;IAa3D,sDAAsD;IACtD,IAAI,UAAU,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAE9C;IAED,oDAAoD;IACpD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS;IASnD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS;IAStD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAQrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IAQtC,GAAG,IAAI,SAAS;IAIhB,uCAAuC;IACvC,QAAQ,IAAI,MAAM;CAGnB;
|
|
1
|
+
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../src/expression.ts"],"names":[],"mappings":"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"}
|
package/esm/expression.js
CHANGED
|
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _ExpressionValue_expression, _ExpressionValue_allSources, _ComparisonCondition_left, _ComparisonCondition_op, _ComparisonCondition_right, _FunctionCallCondition_fn, _FunctionCallCondition_args, _LogicalCondition_instances, _a, _LogicalCondition_left, _LogicalCondition_right, _LogicalCondition_needsParens, _NotCondition_inner, _RawCondition_expression, _ThenBuilder_branches, _ThenBuilder_sources, _ElseIfBuilder_branches, _ElseIfBuilder_sources, _ElseIfBuilder_condition;
|
|
12
|
+
var _ExpressionValue_expression, _ExpressionValue_allSources, _ComparisonCondition_left, _ComparisonCondition_op, _ComparisonCondition_right, _FunctionCallCondition_fn, _FunctionCallCondition_args, _LogicalCondition_instances, _a, _LogicalCondition_left, _LogicalCondition_right, _LogicalCondition_needsParens, _NotCondition_inner, _RawCondition_expression, _ThenBuilder_branches, _ThenBuilder_sources, _ElseIfBuilder_branches, _ElseIfBuilder_sources, _ElseIfBuilder_condition, _InlineValue_plainValue;
|
|
13
13
|
const EMPTY_SOURCES = new Set();
|
|
14
14
|
/**
|
|
15
15
|
* An expression that resolves to a value inside a GitHub Actions workflow.
|
|
@@ -45,10 +45,20 @@ export class ExpressionValue {
|
|
|
45
45
|
return __classPrivateFieldGet(this, _ExpressionValue_expression, "f");
|
|
46
46
|
}
|
|
47
47
|
equals(value) {
|
|
48
|
-
|
|
48
|
+
const sources = sourcesFrom(this);
|
|
49
|
+
if (isLiteralExpression(__classPrivateFieldGet(this, _ExpressionValue_expression, "f"))) {
|
|
50
|
+
const isEqual = __classPrivateFieldGet(this, _ExpressionValue_expression, "f") === formatLiteral(value);
|
|
51
|
+
return new RawCondition(isEqual ? "true" : "false", sources);
|
|
52
|
+
}
|
|
53
|
+
return new ComparisonCondition(__classPrivateFieldGet(this, _ExpressionValue_expression, "f"), "==", value, sources);
|
|
49
54
|
}
|
|
50
55
|
notEquals(value) {
|
|
51
|
-
|
|
56
|
+
const sources = sourcesFrom(this);
|
|
57
|
+
if (isLiteralExpression(__classPrivateFieldGet(this, _ExpressionValue_expression, "f"))) {
|
|
58
|
+
const isEqual = __classPrivateFieldGet(this, _ExpressionValue_expression, "f") === formatLiteral(value);
|
|
59
|
+
return new RawCondition(isEqual ? "false" : "true", sources);
|
|
60
|
+
}
|
|
61
|
+
return new ComparisonCondition(__classPrivateFieldGet(this, _ExpressionValue_expression, "f"), "!=", value, sources);
|
|
52
62
|
}
|
|
53
63
|
startsWith(prefix) {
|
|
54
64
|
return new FunctionCallCondition("startsWith", [__classPrivateFieldGet(this, _ExpressionValue_expression, "f"), formatLiteral(prefix)], sourcesFrom(this));
|
|
@@ -70,6 +80,13 @@ _ExpressionValue_expression = new WeakMap(), _ExpressionValue_allSources = new W
|
|
|
70
80
|
* `.not()` composition. Tracks all ExpressionSources referenced so that
|
|
71
81
|
* dependencies can be inferred automatically.
|
|
72
82
|
*/
|
|
83
|
+
// helpers for construction-time simplification
|
|
84
|
+
function isTrueCondition(c) {
|
|
85
|
+
return c instanceof RawCondition && c.toExpression() === "true";
|
|
86
|
+
}
|
|
87
|
+
function isFalseCondition(c) {
|
|
88
|
+
return c instanceof RawCondition && c.toExpression() === "false";
|
|
89
|
+
}
|
|
73
90
|
export class Condition {
|
|
74
91
|
constructor(sources) {
|
|
75
92
|
Object.defineProperty(this, "sources", {
|
|
@@ -81,18 +98,30 @@ export class Condition {
|
|
|
81
98
|
this.sources = sources;
|
|
82
99
|
}
|
|
83
100
|
and(other) {
|
|
84
|
-
|
|
101
|
+
const right = typeof other === "boolean"
|
|
102
|
+
? new RawCondition(String(other), EMPTY_SOURCES)
|
|
103
|
+
: other;
|
|
104
|
+
if (isTrueCondition(this))
|
|
105
|
+
return right;
|
|
106
|
+
if (isTrueCondition(right))
|
|
85
107
|
return this;
|
|
86
|
-
if (
|
|
87
|
-
return new RawCondition("false", this
|
|
88
|
-
|
|
108
|
+
if (isFalseCondition(this) || isFalseCondition(right)) {
|
|
109
|
+
return new RawCondition("false", unionSources(this, right));
|
|
110
|
+
}
|
|
111
|
+
return new LogicalCondition("&&", this, right, unionSources(this, right));
|
|
89
112
|
}
|
|
90
113
|
or(other) {
|
|
91
|
-
|
|
114
|
+
const right = typeof other === "boolean"
|
|
115
|
+
? new RawCondition(String(other), EMPTY_SOURCES)
|
|
116
|
+
: other;
|
|
117
|
+
if (isFalseCondition(this))
|
|
118
|
+
return right;
|
|
119
|
+
if (isFalseCondition(right))
|
|
92
120
|
return this;
|
|
93
|
-
if (
|
|
94
|
-
return new RawCondition("true", this
|
|
95
|
-
|
|
121
|
+
if (isTrueCondition(this) || isTrueCondition(right)) {
|
|
122
|
+
return new RawCondition("true", unionSources(this, right));
|
|
123
|
+
}
|
|
124
|
+
return new LogicalCondition("||", this, right, unionSources(this, right));
|
|
96
125
|
}
|
|
97
126
|
not() {
|
|
98
127
|
return new NotCondition(this, this.sources);
|
|
@@ -123,6 +152,10 @@ export class Condition {
|
|
|
123
152
|
flattenOr() {
|
|
124
153
|
return [this];
|
|
125
154
|
}
|
|
155
|
+
/** returns true if this condition always evaluates to true */
|
|
156
|
+
isAlwaysTrue() {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
126
159
|
/** render wrapped in `${{ }}` for YAML `if` fields */
|
|
127
160
|
toString() {
|
|
128
161
|
return `\${{ ${this.toExpression()} }}`;
|
|
@@ -244,6 +277,18 @@ export class RawCondition extends Condition {
|
|
|
244
277
|
_RawCondition_expression.set(this, void 0);
|
|
245
278
|
__classPrivateFieldSet(this, _RawCondition_expression, expression, "f");
|
|
246
279
|
}
|
|
280
|
+
isAlwaysTrue() {
|
|
281
|
+
return __classPrivateFieldGet(this, _RawCondition_expression, "f") === "true";
|
|
282
|
+
}
|
|
283
|
+
not() {
|
|
284
|
+
if (__classPrivateFieldGet(this, _RawCondition_expression, "f") === "true") {
|
|
285
|
+
return new RawCondition("false", this.sources);
|
|
286
|
+
}
|
|
287
|
+
if (__classPrivateFieldGet(this, _RawCondition_expression, "f") === "false") {
|
|
288
|
+
return new RawCondition("true", this.sources);
|
|
289
|
+
}
|
|
290
|
+
return super.not();
|
|
291
|
+
}
|
|
247
292
|
toExpression() {
|
|
248
293
|
return __classPrivateFieldGet(this, _RawCondition_expression, "f");
|
|
249
294
|
}
|
|
@@ -349,11 +394,37 @@ export const conditions = {
|
|
|
349
394
|
isRunnerArch: (arch) => expr("runner.arch").equals(arch),
|
|
350
395
|
};
|
|
351
396
|
// --- helpers ---
|
|
397
|
+
/** Checks if a condition-like value always evaluates to true. */
|
|
398
|
+
export function isAlwaysTrue(c) {
|
|
399
|
+
if (c instanceof Condition)
|
|
400
|
+
return c.isAlwaysTrue();
|
|
401
|
+
if (typeof c === "string")
|
|
402
|
+
return c === "true";
|
|
403
|
+
return false;
|
|
404
|
+
}
|
|
405
|
+
/** Checks if a condition-like value always evaluates to false. */
|
|
406
|
+
export function isAlwaysFalse(c) {
|
|
407
|
+
if (c instanceof Condition)
|
|
408
|
+
return isFalseCondition(c);
|
|
409
|
+
if (typeof c === "string")
|
|
410
|
+
return c === "false";
|
|
411
|
+
return false;
|
|
412
|
+
}
|
|
352
413
|
export function formatLiteral(value) {
|
|
353
414
|
if (typeof value === "string")
|
|
354
415
|
return `'${value}'`;
|
|
355
416
|
return String(value);
|
|
356
417
|
}
|
|
418
|
+
/** checks if an expression string is a literal (quoted string, number, or boolean) */
|
|
419
|
+
function isLiteralExpression(expr) {
|
|
420
|
+
if (expr.startsWith("'") && expr.endsWith("'"))
|
|
421
|
+
return true;
|
|
422
|
+
if (expr === "true" || expr === "false")
|
|
423
|
+
return true;
|
|
424
|
+
if (expr.length > 0 && String(Number(expr)) === expr)
|
|
425
|
+
return true;
|
|
426
|
+
return false;
|
|
427
|
+
}
|
|
357
428
|
export function sourcesFrom(...sourceables) {
|
|
358
429
|
const set = new Set();
|
|
359
430
|
for (const v of sourceables) {
|
|
@@ -470,3 +541,44 @@ export class ElseIfBuilder {
|
|
|
470
541
|
}
|
|
471
542
|
}
|
|
472
543
|
_ElseIfBuilder_branches = new WeakMap(), _ElseIfBuilder_sources = new WeakMap(), _ElseIfBuilder_condition = new WeakMap();
|
|
544
|
+
// --- inline value (serializes as plain value, not ${{ }}) ---
|
|
545
|
+
class InlineValue extends ExpressionValue {
|
|
546
|
+
constructor(value) {
|
|
547
|
+
super(typeof value === "string" ? `'${value}'` : String(value));
|
|
548
|
+
_InlineValue_plainValue.set(this, void 0);
|
|
549
|
+
__classPrivateFieldSet(this, _InlineValue_plainValue, String(value), "f");
|
|
550
|
+
}
|
|
551
|
+
toString() {
|
|
552
|
+
return __classPrivateFieldGet(this, _InlineValue_plainValue, "f");
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
_InlineValue_plainValue = new WeakMap();
|
|
556
|
+
/**
|
|
557
|
+
* Converts an object with plain values into an object with typed
|
|
558
|
+
* Condition/ExpressionValue properties. Booleans become Conditions,
|
|
559
|
+
* strings/numbers become ExpressionValues that serialize inline.
|
|
560
|
+
*/
|
|
561
|
+
export function defineExprObj(obj) {
|
|
562
|
+
const result = {};
|
|
563
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
564
|
+
if (value instanceof Condition) {
|
|
565
|
+
result[key] = value;
|
|
566
|
+
}
|
|
567
|
+
else if (value instanceof ExpressionValue) {
|
|
568
|
+
result[key] = value;
|
|
569
|
+
}
|
|
570
|
+
else if (typeof value === "boolean") {
|
|
571
|
+
result[key] = new RawCondition(String(value), EMPTY_SOURCES);
|
|
572
|
+
}
|
|
573
|
+
else if (typeof value === "string") {
|
|
574
|
+
result[key] = new InlineValue(value);
|
|
575
|
+
}
|
|
576
|
+
else if (typeof value === "number") {
|
|
577
|
+
result[key] = new InlineValue(value);
|
|
578
|
+
}
|
|
579
|
+
else {
|
|
580
|
+
throw new Error(`Unsupported value type for key "${key}"`);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
return result;
|
|
584
|
+
}
|
package/esm/job.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ExpressionSource, ExpressionValue } from "./expression.js";
|
|
2
2
|
import type { Permissions } from "./permissions.js";
|
|
3
|
-
import { type ConditionLike, type ConfigValue, Step, type StepLike } from "./step.js";
|
|
3
|
+
import { type ConditionLike, type ConfigValue, type MaybeStepLike, Step, type StepLike } from "./step.js";
|
|
4
4
|
interface CommonJobFields {
|
|
5
5
|
name?: string | ExpressionValue;
|
|
6
6
|
needs?: Job[];
|
|
@@ -51,7 +51,7 @@ export interface ReusableJobConfig extends CommonJobFields {
|
|
|
51
51
|
export type JobConfig = StepsJobConfig | ReusableJobConfig;
|
|
52
52
|
export interface StepsJobDef extends StepsJobConfig {
|
|
53
53
|
id?: string;
|
|
54
|
-
steps:
|
|
54
|
+
steps: MaybeStepLike | MaybeStepLike[];
|
|
55
55
|
outputs?: Record<string, ExpressionValue>;
|
|
56
56
|
}
|
|
57
57
|
export interface ReusableJobDef extends ReusableJobConfig {
|
package/esm/job.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EACrB,eAAe,
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"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"}
|
package/esm/job.js
CHANGED
|
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
12
|
var _Job_instances, _Job_id, _Job_config, _Job_leafItems, _Job_outputDefs, _Job_cachedGraph, _Job_cachedLeafSteps, _Job_buildGraph;
|
|
13
|
-
import { Condition, ExpressionValue, } from "./expression.js";
|
|
13
|
+
import { Condition, ExpressionValue, isAlwaysFalse, isAlwaysTrue, } from "./expression.js";
|
|
14
14
|
import { Matrix } from "./matrix.js";
|
|
15
15
|
import { serializeConditionLike, serializeConfigValues, Step, StepRef, toCondition, unwrapSteps, } from "./step.js";
|
|
16
16
|
function ensureEntry(graph, step) {
|
|
@@ -322,7 +322,7 @@ export class Job {
|
|
|
322
322
|
if (needs.length > 0) {
|
|
323
323
|
result.needs = needs.map((j) => j.id);
|
|
324
324
|
}
|
|
325
|
-
if (config.if != null) {
|
|
325
|
+
if (config.if != null && !isAlwaysTrue(config.if)) {
|
|
326
326
|
result.if = serializeConditionLike(config.if);
|
|
327
327
|
}
|
|
328
328
|
if ("uses" in config) {
|
|
@@ -430,9 +430,12 @@ export class Job {
|
|
|
430
430
|
const { graph } = __classPrivateFieldGet(this, _Job_instances, "m", _Job_buildGraph).call(this);
|
|
431
431
|
const resolvedSteps = this.resolveSteps();
|
|
432
432
|
const effectiveConditions = computeEffectiveConditions(resolvedSteps, graph);
|
|
433
|
-
result.steps = resolvedSteps
|
|
434
|
-
|
|
435
|
-
|
|
433
|
+
result.steps = resolvedSteps
|
|
434
|
+
.filter((s) => {
|
|
435
|
+
const cond = effectiveConditions.get(s);
|
|
436
|
+
return cond == null || !isAlwaysFalse(cond);
|
|
437
|
+
})
|
|
438
|
+
.map((s) => s.toYaml(effectiveConditions.get(s)));
|
|
436
439
|
return result;
|
|
437
440
|
}
|
|
438
441
|
}
|
|
@@ -996,7 +999,7 @@ export function job(id, config) {
|
|
|
996
999
|
}
|
|
997
1000
|
const { id: _id, steps, outputs, ...jobConfig } = config;
|
|
998
1001
|
return new Job(id, jobConfig, {
|
|
999
|
-
steps: Array.isArray(steps) ? steps : [steps],
|
|
1002
|
+
steps: (Array.isArray(steps) ? steps : [steps]).filter((s) => s != null),
|
|
1000
1003
|
outputs,
|
|
1001
1004
|
});
|
|
1002
1005
|
}
|
package/esm/mod.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import "./_dnt.polyfills.js";
|
|
2
2
|
export { Step, step, StepRef } from "./step.js";
|
|
3
|
-
export type { ConditionLike, ConfigValue, StepBuilder, StepConfig, StepFunction, StepLike, } from "./step.js";
|
|
3
|
+
export type { ConditionLike, ConfigValue, MaybeStepLike, StepBuilder, StepConfig, StepFunction, StepLike, } from "./step.js";
|
|
4
4
|
export { Job, job } from "./job.js";
|
|
5
5
|
export type { JobConfig, JobDef, ReusableJobConfig, ReusableJobDef, ServiceContainer, StepsJobConfig, StepsJobDef, } from "./job.js";
|
|
6
6
|
export { createWorkflow, isLinting, Workflow } from "./workflow.js";
|
|
7
7
|
export type { WorkflowCallInput, WorkflowCallOutput, WorkflowCallSecret, WorkflowCallTrigger, WorkflowConfig, WorkflowTriggers, } from "./workflow.js";
|
|
8
|
-
export { Condition, conditions, ElseIfBuilder, expr, ExpressionValue, ThenBuilder, } from "./expression.js";
|
|
9
|
-
export type { ExpressionSource, TernaryValue } from "./expression.js";
|
|
8
|
+
export { Condition, conditions, defineExprObj, ElseIfBuilder, expr, ExpressionValue, ThenBuilder, } from "./expression.js";
|
|
9
|
+
export type { ExpressionSource, ExprMap, ExprOf, TernaryValue, } from "./expression.js";
|
|
10
10
|
export { defineMatrix, Matrix } from "./matrix.js";
|
|
11
11
|
export type { PermissionLevel, Permissions, PermissionScope, } from "./permissions.js";
|
|
12
12
|
export { Artifact, defineArtifact } from "./artifact.js";
|
package/esm/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,YAAY,EACV,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,SAAS,EACT,UAAU,EACV,aAAa,EACb,IAAI,EACJ,eAAe,EACf,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,YAAY,
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,YAAY,EACV,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,IAAI,EACJ,eAAe,EACf,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EACV,eAAe,EACf,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC"}
|
package/esm/mod.js
CHANGED
|
@@ -2,6 +2,6 @@ import "./_dnt.polyfills.js";
|
|
|
2
2
|
export { Step, step, StepRef } from "./step.js";
|
|
3
3
|
export { Job, job } from "./job.js";
|
|
4
4
|
export { createWorkflow, isLinting, Workflow } from "./workflow.js";
|
|
5
|
-
export { Condition, conditions, ElseIfBuilder, expr, ExpressionValue, ThenBuilder, } from "./expression.js";
|
|
5
|
+
export { Condition, conditions, defineExprObj, ElseIfBuilder, expr, ExpressionValue, ThenBuilder, } from "./expression.js";
|
|
6
6
|
export { defineMatrix, Matrix } from "./matrix.js";
|
|
7
7
|
export { Artifact, defineArtifact } from "./artifact.js";
|
package/esm/step.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export interface StepConfig<O extends string = never> {
|
|
|
17
17
|
}
|
|
18
18
|
export declare function resetStepCounter(): void;
|
|
19
19
|
export type StepLike = Step<string> | StepRef<string>;
|
|
20
|
+
export type MaybeStepLike = StepLike | null | undefined;
|
|
20
21
|
export declare class Step<O extends string = never> implements ExpressionSource {
|
|
21
22
|
#private;
|
|
22
23
|
readonly config: StepConfig<O>;
|
|
@@ -26,26 +27,24 @@ export declare class Step<O extends string = never> implements ExpressionSource
|
|
|
26
27
|
readonly _crossJobDeps: readonly Step<string>[];
|
|
27
28
|
readonly children: readonly StepLike[];
|
|
28
29
|
constructor(config: StepConfig<O>, crossJobDeps?: Step<string>[]);
|
|
29
|
-
constructor(children: readonly
|
|
30
|
+
constructor(children: readonly MaybeStepLike[]);
|
|
30
31
|
get id(): string;
|
|
31
|
-
dependsOn(...deps:
|
|
32
|
-
comesAfter(...deps:
|
|
32
|
+
dependsOn(...deps: MaybeStepLike[]): StepRef<O>;
|
|
33
|
+
comesAfter(...deps: MaybeStepLike[]): StepRef<O>;
|
|
33
34
|
if(condition: ConditionLike): StepRef<O>;
|
|
34
35
|
toYaml(effectiveIf?: Condition): Record<string, unknown>;
|
|
35
36
|
}
|
|
36
37
|
export interface StepBuilder {
|
|
37
|
-
<const O extends string = never>(
|
|
38
|
-
(first: Step<string> | StepRef<string> | StepConfig, second: Step<string> | StepRef<string> | StepConfig, ...rest: (Step<string> | StepRef<string> | StepConfig)[]): StepRef<never>;
|
|
38
|
+
<const O extends string = never>(...args: (StepConfig<O> | Step<string> | StepRef<string> | null | undefined)[]): StepRef<O>;
|
|
39
39
|
if(condition: ConditionLike): StepBuilder;
|
|
40
|
-
dependsOn(...deps:
|
|
41
|
-
comesAfter(...deps:
|
|
40
|
+
dependsOn(...deps: MaybeStepLike[]): StepBuilder;
|
|
41
|
+
comesAfter(...deps: MaybeStepLike[]): StepBuilder;
|
|
42
42
|
}
|
|
43
43
|
export interface StepFunction {
|
|
44
|
-
<const O extends string = never>(
|
|
45
|
-
(first: Step<string> | StepRef<string> | StepConfig, second: Step<string> | StepRef<string> | StepConfig, ...rest: (Step<string> | StepRef<string> | StepConfig)[]): Step<never>;
|
|
44
|
+
<const O extends string = never>(...args: (StepConfig<O> | Step<string> | StepRef<string> | null | undefined)[]): Step<O>;
|
|
46
45
|
if(condition: ConditionLike): StepBuilder;
|
|
47
|
-
dependsOn(...deps:
|
|
48
|
-
comesAfter(...deps:
|
|
46
|
+
dependsOn(...deps: MaybeStepLike[]): StepBuilder;
|
|
47
|
+
comesAfter(...deps: MaybeStepLike[]): StepBuilder;
|
|
49
48
|
}
|
|
50
49
|
export declare const step: StepFunction;
|
|
51
50
|
export declare class StepRef<O extends string = never> {
|
|
@@ -63,8 +62,8 @@ export declare class StepRef<O extends string = never> {
|
|
|
63
62
|
get outputs(): {
|
|
64
63
|
[K in O]: ExpressionValue;
|
|
65
64
|
};
|
|
66
|
-
dependsOn(...deps:
|
|
67
|
-
comesAfter(...deps:
|
|
65
|
+
dependsOn(...deps: MaybeStepLike[]): StepRef<O>;
|
|
66
|
+
comesAfter(...deps: MaybeStepLike[]): StepRef<O>;
|
|
68
67
|
if(condition: ConditionLike): StepRef<O>;
|
|
69
68
|
}
|
|
70
69
|
export declare function serializeConditionLike(c: ConditionLike): string;
|
package/esm/step.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,gBAAgB,EACrB,eAAe,
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
|
package/esm/step.js
CHANGED
|
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
12
|
var _Step_id;
|
|
13
|
-
import { Condition, ExpressionValue, RawCondition, sourcesFrom, } from "./expression.js";
|
|
13
|
+
import { Condition, ExpressionValue, isAlwaysTrue, RawCondition, sourcesFrom, } from "./expression.js";
|
|
14
14
|
let stepCounter = 0;
|
|
15
15
|
// exported for testing only
|
|
16
16
|
export function resetStepCounter() {
|
|
@@ -46,14 +46,15 @@ export class Step {
|
|
|
46
46
|
});
|
|
47
47
|
if (Array.isArray(configOrChildren)) {
|
|
48
48
|
// composite step (group of children)
|
|
49
|
-
|
|
49
|
+
const children = configOrChildren.filter((c) => c != null);
|
|
50
|
+
if (children.length === 0) {
|
|
50
51
|
throw new Error("step() requires at least one step");
|
|
51
52
|
}
|
|
52
53
|
__classPrivateFieldSet(this, _Step_id, `_step_${stepCounter++}`, "f");
|
|
53
54
|
this.config = {};
|
|
54
55
|
this._crossJobDeps = Object.freeze([]);
|
|
55
56
|
this.outputs = {};
|
|
56
|
-
this.children = Object.freeze(
|
|
57
|
+
this.children = Object.freeze(children);
|
|
57
58
|
return;
|
|
58
59
|
}
|
|
59
60
|
const config = configOrChildren;
|
|
@@ -78,10 +79,14 @@ export class Step {
|
|
|
78
79
|
return __classPrivateFieldGet(this, _Step_id, "f");
|
|
79
80
|
}
|
|
80
81
|
dependsOn(...deps) {
|
|
81
|
-
return new StepRef(this, {
|
|
82
|
+
return new StepRef(this, {
|
|
83
|
+
dependencies: deps.filter((d) => d != null),
|
|
84
|
+
});
|
|
82
85
|
}
|
|
83
86
|
comesAfter(...deps) {
|
|
84
|
-
return new StepRef(this, {
|
|
87
|
+
return new StepRef(this, {
|
|
88
|
+
afterDependencies: deps.filter((d) => d != null),
|
|
89
|
+
});
|
|
85
90
|
}
|
|
86
91
|
if(condition) {
|
|
87
92
|
return new StepRef(this, { condition });
|
|
@@ -99,7 +104,7 @@ export class Step {
|
|
|
99
104
|
result.uses = this.config.uses;
|
|
100
105
|
}
|
|
101
106
|
const ifCondition = effectiveIf ?? this.config.if;
|
|
102
|
-
if (ifCondition != null) {
|
|
107
|
+
if (ifCondition != null && !isAlwaysTrue(ifCondition)) {
|
|
103
108
|
result.if = serializeConditionLike(ifCondition);
|
|
104
109
|
}
|
|
105
110
|
if (this.config.shell != null) {
|
|
@@ -130,11 +135,15 @@ export class Step {
|
|
|
130
135
|
}
|
|
131
136
|
_Step_id = new WeakMap();
|
|
132
137
|
function buildStepFromArgs(...args) {
|
|
133
|
-
|
|
134
|
-
|
|
138
|
+
const filtered = args.filter((a) => a != null);
|
|
139
|
+
if (filtered.length === 0) {
|
|
140
|
+
throw new Error("step() requires at least one argument");
|
|
141
|
+
}
|
|
142
|
+
if (filtered.length === 1) {
|
|
143
|
+
return new Step(filtered[0]);
|
|
135
144
|
}
|
|
136
145
|
const children = [];
|
|
137
|
-
for (const item of
|
|
146
|
+
for (const item of filtered) {
|
|
138
147
|
if (item instanceof Step || item instanceof StepRef) {
|
|
139
148
|
children.push(item);
|
|
140
149
|
}
|
|
@@ -171,21 +180,31 @@ function createStepBuilder(init) {
|
|
|
171
180
|
builder.dependsOn = (...deps) => {
|
|
172
181
|
return createStepBuilder({
|
|
173
182
|
...init,
|
|
174
|
-
dependencies: [
|
|
183
|
+
dependencies: [
|
|
184
|
+
...(init.dependencies ?? []),
|
|
185
|
+
...deps.filter((d) => d != null),
|
|
186
|
+
],
|
|
175
187
|
});
|
|
176
188
|
};
|
|
177
189
|
builder.comesAfter = (...deps) => {
|
|
178
190
|
return createStepBuilder({
|
|
179
191
|
...init,
|
|
180
|
-
afterDependencies: [
|
|
192
|
+
afterDependencies: [
|
|
193
|
+
...(init.afterDependencies ?? []),
|
|
194
|
+
...deps.filter((d) => d != null),
|
|
195
|
+
],
|
|
181
196
|
});
|
|
182
197
|
};
|
|
183
198
|
return builder;
|
|
184
199
|
}
|
|
185
200
|
export const step = Object.assign(buildStepFromArgs, {
|
|
186
201
|
if: (condition) => createStepBuilder({ condition }),
|
|
187
|
-
dependsOn: (...deps) => createStepBuilder({
|
|
188
|
-
|
|
202
|
+
dependsOn: (...deps) => createStepBuilder({
|
|
203
|
+
dependencies: deps.filter((d) => d != null),
|
|
204
|
+
}),
|
|
205
|
+
comesAfter: (...deps) => createStepBuilder({
|
|
206
|
+
afterDependencies: deps.filter((d) => d != null),
|
|
207
|
+
}),
|
|
189
208
|
});
|
|
190
209
|
// --- StepRef: immutable wrapper for per-usage deps/conditions ---
|
|
191
210
|
export class StepRef {
|
|
@@ -231,7 +250,10 @@ export class StepRef {
|
|
|
231
250
|
dependsOn(...deps) {
|
|
232
251
|
return new StepRef(this.step, {
|
|
233
252
|
condition: this.condition,
|
|
234
|
-
dependencies: [
|
|
253
|
+
dependencies: [
|
|
254
|
+
...this.dependencies,
|
|
255
|
+
...deps.filter((d) => d != null),
|
|
256
|
+
],
|
|
235
257
|
afterDependencies: this.afterDependencies,
|
|
236
258
|
});
|
|
237
259
|
}
|
|
@@ -239,7 +261,10 @@ export class StepRef {
|
|
|
239
261
|
return new StepRef(this.step, {
|
|
240
262
|
condition: this.condition,
|
|
241
263
|
dependencies: this.dependencies,
|
|
242
|
-
afterDependencies: [
|
|
264
|
+
afterDependencies: [
|
|
265
|
+
...this.afterDependencies,
|
|
266
|
+
...deps.filter((d) => d != null),
|
|
267
|
+
],
|
|
243
268
|
});
|
|
244
269
|
}
|
|
245
270
|
if(condition) {
|