@qawolf/cli 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +657 -159
- package/package.json +5 -5
- package/skills/qawolf-cli/SKILL.md +2 -1
package/dist/cli.js
CHANGED
|
@@ -8514,7 +8514,7 @@ var require_BufferList = __commonJS((exports, module) => {
|
|
|
8514
8514
|
this.head = this.tail = null;
|
|
8515
8515
|
this.length = 0;
|
|
8516
8516
|
};
|
|
8517
|
-
BufferList.prototype.join = function
|
|
8517
|
+
BufferList.prototype.join = function join36(s3) {
|
|
8518
8518
|
if (this.length === 0)
|
|
8519
8519
|
return "";
|
|
8520
8520
|
var p3 = this.head;
|
|
@@ -19251,7 +19251,7 @@ var require_path = __commonJS((exports, module) => {
|
|
|
19251
19251
|
module.exports = isWindows ? { sep: "\\" } : { sep: "/" };
|
|
19252
19252
|
});
|
|
19253
19253
|
|
|
19254
|
-
// node_modules/balanced-match/index.js
|
|
19254
|
+
// node_modules/readdir-glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
|
|
19255
19255
|
var require_balanced_match = __commonJS((exports, module) => {
|
|
19256
19256
|
module.exports = balanced;
|
|
19257
19257
|
function balanced(a2, b3, str) {
|
|
@@ -19308,7 +19308,7 @@ var require_balanced_match = __commonJS((exports, module) => {
|
|
|
19308
19308
|
}
|
|
19309
19309
|
});
|
|
19310
19310
|
|
|
19311
|
-
// node_modules/brace-expansion/index.js
|
|
19311
|
+
// node_modules/readdir-glob/node_modules/minimatch/node_modules/brace-expansion/index.js
|
|
19312
19312
|
var require_brace_expansion = __commonJS((exports, module) => {
|
|
19313
19313
|
var balanced = require_balanced_match();
|
|
19314
19314
|
module.exports = expandTop;
|
|
@@ -20363,7 +20363,7 @@ var require_readdir_glob = __commonJS((exports, module) => {
|
|
|
20363
20363
|
readdirGlob.ReaddirGlob = ReaddirGlob;
|
|
20364
20364
|
});
|
|
20365
20365
|
|
|
20366
|
-
// node_modules/
|
|
20366
|
+
// node_modules/async/dist/async.js
|
|
20367
20367
|
var require_async = __commonJS((exports, module) => {
|
|
20368
20368
|
(function(global2, factory) {
|
|
20369
20369
|
typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.async = {}));
|
|
@@ -23182,7 +23182,7 @@ var require_BufferList2 = __commonJS((exports, module) => {
|
|
|
23182
23182
|
this.head = this.tail = null;
|
|
23183
23183
|
this.length = 0;
|
|
23184
23184
|
};
|
|
23185
|
-
BufferList.prototype.join = function
|
|
23185
|
+
BufferList.prototype.join = function join36(s3) {
|
|
23186
23186
|
if (this.length === 0)
|
|
23187
23187
|
return "";
|
|
23188
23188
|
var p3 = this.head;
|
|
@@ -32626,7 +32626,272 @@ var require_isPlainObject = __commonJS((exports, module) => {
|
|
|
32626
32626
|
module.exports = isPlainObject4;
|
|
32627
32627
|
});
|
|
32628
32628
|
|
|
32629
|
-
// node_modules/minimatch/
|
|
32629
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js
|
|
32630
|
+
var require_balanced_match2 = __commonJS((exports, module) => {
|
|
32631
|
+
module.exports = balanced;
|
|
32632
|
+
function balanced(a2, b3, str) {
|
|
32633
|
+
if (a2 instanceof RegExp)
|
|
32634
|
+
a2 = maybeMatch(a2, str);
|
|
32635
|
+
if (b3 instanceof RegExp)
|
|
32636
|
+
b3 = maybeMatch(b3, str);
|
|
32637
|
+
var r2 = range(a2, b3, str);
|
|
32638
|
+
return r2 && {
|
|
32639
|
+
start: r2[0],
|
|
32640
|
+
end: r2[1],
|
|
32641
|
+
pre: str.slice(0, r2[0]),
|
|
32642
|
+
body: str.slice(r2[0] + a2.length, r2[1]),
|
|
32643
|
+
post: str.slice(r2[1] + b3.length)
|
|
32644
|
+
};
|
|
32645
|
+
}
|
|
32646
|
+
function maybeMatch(reg, str) {
|
|
32647
|
+
var m4 = str.match(reg);
|
|
32648
|
+
return m4 ? m4[0] : null;
|
|
32649
|
+
}
|
|
32650
|
+
balanced.range = range;
|
|
32651
|
+
function range(a2, b3, str) {
|
|
32652
|
+
var begs, beg, left, right, result;
|
|
32653
|
+
var ai2 = str.indexOf(a2);
|
|
32654
|
+
var bi2 = str.indexOf(b3, ai2 + 1);
|
|
32655
|
+
var i2 = ai2;
|
|
32656
|
+
if (ai2 >= 0 && bi2 > 0) {
|
|
32657
|
+
if (a2 === b3) {
|
|
32658
|
+
return [ai2, bi2];
|
|
32659
|
+
}
|
|
32660
|
+
begs = [];
|
|
32661
|
+
left = str.length;
|
|
32662
|
+
while (i2 >= 0 && !result) {
|
|
32663
|
+
if (i2 == ai2) {
|
|
32664
|
+
begs.push(i2);
|
|
32665
|
+
ai2 = str.indexOf(a2, i2 + 1);
|
|
32666
|
+
} else if (begs.length == 1) {
|
|
32667
|
+
result = [begs.pop(), bi2];
|
|
32668
|
+
} else {
|
|
32669
|
+
beg = begs.pop();
|
|
32670
|
+
if (beg < left) {
|
|
32671
|
+
left = beg;
|
|
32672
|
+
right = bi2;
|
|
32673
|
+
}
|
|
32674
|
+
bi2 = str.indexOf(b3, i2 + 1);
|
|
32675
|
+
}
|
|
32676
|
+
i2 = ai2 < bi2 && ai2 >= 0 ? ai2 : bi2;
|
|
32677
|
+
}
|
|
32678
|
+
if (begs.length) {
|
|
32679
|
+
result = [left, right];
|
|
32680
|
+
}
|
|
32681
|
+
}
|
|
32682
|
+
return result;
|
|
32683
|
+
}
|
|
32684
|
+
});
|
|
32685
|
+
|
|
32686
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js
|
|
32687
|
+
var require_brace_expansion2 = __commonJS((exports, module) => {
|
|
32688
|
+
var balanced = require_balanced_match2();
|
|
32689
|
+
module.exports = expandTop;
|
|
32690
|
+
var escSlash = "\x00SLASH" + Math.random() + "\x00";
|
|
32691
|
+
var escOpen = "\x00OPEN" + Math.random() + "\x00";
|
|
32692
|
+
var escClose = "\x00CLOSE" + Math.random() + "\x00";
|
|
32693
|
+
var escComma = "\x00COMMA" + Math.random() + "\x00";
|
|
32694
|
+
var escPeriod = "\x00PERIOD" + Math.random() + "\x00";
|
|
32695
|
+
var EXPANSION_MAX = 1e5;
|
|
32696
|
+
var EXPANSION_MAX_LENGTH = 4000000;
|
|
32697
|
+
function numeric(str) {
|
|
32698
|
+
return parseInt(str, 10) == str ? parseInt(str, 10) : str.charCodeAt(0);
|
|
32699
|
+
}
|
|
32700
|
+
function escapeBraces(str) {
|
|
32701
|
+
return str.split("\\\\").join(escSlash).split("\\{").join(escOpen).split("\\}").join(escClose).split("\\,").join(escComma).split("\\.").join(escPeriod);
|
|
32702
|
+
}
|
|
32703
|
+
function unescapeBraces(str) {
|
|
32704
|
+
return str.split(escSlash).join("\\").split(escOpen).join("{").split(escClose).join("}").split(escComma).join(",").split(escPeriod).join(".");
|
|
32705
|
+
}
|
|
32706
|
+
function parseCommaParts(str) {
|
|
32707
|
+
if (!str)
|
|
32708
|
+
return [""];
|
|
32709
|
+
var parts = [];
|
|
32710
|
+
var m4 = balanced("{", "}", str);
|
|
32711
|
+
if (!m4)
|
|
32712
|
+
return str.split(",");
|
|
32713
|
+
var pre = m4.pre;
|
|
32714
|
+
var body = m4.body;
|
|
32715
|
+
var post = m4.post;
|
|
32716
|
+
var p3 = pre.split(",");
|
|
32717
|
+
p3[p3.length - 1] += "{" + body + "}";
|
|
32718
|
+
var postParts = parseCommaParts(post);
|
|
32719
|
+
if (post.length) {
|
|
32720
|
+
p3[p3.length - 1] += postParts.shift();
|
|
32721
|
+
p3.push.apply(p3, postParts);
|
|
32722
|
+
}
|
|
32723
|
+
parts.push.apply(parts, p3);
|
|
32724
|
+
return parts;
|
|
32725
|
+
}
|
|
32726
|
+
function expandTop(str, options) {
|
|
32727
|
+
if (!str)
|
|
32728
|
+
return [];
|
|
32729
|
+
options = options || {};
|
|
32730
|
+
var max = options.max == null ? EXPANSION_MAX : options.max;
|
|
32731
|
+
var maxLength = options.maxLength == null ? EXPANSION_MAX_LENGTH : options.maxLength;
|
|
32732
|
+
if (str.substr(0, 2) === "{}") {
|
|
32733
|
+
str = "\\{\\}" + str.substr(2);
|
|
32734
|
+
}
|
|
32735
|
+
return expand(escapeBraces(str), max, maxLength, true).map(unescapeBraces);
|
|
32736
|
+
}
|
|
32737
|
+
function embrace(str) {
|
|
32738
|
+
return "{" + str + "}";
|
|
32739
|
+
}
|
|
32740
|
+
function isPadded(el) {
|
|
32741
|
+
return /^-?0\d/.test(el);
|
|
32742
|
+
}
|
|
32743
|
+
function lte(i2, y) {
|
|
32744
|
+
return i2 <= y;
|
|
32745
|
+
}
|
|
32746
|
+
function gte(i2, y) {
|
|
32747
|
+
return i2 >= y;
|
|
32748
|
+
}
|
|
32749
|
+
function combine(acc, pre, values, max, maxLength, dropEmpties) {
|
|
32750
|
+
var out = [];
|
|
32751
|
+
var length = 0;
|
|
32752
|
+
for (var a2 = 0;a2 < acc.length; a2++) {
|
|
32753
|
+
for (var v2 = 0;v2 < values.length; v2++) {
|
|
32754
|
+
if (out.length >= max)
|
|
32755
|
+
return out;
|
|
32756
|
+
var expansion = acc[a2] + pre + values[v2];
|
|
32757
|
+
if (dropEmpties && !expansion)
|
|
32758
|
+
continue;
|
|
32759
|
+
if (length + expansion.length > maxLength)
|
|
32760
|
+
return out;
|
|
32761
|
+
out.push(expansion);
|
|
32762
|
+
length += expansion.length;
|
|
32763
|
+
}
|
|
32764
|
+
}
|
|
32765
|
+
return out;
|
|
32766
|
+
}
|
|
32767
|
+
function expandSequence(body, isAlphaSequence, max, maxLength) {
|
|
32768
|
+
var n2 = body.split(/\.\./);
|
|
32769
|
+
var N2 = [];
|
|
32770
|
+
if (n2[0] === undefined || n2[1] === undefined) {
|
|
32771
|
+
return N2;
|
|
32772
|
+
}
|
|
32773
|
+
var x = numeric(n2[0]);
|
|
32774
|
+
var y = numeric(n2[1]);
|
|
32775
|
+
var width = Math.max(n2[0].length, n2[1].length);
|
|
32776
|
+
var incr = n2.length === 3 && n2[2] !== undefined ? Math.max(Math.abs(numeric(n2[2])), 1) : 1;
|
|
32777
|
+
var test = lte;
|
|
32778
|
+
var reverse = y < x;
|
|
32779
|
+
if (reverse) {
|
|
32780
|
+
incr *= -1;
|
|
32781
|
+
test = gte;
|
|
32782
|
+
}
|
|
32783
|
+
var pad = n2.some(isPadded);
|
|
32784
|
+
var length = 0;
|
|
32785
|
+
for (var i2 = x;test(i2, y) && N2.length < max; i2 += incr) {
|
|
32786
|
+
var c3;
|
|
32787
|
+
if (isAlphaSequence) {
|
|
32788
|
+
c3 = String.fromCharCode(i2);
|
|
32789
|
+
if (c3 === "\\") {
|
|
32790
|
+
c3 = "";
|
|
32791
|
+
}
|
|
32792
|
+
} else {
|
|
32793
|
+
c3 = String(i2);
|
|
32794
|
+
if (pad) {
|
|
32795
|
+
var need = width - c3.length;
|
|
32796
|
+
if (need > 0) {
|
|
32797
|
+
var z3 = new Array(need + 1).join("0");
|
|
32798
|
+
if (i2 < 0) {
|
|
32799
|
+
c3 = "-" + z3 + c3.slice(1);
|
|
32800
|
+
} else {
|
|
32801
|
+
c3 = z3 + c3;
|
|
32802
|
+
}
|
|
32803
|
+
}
|
|
32804
|
+
}
|
|
32805
|
+
}
|
|
32806
|
+
if (length + c3.length > maxLength)
|
|
32807
|
+
break;
|
|
32808
|
+
N2.push(c3);
|
|
32809
|
+
length += c3.length;
|
|
32810
|
+
}
|
|
32811
|
+
return N2;
|
|
32812
|
+
}
|
|
32813
|
+
function expand(str, max, maxLength, isTop) {
|
|
32814
|
+
var acc = [""];
|
|
32815
|
+
var dropEmpties = false;
|
|
32816
|
+
var firstGroup = true;
|
|
32817
|
+
for (;; ) {
|
|
32818
|
+
const m4 = balanced("{", "}", str);
|
|
32819
|
+
if (!m4) {
|
|
32820
|
+
return combine(acc, str, [""], max, maxLength, dropEmpties);
|
|
32821
|
+
}
|
|
32822
|
+
const pre = m4.pre;
|
|
32823
|
+
if (/\$$/.test(pre)) {
|
|
32824
|
+
acc = combine(acc, pre + "{" + m4.body + "}", [""], max, maxLength, dropEmpties && !m4.post.length);
|
|
32825
|
+
firstGroup = false;
|
|
32826
|
+
if (!m4.post.length)
|
|
32827
|
+
break;
|
|
32828
|
+
str = m4.post;
|
|
32829
|
+
continue;
|
|
32830
|
+
}
|
|
32831
|
+
var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m4.body);
|
|
32832
|
+
var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m4.body);
|
|
32833
|
+
var isSequence = isNumericSequence || isAlphaSequence;
|
|
32834
|
+
var isOptions = m4.body.indexOf(",") >= 0;
|
|
32835
|
+
if (!isSequence && !isOptions) {
|
|
32836
|
+
if (m4.post.match(/,(?!,).*\}/)) {
|
|
32837
|
+
str = m4.pre + "{" + m4.body + escClose + m4.post;
|
|
32838
|
+
isTop = true;
|
|
32839
|
+
continue;
|
|
32840
|
+
}
|
|
32841
|
+
return combine(acc, pre + "{" + m4.body + "}" + m4.post, [""], max, maxLength, dropEmpties);
|
|
32842
|
+
}
|
|
32843
|
+
if (firstGroup) {
|
|
32844
|
+
dropEmpties = isTop && !isSequence;
|
|
32845
|
+
firstGroup = false;
|
|
32846
|
+
}
|
|
32847
|
+
var values;
|
|
32848
|
+
if (isSequence) {
|
|
32849
|
+
values = expandSequence(m4.body, isAlphaSequence, max, maxLength);
|
|
32850
|
+
} else {
|
|
32851
|
+
var n2 = parseCommaParts(m4.body);
|
|
32852
|
+
if (n2.length === 1 && n2[0] !== undefined) {
|
|
32853
|
+
n2 = expand(n2[0], max, maxLength, false).map(embrace);
|
|
32854
|
+
if (n2.length === 1) {
|
|
32855
|
+
acc = combine(acc, pre + n2[0], [""], max, maxLength, dropEmpties && !m4.post.length);
|
|
32856
|
+
if (!m4.post.length)
|
|
32857
|
+
break;
|
|
32858
|
+
str = m4.post;
|
|
32859
|
+
continue;
|
|
32860
|
+
}
|
|
32861
|
+
}
|
|
32862
|
+
var dropsEmpties = dropEmpties && !m4.post.length && !pre;
|
|
32863
|
+
for (var d = 0;dropsEmpties && d < acc.length; d++) {
|
|
32864
|
+
if (acc[d]) {
|
|
32865
|
+
dropsEmpties = false;
|
|
32866
|
+
}
|
|
32867
|
+
}
|
|
32868
|
+
values = [];
|
|
32869
|
+
var valuesLength = 0;
|
|
32870
|
+
outer:
|
|
32871
|
+
for (var j2 = 0;j2 < n2.length; j2++) {
|
|
32872
|
+
var expanded = expand(n2[j2], max, maxLength, false);
|
|
32873
|
+
for (var k2 = 0;k2 < expanded.length; k2++) {
|
|
32874
|
+
var v2 = expanded[k2];
|
|
32875
|
+
if (dropsEmpties && !v2)
|
|
32876
|
+
continue;
|
|
32877
|
+
if (values.length >= max || valuesLength + v2.length > maxLength) {
|
|
32878
|
+
break outer;
|
|
32879
|
+
}
|
|
32880
|
+
values.push(v2);
|
|
32881
|
+
valuesLength += v2.length;
|
|
32882
|
+
}
|
|
32883
|
+
}
|
|
32884
|
+
}
|
|
32885
|
+
acc = combine(acc, pre, values, max, maxLength, dropEmpties && !m4.post.length);
|
|
32886
|
+
if (!m4.post.length)
|
|
32887
|
+
break;
|
|
32888
|
+
str = m4.post;
|
|
32889
|
+
}
|
|
32890
|
+
return acc;
|
|
32891
|
+
}
|
|
32892
|
+
});
|
|
32893
|
+
|
|
32894
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js
|
|
32630
32895
|
var require_assert_valid_pattern = __commonJS((exports) => {
|
|
32631
32896
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32632
32897
|
exports.assertValidPattern = undefined;
|
|
@@ -32642,7 +32907,7 @@ var require_assert_valid_pattern = __commonJS((exports) => {
|
|
|
32642
32907
|
exports.assertValidPattern = assertValidPattern;
|
|
32643
32908
|
});
|
|
32644
32909
|
|
|
32645
|
-
// node_modules/minimatch/dist/commonjs/brace-expressions.js
|
|
32910
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js
|
|
32646
32911
|
var require_brace_expressions = __commonJS((exports) => {
|
|
32647
32912
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32648
32913
|
exports.parseClass = undefined;
|
|
@@ -32757,7 +33022,7 @@ var require_brace_expressions = __commonJS((exports) => {
|
|
|
32757
33022
|
exports.parseClass = parseClass;
|
|
32758
33023
|
});
|
|
32759
33024
|
|
|
32760
|
-
// node_modules/minimatch/dist/commonjs/unescape.js
|
|
33025
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js
|
|
32761
33026
|
var require_unescape = __commonJS((exports) => {
|
|
32762
33027
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32763
33028
|
exports.unescape = undefined;
|
|
@@ -32767,7 +33032,7 @@ var require_unescape = __commonJS((exports) => {
|
|
|
32767
33032
|
exports.unescape = unescape;
|
|
32768
33033
|
});
|
|
32769
33034
|
|
|
32770
|
-
// node_modules/minimatch/dist/commonjs/ast.js
|
|
33035
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js
|
|
32771
33036
|
var require_ast = __commonJS((exports) => {
|
|
32772
33037
|
var _a3;
|
|
32773
33038
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -33304,7 +33569,7 @@ var require_ast = __commonJS((exports) => {
|
|
|
33304
33569
|
_a3 = AST;
|
|
33305
33570
|
});
|
|
33306
33571
|
|
|
33307
|
-
// node_modules/minimatch/dist/commonjs/escape.js
|
|
33572
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js
|
|
33308
33573
|
var require_escape = __commonJS((exports) => {
|
|
33309
33574
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33310
33575
|
exports.escape = undefined;
|
|
@@ -33314,14 +33579,14 @@ var require_escape = __commonJS((exports) => {
|
|
|
33314
33579
|
exports.escape = escape;
|
|
33315
33580
|
});
|
|
33316
33581
|
|
|
33317
|
-
// node_modules/minimatch/dist/commonjs/index.js
|
|
33582
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js
|
|
33318
33583
|
var require_commonjs = __commonJS((exports) => {
|
|
33319
33584
|
var __importDefault = exports && exports.__importDefault || function(mod) {
|
|
33320
33585
|
return mod && mod.__esModule ? mod : { default: mod };
|
|
33321
33586
|
};
|
|
33322
33587
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33323
33588
|
exports.unescape = exports.escape = exports.AST = exports.Minimatch = exports.match = exports.makeRe = exports.braceExpand = exports.defaults = exports.filter = exports.GLOBSTAR = exports.sep = exports.minimatch = undefined;
|
|
33324
|
-
var brace_expansion_1 = __importDefault(
|
|
33589
|
+
var brace_expansion_1 = __importDefault(require_brace_expansion2());
|
|
33325
33590
|
var assert_valid_pattern_js_1 = require_assert_valid_pattern();
|
|
33326
33591
|
var ast_js_1 = require_ast();
|
|
33327
33592
|
var escape_js_1 = require_escape();
|
|
@@ -34094,7 +34359,7 @@ var require_commonjs = __commonJS((exports) => {
|
|
|
34094
34359
|
exports.minimatch.unescape = unescape_js_1.unescape;
|
|
34095
34360
|
});
|
|
34096
34361
|
|
|
34097
|
-
// node_modules/lru-cache/dist/commonjs/index.js
|
|
34362
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js
|
|
34098
34363
|
var require_commonjs2 = __commonJS((exports) => {
|
|
34099
34364
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34100
34365
|
exports.LRUCache = undefined;
|
|
@@ -35883,7 +36148,7 @@ var require_commonjs3 = __commonJS((exports) => {
|
|
|
35883
36148
|
exports.Minipass = Minipass;
|
|
35884
36149
|
});
|
|
35885
36150
|
|
|
35886
|
-
// node_modules/path-scurry/dist/commonjs/index.js
|
|
36151
|
+
// node_modules/archiver-utils/node_modules/glob/node_modules/path-scurry/dist/commonjs/index.js
|
|
35887
36152
|
var require_commonjs4 = __commonJS((exports) => {
|
|
35888
36153
|
var __createBinding = exports && exports.__createBinding || (Object.create ? function(o2, m4, k2, k22) {
|
|
35889
36154
|
if (k22 === undefined)
|
|
@@ -37233,7 +37498,7 @@ var require_commonjs4 = __commonJS((exports) => {
|
|
|
37233
37498
|
exports.PathScurry = process.platform === "win32" ? PathScurryWin32 : process.platform === "darwin" ? PathScurryDarwin : PathScurryPosix;
|
|
37234
37499
|
});
|
|
37235
37500
|
|
|
37236
|
-
// node_modules/glob/dist/commonjs/pattern.js
|
|
37501
|
+
// node_modules/archiver-utils/node_modules/glob/dist/commonjs/pattern.js
|
|
37237
37502
|
var require_pattern = __commonJS((exports) => {
|
|
37238
37503
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37239
37504
|
exports.Pattern = undefined;
|
|
@@ -37357,7 +37622,7 @@ var require_pattern = __commonJS((exports) => {
|
|
|
37357
37622
|
exports.Pattern = Pattern;
|
|
37358
37623
|
});
|
|
37359
37624
|
|
|
37360
|
-
// node_modules/glob/dist/commonjs/ignore.js
|
|
37625
|
+
// node_modules/archiver-utils/node_modules/glob/dist/commonjs/ignore.js
|
|
37361
37626
|
var require_ignore = __commonJS((exports) => {
|
|
37362
37627
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37363
37628
|
exports.Ignore = undefined;
|
|
@@ -37452,7 +37717,7 @@ var require_ignore = __commonJS((exports) => {
|
|
|
37452
37717
|
exports.Ignore = Ignore;
|
|
37453
37718
|
});
|
|
37454
37719
|
|
|
37455
|
-
// node_modules/glob/dist/commonjs/processor.js
|
|
37720
|
+
// node_modules/archiver-utils/node_modules/glob/dist/commonjs/processor.js
|
|
37456
37721
|
var require_processor = __commonJS((exports) => {
|
|
37457
37722
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37458
37723
|
exports.Processor = exports.SubWalks = exports.MatchRecord = exports.HasWalkedCache = undefined;
|
|
@@ -37680,7 +37945,7 @@ var require_processor = __commonJS((exports) => {
|
|
|
37680
37945
|
exports.Processor = Processor;
|
|
37681
37946
|
});
|
|
37682
37947
|
|
|
37683
|
-
// node_modules/glob/dist/commonjs/walker.js
|
|
37948
|
+
// node_modules/archiver-utils/node_modules/glob/dist/commonjs/walker.js
|
|
37684
37949
|
var require_walker = __commonJS((exports) => {
|
|
37685
37950
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37686
37951
|
exports.GlobStream = exports.GlobWalker = exports.GlobUtil = undefined;
|
|
@@ -38017,7 +38282,7 @@ var require_walker = __commonJS((exports) => {
|
|
|
38017
38282
|
exports.GlobStream = GlobStream;
|
|
38018
38283
|
});
|
|
38019
38284
|
|
|
38020
|
-
// node_modules/glob/dist/commonjs/glob.js
|
|
38285
|
+
// node_modules/archiver-utils/node_modules/glob/dist/commonjs/glob.js
|
|
38021
38286
|
var require_glob = __commonJS((exports) => {
|
|
38022
38287
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38023
38288
|
exports.Glob = undefined;
|
|
@@ -38201,7 +38466,7 @@ var require_glob = __commonJS((exports) => {
|
|
|
38201
38466
|
exports.Glob = Glob;
|
|
38202
38467
|
});
|
|
38203
38468
|
|
|
38204
|
-
// node_modules/glob/dist/commonjs/has-magic.js
|
|
38469
|
+
// node_modules/archiver-utils/node_modules/glob/dist/commonjs/has-magic.js
|
|
38205
38470
|
var require_has_magic = __commonJS((exports) => {
|
|
38206
38471
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38207
38472
|
exports.hasMagic = undefined;
|
|
@@ -38219,7 +38484,7 @@ var require_has_magic = __commonJS((exports) => {
|
|
|
38219
38484
|
exports.hasMagic = hasMagic;
|
|
38220
38485
|
});
|
|
38221
38486
|
|
|
38222
|
-
// node_modules/glob/dist/commonjs/index.js
|
|
38487
|
+
// node_modules/archiver-utils/node_modules/glob/dist/commonjs/index.js
|
|
38223
38488
|
var require_commonjs5 = __commonJS((exports) => {
|
|
38224
38489
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38225
38490
|
exports.glob = exports.sync = exports.iterate = exports.iterateSync = exports.stream = exports.streamSync = exports.Ignore = exports.hasMagic = exports.Glob = exports.unescape = exports.escape = undefined;
|
|
@@ -60371,7 +60636,7 @@ var init_build3 = __esm(() => {
|
|
|
60371
60636
|
];
|
|
60372
60637
|
});
|
|
60373
60638
|
|
|
60374
|
-
// node_modules/ws/lib/stream.js
|
|
60639
|
+
// node_modules/webdriver/node_modules/ws/lib/stream.js
|
|
60375
60640
|
var require_stream5 = __commonJS((exports, module) => {
|
|
60376
60641
|
var { Duplex } = __require("stream");
|
|
60377
60642
|
function emitClose(stream) {
|
|
@@ -60473,7 +60738,7 @@ var require_stream5 = __commonJS((exports, module) => {
|
|
|
60473
60738
|
module.exports = createWebSocketStream;
|
|
60474
60739
|
});
|
|
60475
60740
|
|
|
60476
|
-
// node_modules/ws/lib/constants.js
|
|
60741
|
+
// node_modules/webdriver/node_modules/ws/lib/constants.js
|
|
60477
60742
|
var require_constants6 = __commonJS((exports, module) => {
|
|
60478
60743
|
var BINARY_TYPES = ["nodebuffer", "arraybuffer", "fragments"];
|
|
60479
60744
|
var hasBlob = typeof Blob !== "undefined";
|
|
@@ -60492,7 +60757,7 @@ var require_constants6 = __commonJS((exports, module) => {
|
|
|
60492
60757
|
};
|
|
60493
60758
|
});
|
|
60494
60759
|
|
|
60495
|
-
// node_modules/ws/lib/buffer-util.js
|
|
60760
|
+
// node_modules/webdriver/node_modules/ws/lib/buffer-util.js
|
|
60496
60761
|
var require_buffer_util = __commonJS((exports, module) => {
|
|
60497
60762
|
var { EMPTY_BUFFER } = require_constants6();
|
|
60498
60763
|
var FastBuffer = Buffer[Symbol.species];
|
|
@@ -60570,7 +60835,7 @@ var require_buffer_util = __commonJS((exports, module) => {
|
|
|
60570
60835
|
}
|
|
60571
60836
|
});
|
|
60572
60837
|
|
|
60573
|
-
// node_modules/ws/lib/limiter.js
|
|
60838
|
+
// node_modules/webdriver/node_modules/ws/lib/limiter.js
|
|
60574
60839
|
var require_limiter = __commonJS((exports, module) => {
|
|
60575
60840
|
var kDone = Symbol("kDone");
|
|
60576
60841
|
var kRun = Symbol("kRun");
|
|
@@ -60602,7 +60867,7 @@ var require_limiter = __commonJS((exports, module) => {
|
|
|
60602
60867
|
module.exports = Limiter;
|
|
60603
60868
|
});
|
|
60604
60869
|
|
|
60605
|
-
// node_modules/ws/lib/permessage-deflate.js
|
|
60870
|
+
// node_modules/webdriver/node_modules/ws/lib/permessage-deflate.js
|
|
60606
60871
|
var require_permessage_deflate = __commonJS((exports, module) => {
|
|
60607
60872
|
var zlib = __require("zlib");
|
|
60608
60873
|
var bufferUtil = require_buffer_util();
|
|
@@ -60862,7 +61127,7 @@ var require_permessage_deflate = __commonJS((exports, module) => {
|
|
|
60862
61127
|
}
|
|
60863
61128
|
});
|
|
60864
61129
|
|
|
60865
|
-
// node_modules/ws/lib/validation.js
|
|
61130
|
+
// node_modules/webdriver/node_modules/ws/lib/validation.js
|
|
60866
61131
|
var require_validation = __commonJS((exports, module) => {
|
|
60867
61132
|
var { isUtf8 } = __require("buffer");
|
|
60868
61133
|
var { hasBlob } = require_constants6();
|
|
@@ -61049,7 +61314,7 @@ var require_validation = __commonJS((exports, module) => {
|
|
|
61049
61314
|
}
|
|
61050
61315
|
});
|
|
61051
61316
|
|
|
61052
|
-
// node_modules/ws/lib/receiver.js
|
|
61317
|
+
// node_modules/webdriver/node_modules/ws/lib/receiver.js
|
|
61053
61318
|
var require_receiver = __commonJS((exports, module) => {
|
|
61054
61319
|
var { Writable } = __require("stream");
|
|
61055
61320
|
var PerMessageDeflate = require_permessage_deflate();
|
|
@@ -61430,7 +61695,7 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
61430
61695
|
module.exports = Receiver;
|
|
61431
61696
|
});
|
|
61432
61697
|
|
|
61433
|
-
// node_modules/ws/lib/sender.js
|
|
61698
|
+
// node_modules/webdriver/node_modules/ws/lib/sender.js
|
|
61434
61699
|
var require_sender = __commonJS((exports, module) => {
|
|
61435
61700
|
var { Duplex } = __require("stream");
|
|
61436
61701
|
var { randomFillSync } = __require("crypto");
|
|
@@ -61784,7 +62049,7 @@ var require_sender = __commonJS((exports, module) => {
|
|
|
61784
62049
|
}
|
|
61785
62050
|
});
|
|
61786
62051
|
|
|
61787
|
-
// node_modules/ws/lib/event-target.js
|
|
62052
|
+
// node_modules/webdriver/node_modules/ws/lib/event-target.js
|
|
61788
62053
|
var require_event_target = __commonJS((exports, module) => {
|
|
61789
62054
|
var { kForOnEventAttribute, kListener } = require_constants6();
|
|
61790
62055
|
var kCode = Symbol("kCode");
|
|
@@ -61935,7 +62200,7 @@ var require_event_target = __commonJS((exports, module) => {
|
|
|
61935
62200
|
}
|
|
61936
62201
|
});
|
|
61937
62202
|
|
|
61938
|
-
// node_modules/ws/lib/extension.js
|
|
62203
|
+
// node_modules/webdriver/node_modules/ws/lib/extension.js
|
|
61939
62204
|
var require_extension = __commonJS((exports, module) => {
|
|
61940
62205
|
var { tokenChars } = require_validation();
|
|
61941
62206
|
function push(dest, name, elem) {
|
|
@@ -62100,7 +62365,7 @@ var require_extension = __commonJS((exports, module) => {
|
|
|
62100
62365
|
module.exports = { format, parse: parse6 };
|
|
62101
62366
|
});
|
|
62102
62367
|
|
|
62103
|
-
// node_modules/ws/lib/websocket.js
|
|
62368
|
+
// node_modules/webdriver/node_modules/ws/lib/websocket.js
|
|
62104
62369
|
var require_websocket = __commonJS((exports, module) => {
|
|
62105
62370
|
var EventEmitter = __require("events");
|
|
62106
62371
|
var https = __require("https");
|
|
@@ -62859,7 +63124,7 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
62859
63124
|
}
|
|
62860
63125
|
});
|
|
62861
63126
|
|
|
62862
|
-
// node_modules/ws/lib/subprotocol.js
|
|
63127
|
+
// node_modules/webdriver/node_modules/ws/lib/subprotocol.js
|
|
62863
63128
|
var require_subprotocol = __commonJS((exports, module) => {
|
|
62864
63129
|
var { tokenChars } = require_validation();
|
|
62865
63130
|
function parse6(header) {
|
|
@@ -62904,7 +63169,7 @@ var require_subprotocol = __commonJS((exports, module) => {
|
|
|
62904
63169
|
module.exports = { parse: parse6 };
|
|
62905
63170
|
});
|
|
62906
63171
|
|
|
62907
|
-
// node_modules/ws/lib/websocket-server.js
|
|
63172
|
+
// node_modules/webdriver/node_modules/ws/lib/websocket-server.js
|
|
62908
63173
|
var require_websocket_server = __commonJS((exports, module) => {
|
|
62909
63174
|
var EventEmitter = __require("events");
|
|
62910
63175
|
var http = __require("http");
|
|
@@ -63203,7 +63468,7 @@ var require_websocket_server = __commonJS((exports, module) => {
|
|
|
63203
63468
|
}
|
|
63204
63469
|
});
|
|
63205
63470
|
|
|
63206
|
-
// node_modules/ws/wrapper.mjs
|
|
63471
|
+
// node_modules/webdriver/node_modules/ws/wrapper.mjs
|
|
63207
63472
|
var import_stream, import_receiver, import_sender, import_websocket, import_websocket_server, wrapper_default;
|
|
63208
63473
|
var init_wrapper = __esm(() => {
|
|
63209
63474
|
import_stream = __toESM(require_stream5(), 1);
|
|
@@ -87563,21 +87828,19 @@ var require_supports_color = __commonJS((exports, module) => {
|
|
|
87563
87828
|
var tty2 = __require("tty");
|
|
87564
87829
|
var hasFlag2 = require_has_flag();
|
|
87565
87830
|
var { env: env3 } = process;
|
|
87566
|
-
var
|
|
87831
|
+
var forceColor;
|
|
87567
87832
|
if (hasFlag2("no-color") || hasFlag2("no-colors") || hasFlag2("color=false") || hasFlag2("color=never")) {
|
|
87568
|
-
|
|
87833
|
+
forceColor = 0;
|
|
87569
87834
|
} else if (hasFlag2("color") || hasFlag2("colors") || hasFlag2("color=true") || hasFlag2("color=always")) {
|
|
87570
|
-
|
|
87835
|
+
forceColor = 1;
|
|
87571
87836
|
}
|
|
87572
|
-
|
|
87573
|
-
if (
|
|
87574
|
-
|
|
87575
|
-
|
|
87576
|
-
|
|
87577
|
-
|
|
87578
|
-
|
|
87579
|
-
}
|
|
87580
|
-
return env3.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env3.FORCE_COLOR, 10), 3);
|
|
87837
|
+
if ("FORCE_COLOR" in env3) {
|
|
87838
|
+
if (env3.FORCE_COLOR === "true") {
|
|
87839
|
+
forceColor = 1;
|
|
87840
|
+
} else if (env3.FORCE_COLOR === "false") {
|
|
87841
|
+
forceColor = 0;
|
|
87842
|
+
} else {
|
|
87843
|
+
forceColor = env3.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env3.FORCE_COLOR, 10), 3);
|
|
87581
87844
|
}
|
|
87582
87845
|
}
|
|
87583
87846
|
function translateLevel2(level) {
|
|
@@ -87591,22 +87854,15 @@ var require_supports_color = __commonJS((exports, module) => {
|
|
|
87591
87854
|
has16m: level >= 3
|
|
87592
87855
|
};
|
|
87593
87856
|
}
|
|
87594
|
-
function supportsColor2(haveStream,
|
|
87595
|
-
const noFlagForceColor = envForceColor2();
|
|
87596
|
-
if (noFlagForceColor !== undefined) {
|
|
87597
|
-
flagForceColor2 = noFlagForceColor;
|
|
87598
|
-
}
|
|
87599
|
-
const forceColor = sniffFlags ? flagForceColor2 : noFlagForceColor;
|
|
87857
|
+
function supportsColor2(haveStream, streamIsTTY) {
|
|
87600
87858
|
if (forceColor === 0) {
|
|
87601
87859
|
return 0;
|
|
87602
87860
|
}
|
|
87603
|
-
if (
|
|
87604
|
-
|
|
87605
|
-
|
|
87606
|
-
|
|
87607
|
-
|
|
87608
|
-
return 2;
|
|
87609
|
-
}
|
|
87861
|
+
if (hasFlag2("color=16m") || hasFlag2("color=full") || hasFlag2("color=truecolor")) {
|
|
87862
|
+
return 3;
|
|
87863
|
+
}
|
|
87864
|
+
if (hasFlag2("color=256")) {
|
|
87865
|
+
return 2;
|
|
87610
87866
|
}
|
|
87611
87867
|
if (haveStream && !streamIsTTY && forceColor === undefined) {
|
|
87612
87868
|
return 0;
|
|
@@ -87623,7 +87879,7 @@ var require_supports_color = __commonJS((exports, module) => {
|
|
|
87623
87879
|
return 1;
|
|
87624
87880
|
}
|
|
87625
87881
|
if ("CI" in env3) {
|
|
87626
|
-
if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"
|
|
87882
|
+
if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"].some((sign) => (sign in env3)) || env3.CI_NAME === "codeship") {
|
|
87627
87883
|
return 1;
|
|
87628
87884
|
}
|
|
87629
87885
|
return min;
|
|
@@ -87635,7 +87891,7 @@ var require_supports_color = __commonJS((exports, module) => {
|
|
|
87635
87891
|
return 3;
|
|
87636
87892
|
}
|
|
87637
87893
|
if ("TERM_PROGRAM" in env3) {
|
|
87638
|
-
const version2 =
|
|
87894
|
+
const version2 = parseInt((env3.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
|
|
87639
87895
|
switch (env3.TERM_PROGRAM) {
|
|
87640
87896
|
case "iTerm.app":
|
|
87641
87897
|
return version2 >= 3 ? 3 : 2;
|
|
@@ -87654,17 +87910,14 @@ var require_supports_color = __commonJS((exports, module) => {
|
|
|
87654
87910
|
}
|
|
87655
87911
|
return min;
|
|
87656
87912
|
}
|
|
87657
|
-
function getSupportLevel(stream
|
|
87658
|
-
const level = supportsColor2(stream,
|
|
87659
|
-
streamIsTTY: stream && stream.isTTY,
|
|
87660
|
-
...options
|
|
87661
|
-
});
|
|
87913
|
+
function getSupportLevel(stream) {
|
|
87914
|
+
const level = supportsColor2(stream, stream && stream.isTTY);
|
|
87662
87915
|
return translateLevel2(level);
|
|
87663
87916
|
}
|
|
87664
87917
|
module.exports = {
|
|
87665
87918
|
supportsColor: getSupportLevel,
|
|
87666
|
-
stdout:
|
|
87667
|
-
stderr:
|
|
87919
|
+
stdout: translateLevel2(supportsColor2(true, tty2.isatty(1))),
|
|
87920
|
+
stderr: translateLevel2(supportsColor2(true, tty2.isatty(2)))
|
|
87668
87921
|
};
|
|
87669
87922
|
});
|
|
87670
87923
|
|
|
@@ -134457,7 +134710,7 @@ var require_snapshot_utils = __commonJS((exports, module) => {
|
|
|
134457
134710
|
// node_modules/undici/lib/mock/snapshot-recorder.js
|
|
134458
134711
|
var require_snapshot_recorder = __commonJS((exports, module) => {
|
|
134459
134712
|
var { writeFile, readFile, mkdir } = __require("node:fs/promises");
|
|
134460
|
-
var { dirname:
|
|
134713
|
+
var { dirname: dirname12, resolve: resolve10 } = __require("node:path");
|
|
134461
134714
|
var { setTimeout: setTimeout3, clearTimeout: clearTimeout2 } = __require("node:timers");
|
|
134462
134715
|
var { InvalidArgumentError: InvalidArgumentError3, UndiciError } = require_errors7();
|
|
134463
134716
|
var { hashId, isUrlExcludedFactory, normalizeHeaders, createHeaderFilters } = require_snapshot_utils();
|
|
@@ -134652,7 +134905,7 @@ var require_snapshot_recorder = __commonJS((exports, module) => {
|
|
|
134652
134905
|
throw new InvalidArgumentError3("Snapshot path is required");
|
|
134653
134906
|
}
|
|
134654
134907
|
const resolvedPath = resolve10(path4);
|
|
134655
|
-
await mkdir(
|
|
134908
|
+
await mkdir(dirname12(resolvedPath), { recursive: true });
|
|
134656
134909
|
const data2 = Array.from(this.#snapshots.entries()).map(([hash2, snapshot]) => ({
|
|
134657
134910
|
hash: hash2,
|
|
134658
134911
|
snapshot
|
|
@@ -156448,6 +156701,12 @@ var interactiveRunnerMessages = {
|
|
|
156448
156701
|
targetMismatch: (runnerName, requiredRunnerName) => `This flow needs a ${requiredRunnerName} runner and ${runnerName} is running. Launch one with --name ${requiredRunnerName}.`
|
|
156449
156702
|
};
|
|
156450
156703
|
// src/core/messages/runner.ts
|
|
156704
|
+
var maxListedNames = 5;
|
|
156705
|
+
function listNames(names) {
|
|
156706
|
+
const shown = names.slice(0, maxListedNames).join(", ");
|
|
156707
|
+
const rest = names.length - maxListedNames;
|
|
156708
|
+
return rest > 0 ? `${shown} and ${rest} more` : shown;
|
|
156709
|
+
}
|
|
156451
156710
|
var runnerMessages = {
|
|
156452
156711
|
playwrightLoadFailed: (envDir, detail) => packageLoadFailed("Playwright", envDir, detail),
|
|
156453
156712
|
androidWorkersUnsupported: "Android flows are not yet supported with --workers > 1; rerun Android flows with --workers 1.",
|
|
@@ -156477,6 +156736,12 @@ ${dir}`,
|
|
|
156477
156736
|
].join(`
|
|
156478
156737
|
`),
|
|
156479
156738
|
outerHopCandidateRejected: (dir, missing) => `outer-hop candidate rejected: ${dir} missing ${missing.join(", ")}`,
|
|
156739
|
+
outerHopFallbackNotice: (dir, missing) => [
|
|
156740
|
+
`Not reusing ${dir} — it is missing ${listNames(missing)}.`,
|
|
156741
|
+
`Installing the declared dependencies instead. Run 'npm install' there to reuse it.`
|
|
156742
|
+
].join(`
|
|
156743
|
+
`),
|
|
156744
|
+
outerHopCarriedOver: (names) => `Carried over ${pluralize(names.length, "undeclared package")} from the project node_modules: ${listNames(names)}. Declare them in package.json "dependencies".`,
|
|
156480
156745
|
moduleNotFoundHint: (pkg, projectDir) => projectDir === undefined ? `Hint: '${pkg}' could not be resolved. Run from within your flows project so its dependencies can be found.` : `Hint: '${pkg}' could not be resolved. Ensure it is declared in ${projectDir}/package.json "dependencies" and run npm install in that project.`
|
|
156481
156746
|
};
|
|
156482
156747
|
// src/core/messages/updateCheck.ts
|
|
@@ -172626,7 +172891,7 @@ var screenNotReadyDescription = "`screen-not-ready` if the runner has a screen t
|
|
|
172626
172891
|
var runnerScreenNeedsARunSchema = exports_external.object({
|
|
172627
172892
|
outcome: exports_external.literal("screen-needs-a-run")
|
|
172628
172893
|
});
|
|
172629
|
-
var screenNeedsARunDescription = "`screen-needs-a-run` if the runner
|
|
172894
|
+
var screenNeedsARunDescription = "`screen-needs-a-run` if the runner's virtual desktop has never started. Waiting will not change this and retrying is pointless — call `runner.runFlow` with a flow that opens a browser, then ask for the screen again. On a runner image with a browser that has never run anything, any `runner.performAction` also starts the browser itself. Evaluating a snippet does not start the desktop.";
|
|
172630
172895
|
var runnerHasNoScreenSchema = exports_external.object({
|
|
172631
172896
|
outcome: exports_external.literal("runner-has-no-screen")
|
|
172632
172897
|
});
|
|
@@ -172658,7 +172923,7 @@ var makePerformActionOnRunnerContract = () => {
|
|
|
172658
172923
|
runnerUnreachableSchema
|
|
172659
172924
|
]);
|
|
172660
172925
|
return {
|
|
172661
|
-
description: `Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as \`runner.takeScreenshot\`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus \`screenshot\` (use \`runner.takeScreenshot\`) and \`wait\` (delay on the caller's side). \`performed\` if the action took effect. \`action-failed\`, with a reason, if it reached the runner and did not take effect.
|
|
172926
|
+
description: `Perform one raw browser action on an interactive runner: click, double_click, move, drag, scroll, keypress, type, or navigate. Coordinates are whole pixels on the runner's virtual desktop, in the same space as \`runner.takeScreenshot\`. One action per request, and the runner serves one at a time. The action shapes follow the computer-use vocabulary, minus \`screenshot\` (use \`runner.takeScreenshot\`) and \`wait\` (delay on the caller's side). \`performed\` if the action took effect. \`action-failed\`, with a reason, if it reached the runner and did not take effect. On a runner image with a browser, the first action on a runner that has never run anything starts its browser and waits for it, so it can take up to a minute to answer — no \`runner.runFlow\` is needed before acting; if the browser is still starting when the wait runs out, the answer is \`screen-not-ready\` and retrying converges. \`screen-needs-a-run\` if the browser could not be started that way — usually a runner whose runs all finished without starting its desktop; call \`runner.runFlow\` with a flow that opens a browser. ${screenNotReadyDescription} A \`navigate\` does not go through the screen, so a screen that is not ready does not stop it. ${runnerHasNoScreenDescription} ${unreachableDescription}`,
|
|
172662
172927
|
input,
|
|
172663
172928
|
kind: "write",
|
|
172664
172929
|
name: "runner.performAction",
|
|
@@ -172967,6 +173232,7 @@ var issueStatusSchema = exports_external.enum([
|
|
|
172967
173232
|
var publicIssueTypeSchema = exports_external.enum(["bug", "coverageRequest", "maintenance"]);
|
|
172968
173233
|
var openIssueStatuses = ["pending", "inProgress", "paused"];
|
|
172969
173234
|
var makeIssueResourceSchema = (ids) => resource({
|
|
173235
|
+
coveredFlowIds: exports_external.array(ids.flow).describe("The flows a coverage request covers. Always empty on bug and maintenance reports, whose flows are listed under reproductions."),
|
|
172970
173236
|
createdAt: exports_external.coerce.date().describe("When the issue was created."),
|
|
172971
173237
|
description: exports_external.string().describe("The issue description in Markdown."),
|
|
172972
173238
|
issueId: ids.issue,
|
|
@@ -173018,6 +173284,24 @@ var makeGetIssueContract = (ids) => {
|
|
|
173018
173284
|
};
|
|
173019
173285
|
};
|
|
173020
173286
|
|
|
173287
|
+
// node_modules/@qawolf/api-contracts/dist/v1/issue/addFlows.js
|
|
173288
|
+
var makeAddFlowsToIssueContract = (ids) => {
|
|
173289
|
+
const input = exports_external.object({
|
|
173290
|
+
flowIds: exports_external.array(ids.flow).min(1).max(300).refine((flowIds) => new Set(flowIds).size === flowIds.length, "flowIds must be unique").describe("The flows the coverage request covers."),
|
|
173291
|
+
issueId: ids.issue
|
|
173292
|
+
});
|
|
173293
|
+
const output = exports_external.object({
|
|
173294
|
+
issue: makeIssueResourceSchema(ids)
|
|
173295
|
+
});
|
|
173296
|
+
return {
|
|
173297
|
+
description: "Add flows to a coverage request owned by the caller's team. " + "Flows already covered stay covered. " + "Bug and maintenance reports link to flows through the runs that reproduce them, so their flows cannot be set directly.",
|
|
173298
|
+
input,
|
|
173299
|
+
kind: "write",
|
|
173300
|
+
name: "issue.addFlows",
|
|
173301
|
+
output
|
|
173302
|
+
};
|
|
173303
|
+
};
|
|
173304
|
+
|
|
173021
173305
|
// node_modules/@qawolf/api-contracts/dist/v1/issue/create.js
|
|
173022
173306
|
var makeCreateIssueContract = (ids) => {
|
|
173023
173307
|
const commonFields = {
|
|
@@ -173370,6 +173654,7 @@ var makeContractsV1 = (ids) => {
|
|
|
173370
173654
|
update: makeUpdateFlowContract(resolvedIds)
|
|
173371
173655
|
},
|
|
173372
173656
|
issue: {
|
|
173657
|
+
addFlows: makeAddFlowsToIssueContract(resolvedIds),
|
|
173373
173658
|
create: makeCreateIssueContract(resolvedIds),
|
|
173374
173659
|
find: makeFindIssuesContract(resolvedIds),
|
|
173375
173660
|
get: makeGetIssueContract(resolvedIds),
|
|
@@ -175911,7 +176196,7 @@ function startUpdateCheck(deps) {
|
|
|
175911
176196
|
// package.json
|
|
175912
176197
|
var package_default = {
|
|
175913
176198
|
name: "@qawolf/cli",
|
|
175914
|
-
version: "1.
|
|
176199
|
+
version: "1.12.0",
|
|
175915
176200
|
description: "Run and manage QA Wolf flows from the terminal, CI, or an AI agent",
|
|
175916
176201
|
keywords: [
|
|
175917
176202
|
"automation",
|
|
@@ -175971,15 +176256,13 @@ var package_default = {
|
|
|
175971
176256
|
"@clack/prompts": "1.5.1",
|
|
175972
176257
|
"@napi-rs/keyring": "1.3.0",
|
|
175973
176258
|
"@oxc-node/core": "0.1.0",
|
|
175974
|
-
"@qawolf/api-contracts": "0.
|
|
176259
|
+
"@qawolf/api-contracts": "0.26.0",
|
|
175975
176260
|
"@qawolf/emails": "1.1.1",
|
|
175976
176261
|
"@qawolf/flow-targets": "1.0.0",
|
|
175977
176262
|
"@qawolf/flows": "0.1.4",
|
|
175978
176263
|
"@qawolf/testkit": "1.1.1",
|
|
175979
|
-
appium: "2.11.3",
|
|
175980
176264
|
commander: "14.0.3",
|
|
175981
176265
|
"env-paths": "4.0.0",
|
|
175982
|
-
"expect-webdriverio": "5.6.5",
|
|
175983
176266
|
picomatch: "4.0.4",
|
|
175984
176267
|
pino: "10.3.1",
|
|
175985
176268
|
playwright: "1.62.0",
|
|
@@ -175995,7 +176278,9 @@ var package_default = {
|
|
|
175995
176278
|
"@tsconfig/strictest": "2.0.8",
|
|
175996
176279
|
"@types/bun": "1.3.14",
|
|
175997
176280
|
"@types/picomatch": "4.0.3",
|
|
175998
|
-
|
|
176281
|
+
appium: "3.6.0",
|
|
176282
|
+
"appium-uiautomator2-driver": "8.4.0",
|
|
176283
|
+
"expect-webdriverio": "5.6.5",
|
|
175999
176284
|
knip: "6.16.1",
|
|
176000
176285
|
oxfmt: "0.54.0",
|
|
176001
176286
|
oxlint: "1.69.0",
|
|
@@ -176720,8 +177005,8 @@ var flowsVersion = "0.1.4";
|
|
|
176720
177005
|
var playwrightVersion = "1.62.0";
|
|
176721
177006
|
var emailsVersion = "1.1.1";
|
|
176722
177007
|
var testkitVersion = "1.1.1";
|
|
176723
|
-
var appiumVersion = "
|
|
176724
|
-
var appiumUiautomator2DriverVersion = "4.
|
|
177008
|
+
var appiumVersion = "3.6.0";
|
|
177009
|
+
var appiumUiautomator2DriverVersion = "8.4.0";
|
|
176725
177010
|
var expectWebdriverioVersion = "5.6.5";
|
|
176726
177011
|
|
|
176727
177012
|
// src/domains/doctor/checks/playwright.ts
|
|
@@ -177713,6 +177998,109 @@ async function glob(globInput, options) {
|
|
|
177713
177998
|
// src/core/flowMeta.ts
|
|
177714
177999
|
import { getWebBrowserInfo, parseExecutionTarget as parseExecutionTarget2 } from "@qawolf/flow-targets";
|
|
177715
178000
|
import { basename as basename2 } from "node:path";
|
|
178001
|
+
|
|
178002
|
+
// src/core/stringLiteral.ts
|
|
178003
|
+
var lineTerminator = /[\n\r\u2028\u2029]/;
|
|
178004
|
+
function readStringLiteral(source, start) {
|
|
178005
|
+
const quote = source.charAt(start);
|
|
178006
|
+
if (quote !== '"' && quote !== "'" && quote !== "`")
|
|
178007
|
+
return;
|
|
178008
|
+
let value = "";
|
|
178009
|
+
let i2 = start + 1;
|
|
178010
|
+
while (i2 < source.length) {
|
|
178011
|
+
const char = source.charAt(i2);
|
|
178012
|
+
if (char === "\\") {
|
|
178013
|
+
const escaped = source.charAt(i2 + 1);
|
|
178014
|
+
if (lineTerminator.test(escaped)) {
|
|
178015
|
+
const crlf = escaped === "\r" && source.charAt(i2 + 2) === `
|
|
178016
|
+
`;
|
|
178017
|
+
i2 += crlf ? 3 : 2;
|
|
178018
|
+
continue;
|
|
178019
|
+
}
|
|
178020
|
+
value += escaped;
|
|
178021
|
+
i2 += 2;
|
|
178022
|
+
continue;
|
|
178023
|
+
}
|
|
178024
|
+
if (char === quote)
|
|
178025
|
+
return { value, end: i2 };
|
|
178026
|
+
if (quote === "`") {
|
|
178027
|
+
if (char === "$" && source.charAt(i2 + 1) === "{")
|
|
178028
|
+
return;
|
|
178029
|
+
} else if (char === `
|
|
178030
|
+
` || char === "\r") {
|
|
178031
|
+
return;
|
|
178032
|
+
}
|
|
178033
|
+
value += char;
|
|
178034
|
+
i2++;
|
|
178035
|
+
}
|
|
178036
|
+
return;
|
|
178037
|
+
}
|
|
178038
|
+
|
|
178039
|
+
// src/core/flowCall.ts
|
|
178040
|
+
var flowCallRe = /(?<![#$\p{ID_Continue}])flow\s*\(\s*/gu;
|
|
178041
|
+
var argSeparatorRe = /\s*,\s*/y;
|
|
178042
|
+
var keyValueRe = /\s*:\s*/y;
|
|
178043
|
+
var wordChar = /\w/;
|
|
178044
|
+
function readTargetFromObject(source, start) {
|
|
178045
|
+
let depth = 0;
|
|
178046
|
+
let i2 = start;
|
|
178047
|
+
while (i2 < source.length) {
|
|
178048
|
+
const char = source.charAt(i2);
|
|
178049
|
+
if (char === "{") {
|
|
178050
|
+
depth++;
|
|
178051
|
+
i2++;
|
|
178052
|
+
continue;
|
|
178053
|
+
}
|
|
178054
|
+
if (char === "}") {
|
|
178055
|
+
depth--;
|
|
178056
|
+
if (depth === 0)
|
|
178057
|
+
return;
|
|
178058
|
+
i2++;
|
|
178059
|
+
continue;
|
|
178060
|
+
}
|
|
178061
|
+
const literal2 = readStringLiteral(source, i2);
|
|
178062
|
+
if (literal2) {
|
|
178063
|
+
i2 = literal2.end + 1;
|
|
178064
|
+
continue;
|
|
178065
|
+
}
|
|
178066
|
+
if (depth === 1 && source.startsWith("target", i2) && !wordChar.test(source.charAt(i2 - 1))) {
|
|
178067
|
+
keyValueRe.lastIndex = i2 + "target".length;
|
|
178068
|
+
if (keyValueRe.test(source)) {
|
|
178069
|
+
return readStringLiteral(source, keyValueRe.lastIndex)?.value;
|
|
178070
|
+
}
|
|
178071
|
+
}
|
|
178072
|
+
i2++;
|
|
178073
|
+
}
|
|
178074
|
+
return;
|
|
178075
|
+
}
|
|
178076
|
+
function readTarget(source, afterName) {
|
|
178077
|
+
argSeparatorRe.lastIndex = afterName;
|
|
178078
|
+
if (!argSeparatorRe.test(source))
|
|
178079
|
+
return;
|
|
178080
|
+
const argStart = argSeparatorRe.lastIndex;
|
|
178081
|
+
if (source.charAt(argStart) === "{") {
|
|
178082
|
+
return readTargetFromObject(source, argStart);
|
|
178083
|
+
}
|
|
178084
|
+
return readStringLiteral(source, argStart)?.value || undefined;
|
|
178085
|
+
}
|
|
178086
|
+
function parseFlowCall(source) {
|
|
178087
|
+
let name;
|
|
178088
|
+
let target;
|
|
178089
|
+
for (const match of source.matchAll(flowCallRe)) {
|
|
178090
|
+
const nameLiteral = readStringLiteral(source, match.index + match[0].length);
|
|
178091
|
+
if (!nameLiteral)
|
|
178092
|
+
continue;
|
|
178093
|
+
if (name === undefined && nameLiteral.value !== "")
|
|
178094
|
+
name = nameLiteral.value;
|
|
178095
|
+
if (target === undefined)
|
|
178096
|
+
target = readTarget(source, nameLiteral.end + 1);
|
|
178097
|
+
if (name !== undefined && target !== undefined)
|
|
178098
|
+
break;
|
|
178099
|
+
}
|
|
178100
|
+
return { name, target };
|
|
178101
|
+
}
|
|
178102
|
+
|
|
178103
|
+
// src/core/flowMeta.ts
|
|
177716
178104
|
function flowBasename(file2) {
|
|
177717
178105
|
return basename2(file2).replace(/\.flow\.(ts|js)$/, "");
|
|
177718
178106
|
}
|
|
@@ -177756,13 +178144,8 @@ function targetToBrowser(target) {
|
|
|
177756
178144
|
function isAndroidTarget(target) {
|
|
177757
178145
|
return classifyTarget(target)?.kind === "android";
|
|
177758
178146
|
}
|
|
177759
|
-
var nameRe = /\bflow\s*\(\s*["']([^"'\n]+)["']/;
|
|
177760
|
-
var flowTargetRe = /\bflow\s*\(\s*["'][^"'\n]*["']\s*,\s*(?:["']([^"'\n]+)["']|\{[^{}]*\btarget\s*:\s*["']([^"'\n]+)["'])/;
|
|
177761
178147
|
function extractFlowMeta(source) {
|
|
177762
|
-
|
|
177763
|
-
const flowTargetMatch = flowTargetRe.exec(source);
|
|
177764
|
-
const target = flowTargetMatch?.[1] ?? flowTargetMatch?.[2];
|
|
177765
|
-
return { name, target };
|
|
178148
|
+
return parseFlowCall(source);
|
|
177766
178149
|
}
|
|
177767
178150
|
|
|
177768
178151
|
// src/domains/flows/expand.ts
|
|
@@ -177789,7 +178172,8 @@ async function expandPatterns(patterns, cwd, logger, fs3) {
|
|
|
177789
178172
|
for (const root of roots) {
|
|
177790
178173
|
const matches = await glob(effectivePatterns, {
|
|
177791
178174
|
cwd: root,
|
|
177792
|
-
absolute: true
|
|
178175
|
+
absolute: true,
|
|
178176
|
+
ignore: ["**/node_modules/**"]
|
|
177793
178177
|
});
|
|
177794
178178
|
for (const match of matches) {
|
|
177795
178179
|
const file2 = resolve3(match);
|
|
@@ -182468,6 +182852,14 @@ function buildPatternArgs(pattern) {
|
|
|
182468
182852
|
return pattern ? [pattern] : [];
|
|
182469
182853
|
}
|
|
182470
182854
|
|
|
182855
|
+
// src/core/flowFailureHint.ts
|
|
182856
|
+
function flowFailureHint(errText, projectDir) {
|
|
182857
|
+
const missingPackage = extractMissingPackage(errText);
|
|
182858
|
+
if (missingPackage === undefined)
|
|
182859
|
+
return;
|
|
182860
|
+
return runnerMessages.moduleNotFoundHint(missingPackage, projectDir);
|
|
182861
|
+
}
|
|
182862
|
+
|
|
182471
182863
|
// src/shell/reporter/createCompositeReporter.ts
|
|
182472
182864
|
function callEach(reporters, pick2, event) {
|
|
182473
182865
|
for (const r2 of reporters) {
|
|
@@ -182534,6 +182926,26 @@ function formatErrorWithCause(err) {
|
|
|
182534
182926
|
`);
|
|
182535
182927
|
}
|
|
182536
182928
|
|
|
182929
|
+
// src/domains/runner/jsonFailureDetails.ts
|
|
182930
|
+
function collectJsonFailureDetails(reporter, projectDir) {
|
|
182931
|
+
const details = [];
|
|
182932
|
+
return {
|
|
182933
|
+
reporter: createCompositeReporter([
|
|
182934
|
+
reporter,
|
|
182935
|
+
{
|
|
182936
|
+
onFlowFail: ({ err }) => {
|
|
182937
|
+
const detail = formatErrorWithCause(err);
|
|
182938
|
+
const hint = flowFailureHint(detail, projectDir);
|
|
182939
|
+
details.push(hint === undefined ? detail : `${detail}
|
|
182940
|
+
|
|
182941
|
+
${hint}`);
|
|
182942
|
+
}
|
|
182943
|
+
}
|
|
182944
|
+
]),
|
|
182945
|
+
details
|
|
182946
|
+
};
|
|
182947
|
+
}
|
|
182948
|
+
|
|
182537
182949
|
// src/domains/runner/runAndroidFlowUtils.ts
|
|
182538
182950
|
import { parseExecutionTarget as parseExecutionTarget3 } from "@qawolf/flow-targets";
|
|
182539
182951
|
|
|
@@ -182589,7 +183001,7 @@ class FlowRunError extends Error {
|
|
|
182589
183001
|
}
|
|
182590
183002
|
}
|
|
182591
183003
|
|
|
182592
|
-
// src/domains/runner/
|
|
183004
|
+
// src/domains/runner/dispatchFlow.ts
|
|
182593
183005
|
async function dispatchFlow({
|
|
182594
183006
|
deps,
|
|
182595
183007
|
flow,
|
|
@@ -182881,13 +183293,9 @@ async function flowsRun(ctx, files, flags, deps) {
|
|
|
182881
183293
|
return { error: runnerMessages.androidWorkersUnsupported, exitCode: 2 };
|
|
182882
183294
|
}
|
|
182883
183295
|
const { webOptions, androidOptions } = buildRunOptions(flags);
|
|
182884
|
-
const
|
|
182885
|
-
const
|
|
182886
|
-
|
|
182887
|
-
{
|
|
182888
|
-
onFlowFail: ({ err }) => failureDetails.push(formatErrorWithCause(err))
|
|
182889
|
-
}
|
|
182890
|
-
]) : deps.reporter;
|
|
183296
|
+
const collected = ctx.outputMode === "json" ? collectJsonFailureDetails(deps.reporter, deps.projectDir) : undefined;
|
|
183297
|
+
const failureDetails = collected?.details ?? [];
|
|
183298
|
+
const reporter = collected?.reporter ?? deps.reporter;
|
|
182891
183299
|
const result = await executeFlows({
|
|
182892
183300
|
ctx,
|
|
182893
183301
|
deps: { ...deps, reporter },
|
|
@@ -182975,7 +183383,7 @@ async function defaultRunWebFlowDeps(envDir = process.cwd(), signals) {
|
|
|
182975
183383
|
|
|
182976
183384
|
// src/domains/runtimeEnv/prepareRunDir.ts
|
|
182977
183385
|
import { createHash as createHash4 } from "node:crypto";
|
|
182978
|
-
import { join as
|
|
183386
|
+
import { join as join33, resolve as resolve9 } from "node:path";
|
|
182979
183387
|
|
|
182980
183388
|
// src/domains/runtimeEnv/execSubpathImports.ts
|
|
182981
183389
|
import { join as join26 } from "node:path";
|
|
@@ -183044,9 +183452,82 @@ async function populateInnerHop(args) {
|
|
|
183044
183452
|
}
|
|
183045
183453
|
|
|
183046
183454
|
// src/domains/runtimeEnv/outerHop.ts
|
|
183455
|
+
import { lstat as lstat2 } from "node:fs/promises";
|
|
183456
|
+
import { dirname as dirname10, join as join30 } from "node:path";
|
|
183457
|
+
|
|
183458
|
+
// src/domains/runtimeEnv/carryOverPackages.ts
|
|
183047
183459
|
import { lstat } from "node:fs/promises";
|
|
183048
183460
|
import { dirname as dirname9, join as join29 } from "node:path";
|
|
183461
|
+
|
|
183462
|
+
// src/domains/runtimeEnv/carryOverPlan.ts
|
|
183049
183463
|
var executorPackageNames = new Set(pinnedPackages.map((p3) => p3.name));
|
|
183464
|
+
function planCarryOver(args) {
|
|
183465
|
+
const installed = new Set(args.installed);
|
|
183466
|
+
return args.present.filter((name) => !name.startsWith(".") && !installed.has(name) && !executorPackageNames.has(name));
|
|
183467
|
+
}
|
|
183468
|
+
|
|
183469
|
+
// src/domains/runtimeEnv/carryOverPackages.ts
|
|
183470
|
+
async function carryOverPackages(args) {
|
|
183471
|
+
const { projectModulesDir, nodeModulesDir, fs: fs4 } = args;
|
|
183472
|
+
const present = await listPackageNames(projectModulesDir, fs4);
|
|
183473
|
+
if (present.length === 0)
|
|
183474
|
+
return [];
|
|
183475
|
+
const names = planCarryOver({
|
|
183476
|
+
present,
|
|
183477
|
+
installed: await listPackageNames(nodeModulesDir, fs4)
|
|
183478
|
+
});
|
|
183479
|
+
const linked = [];
|
|
183480
|
+
for (const name of names) {
|
|
183481
|
+
const segments = name.split("/");
|
|
183482
|
+
const target = join29(nodeModulesDir, ...segments);
|
|
183483
|
+
if (await pathOccupied(target))
|
|
183484
|
+
continue;
|
|
183485
|
+
if (segments.length > 1)
|
|
183486
|
+
await fs4.mkdir(dirname9(target), { recursive: true });
|
|
183487
|
+
await createDirSymlink(join29(projectModulesDir, ...segments), target);
|
|
183488
|
+
linked.push(name);
|
|
183489
|
+
}
|
|
183490
|
+
return linked;
|
|
183491
|
+
}
|
|
183492
|
+
async function pathOccupied(path3) {
|
|
183493
|
+
try {
|
|
183494
|
+
await lstat(path3);
|
|
183495
|
+
return true;
|
|
183496
|
+
} catch {
|
|
183497
|
+
return false;
|
|
183498
|
+
}
|
|
183499
|
+
}
|
|
183500
|
+
async function listPackageNames(dir, fs4) {
|
|
183501
|
+
let entries;
|
|
183502
|
+
try {
|
|
183503
|
+
entries = await fs4.readdir(dir);
|
|
183504
|
+
} catch {
|
|
183505
|
+
return [];
|
|
183506
|
+
}
|
|
183507
|
+
const names = [];
|
|
183508
|
+
for (const entry of entries) {
|
|
183509
|
+
if (!entry.startsWith("@")) {
|
|
183510
|
+
if (fs4.existsSync(join29(dir, entry, "package.json")))
|
|
183511
|
+
names.push(entry);
|
|
183512
|
+
continue;
|
|
183513
|
+
}
|
|
183514
|
+
let scoped;
|
|
183515
|
+
try {
|
|
183516
|
+
scoped = await fs4.readdir(join29(dir, entry));
|
|
183517
|
+
} catch {
|
|
183518
|
+
continue;
|
|
183519
|
+
}
|
|
183520
|
+
for (const inner of scoped) {
|
|
183521
|
+
if (fs4.existsSync(join29(dir, entry, inner, "package.json"))) {
|
|
183522
|
+
names.push(`${entry}/${inner}`);
|
|
183523
|
+
}
|
|
183524
|
+
}
|
|
183525
|
+
}
|
|
183526
|
+
return names;
|
|
183527
|
+
}
|
|
183528
|
+
|
|
183529
|
+
// src/domains/runtimeEnv/outerHop.ts
|
|
183530
|
+
var executorPackageNames2 = new Set(pinnedPackages.map((p3) => p3.name));
|
|
183050
183531
|
async function populateOuterHop(args) {
|
|
183051
183532
|
const { projectDir, runDir, fs: fs4 } = args;
|
|
183052
183533
|
if (projectDir === undefined)
|
|
@@ -183055,7 +183536,7 @@ async function populateOuterHop(args) {
|
|
|
183055
183536
|
const depNames = Object.keys(installableDeps);
|
|
183056
183537
|
const { satisfying, rejected } = await findSatisfyingNodeModulesDir(projectDir, depNames, fs4);
|
|
183057
183538
|
if (satisfying !== undefined) {
|
|
183058
|
-
await createDirSymlink(satisfying,
|
|
183539
|
+
await createDirSymlink(satisfying, join30(runDir, "node_modules"));
|
|
183059
183540
|
return { mode: "symlink", nodeModulesDir: satisfying };
|
|
183060
183541
|
}
|
|
183061
183542
|
if (depNames.length === 0)
|
|
@@ -183064,24 +183545,29 @@ async function populateOuterHop(args) {
|
|
|
183064
183545
|
await installOuterDeps(runDir, installableDeps, fs4, args.install ?? spawnNpmInstall);
|
|
183065
183546
|
await linkPinnedPackages({
|
|
183066
183547
|
depsRoot: args.depsRoot,
|
|
183067
|
-
nodeModulesDir:
|
|
183548
|
+
nodeModulesDir: join30(runDir, "node_modules"),
|
|
183549
|
+
fs: fs4
|
|
183550
|
+
});
|
|
183551
|
+
const carriedOver = await carryOverPackages({
|
|
183552
|
+
projectModulesDir: join30(projectDir, "node_modules"),
|
|
183553
|
+
nodeModulesDir: join30(runDir, "node_modules"),
|
|
183068
183554
|
fs: fs4
|
|
183069
183555
|
});
|
|
183070
|
-
return { mode: "install", depCount: depNames.length, rejected };
|
|
183556
|
+
return { mode: "install", depCount: depNames.length, rejected, carriedOver };
|
|
183071
183557
|
}
|
|
183072
183558
|
async function findSatisfyingNodeModulesDir(startDir, depNames, fs4) {
|
|
183073
183559
|
const rejected = [];
|
|
183074
183560
|
let dir = startDir;
|
|
183075
183561
|
while (true) {
|
|
183076
|
-
const candidate =
|
|
183562
|
+
const candidate = join30(dir, "node_modules");
|
|
183077
183563
|
const stats = await lstatSafe(candidate);
|
|
183078
183564
|
if (stats !== undefined && stats.isDirectory() && !stats.isSymbolicLink()) {
|
|
183079
|
-
const missing = depNames.filter((name) => !fs4.existsSync(
|
|
183565
|
+
const missing = depNames.filter((name) => !fs4.existsSync(join30(candidate, name, "package.json")));
|
|
183080
183566
|
if (missing.length === 0)
|
|
183081
183567
|
return { satisfying: candidate, rejected };
|
|
183082
183568
|
rejected.push({ dir: candidate, missing });
|
|
183083
183569
|
}
|
|
183084
|
-
const parent =
|
|
183570
|
+
const parent = dirname10(dir);
|
|
183085
183571
|
if (parent === dir)
|
|
183086
183572
|
return { satisfying: undefined, rejected };
|
|
183087
183573
|
dir = parent;
|
|
@@ -183089,7 +183575,7 @@ async function findSatisfyingNodeModulesDir(startDir, depNames, fs4) {
|
|
|
183089
183575
|
}
|
|
183090
183576
|
async function lstatSafe(path3) {
|
|
183091
183577
|
try {
|
|
183092
|
-
return await
|
|
183578
|
+
return await lstat2(path3);
|
|
183093
183579
|
} catch {
|
|
183094
183580
|
return;
|
|
183095
183581
|
}
|
|
@@ -183097,7 +183583,7 @@ async function lstatSafe(path3) {
|
|
|
183097
183583
|
async function readInstallableDeps(projectDir, fs4) {
|
|
183098
183584
|
let content;
|
|
183099
183585
|
try {
|
|
183100
|
-
content = await fs4.readFile(
|
|
183586
|
+
content = await fs4.readFile(join30(projectDir, "package.json"));
|
|
183101
183587
|
} catch {
|
|
183102
183588
|
return {};
|
|
183103
183589
|
}
|
|
@@ -183112,11 +183598,11 @@ async function readInstallableDeps(projectDir, fs4) {
|
|
|
183112
183598
|
const rawDeps = parsed["dependencies"];
|
|
183113
183599
|
if (typeof rawDeps !== "object" || rawDeps === null)
|
|
183114
183600
|
return {};
|
|
183115
|
-
return Object.fromEntries(Object.entries(rawDeps).filter(([name]) => !
|
|
183601
|
+
return Object.fromEntries(Object.entries(rawDeps).filter(([name]) => !executorPackageNames2.has(name)).filter((entry) => typeof entry[1] === "string"));
|
|
183116
183602
|
}
|
|
183117
183603
|
async function installOuterDeps(runDir, deps, fs4, install) {
|
|
183118
|
-
await fs4.writeFile(
|
|
183119
|
-
await fs4.writeFile(
|
|
183604
|
+
await fs4.writeFile(join30(runDir, "package.json"), JSON.stringify({ name: "qawolf-run", private: true, dependencies: deps }, undefined, 2));
|
|
183605
|
+
await fs4.writeFile(join30(runDir, ".npmrc"), `@qawolf:registry=https://registry.npmjs.org/
|
|
183120
183606
|
`);
|
|
183121
183607
|
const result = await install(runDir);
|
|
183122
183608
|
if (result.exitCode !== 0) {
|
|
@@ -183126,14 +183612,14 @@ async function installOuterDeps(runDir, deps, fs4, install) {
|
|
|
183126
183612
|
|
|
183127
183613
|
// src/domains/runtimeEnv/stageFlowFiles.ts
|
|
183128
183614
|
import { createHash as createHash3 } from "node:crypto";
|
|
183129
|
-
import { basename as basename4, dirname as
|
|
183615
|
+
import { basename as basename4, dirname as dirname11, join as join32, sep as sep4 } from "node:path";
|
|
183130
183616
|
|
|
183131
183617
|
// src/shell/copyDir.ts
|
|
183132
183618
|
import { cp, readdir as readdir2 } from "node:fs/promises";
|
|
183133
|
-
import { basename as basename3, join as
|
|
183619
|
+
import { basename as basename3, join as join31 } from "node:path";
|
|
183134
183620
|
async function copyDirExcluding(source, destination, excludedNames) {
|
|
183135
183621
|
const entries = await readdir2(source, { withFileTypes: true });
|
|
183136
|
-
await Promise.all(entries.filter((entry) => !excludedNames.has(entry.name)).map((entry) => cp(
|
|
183622
|
+
await Promise.all(entries.filter((entry) => !excludedNames.has(entry.name)).map((entry) => cp(join31(source, entry.name), join31(destination, entry.name), {
|
|
183137
183623
|
recursive: true,
|
|
183138
183624
|
filter: (path3) => !excludedNames.has(basename3(path3))
|
|
183139
183625
|
})));
|
|
@@ -183150,14 +183636,14 @@ async function stageFlowFiles(args) {
|
|
|
183150
183636
|
if (files.length > 1) {
|
|
183151
183637
|
return Promise.all(files.map((f3) => stageOneFile(f3, execDir, fs4)));
|
|
183152
183638
|
}
|
|
183153
|
-
await Promise.all(files.map((f3) => fs4.copyFile(f3,
|
|
183154
|
-
return files.map((f3) =>
|
|
183639
|
+
await Promise.all(files.map((f3) => fs4.copyFile(f3, join32(execDir, basename4(f3)))));
|
|
183640
|
+
return files.map((f3) => join32(execDir, basename4(f3)));
|
|
183155
183641
|
}
|
|
183156
183642
|
async function stageOneFile(file2, execDir, fs4) {
|
|
183157
|
-
const dirHash = createHash3("sha256").update(
|
|
183158
|
-
const subDir =
|
|
183643
|
+
const dirHash = createHash3("sha256").update(dirname11(file2)).digest("hex").slice(0, 8);
|
|
183644
|
+
const subDir = join32(execDir, dirHash);
|
|
183159
183645
|
await fs4.mkdir(subDir, { recursive: true });
|
|
183160
|
-
const dest =
|
|
183646
|
+
const dest = join32(subDir, basename4(file2));
|
|
183161
183647
|
await fs4.copyFile(file2, dest);
|
|
183162
183648
|
return dest;
|
|
183163
183649
|
}
|
|
@@ -183165,7 +183651,7 @@ function remapPath(file2, projectDir, execDir) {
|
|
|
183165
183651
|
if (file2 === projectDir)
|
|
183166
183652
|
return execDir;
|
|
183167
183653
|
if (file2.startsWith(projectDir + sep4)) {
|
|
183168
|
-
return
|
|
183654
|
+
return join32(execDir, file2.slice(projectDir.length + 1));
|
|
183169
183655
|
}
|
|
183170
183656
|
return;
|
|
183171
183657
|
}
|
|
@@ -183175,10 +183661,10 @@ async function prepareRunDir(args) {
|
|
|
183175
183661
|
const { files, projectDir, depsRoot, runRoot } = args;
|
|
183176
183662
|
const fs4 = args.fs ?? makeDefaultFs();
|
|
183177
183663
|
const runId = buildRunId(projectDir, files);
|
|
183178
|
-
const runDir =
|
|
183664
|
+
const runDir = join33(runRoot, runId);
|
|
183179
183665
|
await fs4.rm(runDir, { recursive: true, force: true });
|
|
183180
183666
|
await fs4.mkdir(runDir, { recursive: true });
|
|
183181
|
-
const execDir =
|
|
183667
|
+
const execDir = join33(runDir, "exec");
|
|
183182
183668
|
await fs4.mkdir(execDir, { recursive: true });
|
|
183183
183669
|
await populateInnerHop({ depsRoot, execDir, fs: fs4 });
|
|
183184
183670
|
const stagedFiles = await stageFlowFiles({ files, projectDir, execDir, fs: fs4 });
|
|
@@ -183209,17 +183695,17 @@ function buildRunId(projectDir, files) {
|
|
|
183209
183695
|
}
|
|
183210
183696
|
|
|
183211
183697
|
// src/shell/testkit.ts
|
|
183212
|
-
import { join as
|
|
183698
|
+
import { join as join34 } from "node:path";
|
|
183213
183699
|
function notAvailableLocally(name) {
|
|
183214
183700
|
throw new Error(runnerMessages.notAvailableLocally(name));
|
|
183215
183701
|
}
|
|
183216
183702
|
async function loadSdkDeps(cwd) {
|
|
183217
|
-
const testkitDir =
|
|
183703
|
+
const testkitDir = join34(cwd, "node_modules", "@qawolf", "testkit");
|
|
183218
183704
|
try {
|
|
183219
183705
|
const clientMod = await importFromPath(resolveFromEnvDir(cwd, "@qawolf/testkit/client"));
|
|
183220
183706
|
if (typeof clientMod.createTestkitClient !== "function")
|
|
183221
183707
|
throw new Error("createTestkitClient is not a function");
|
|
183222
|
-
const scopeMod = await importFromPath(
|
|
183708
|
+
const scopeMod = await importFromPath(join34(testkitDir, "dist", "clientScope.js"));
|
|
183223
183709
|
if (typeof scopeMod.configureTestkitClient !== "function")
|
|
183224
183710
|
throw new Error("configureTestkitClient is not a function");
|
|
183225
183711
|
return {
|
|
@@ -183277,9 +183763,9 @@ async function registerLazyEmailsClient(getInbox, cwd, deps) {
|
|
|
183277
183763
|
}
|
|
183278
183764
|
|
|
183279
183765
|
// src/commands/flows/envVarDeps.ts
|
|
183280
|
-
import { join as
|
|
183766
|
+
import { join as join35 } from "node:path";
|
|
183281
183767
|
function envFilePath(envDir) {
|
|
183282
|
-
return
|
|
183768
|
+
return join35(envDir, ".env");
|
|
183283
183769
|
}
|
|
183284
183770
|
async function readEnv(envDir, fs4) {
|
|
183285
183771
|
try {
|
|
@@ -183383,6 +183869,9 @@ async function createFlowRuntimeDeps({
|
|
|
183383
183869
|
};
|
|
183384
183870
|
}
|
|
183385
183871
|
|
|
183872
|
+
// src/commands/flows/runStagedFlows.ts
|
|
183873
|
+
import { join as join39 } from "node:path";
|
|
183874
|
+
|
|
183386
183875
|
// src/shell/appium/createAppiumServer.ts
|
|
183387
183876
|
import { existsSync as existsSync2 } from "node:fs";
|
|
183388
183877
|
|
|
@@ -183746,12 +184235,12 @@ Install Android Studio and open Tools > SDK Manager.`);
|
|
|
183746
184235
|
}
|
|
183747
184236
|
|
|
183748
184237
|
// src/shell/manifest/lookup.ts
|
|
183749
|
-
import { basename as basename5, dirname as
|
|
184238
|
+
import { basename as basename5, dirname as dirname12, relative as relative6 } from "node:path";
|
|
183750
184239
|
async function findFlowStamp(flowAbsPath) {
|
|
183751
184240
|
let envDir;
|
|
183752
|
-
let current =
|
|
183753
|
-
while (current !==
|
|
183754
|
-
const parent2 =
|
|
184241
|
+
let current = dirname12(flowAbsPath);
|
|
184242
|
+
while (current !== dirname12(current)) {
|
|
184243
|
+
const parent2 = dirname12(current);
|
|
183755
184244
|
if (basename5(parent2) === ".qawolf") {
|
|
183756
184245
|
envDir = current;
|
|
183757
184246
|
break;
|
|
@@ -184683,14 +185172,14 @@ async function runWebFlow({
|
|
|
184683
185172
|
|
|
184684
185173
|
// src/shell/embeddedWorkerCli.ts
|
|
184685
185174
|
import { existsSync as existsSync3, mkdirSync as mkdirSync3, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
184686
|
-
import { basename as basename6, join as
|
|
185175
|
+
import { basename as basename6, join as join36 } from "node:path";
|
|
184687
185176
|
var embeddedCliPathEnv = "QAWOLF_EMBEDDED_CLI_PATH";
|
|
184688
185177
|
function extractEmbeddedWorkerCli() {
|
|
184689
185178
|
const assetPath = process.env[embeddedCliPathEnv];
|
|
184690
185179
|
if (assetPath === undefined || assetPath === "")
|
|
184691
185180
|
return;
|
|
184692
|
-
const dir =
|
|
184693
|
-
const dest =
|
|
185181
|
+
const dir = join36(getDataDir(), "worker");
|
|
185182
|
+
const dest = join36(dir, basename6(assetPath));
|
|
184694
185183
|
if (existsSync3(dest))
|
|
184695
185184
|
return dest;
|
|
184696
185185
|
mkdirSync3(dir, { recursive: true });
|
|
@@ -184845,7 +185334,7 @@ function makePooledDispatch(resolvedDir) {
|
|
|
184845
185334
|
}
|
|
184846
185335
|
|
|
184847
185336
|
// src/commands/flows/buildRunReporter.ts
|
|
184848
|
-
import { dirname as
|
|
185337
|
+
import { dirname as dirname13 } from "node:path";
|
|
184849
185338
|
|
|
184850
185339
|
// src/shell/reporter/createConsoleReporter.ts
|
|
184851
185340
|
import { styleText as styleText3 } from "node:util";
|
|
@@ -184892,9 +185381,9 @@ function createConsoleReporter(deps) {
|
|
|
184892
185381
|
deps.stderr.write(`${formatted}
|
|
184893
185382
|
|
|
184894
185383
|
`);
|
|
184895
|
-
const
|
|
184896
|
-
if (
|
|
184897
|
-
deps.stderr.write(`${styleText3("yellow", `${indent}${
|
|
185384
|
+
const hint = flowFailureHint(errStr, deps.projectDir);
|
|
185385
|
+
if (hint !== undefined) {
|
|
185386
|
+
deps.stderr.write(`${styleText3("yellow", `${indent}${hint}`)}
|
|
184898
185387
|
|
|
184899
185388
|
`);
|
|
184900
185389
|
}
|
|
@@ -184928,7 +185417,7 @@ ${styleText3("dim", "─".repeat(width))}
|
|
|
184928
185417
|
};
|
|
184929
185418
|
}
|
|
184930
185419
|
// src/shell/reporter/createJUnitReporter.ts
|
|
184931
|
-
import { join as
|
|
185420
|
+
import { join as join37 } from "node:path";
|
|
184932
185421
|
|
|
184933
185422
|
// src/shell/reporter/junitXml.ts
|
|
184934
185423
|
function escapeXml(str) {
|
|
@@ -184967,7 +185456,7 @@ ${suites}`;
|
|
|
184967
185456
|
|
|
184968
185457
|
// src/shell/reporter/createJUnitReporter.ts
|
|
184969
185458
|
function resolveJUnitOutputPath(junit, outputDir) {
|
|
184970
|
-
return typeof junit === "string" && junit.trim() !== "" ? junit :
|
|
185459
|
+
return typeof junit === "string" && junit.trim() !== "" ? junit : join37(outputDir, "junit-report.xml");
|
|
184971
185460
|
}
|
|
184972
185461
|
function createJUnitReporter(deps) {
|
|
184973
185462
|
const flows = [];
|
|
@@ -185006,7 +185495,7 @@ function buildRunReporter(flags, deps) {
|
|
|
185006
185495
|
const junit = createJUnitReporter({
|
|
185007
185496
|
outputPath: resolveJUnitOutputPath(flags.junit, flags.outputDir),
|
|
185008
185497
|
writeFile: (path9, content) => {
|
|
185009
|
-
deps.fs.mkdirSync(
|
|
185498
|
+
deps.fs.mkdirSync(dirname13(path9), { recursive: true });
|
|
185010
185499
|
deps.fs.writeFileSync(path9, content);
|
|
185011
185500
|
},
|
|
185012
185501
|
stderr
|
|
@@ -185045,6 +185534,7 @@ function buildFlowsRunDeps(args) {
|
|
|
185045
185534
|
findFlowStamp,
|
|
185046
185535
|
warn: (message) => ctx.ui.warn(message),
|
|
185047
185536
|
logger: ctx.log("runner"),
|
|
185537
|
+
...projectDir !== undefined ? { projectDir } : {},
|
|
185048
185538
|
reporter: buildRunReporter(flags, {
|
|
185049
185539
|
fs: ctx.fs,
|
|
185050
185540
|
stdout: { write: (text3) => ctx.ui.write(text3) },
|
|
@@ -185057,11 +185547,11 @@ function buildFlowsRunDeps(args) {
|
|
|
185057
185547
|
|
|
185058
185548
|
// src/commands/flows/loadEnvFile.ts
|
|
185059
185549
|
import { readFile } from "node:fs/promises";
|
|
185060
|
-
import { join as
|
|
185550
|
+
import { join as join38 } from "node:path";
|
|
185061
185551
|
async function loadEnvFile(envDir) {
|
|
185062
185552
|
let content;
|
|
185063
185553
|
try {
|
|
185064
|
-
content = await readFile(
|
|
185554
|
+
content = await readFile(join38(envDir, ".env"), "utf8");
|
|
185065
185555
|
} catch (err) {
|
|
185066
185556
|
if (isNoEntError(err))
|
|
185067
185557
|
return;
|
|
@@ -185106,6 +185596,14 @@ async function runStagedFlows(args) {
|
|
|
185106
185596
|
for (const candidate of staged.outerHop.rejected) {
|
|
185107
185597
|
log31.debug(runnerMessages.outerHopCandidateRejected(candidate.dir, candidate.missing));
|
|
185108
185598
|
}
|
|
185599
|
+
const ownModules = projectDir === undefined ? undefined : join39(projectDir, "node_modules");
|
|
185600
|
+
const own = staged.outerHop.rejected.find((c3) => c3.dir === ownModules);
|
|
185601
|
+
if (own !== undefined) {
|
|
185602
|
+
ctx.ui.warn(runnerMessages.outerHopFallbackNotice(own.dir, own.missing));
|
|
185603
|
+
}
|
|
185604
|
+
if (staged.outerHop.carriedOver.length > 0) {
|
|
185605
|
+
ctx.ui.warn(runnerMessages.outerHopCarriedOver(staged.outerHop.carriedOver));
|
|
185606
|
+
}
|
|
185109
185607
|
}
|
|
185110
185608
|
const unregisterCleanup = ctx.signals.register(staged.cleanup);
|
|
185111
185609
|
try {
|
|
@@ -185162,7 +185660,7 @@ async function handleFlowsRun(ctx, pattern, flags, deps) {
|
|
|
185162
185660
|
}
|
|
185163
185661
|
|
|
185164
185662
|
// src/commands/flows/hybridRunDefaults.ts
|
|
185165
|
-
import { join as
|
|
185663
|
+
import { join as join40, resolve as resolve10 } from "node:path";
|
|
185166
185664
|
function makeDefaultHybridDeps(fs9) {
|
|
185167
185665
|
return {
|
|
185168
185666
|
expandPatterns: (patterns, cwd, logger) => expandPatterns(patterns, cwd, logger, fs9),
|
|
@@ -185181,7 +185679,7 @@ async function handleHybridFlowsRun(ctx, pattern, flags, deps) {
|
|
|
185181
185679
|
if (validation !== "ok") {
|
|
185182
185680
|
return { error: validation.error, exitCode: 2 };
|
|
185183
185681
|
}
|
|
185184
|
-
const envDir = resolve10(
|
|
185682
|
+
const envDir = resolve10(join40(".qawolf", flags.env));
|
|
185185
185683
|
const patternArgs = buildPatternArgs(pattern);
|
|
185186
185684
|
const globFlows = () => resolvedDeps.expandPatterns(patternArgs, envDir, ctx.log("flows"));
|
|
185187
185685
|
let files = await globFlows();
|
|
@@ -185327,12 +185825,12 @@ function registerFlowsCommand(program2, signals) {
|
|
|
185327
185825
|
}
|
|
185328
185826
|
|
|
185329
185827
|
// src/domains/init/init.ts
|
|
185330
|
-
import { dirname as
|
|
185828
|
+
import { dirname as dirname14, join as join42, relative as relative7 } from "node:path";
|
|
185331
185829
|
|
|
185332
185830
|
// src/domains/init/ensurePackageJson.ts
|
|
185333
|
-
import { join as
|
|
185831
|
+
import { join as join41 } from "node:path";
|
|
185334
185832
|
async function ensurePackageJson(ctx, yes, deps) {
|
|
185335
|
-
const pkgPath =
|
|
185833
|
+
const pkgPath = join41(deps.cwd, "package.json");
|
|
185336
185834
|
if (!await deps.fs.pathExists(pkgPath)) {
|
|
185337
185835
|
const confirmed2 = await ctx.ui.confirm(initMessages.createPackageJsonPrompt, { yes });
|
|
185338
185836
|
if (!confirmed2.ok || !confirmed2.value) {
|
|
@@ -185458,9 +185956,9 @@ function makeDefaultInitDeps() {
|
|
|
185458
185956
|
async function handleInit(ctx, opts, deps = makeDefaultInitDeps()) {
|
|
185459
185957
|
ctx.ui.gap();
|
|
185460
185958
|
ctx.ui.intro(initMessages.title);
|
|
185461
|
-
const configPath =
|
|
185462
|
-
const flowPath =
|
|
185463
|
-
const gitignorePath =
|
|
185959
|
+
const configPath = join42(deps.cwd, "qawolf.config.ts");
|
|
185960
|
+
const flowPath = join42(deps.cwd, "src", "flows", "example.flow.ts");
|
|
185961
|
+
const gitignorePath = join42(deps.cwd, ".qawolf", ".gitignore");
|
|
185464
185962
|
await writeWithPrompt(ctx, configPath, qawolfConfigTs, opts.yes, deps);
|
|
185465
185963
|
await writeWithPrompt(ctx, flowPath, exampleFlowTs, opts.yes, deps);
|
|
185466
185964
|
await writeWithPrompt(ctx, gitignorePath, qawolfGitignore, opts.yes, deps);
|
|
@@ -185479,7 +185977,7 @@ async function writeWithPrompt(ctx, filePath, content, yes, deps) {
|
|
|
185479
185977
|
return;
|
|
185480
185978
|
}
|
|
185481
185979
|
}
|
|
185482
|
-
await deps.fs.mkdir(
|
|
185980
|
+
await deps.fs.mkdir(dirname14(filePath), { recursive: true });
|
|
185483
185981
|
await deps.fs.writeFile(filePath, content);
|
|
185484
185982
|
ctx.ui.step(initMessages.createdFile(relPath));
|
|
185485
185983
|
}
|
|
@@ -185498,7 +185996,7 @@ Examples:
|
|
|
185498
185996
|
import { parseExecutionTarget as parseExecutionTarget4 } from "@qawolf/flow-targets";
|
|
185499
185997
|
|
|
185500
185998
|
// src/domains/install/android/avd.ts
|
|
185501
|
-
import { join as
|
|
185999
|
+
import { join as join43 } from "node:path";
|
|
185502
186000
|
async function installAvds(ctx, specs, deps) {
|
|
185503
186001
|
const sdkManagerPath = sdkManagerBin(deps.androidHome, deps.platform);
|
|
185504
186002
|
const avdManagerPath = avdManagerBin(deps.androidHome, deps.platform);
|
|
@@ -185508,7 +186006,7 @@ async function installAvds(ctx, specs, deps) {
|
|
|
185508
186006
|
if (versionResult.exitCode !== 0) {
|
|
185509
186007
|
throw new Error(installMessages.android.sdkmanagerNotFound(sdkManagerPath));
|
|
185510
186008
|
}
|
|
185511
|
-
const licenseFile =
|
|
186009
|
+
const licenseFile = join43(deps.androidHome, "licenses", "android-sdk-license");
|
|
185512
186010
|
if (deps.checkExists(licenseFile)) {
|
|
185513
186011
|
ctx.ui.info(installMessages.android.licensesAlreadyAccepted);
|
|
185514
186012
|
} else {
|
|
@@ -185523,7 +186021,7 @@ async function installAvds(ctx, specs, deps) {
|
|
|
185523
186021
|
for (const spec of specs) {
|
|
185524
186022
|
if (installedImages.has(spec.systemImage))
|
|
185525
186023
|
continue;
|
|
185526
|
-
const systemImg =
|
|
186024
|
+
const systemImg = join43(deps.androidHome, ...spec.systemImage.split(";"), "system.img");
|
|
185527
186025
|
if (deps.checkExists(systemImg)) {
|
|
185528
186026
|
ctx.ui.info(installMessages.android.systemImageAlreadyInstalled(spec.systemImage));
|
|
185529
186027
|
installedImages.add(spec.systemImage);
|
|
@@ -186575,7 +187073,7 @@ async function handleRunnerScreenshot(ctx, options, deps) {
|
|
|
186575
187073
|
}
|
|
186576
187074
|
|
|
186577
187075
|
// src/shell/interactiveRunner/collectRunFiles.ts
|
|
186578
|
-
import { join as
|
|
187076
|
+
import { join as join44 } from "node:path";
|
|
186579
187077
|
async function collectRunFiles(options) {
|
|
186580
187078
|
const paths = await glob(shippableRunFileExtensions.map((extension) => `**/*${extension}`), {
|
|
186581
187079
|
cwd: options.cwd,
|
|
@@ -186585,7 +187083,7 @@ async function collectRunFiles(options) {
|
|
|
186585
187083
|
const shippable = paths.filter(isShippableRunFilePath).sort();
|
|
186586
187084
|
const files = {};
|
|
186587
187085
|
const read = batchMap(shippable, async (path9) => ({
|
|
186588
|
-
content: await options.fs.readFile(
|
|
187086
|
+
content: await options.fs.readFile(join44(options.cwd, path9)),
|
|
186589
187087
|
path: path9
|
|
186590
187088
|
}), flowBatchSize);
|
|
186591
187089
|
for await (const file2 of read)
|
|
@@ -186600,7 +187098,7 @@ function makeRunnerId() {
|
|
|
186600
187098
|
}
|
|
186601
187099
|
|
|
186602
187100
|
// src/shell/interactiveRunner/runnerStore.ts
|
|
186603
|
-
import { join as
|
|
187101
|
+
import { join as join45 } from "node:path";
|
|
186604
187102
|
var storeFileName = "runner.json";
|
|
186605
187103
|
var storeSchema = exports_external.object({ defaultRunnerId: exports_external.string().optional() });
|
|
186606
187104
|
function parseJson(text3) {
|
|
@@ -186611,8 +187109,8 @@ function parseJson(text3) {
|
|
|
186611
187109
|
}
|
|
186612
187110
|
}
|
|
186613
187111
|
function makeRunnerStore(options) {
|
|
186614
|
-
const directory =
|
|
186615
|
-
const path9 =
|
|
187112
|
+
const directory = join45(options.cwd, qawolfDir);
|
|
187113
|
+
const path9 = join45(directory, storeFileName);
|
|
186616
187114
|
let pendingWrites = 0;
|
|
186617
187115
|
const nextPendingPath = () => `${path9}.${process.pid}.${++pendingWrites}.tmp`;
|
|
186618
187116
|
return {
|
|
@@ -186639,7 +187137,7 @@ function makeRunnerStore(options) {
|
|
|
186639
187137
|
}
|
|
186640
187138
|
|
|
186641
187139
|
// src/shell/interactiveRunner/writeScreenshot.ts
|
|
186642
|
-
import { dirname as
|
|
187140
|
+
import { dirname as dirname15 } from "node:path";
|
|
186643
187141
|
var jpegStartOfImage = [255, 216, 255];
|
|
186644
187142
|
async function writeScreenshot(options) {
|
|
186645
187143
|
const bytes = Buffer.from(options.imageJpegBase64, "base64");
|
|
@@ -186647,7 +187145,7 @@ async function writeScreenshot(options) {
|
|
|
186647
187145
|
return { ok: false, reason: "not-a-jpeg" };
|
|
186648
187146
|
}
|
|
186649
187147
|
try {
|
|
186650
|
-
await options.fs.mkdir(
|
|
187148
|
+
await options.fs.mkdir(dirname15(options.path), { recursive: true });
|
|
186651
187149
|
await options.fs.writeFile(options.path, bytes);
|
|
186652
187150
|
} catch (error51) {
|
|
186653
187151
|
return { detail: errorMessage(error51), ok: false, reason: "unwritable" };
|
|
@@ -187285,4 +187783,4 @@ createProgram({ signals }).parseAsync().catch(() => {
|
|
|
187285
187783
|
process.exitCode = 1;
|
|
187286
187784
|
}).finally(() => flushAndExit(typeof process.exitCode === "number" ? process.exitCode : 0));
|
|
187287
187785
|
|
|
187288
|
-
//# debugId=
|
|
187786
|
+
//# debugId=50767334C9C30D3E64756E2164756E21
|