gagen 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +161 -8
- package/esm/cli.d.ts.map +1 -1
- package/esm/cli.js +40 -0
- package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.14}/build_message.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.14}/diff.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.14}/diff_str.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.14}/format.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.14}/styles.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.14}/types.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_chars.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_dumper_state.d.ts +2 -2
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_dumper_state.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_dumper_state.js +2 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_loader_state.d.ts +2 -2
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_loader_state.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_loader_state.js +41 -24
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_schema.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/binary.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/bool.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/float.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/float.js +4 -4
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/int.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/map.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/merge.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/nil.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/omap.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/pairs.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/regexp.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/seq.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/set.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/str.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/timestamp.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type/undefined.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_type.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/1.1.1/_utils.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/parse.d.ts +7 -5
- package/esm/deps/jsr.io/@std/yaml/1.1.1/parse.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/parse.js +3 -1
- package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/stringify.d.ts +1 -1
- package/esm/deps/jsr.io/@std/yaml/1.1.1/stringify.d.ts.map +1 -0
- package/esm/job.d.ts.map +1 -1
- package/esm/job.js +201 -62
- package/esm/mod.d.ts +3 -3
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +1 -1
- package/esm/pin.d.ts +34 -4
- package/esm/pin.d.ts.map +1 -1
- package/esm/pin.js +124 -40
- package/esm/step.d.ts +48 -1
- package/esm/step.d.ts.map +1 -1
- package/esm/step.js +117 -3
- package/esm/workflow.d.ts.map +1 -1
- package/esm/workflow.js +4 -4
- package/package.json +1 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_chars.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_dumper_state.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_loader_state.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_schema.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/binary.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/bool.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/float.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/int.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/map.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/merge.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/nil.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/omap.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/pairs.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/regexp.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/seq.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/set.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/str.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/timestamp.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type/undefined.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_type.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/_utils.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/parse.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/yaml/1.0.12/stringify.d.ts.map +0 -1
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_chars.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_chars.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_schema.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_schema.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/binary.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/binary.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/bool.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/bool.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/float.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/int.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/int.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/map.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/map.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/merge.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/merge.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/nil.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/nil.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/omap.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/omap.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/pairs.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/pairs.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/regexp.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/regexp.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/seq.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/seq.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/set.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/set.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/str.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/str.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/timestamp.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/timestamp.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/undefined.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type/undefined.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_type.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_utils.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/_utils.js +0 -0
- /package/esm/deps/jsr.io/@std/yaml/{1.0.12 → 1.1.1}/stringify.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_type.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/yaml/1.1.1/_type.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AACzD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,WAAW,GACX,WAAW,GACX,SAAS,GACT,QAAQ,GACR,OAAO,GACP,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC;AAEvE;;GAEG;AAEH,MAAM,WAAW,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,GAAG,GAAG;IAC/C,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,IAAI,EAAE,CAAC,CAAC;IACR,uCAAuC;IACvC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC;IACzC,oDAAoD;IACpD,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,oDAAoD;IACpD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gFAAgF;IAEhF,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;IAChC,4DAA4D;IAE5D,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/yaml/1.1.1/_utils.ts"],"names":[],"mappings":"AAKA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAE/D"}
|
|
@@ -16,10 +16,10 @@ export interface ParseOptions {
|
|
|
16
16
|
*/
|
|
17
17
|
allowDuplicateKeys?: boolean;
|
|
18
18
|
/**
|
|
19
|
-
* If defined, a function to call on warning messages taking
|
|
20
|
-
* {@linkcode
|
|
19
|
+
* If defined, a function to call on warning messages taking a
|
|
20
|
+
* {@linkcode SyntaxError} as its only argument.
|
|
21
21
|
*/
|
|
22
|
-
onWarning?(error:
|
|
22
|
+
onWarning?(error: SyntaxError): void;
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* Parse and return a YAML string as a parsed YAML document object.
|
|
@@ -39,7 +39,8 @@ export interface ParseOptions {
|
|
|
39
39
|
* assertEquals(data, { id: 1, name: "Alice" });
|
|
40
40
|
* ```
|
|
41
41
|
*
|
|
42
|
-
* @throws {SyntaxError} Throws
|
|
42
|
+
* @throws {SyntaxError} Throws if the YAML is invalid or contains more than
|
|
43
|
+
* one document.
|
|
43
44
|
* @param content YAML string to parse.
|
|
44
45
|
* @param options Parsing options.
|
|
45
46
|
* @returns Parsed document.
|
|
@@ -68,9 +69,10 @@ export declare function parse(content: string, options?: ParseOptions): unknown;
|
|
|
68
69
|
* assertEquals(data, [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" }]);
|
|
69
70
|
* ```
|
|
70
71
|
*
|
|
72
|
+
* @throws {SyntaxError} Throws if the YAML is invalid.
|
|
71
73
|
* @param content YAML string to parse.
|
|
72
74
|
* @param options Parsing options.
|
|
73
75
|
* @returns Array of parsed documents.
|
|
74
76
|
*/
|
|
75
|
-
export declare function parseAll(content: string, options?: ParseOptions): unknown;
|
|
77
|
+
export declare function parseAll(content: string, options?: ParseOptions): unknown[];
|
|
76
78
|
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/yaml/1.1.1/parse.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE3D,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,SAAS,CAAC,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;CACtC;AAgBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,CAcT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,YAAiB,GACzB,OAAO,EAAE,CAOX"}
|
|
@@ -36,7 +36,8 @@ function sanitizeInput(input) {
|
|
|
36
36
|
* assertEquals(data, { id: 1, name: "Alice" });
|
|
37
37
|
* ```
|
|
38
38
|
*
|
|
39
|
-
* @throws {SyntaxError} Throws
|
|
39
|
+
* @throws {SyntaxError} Throws if the YAML is invalid or contains more than
|
|
40
|
+
* one document.
|
|
40
41
|
* @param content YAML string to parse.
|
|
41
42
|
* @param options Parsing options.
|
|
42
43
|
* @returns Parsed document.
|
|
@@ -77,6 +78,7 @@ export function parse(content, options = {}) {
|
|
|
77
78
|
* assertEquals(data, [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" }]);
|
|
78
79
|
* ```
|
|
79
80
|
*
|
|
81
|
+
* @throws {SyntaxError} Throws if the YAML is invalid.
|
|
80
82
|
* @param content YAML string to parse.
|
|
81
83
|
* @param options Parsing options.
|
|
82
84
|
* @returns Array of parsed documents.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/yaml/1.1.1/stringify.ts"],"names":[],"mappings":"AAOA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAEzC,yCAAyC;AACzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACvE;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAMR"}
|
package/esm/job.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"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"}
|
package/esm/job.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 _Job_instances, _Job_id, _Job_config, _Job_leafItems, _Job_outputDefs, _Job_cachedGraph, _Job_cachedLeafSteps, _Job_buildGraph;
|
|
12
|
+
var _Job_instances, _Job_id, _Job_config, _Job_leafItems, _Job_outputDefs, _Job_cachedGraph, _Job_cachedLeafSteps, _Job_cachedMembership, _Job_buildGraph, _Job_resolveUnits;
|
|
13
13
|
import { Condition, ExpressionValue, isAlwaysFalse, isAlwaysTrue, } from "./expression.js";
|
|
14
14
|
import { Matrix } from "./matrix.js";
|
|
15
15
|
import { normalizeStepLike, serializeConditionLike, serializeConfigValues, Step, StepRef, toCondition, unwrapSteps, } from "./step.js";
|
|
@@ -59,27 +59,61 @@ function combineAndConditions(a, b) {
|
|
|
59
59
|
return a ?? b;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* Returns a
|
|
63
|
-
*
|
|
64
|
-
*
|
|
62
|
+
* Returns a condition suitable for passing down to dependencies, or undefined
|
|
63
|
+
* if it references step outputs (which would create circular condition
|
|
64
|
+
* dependencies — a dependency cannot be gated on an output produced by a step
|
|
65
|
+
* that runs after it).
|
|
65
66
|
*/
|
|
66
|
-
function
|
|
67
|
-
|
|
68
|
-
if (configIf == null)
|
|
67
|
+
function propagatableCondition(condition) {
|
|
68
|
+
if (condition == null)
|
|
69
69
|
return undefined;
|
|
70
|
-
if (
|
|
71
|
-
for (const source of
|
|
70
|
+
if (condition instanceof Condition) {
|
|
71
|
+
for (const source of condition.sources) {
|
|
72
72
|
if (source instanceof Step)
|
|
73
73
|
return undefined;
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
if (
|
|
77
|
-
for (const source of
|
|
76
|
+
if (condition instanceof ExpressionValue) {
|
|
77
|
+
for (const source of condition.allSources) {
|
|
78
78
|
if (source instanceof Step)
|
|
79
79
|
return undefined;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
-
return
|
|
82
|
+
return condition;
|
|
83
|
+
}
|
|
84
|
+
/** Returns a step's config.if if it is safe to propagate to dependencies. */
|
|
85
|
+
function propagatableConfigIf(step) {
|
|
86
|
+
return propagatableCondition(step.config.if);
|
|
87
|
+
}
|
|
88
|
+
function recordMember(membership, group, step) {
|
|
89
|
+
const c = step.config;
|
|
90
|
+
if (c.background || c.wait != null || c.waitAll || c.cancel != null) {
|
|
91
|
+
// a parallel block already runs each member as a background step with an
|
|
92
|
+
// implicit wait-all, so background/wait/wait-all/cancel members make no sense
|
|
93
|
+
throw new Error("A parallel group member cannot be a background, wait, wait-all, or " +
|
|
94
|
+
"cancel step.");
|
|
95
|
+
}
|
|
96
|
+
if (membership.memberToGroup.has(step))
|
|
97
|
+
return;
|
|
98
|
+
membership.memberToGroup.set(step, group);
|
|
99
|
+
let members = membership.groupMembers.get(group);
|
|
100
|
+
if (!members) {
|
|
101
|
+
members = [];
|
|
102
|
+
membership.groupMembers.set(group, members);
|
|
103
|
+
}
|
|
104
|
+
members.push(step);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Rejects a composite step used directly as a parallel group member. Members
|
|
108
|
+
* run concurrently with no ordering, so a member cannot itself be a nested
|
|
109
|
+
* parallel group or a sequential group of steps.
|
|
110
|
+
*/
|
|
111
|
+
function throwInvalidParallelMember(composite) {
|
|
112
|
+
if (composite.kind === "parallel") {
|
|
113
|
+
throw new Error("Parallel groups cannot be nested.");
|
|
114
|
+
}
|
|
115
|
+
throw new Error("A parallel group member cannot itself be a group of steps — " +
|
|
116
|
+
"each member must be a single step.");
|
|
83
117
|
}
|
|
84
118
|
/**
|
|
85
119
|
* Recursively flattens a StepLike tree into a flat graph of Steps with
|
|
@@ -93,22 +127,28 @@ function propagatableConfigIf(step) {
|
|
|
93
127
|
* collected in `deferredAfterDeps` and resolved later, so that comesAfter
|
|
94
128
|
* only adds ordering edges for steps already present in the graph.
|
|
95
129
|
*/
|
|
96
|
-
function flattenStepLike(rawItem, graph, isLeaf, leafSteps, deferredAfterDeps, contextCondition) {
|
|
130
|
+
function flattenStepLike(rawItem, graph, isLeaf, leafSteps, deferredAfterDeps, membership, contextCondition, parallelGroup) {
|
|
97
131
|
const item = normalizeStepLike(rawItem);
|
|
98
132
|
if (item instanceof StepRef) {
|
|
99
133
|
const step = item.step;
|
|
100
134
|
// AND this StepRef's condition with the parent context
|
|
101
135
|
const newContext = combineAndConditions(contextCondition, item.condition);
|
|
102
136
|
if (step.children.length > 0) {
|
|
103
|
-
// StepRef wrapping composite step: recurse with combined context
|
|
137
|
+
// StepRef wrapping composite step: recurse with combined context.
|
|
138
|
+
// a parallel composite makes its children concurrent members.
|
|
139
|
+
if (parallelGroup != null)
|
|
140
|
+
throwInvalidParallelMember(step);
|
|
141
|
+
const childGroup = step.kind === "parallel" ? step : parallelGroup;
|
|
104
142
|
const contributed = [];
|
|
105
143
|
for (const child of step.children) {
|
|
106
|
-
contributed.push(...flattenStepLike(child, graph, isLeaf, leafSteps, deferredAfterDeps, newContext));
|
|
144
|
+
contributed.push(...flattenStepLike(child, graph, isLeaf, leafSteps, deferredAfterDeps, membership, newContext, childGroup));
|
|
107
145
|
}
|
|
108
|
-
// compute aggregate dep context:
|
|
146
|
+
// compute aggregate dep context: context AND (OR of children's
|
|
109
147
|
// config.ifs). If any child is unconditional, or the OR is a tautology,
|
|
110
|
-
// just use
|
|
111
|
-
|
|
148
|
+
// just use the context. The context is filtered so an output-referencing
|
|
149
|
+
// condition doesn't propagate to dependencies (circular dependency).
|
|
150
|
+
const depBaseCtx = propagatableCondition(newContext);
|
|
151
|
+
let compositeDepsCtx = depBaseCtx;
|
|
112
152
|
if (item.dependencies.length > 0) {
|
|
113
153
|
const childIfs = [];
|
|
114
154
|
let allConditional = true;
|
|
@@ -123,13 +163,14 @@ function flattenStepLike(rawItem, graph, isLeaf, leafSteps, deferredAfterDeps, c
|
|
|
123
163
|
if (allConditional && childIfs.length > 0) {
|
|
124
164
|
const orCond = simplifyOrConditions(childIfs.map((c) => toCondition(c)));
|
|
125
165
|
if (orCond != null) {
|
|
126
|
-
compositeDepsCtx = combineAndConditions(
|
|
166
|
+
compositeDepsCtx = combineAndConditions(depBaseCtx, orCond);
|
|
127
167
|
}
|
|
128
168
|
}
|
|
129
169
|
}
|
|
130
|
-
// apply deps once with aggregate context, add to all children's dep sets
|
|
170
|
+
// apply deps once with aggregate context, add to all children's dep sets.
|
|
171
|
+
// deps are not group members — they are hoisted to run before the group.
|
|
131
172
|
for (const dep of item.dependencies) {
|
|
132
|
-
const depSteps = flattenStepLike(dep, graph, false, [], deferredAfterDeps, compositeDepsCtx);
|
|
173
|
+
const depSteps = flattenStepLike(dep, graph, false, [], deferredAfterDeps, membership, compositeDepsCtx);
|
|
133
174
|
for (const s of contributed) {
|
|
134
175
|
const entry = graph.get(s);
|
|
135
176
|
for (const ds of depSteps)
|
|
@@ -147,11 +188,15 @@ function flattenStepLike(rawItem, graph, isLeaf, leafSteps, deferredAfterDeps, c
|
|
|
147
188
|
const entry = ensureEntry(graph, step);
|
|
148
189
|
if (isLeaf)
|
|
149
190
|
leafSteps.push(step);
|
|
191
|
+
if (parallelGroup)
|
|
192
|
+
recordMember(membership, parallelGroup, step);
|
|
150
193
|
applyContextCondition(entry, newContext);
|
|
151
|
-
// include step's config.if in the dep context
|
|
152
|
-
|
|
194
|
+
// include step's config.if in the dep context. both the context and the
|
|
195
|
+
// config.if are filtered so output-referencing conditions don't propagate
|
|
196
|
+
// to dependencies (which would create a circular condition dependency).
|
|
197
|
+
const depContext = combineAndConditions(propagatableCondition(newContext), propagatableConfigIf(step));
|
|
153
198
|
for (const dep of item.dependencies) {
|
|
154
|
-
flattenDep(dep, entry.deps, graph, deferredAfterDeps, depContext);
|
|
199
|
+
flattenDep(dep, entry.deps, graph, deferredAfterDeps, membership, depContext);
|
|
155
200
|
}
|
|
156
201
|
for (const dep of item.afterDependencies) {
|
|
157
202
|
deferredAfterDeps.push({ step, target: dep });
|
|
@@ -160,10 +205,14 @@ function flattenStepLike(rawItem, graph, isLeaf, leafSteps, deferredAfterDeps, c
|
|
|
160
205
|
}
|
|
161
206
|
// Step (leaf or composite)
|
|
162
207
|
if (item.children.length > 0) {
|
|
163
|
-
// composite step: recurse into children with same context
|
|
208
|
+
// composite step: recurse into children with same context.
|
|
209
|
+
// a parallel composite makes its children concurrent members.
|
|
210
|
+
if (parallelGroup != null)
|
|
211
|
+
throwInvalidParallelMember(item);
|
|
212
|
+
const childGroup = item.kind === "parallel" ? item : parallelGroup;
|
|
164
213
|
const contributed = [];
|
|
165
214
|
for (const child of item.children) {
|
|
166
|
-
contributed.push(...flattenStepLike(child, graph, isLeaf, leafSteps, deferredAfterDeps, contextCondition));
|
|
215
|
+
contributed.push(...flattenStepLike(child, graph, isLeaf, leafSteps, deferredAfterDeps, membership, contextCondition, childGroup));
|
|
167
216
|
}
|
|
168
217
|
return contributed;
|
|
169
218
|
}
|
|
@@ -171,12 +220,14 @@ function flattenStepLike(rawItem, graph, isLeaf, leafSteps, deferredAfterDeps, c
|
|
|
171
220
|
const entry = ensureEntry(graph, item);
|
|
172
221
|
if (isLeaf)
|
|
173
222
|
leafSteps.push(item);
|
|
223
|
+
if (parallelGroup)
|
|
224
|
+
recordMember(membership, parallelGroup, item);
|
|
174
225
|
applyContextCondition(entry, contextCondition);
|
|
175
226
|
return [item];
|
|
176
227
|
}
|
|
177
228
|
/** Flattens a dependency target into the graph and adds it to a dep set. */
|
|
178
|
-
function flattenDep(dep, targetSet, graph, deferredAfterDeps, contextCondition) {
|
|
179
|
-
const steps = flattenStepLike(dep, graph, false, [], deferredAfterDeps, contextCondition);
|
|
229
|
+
function flattenDep(dep, targetSet, graph, deferredAfterDeps, membership, contextCondition) {
|
|
230
|
+
const steps = flattenStepLike(dep, graph, false, [], deferredAfterDeps, membership, contextCondition);
|
|
180
231
|
for (const s of steps) {
|
|
181
232
|
targetSet.add(s);
|
|
182
233
|
}
|
|
@@ -225,6 +276,7 @@ export class Job {
|
|
|
225
276
|
// cached graph — built lazily
|
|
226
277
|
_Job_cachedGraph.set(this, void 0);
|
|
227
278
|
_Job_cachedLeafSteps.set(this, void 0);
|
|
279
|
+
_Job_cachedMembership.set(this, void 0);
|
|
228
280
|
__classPrivateFieldSet(this, _Job_id, id, "f");
|
|
229
281
|
__classPrivateFieldSet(this, _Job_config, config, "f");
|
|
230
282
|
if (init?.steps) {
|
|
@@ -245,29 +297,8 @@ export class Job {
|
|
|
245
297
|
}
|
|
246
298
|
resolveSteps() {
|
|
247
299
|
const { graph, leafSteps } = __classPrivateFieldGet(this, _Job_instances, "m", _Job_buildGraph).call(this);
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
// leaf step that transitively depends on it (directly or via
|
|
251
|
-
// condition sources). This makes the topo sort respect steps order.
|
|
252
|
-
const priority = new Map();
|
|
253
|
-
const assignPriority = (s, p) => {
|
|
254
|
-
const current = priority.get(s);
|
|
255
|
-
if (current !== undefined && current <= p)
|
|
256
|
-
return;
|
|
257
|
-
priority.set(s, p);
|
|
258
|
-
const entry = graph.get(s);
|
|
259
|
-
if (!entry)
|
|
260
|
-
return;
|
|
261
|
-
for (const dep of entry.deps) {
|
|
262
|
-
if (allSteps.has(dep)) {
|
|
263
|
-
assignPriority(dep, p);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
};
|
|
267
|
-
for (let i = 0; i < leafSteps.length; i++) {
|
|
268
|
-
assignPriority(leafSteps[i], i);
|
|
269
|
-
}
|
|
270
|
-
return topoSort(allSteps, priority, graph);
|
|
300
|
+
const priority = computePriorities(graph, leafSteps);
|
|
301
|
+
return topoSort(new Set(graph.keys()), priority, graph);
|
|
271
302
|
}
|
|
272
303
|
inferNeeds(stepOwners) {
|
|
273
304
|
const config = __classPrivateFieldGet(this, _Job_config, "f");
|
|
@@ -438,26 +469,49 @@ export class Job {
|
|
|
438
469
|
}
|
|
439
470
|
// steps
|
|
440
471
|
const { graph } = __classPrivateFieldGet(this, _Job_instances, "m", _Job_buildGraph).call(this);
|
|
441
|
-
const
|
|
442
|
-
const effectiveConditions = computeEffectiveConditions(
|
|
443
|
-
|
|
444
|
-
.filter((s) => {
|
|
472
|
+
const units = __classPrivateFieldGet(this, _Job_instances, "m", _Job_resolveUnits).call(this);
|
|
473
|
+
const effectiveConditions = computeEffectiveConditions(units.flatMap((u) => u.steps), graph);
|
|
474
|
+
const isVisible = (s) => {
|
|
445
475
|
const cond = effectiveConditions.get(s);
|
|
446
476
|
return cond == null || !isAlwaysFalse(cond);
|
|
447
|
-
}
|
|
448
|
-
|
|
477
|
+
};
|
|
478
|
+
const serialize = (s) => s.toYaml(effectiveConditions.get(s));
|
|
479
|
+
const steps = [];
|
|
480
|
+
for (const unit of units) {
|
|
481
|
+
const visible = unit.steps.filter(isVisible);
|
|
482
|
+
if (visible.length === 0)
|
|
483
|
+
continue;
|
|
484
|
+
// a parallel block only makes sense with more than one step; collapse a
|
|
485
|
+
// single remaining step back to a normal sequential step
|
|
486
|
+
if (unit.parallel && visible.length > 1) {
|
|
487
|
+
steps.push({ parallel: visible.map(serialize) });
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
for (const s of visible)
|
|
491
|
+
steps.push(serialize(s));
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
result.steps = steps;
|
|
449
495
|
return result;
|
|
450
496
|
}
|
|
451
497
|
}
|
|
452
|
-
_Job_id = new WeakMap(), _Job_config = new WeakMap(), _Job_leafItems = new WeakMap(), _Job_outputDefs = new WeakMap(), _Job_cachedGraph = new WeakMap(), _Job_cachedLeafSteps = new WeakMap(), _Job_instances = new WeakSet(), _Job_buildGraph = function _Job_buildGraph() {
|
|
453
|
-
if (__classPrivateFieldGet(this, _Job_cachedGraph, "f") && __classPrivateFieldGet(this, _Job_cachedLeafSteps, "f")) {
|
|
454
|
-
return {
|
|
498
|
+
_Job_id = new WeakMap(), _Job_config = new WeakMap(), _Job_leafItems = new WeakMap(), _Job_outputDefs = new WeakMap(), _Job_cachedGraph = new WeakMap(), _Job_cachedLeafSteps = new WeakMap(), _Job_cachedMembership = new WeakMap(), _Job_instances = new WeakSet(), _Job_buildGraph = function _Job_buildGraph() {
|
|
499
|
+
if (__classPrivateFieldGet(this, _Job_cachedGraph, "f") && __classPrivateFieldGet(this, _Job_cachedLeafSteps, "f") && __classPrivateFieldGet(this, _Job_cachedMembership, "f")) {
|
|
500
|
+
return {
|
|
501
|
+
graph: __classPrivateFieldGet(this, _Job_cachedGraph, "f"),
|
|
502
|
+
leafSteps: __classPrivateFieldGet(this, _Job_cachedLeafSteps, "f"),
|
|
503
|
+
membership: __classPrivateFieldGet(this, _Job_cachedMembership, "f"),
|
|
504
|
+
};
|
|
455
505
|
}
|
|
456
506
|
const graph = new Map();
|
|
457
507
|
const leafSteps = [];
|
|
458
508
|
const deferredAfterDeps = [];
|
|
509
|
+
const membership = {
|
|
510
|
+
memberToGroup: new Map(),
|
|
511
|
+
groupMembers: new Map(),
|
|
512
|
+
};
|
|
459
513
|
for (const item of __classPrivateFieldGet(this, _Job_leafItems, "f")) {
|
|
460
|
-
flattenStepLike(item, graph, true, leafSteps, deferredAfterDeps);
|
|
514
|
+
flattenStepLike(item, graph, true, leafSteps, deferredAfterDeps, membership);
|
|
461
515
|
}
|
|
462
516
|
addConditionSourceDeps(graph);
|
|
463
517
|
// resolve deferred after-deps: only add ordering edges for steps
|
|
@@ -471,7 +525,65 @@ _Job_id = new WeakMap(), _Job_config = new WeakMap(), _Job_leafItems = new WeakM
|
|
|
471
525
|
}
|
|
472
526
|
__classPrivateFieldSet(this, _Job_cachedGraph, graph, "f");
|
|
473
527
|
__classPrivateFieldSet(this, _Job_cachedLeafSteps, leafSteps, "f");
|
|
474
|
-
|
|
528
|
+
__classPrivateFieldSet(this, _Job_cachedMembership, membership, "f");
|
|
529
|
+
return { graph, leafSteps, membership };
|
|
530
|
+
}, _Job_resolveUnits = function _Job_resolveUnits() {
|
|
531
|
+
const { graph, leafSteps, membership } = __classPrivateFieldGet(this, _Job_instances, "m", _Job_buildGraph).call(this);
|
|
532
|
+
const { memberToGroup, groupMembers } = membership;
|
|
533
|
+
const priority = computePriorities(graph, leafSteps);
|
|
534
|
+
// representative node of a step: its parallel group, or the step itself
|
|
535
|
+
const repOf = (s) => memberToGroup.get(s) ?? s;
|
|
536
|
+
// build a contracted graph with one node per group + each free step
|
|
537
|
+
const nodes = new Set();
|
|
538
|
+
for (const s of graph.keys())
|
|
539
|
+
nodes.add(repOf(s));
|
|
540
|
+
const contracted = new Map();
|
|
541
|
+
for (const node of nodes) {
|
|
542
|
+
contracted.set(node, {
|
|
543
|
+
deps: new Set(),
|
|
544
|
+
afterDeps: new Set(),
|
|
545
|
+
contexts: [],
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
for (const [s, entry] of graph) {
|
|
549
|
+
const from = repOf(s);
|
|
550
|
+
const cEntry = contracted.get(from);
|
|
551
|
+
for (const dep of entry.deps) {
|
|
552
|
+
const to = repOf(dep);
|
|
553
|
+
if (to === from) {
|
|
554
|
+
if (s !== dep) {
|
|
555
|
+
throw new Error(`Steps in a parallel group cannot depend on each other: ${stepLabel(dep)} → ${stepLabel(s)}`);
|
|
556
|
+
}
|
|
557
|
+
continue;
|
|
558
|
+
}
|
|
559
|
+
cEntry.deps.add(to);
|
|
560
|
+
}
|
|
561
|
+
for (const dep of entry.afterDeps) {
|
|
562
|
+
const to = repOf(dep);
|
|
563
|
+
if (to === from) {
|
|
564
|
+
if (s !== dep) {
|
|
565
|
+
throw new Error(`Steps in a parallel group cannot be ordered after each other: ${stepLabel(dep)} → ${stepLabel(s)}`);
|
|
566
|
+
}
|
|
567
|
+
continue;
|
|
568
|
+
}
|
|
569
|
+
cEntry.afterDeps.add(to);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
// contracted priority = best (minimum) priority among the node's members
|
|
573
|
+
const contractedPriority = new Map();
|
|
574
|
+
for (const [s, p] of priority) {
|
|
575
|
+
const node = repOf(s);
|
|
576
|
+
const current = contractedPriority.get(node);
|
|
577
|
+
if (current === undefined || p < current) {
|
|
578
|
+
contractedPriority.set(node, p);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
return topoSort(nodes, contractedPriority, contracted).map((node) => {
|
|
582
|
+
const members = groupMembers.get(node);
|
|
583
|
+
return members
|
|
584
|
+
? { parallel: true, steps: members }
|
|
585
|
+
: { parallel: false, steps: [node] };
|
|
586
|
+
});
|
|
475
587
|
};
|
|
476
588
|
// --- effective conditions ---
|
|
477
589
|
/**
|
|
@@ -751,6 +863,33 @@ function extractCommonFactors(terms) {
|
|
|
751
863
|
return result;
|
|
752
864
|
}
|
|
753
865
|
// --- topological sort ---
|
|
866
|
+
/**
|
|
867
|
+
* Computes step priorities: each step gets the minimum leaf index of any leaf
|
|
868
|
+
* step that transitively depends on it (directly or via condition sources).
|
|
869
|
+
* This makes the topological sort respect the declared `steps` order.
|
|
870
|
+
*/
|
|
871
|
+
function computePriorities(graph, leafSteps) {
|
|
872
|
+
const allSteps = new Set(graph.keys());
|
|
873
|
+
const priority = new Map();
|
|
874
|
+
const assignPriority = (s, p) => {
|
|
875
|
+
const current = priority.get(s);
|
|
876
|
+
if (current !== undefined && current <= p)
|
|
877
|
+
return;
|
|
878
|
+
priority.set(s, p);
|
|
879
|
+
const entry = graph.get(s);
|
|
880
|
+
if (!entry)
|
|
881
|
+
return;
|
|
882
|
+
for (const dep of entry.deps) {
|
|
883
|
+
if (allSteps.has(dep)) {
|
|
884
|
+
assignPriority(dep, p);
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
};
|
|
888
|
+
for (let i = 0; i < leafSteps.length; i++) {
|
|
889
|
+
assignPriority(leafSteps[i], i);
|
|
890
|
+
}
|
|
891
|
+
return priority;
|
|
892
|
+
}
|
|
754
893
|
function topoSort(steps, priority, graph) {
|
|
755
894
|
// build in-degree map (only counting unique predecessors within our set)
|
|
756
895
|
const inDegree = new Map();
|
package/esm/mod.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
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 { CompositeKind, ConditionLike, ConfigValue, StepBuilder, StepConfig, StepFunction, StepLike, } from "./step.js";
|
|
4
4
|
export { Job, job } from "./job.js";
|
|
5
5
|
export type { JobConfig, JobDef, ReusableJobConfig, ReusableJobDef, RunsOn, ServiceContainer, StepsJobConfig, StepsJobDef, } from "./job.js";
|
|
6
6
|
export { isLinting, Workflow, workflow } from "./workflow.js";
|
|
7
7
|
export type { WorkflowCallInput, WorkflowCallOutput, WorkflowCallSecret, WorkflowCallTrigger, WorkflowConfig, WorkflowTriggers, } from "./workflow.js";
|
|
8
8
|
export { concat, Condition, conditions, defineExprObj, ElseIfBuilder, expr, ExpressionValue, fromJSON, hashFiles, join, literal, ThenBuilder, toJSON, } from "./expression.js";
|
|
9
9
|
export type { ComparisonOp, ConcatPart, ExpressionSource, ExprMap, ExprOf, TernaryValue, } from "./expression.js";
|
|
10
|
-
export {
|
|
11
|
-
export type { PinEntry, RefResolver } from "./pin.js";
|
|
10
|
+
export { collectActionVersions, parsePinComments, pinYamlContent, pullVersionsInSource, resolveRef, unpinParsedYaml, } from "./pin.js";
|
|
11
|
+
export type { PinEntry, RefResolver, VersionChange } from "./pin.js";
|
|
12
12
|
export { defineMatrix, Matrix } from "./matrix.js";
|
|
13
13
|
export type { PermissionLevel, Permissions, PermissionScope, } from "./permissions.js";
|
|
14
14
|
export { Artifact, artifact } 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,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9D,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,MAAM,EACN,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,IAAI,EACJ,eAAe,EACf,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,OAAO,EACP,WAAW,EACX,MAAM,GACP,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,
|
|
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,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,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9D,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,MAAM,EACN,SAAS,EACT,UAAU,EACV,aAAa,EACb,aAAa,EACb,IAAI,EACJ,eAAe,EACf,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,OAAO,EACP,WAAW,EACX,MAAM,GACP,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACrE,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,QAAQ,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,eAAe,CAAC;AAEtD,0CAA0C;AAC1C,eAAO,MAAM,cAAc,EAAE,OAAO,SAAqB,CAAC;AAC1D,0CAA0C;AAC1C,eAAO,MAAM,cAAc,EAAE,OAAO,SAAqB,CAAC"}
|
package/esm/mod.js
CHANGED
|
@@ -3,7 +3,7 @@ export { Step, step, StepRef } from "./step.js";
|
|
|
3
3
|
export { Job, job } from "./job.js";
|
|
4
4
|
export { isLinting, Workflow, workflow } from "./workflow.js";
|
|
5
5
|
export { concat, Condition, conditions, defineExprObj, ElseIfBuilder, expr, ExpressionValue, fromJSON, hashFiles, join, literal, ThenBuilder, toJSON, } from "./expression.js";
|
|
6
|
-
export {
|
|
6
|
+
export { collectActionVersions, parsePinComments, pinYamlContent, pullVersionsInSource, resolveRef, unpinParsedYaml, } from "./pin.js";
|
|
7
7
|
export { defineMatrix, Matrix } from "./matrix.js";
|
|
8
8
|
export { Artifact, artifact } from "./artifact.js";
|
|
9
9
|
// deprecated re-exports
|
package/esm/pin.d.ts
CHANGED
|
@@ -13,15 +13,45 @@ export declare function parseActionUses(uses: string): {
|
|
|
13
13
|
} | undefined;
|
|
14
14
|
export declare function resolveRef(owner: string, repo: string, ref: string): string;
|
|
15
15
|
export type RefResolver = (owner: string, repo: string, ref: string) => string;
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Resolves non-SHA refs in YAML content to commit hashes, writing the
|
|
18
|
+
* original ref as an inline comment after the pinned `uses:` value.
|
|
19
|
+
*/
|
|
17
20
|
export declare function pinYamlContent(yamlStr: string, resolve?: RefResolver, cache?: readonly PinEntry[]): {
|
|
18
21
|
content: string;
|
|
19
22
|
pins: PinEntry[];
|
|
20
23
|
};
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Extracts pin entries from file content. Reads the current inline format
|
|
26
|
+
* (`uses: owner/repo@HASH # ref`) and, for backwards compatibility, the
|
|
27
|
+
* legacy footer format (`# gagen:pin owner/repo@ref = HASH`).
|
|
28
|
+
*/
|
|
24
29
|
export declare function parsePinComments(content: string): PinEntry[];
|
|
30
|
+
/**
|
|
31
|
+
* Collects the pinned version for each action across a set of generated
|
|
32
|
+
* YAML files. If an action appears in multiple files with different
|
|
33
|
+
* versions, it is returned as a conflict instead — conflicts must be
|
|
34
|
+
* resolved manually since there is no single correct target version.
|
|
35
|
+
*/
|
|
36
|
+
export declare function collectActionVersions(yamlContents: readonly string[]): {
|
|
37
|
+
versions: Map<string, string>;
|
|
38
|
+
conflicts: Map<string, string[]>;
|
|
39
|
+
};
|
|
40
|
+
export interface VersionChange {
|
|
41
|
+
action: string;
|
|
42
|
+
from: string;
|
|
43
|
+
to: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Rewrites literal `"owner/repo@<ref>"` (or single-quoted) strings in
|
|
47
|
+
* source code to use the target version from the given map. Only matches
|
|
48
|
+
* literals with a single owner/repo[/path]@ref shape; variables, template
|
|
49
|
+
* substitutions, and non-string forms are left alone.
|
|
50
|
+
*/
|
|
51
|
+
export declare function pullVersionsInSource(source: string, versions: ReadonlyMap<string, string>): {
|
|
52
|
+
content: string;
|
|
53
|
+
changes: VersionChange[];
|
|
54
|
+
};
|
|
25
55
|
/**
|
|
26
56
|
* Replaces pinned hashes in a parsed YAML object with their original
|
|
27
57
|
* tag/branch refs using the provided pin mapping.
|
package/esm/pin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pin.d.ts","sourceRoot":"","sources":["../src/pin.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAcxE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,MAAM,CA2BR;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,KACR,MAAM,CAAC;AAEZ
|
|
1
|
+
{"version":3,"file":"pin.d.ts","sourceRoot":"","sources":["../src/pin.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAcxE;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,MAAM,CA2BR;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,KACR,MAAM,CAAC;AAEZ;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAwB,EACjC,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,GAC1B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,CA+DvC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAqB5D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B;IACD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAClC,CA2BA;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAY/C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,QAAQ,EAAE,GACf,OAAO,CAsCT"}
|