ado-sync 0.1.60 → 0.1.61
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/__tests__/regressions.test.js +122 -0
- package/dist/__tests__/regressions.test.js.map +1 -1
- package/dist/azure/test-cases.d.ts +1 -1
- package/dist/azure/test-cases.js +2 -1
- package/dist/azure/test-cases.js.map +1 -1
- package/dist/azure/work-items.js +7 -32
- package/dist/azure/work-items.js.map +1 -1
- package/dist/html.d.ts +25 -0
- package/dist/html.js +71 -0
- package/dist/html.js.map +1 -0
- package/dist/id-markers.d.ts +7 -0
- package/dist/id-markers.js +44 -0
- package/dist/id-markers.js.map +1 -0
- package/dist/parsers/csharp.d.ts +1 -1
- package/dist/parsers/csharp.js +4 -2
- package/dist/parsers/csharp.js.map +1 -1
- package/dist/parsers/csv.d.ts +1 -1
- package/dist/parsers/csv.js.map +1 -1
- package/dist/parsers/dart.d.ts +1 -1
- package/dist/parsers/dart.js +4 -2
- package/dist/parsers/dart.js.map +1 -1
- package/dist/parsers/excel.d.ts +1 -1
- package/dist/parsers/excel.js.map +1 -1
- package/dist/parsers/gherkin.d.ts +2 -2
- package/dist/parsers/gherkin.js +12 -10
- package/dist/parsers/gherkin.js.map +1 -1
- package/dist/parsers/go.d.ts +1 -1
- package/dist/parsers/go.js +4 -2
- package/dist/parsers/go.js.map +1 -1
- package/dist/parsers/java.d.ts +1 -1
- package/dist/parsers/java.js +6 -3
- package/dist/parsers/java.js.map +1 -1
- package/dist/parsers/javascript.d.ts +1 -1
- package/dist/parsers/javascript.js +9 -5
- package/dist/parsers/javascript.js.map +1 -1
- package/dist/parsers/kotlin.d.ts +1 -1
- package/dist/parsers/kotlin.js +8 -5
- package/dist/parsers/kotlin.js.map +1 -1
- package/dist/parsers/markdown.d.ts +1 -1
- package/dist/parsers/markdown.js +4 -3
- package/dist/parsers/markdown.js.map +1 -1
- package/dist/parsers/php.d.ts +1 -1
- package/dist/parsers/php.js +2 -1
- package/dist/parsers/php.js.map +1 -1
- package/dist/parsers/python.d.ts +1 -1
- package/dist/parsers/python.js +5 -3
- package/dist/parsers/python.js.map +1 -1
- package/dist/parsers/robot.d.ts +1 -1
- package/dist/parsers/robot.js +5 -2
- package/dist/parsers/robot.js.map +1 -1
- package/dist/parsers/ruby.d.ts +1 -1
- package/dist/parsers/ruby.js +4 -2
- package/dist/parsers/ruby.js.map +1 -1
- package/dist/parsers/rust.d.ts +1 -1
- package/dist/parsers/rust.js +4 -2
- package/dist/parsers/rust.js.map +1 -1
- package/dist/parsers/swift.d.ts +1 -1
- package/dist/parsers/swift.js +4 -2
- package/dist/parsers/swift.js.map +1 -1
- package/dist/parsers/tabular.d.ts +1 -1
- package/dist/parsers/tabular.js.map +1 -1
- package/dist/parsers/testcafe.d.ts +1 -1
- package/dist/parsers/testcafe.js +9 -5
- package/dist/parsers/testcafe.js.map +1 -1
- package/dist/sync/engine.js +56 -55
- package/dist/sync/engine.js.map +1 -1
- package/package.json +1 -1
package/dist/parsers/ruby.js
CHANGED
|
@@ -54,6 +54,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
54
54
|
exports.parseRubyFile = parseRubyFile;
|
|
55
55
|
const fs = __importStar(require("fs"));
|
|
56
56
|
const path = __importStar(require("path"));
|
|
57
|
+
const id_markers_1 = require("../id-markers");
|
|
57
58
|
const shared_1 = require("./shared");
|
|
58
59
|
// ─── Test detection ───────────────────────────────────────────────────────────
|
|
59
60
|
// Matches: it 'title' or it "title" (with optional whitespace)
|
|
@@ -84,7 +85,8 @@ function extractCommentBlockAbove(lines, itLineIdx, tagPrefix) {
|
|
|
84
85
|
const docLines = [];
|
|
85
86
|
let azureId;
|
|
86
87
|
const tags = [];
|
|
87
|
-
const
|
|
88
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
89
|
+
const idRe = new RegExp(`#\\s*@(?!tags?:)(?:${(0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes)}):(\\d+)`);
|
|
88
90
|
const tagsRe = /^#\s*@tags:\s*(.+)/i;
|
|
89
91
|
const singleTagRe = /^#\s*@(\w+)\s*$/;
|
|
90
92
|
for (let i = itLineIdx - 1; i >= 0 && i >= itLineIdx - 30; i--) {
|
|
@@ -110,7 +112,7 @@ function extractCommentBlockAbove(lines, itLineIdx, tagPrefix) {
|
|
|
110
112
|
continue;
|
|
111
113
|
}
|
|
112
114
|
const singleTagMatch = trimmed.match(singleTagRe);
|
|
113
|
-
if (singleTagMatch && singleTagMatch[1]
|
|
115
|
+
if (singleTagMatch && !markerTagPrefixes.includes(singleTagMatch[1])) {
|
|
114
116
|
tags.push(singleTagMatch[1]);
|
|
115
117
|
continue;
|
|
116
118
|
}
|
package/dist/parsers/ruby.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../src/parsers/ruby.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../src/parsers/ruby.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkJH,sCA0CC;AA1LD,uCAAyB;AACzB,2CAA6B;AAE7B,8CAAwF;AAExF,qCAA4D;AAE5D,iFAAiF;AAEjF,+DAA+D;AAC/D,MAAM,KAAK,GAAG,wBAAwB,CAAC;AAEvC,kDAAkD;AAClD,MAAM,WAAW,GAAG,8DAA8D,CAAC;AASnF,SAAS,qBAAqB,CAAC,KAAe,EAAE,SAAiB;IAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAE3B,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,UAAU,IAAI,QAAQ;YAAE,SAAS;QAErC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC;YACN,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,CAAC;AAUD,SAAS,wBAAwB,CAC/B,KAAe,EACf,SAAiB,EACjB,SAA4B;IAE5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,OAA2B,CAAC;IAChC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,iBAAiB,GAAG,IAAA,uCAA0B,EAAC,SAAS,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAS,IAAI,MAAM,CAAC,sBAAsB,IAAA,wCAA2B,EAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC9G,MAAM,MAAM,GAAO,qBAAqB,CAAC;IACzC,MAAM,WAAW,GAAG,iBAAiB,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhC,IAAI,OAAO,KAAK,EAAE;YAAE,MAAM;QAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM;QAEpC,4CAA4C;QAC5C,IAAI,qDAAqD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM;QAEhF,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7E,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,cAAc,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI,OAAO;YAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED,gFAAgF;AAEhF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAC1C,MAAM,QAAQ,GAAG,oBAAoB,CAAC;AACtC,MAAM,OAAO,GAAI,qCAAqC,CAAC;AAEvD,SAAS,YAAY,CACnB,QAAkB,EAClB,aAAqB,EACrB,QAAkB;IAElB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAE1C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,UAAU,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,YAAY;YAAE,YAAY,GAAG,IAAI,CAAC;IACzC,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,KAAK,GAAG,YAAY,IAAI,GAAG,aAAa,GAAG,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC;IAExE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,iFAAiF;AAEjF,SAAgB,aAAa,CAC3B,QAAgB,EAChB,SAA4B,EAC5B,WAA0B;IAE1B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjC,MAAM,QAAQ,GAAI,IAAA,wBAAe,EAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,+CAA+C;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC;YAAE,SAAS;QAEjB,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,wBAAwB,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/F,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;QAEzE,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,iBAAiB,GAAG,GAAG,OAAO,KAAK,eAAe,EAAE,CAAC;QAE3D,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ;YACR,KAAK;YACL,KAAK;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACvE,IAAI,EAAE,CAAC,GAAG,CAAC;YACX,QAAQ,EAAE,IAAA,wBAAe,EAAC,OAAO,EAAE,WAAW,CAAC;YAC/C,iBAAiB;YACjB,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/parsers/rust.d.ts
CHANGED
|
@@ -15,4 +15,4 @@
|
|
|
15
15
|
* Path-based auto-tagging: directory segments starting with '@' become tags.
|
|
16
16
|
*/
|
|
17
17
|
import { LinkConfig, ParsedTest } from '../types';
|
|
18
|
-
export declare function parseRustFile(filePath: string, tagPrefix: string, linkConfigs?: LinkConfig[]): ParsedTest[];
|
|
18
|
+
export declare function parseRustFile(filePath: string, tagPrefix: string | string[], linkConfigs?: LinkConfig[]): ParsedTest[];
|
package/dist/parsers/rust.js
CHANGED
|
@@ -51,6 +51,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
51
51
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
52
|
exports.parseRustFile = parseRustFile;
|
|
53
53
|
const fs = __importStar(require("fs"));
|
|
54
|
+
const id_markers_1 = require("../id-markers");
|
|
54
55
|
const shared_1 = require("./shared");
|
|
55
56
|
// ─── Test attribute detection ─────────────────────────────────────────────────
|
|
56
57
|
const TEST_ATTR_RE = /^\s*#\[(?:tokio::)?test(?:\(.*\))?\]\s*$/;
|
|
@@ -75,7 +76,8 @@ function extractCommentBlockAbove(lines, attrLineIdx, tagPrefix) {
|
|
|
75
76
|
const docLines = [];
|
|
76
77
|
let azureId;
|
|
77
78
|
const tags = [];
|
|
78
|
-
const
|
|
79
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
80
|
+
const idRe = new RegExp(`//\\s*@(?!tags?:)(?:${(0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes)}):(\\d+)`);
|
|
79
81
|
const tagsRe = /\/\/\s*@tags:\s*(.+)/i;
|
|
80
82
|
const singleTagRe = /\/\/\s*@(\w+)\s*$/;
|
|
81
83
|
const docRe = /^\/\/[\/!]?\s?(.*)$/; // matches //, ///, //!
|
|
@@ -103,7 +105,7 @@ function extractCommentBlockAbove(lines, attrLineIdx, tagPrefix) {
|
|
|
103
105
|
continue;
|
|
104
106
|
}
|
|
105
107
|
const singleTagMatch = trimmed.match(singleTagRe);
|
|
106
|
-
if (singleTagMatch && singleTagMatch[1]
|
|
108
|
+
if (singleTagMatch && !markerTagPrefixes.includes(singleTagMatch[1])) {
|
|
107
109
|
tags.push(singleTagMatch[1]);
|
|
108
110
|
continue;
|
|
109
111
|
}
|
package/dist/parsers/rust.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/parsers/rust.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/parsers/rust.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/swift.d.ts
CHANGED
|
@@ -31,4 +31,4 @@
|
|
|
31
31
|
* Path-based auto-tagging: directory segments starting with '@' become tags.
|
|
32
32
|
*/
|
|
33
33
|
import { LinkConfig, ParsedTest } from '../types';
|
|
34
|
-
export declare function parseSwiftFile(filePath: string, tagPrefix: string, linkConfigs?: LinkConfig[]): ParsedTest[];
|
|
34
|
+
export declare function parseSwiftFile(filePath: string, tagPrefix: string | string[], linkConfigs?: LinkConfig[]): ParsedTest[];
|
package/dist/parsers/swift.js
CHANGED
|
@@ -68,6 +68,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
68
68
|
exports.parseSwiftFile = parseSwiftFile;
|
|
69
69
|
const fs = __importStar(require("fs"));
|
|
70
70
|
const path = __importStar(require("path"));
|
|
71
|
+
const id_markers_1 = require("../id-markers");
|
|
71
72
|
const shared_1 = require("./shared");
|
|
72
73
|
// ─── Test method detection ────────────────────────────────────────────────────
|
|
73
74
|
const TEST_METHOD_RE = /^\s*func\s+(test\w+)\s*\(/;
|
|
@@ -140,7 +141,8 @@ function extractDocBefore(lines, methodLineIdx) {
|
|
|
140
141
|
function extractCommentMetadataAbove(lines, methodLineIdx, tagPrefix) {
|
|
141
142
|
const tags = [];
|
|
142
143
|
let azureId;
|
|
143
|
-
const
|
|
144
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
145
|
+
const idRe = new RegExp(`//\\s*@(?!tags?:)(?:${(0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes)}):(\\d+)`);
|
|
144
146
|
const tagsListRe = /\/\/\s*@tags?\s*:\s*(.+)/i;
|
|
145
147
|
const singleTagRe = /\/\/\s*@(\w+)\s*$/;
|
|
146
148
|
for (let i = methodLineIdx - 1; i >= 0 && i >= methodLineIdx - 25; i--) {
|
|
@@ -160,7 +162,7 @@ function extractCommentMetadataAbove(lines, methodLineIdx, tagPrefix) {
|
|
|
160
162
|
continue;
|
|
161
163
|
}
|
|
162
164
|
const singleTag = trimmed.match(singleTagRe);
|
|
163
|
-
if (singleTag && singleTag[1]
|
|
165
|
+
if (singleTag && !markerTagPrefixes.includes(singleTag[1])) {
|
|
164
166
|
tags.push(singleTag[1]);
|
|
165
167
|
continue;
|
|
166
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swift.js","sourceRoot":"","sources":["../../src/parsers/swift.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"swift.js","sourceRoot":"","sources":["../../src/parsers/swift.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,4 +35,4 @@ export interface TabularRow {
|
|
|
35
35
|
* @param tagPrefix Tag prefix for TC ID tags (e.g. 'tc').
|
|
36
36
|
* @param linkConfigs Optional link configurations.
|
|
37
37
|
*/
|
|
38
|
-
export declare function parseTabularRows(rows: TabularRow[], filePath: string, _tagPrefix: string, linkConfigs: LinkConfig[] | undefined): ParsedTest[];
|
|
38
|
+
export declare function parseTabularRows(rows: TabularRow[], filePath: string, _tagPrefix: string | string[], linkConfigs: LinkConfig[] | undefined): ParsedTest[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabular.js","sourceRoot":"","sources":["../../src/parsers/tabular.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;AA0CH,4CA+DC;AAtGD,qCAA4D;AAE5D,iFAAiF;AAEjF,MAAM,cAAc,GAAG,sCAAsC,CAAC;AAC9D,MAAM,eAAe,GAAG,yFAAyF,CAAC;AAElH,0EAA0E;AAC1E,SAAS,cAAc,CAAC,GAAW;IACjC,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,oDAAoD;AACpD,SAAS,eAAe,CAAC,GAAW;IAClC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAWD;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAC9B,IAAkB,EAClB,QAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"tabular.js","sourceRoot":"","sources":["../../src/parsers/tabular.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,4 +35,4 @@
|
|
|
35
35
|
* Path-based auto-tagging: directory segments starting with '@' become tags.
|
|
36
36
|
*/
|
|
37
37
|
import { LinkConfig, ParsedTest } from '../types';
|
|
38
|
-
export declare function parseTestCafeFile(filePath: string, tagPrefix: string, linkConfigs?: LinkConfig[]): ParsedTest[];
|
|
38
|
+
export declare function parseTestCafeFile(filePath: string, tagPrefix: string | string[], linkConfigs?: LinkConfig[]): ParsedTest[];
|
package/dist/parsers/testcafe.js
CHANGED
|
@@ -72,6 +72,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
72
72
|
exports.parseTestCafeFile = parseTestCafeFile;
|
|
73
73
|
const fs = __importStar(require("fs"));
|
|
74
74
|
const path = __importStar(require("path"));
|
|
75
|
+
const id_markers_1 = require("../id-markers");
|
|
75
76
|
const shared_1 = require("./shared");
|
|
76
77
|
// ─── Test / fixture detection ─────────────────────────────────────────────────
|
|
77
78
|
/** Matches a regular test call (no .meta chaining). */
|
|
@@ -143,7 +144,8 @@ function extractJsdocBefore(lines, testLineIdx) {
|
|
|
143
144
|
function extractCommentMetadataAbove(lines, testLineIdx, tagPrefix) {
|
|
144
145
|
const tags = [];
|
|
145
146
|
let azureId;
|
|
146
|
-
const
|
|
147
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
148
|
+
const idRe = new RegExp(`//\\s*@(?!tags?:)(?:${(0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes)}):(\\d+)`);
|
|
147
149
|
const tagsListRe = /\/\/\s*@tags?\s*:\s*(.+)/i;
|
|
148
150
|
const singleTagRe = /\/\/\s*@(\w+)\s*$/;
|
|
149
151
|
for (let i = testLineIdx - 1; i >= 0 && i >= testLineIdx - 25; i--) {
|
|
@@ -163,7 +165,7 @@ function extractCommentMetadataAbove(lines, testLineIdx, tagPrefix) {
|
|
|
163
165
|
continue;
|
|
164
166
|
}
|
|
165
167
|
const singleTag = trimmed.match(singleTagRe);
|
|
166
|
-
if (singleTag && singleTag[1]
|
|
168
|
+
if (singleTag && !markerTagPrefixes.includes(singleTag[1])) {
|
|
167
169
|
tags.push(singleTag[1]);
|
|
168
170
|
continue;
|
|
169
171
|
}
|
|
@@ -184,6 +186,8 @@ function extractCommentMetadataAbove(lines, testLineIdx, tagPrefix) {
|
|
|
184
186
|
function extractMetaChainResult(lines, startLineIdx, tagPrefix) {
|
|
185
187
|
let azureId;
|
|
186
188
|
const tags = [];
|
|
189
|
+
const markerTagPrefixes = (0, id_markers_1.normalizeMarkerTagPrefixes)(tagPrefix);
|
|
190
|
+
const markerTagPattern = (0, id_markers_1.buildMarkerTagPrefixPattern)(markerTagPrefixes);
|
|
187
191
|
const scanEnd = Math.min(startLineIdx + 8, lines.length);
|
|
188
192
|
// Accumulate trimmed source lines until we can see the )(title pattern
|
|
189
193
|
let collected = '';
|
|
@@ -202,14 +206,14 @@ function extractMetaChainResult(lines, startLineIdx, tagPrefix) {
|
|
|
202
206
|
if (!callTitle)
|
|
203
207
|
return null;
|
|
204
208
|
// Extract TC ID — key-value form: .meta('tc', '12345')
|
|
205
|
-
const kvRe = new RegExp(`\\.meta\\s*\\(\\s*['"]
|
|
209
|
+
const kvRe = new RegExp(`\\.meta\\s*\\(\\s*['"](?:${markerTagPattern})['"]\\s*,\\s*['"]([\\d]+)['"]`);
|
|
206
210
|
const kvMatch = collected.match(kvRe);
|
|
207
211
|
if (kvMatch) {
|
|
208
212
|
azureId = parseInt(kvMatch[1], 10);
|
|
209
213
|
}
|
|
210
214
|
// Extract TC ID — object form: .meta({ tc: '12345', ... }) or .meta({ "tc": '12345' })
|
|
211
215
|
if (azureId === undefined) {
|
|
212
|
-
const objRe = new RegExp(`\\.meta\\s*\\(\\s*\\{[^}]*['"]
|
|
216
|
+
const objRe = new RegExp(`\\.meta\\s*\\(\\s*\\{[^}]*['"]?(?:${markerTagPattern})['"]?\\s*:\\s*['"]([\\d]+)['"]`);
|
|
213
217
|
const objMatch = collected.match(objRe);
|
|
214
218
|
if (objMatch) {
|
|
215
219
|
azureId = parseInt(objMatch[1], 10);
|
|
@@ -221,7 +225,7 @@ function extractMetaChainResult(lines, startLineIdx, tagPrefix) {
|
|
|
221
225
|
const pairRe = /['"]?([\w]+)['"]?\s*:\s*['"]([^'"]+)['"]/g;
|
|
222
226
|
let pm;
|
|
223
227
|
while ((pm = pairRe.exec(metaObjMatch[1])) !== null) {
|
|
224
|
-
if (pm[1]
|
|
228
|
+
if (!markerTagPrefixes.includes(pm[1]))
|
|
225
229
|
tags.push(pm[2]);
|
|
226
230
|
}
|
|
227
231
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testcafe.js","sourceRoot":"","sources":["../../src/parsers/testcafe.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"testcafe.js","sourceRoot":"","sources":["../../src/parsers/testcafe.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwQH,8CA8EC;AApVD,uCAAyB;AACzB,2CAA6B;AAE7B,8CAAwF;AAExF,qCAA4D;AAE5D,iFAAiF;AAEjF,uDAAuD;AACvD,MAAM,YAAY,GAChB,sCAAsC,CAAC;AAEzC,MAAM,aAAa,GACjB,mEAAmE,CAAC;AAEtE,MAAM,gBAAgB,GACpB,4EAA4E,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,aAAa,GAAG,sCAAsC,CAAC;AAE7D,iFAAiF;AAEjF,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,CAAC;AAED,iFAAiF;AAEjF;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAAe,EAAE,WAAmB;IAChE,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAEvD,KAAK,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,UAAU,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC1C,IAAI,CAAC,EAAE,CAAC;gBACN,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,iFAAiF;AAEjF,SAAS,kBAAkB,CAAC,KAAe,EAAE,WAAmB;IAC9D,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;IAExB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QACtD,MAAM;IACR,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAExD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,CAAC;IACJ,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACd,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,MAAM;QAC7C,CAAC,EAAE,CAAC;IACN,CAAC;IAED,OAAO,GAAG;SACP,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,CAAC;SACE,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SAC5B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,IAAI,EAAE,CACV;SACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,CAAC;AASD,SAAS,2BAA2B,CAClC,KAAe,EACf,WAAmB,EACnB,SAA4B;IAE5B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAA2B,CAAC;IAChC,MAAM,iBAAiB,GAAG,IAAA,uCAA0B,EAAC,SAAS,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAS,IAAI,MAAM,CAAC,uBAAuB,IAAA,wCAA2B,EAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC/G,MAAM,UAAU,GAAG,2BAA2B,CAAC;IAC/C,MAAM,WAAW,GAAG,mBAAmB,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhC,IAAI,OAAO,KAAK,EAAE;YAAE,MAAM;QAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM;QAE9F,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnC,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,SAAS,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAYD;;;;;;;;;;GAUG;AACH,SAAS,sBAAsB,CAC7B,KAAe,EACf,YAAoB,EACpB,SAA4B;IAE5B,IAAI,OAA2B,CAAC;IAChC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,iBAAiB,GAAG,IAAA,uCAA0B,EAAC,SAAS,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG,IAAA,wCAA2B,EAAC,iBAAiB,CAAC,CAAC;IAExE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzD,uEAAuE;IACvE,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,SAAS,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7D,gEAAgE;QAChE,gDAAgD;QAChD,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC;aAC5B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,uDAAuD;QACvD,MAAM,IAAI,GAAG,IAAI,MAAM,CACrB,4BAA4B,gBAAgB,gCAAgC,CAC7E,CAAC;QACF,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,uFAAuF;QACvF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,MAAM,CACtB,qCAAqC,gBAAgB,iCAAiC,CACvF,CAAC;YACF,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAClE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,2CAA2C,CAAC;YAC3D,IAAI,EAA0B,CAAC;YAC/B,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AAEjF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAC1C,MAAM,QAAQ,GAAW,oBAAoB,CAAC;AAC9C,MAAM,OAAO,GAAY,qCAAqC,CAAC;AAE/D,SAAS,YAAY,CACnB,UAAoB,EACpB,aAAqB;IAErB,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAE1C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,UAAU,EAAE,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,KAAK;YAAE,KAAK,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,aAAa,EAAE,KAAK,EAAE,CAAC;AAClD,CAAC;AAED,iFAAiF;AAEjF,SAAgB,iBAAiB,CAC/B,QAAgB,EAChB,SAA4B,EAC5B,WAA0B;IAE1B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,GAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACzC,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC;SAC9C,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG,IAAA,wBAAe,EAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAI,sEAAsE;QAC9F,IAAI,SAAS,GAAK,EAAE,CAAC;QACrB,IAAI,WAA+B,CAAC;QACpC,IAAI,QAAQ,GAAa,EAAE,CAAC;QAE5B,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,2EAA2E;YAC3E,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,SAAS,GAAK,SAAS,CAAC,SAAS,CAAC;YAClC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC;YAChC,QAAQ,GAAM,SAAS,CAAC,IAAI,CAAC;YAC7B,iFAAiF;YACjF,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,mDAAmD;QAEjF,CAAC;aAAM,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,2EAA2E;YAC3E,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC;gBAAE,SAAS;YAEjB,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;iBACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE5B,CAAC;aAAM,CAAC;YACN,SAAS;QACX,CAAC;QAED,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,MAAM,UAAU,GAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,2BAA2B,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QACjG,MAAM,OAAO,GAAmB,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAEzE,yDAAyD;QACzD,MAAM,OAAO,GAAG,WAAW,IAAI,GAAG,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAE7D,MAAM,iBAAiB,GAAG,OAAO;YAC/B,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAChD,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1C,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ;YACR,KAAK;YACL,KAAK;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACvE,IAAI,EAAE,WAAW,GAAG,CAAC,EAAE,sCAAsC;YAC7D,QAAQ,EAAE,IAAA,wBAAe,EAAC,OAAO,EAAE,WAAW,CAAC;YAC/C,iBAAiB;YACjB,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/sync/engine.js
CHANGED
|
@@ -51,8 +51,10 @@ const fs = __importStar(require("fs"));
|
|
|
51
51
|
const glob_1 = require("glob");
|
|
52
52
|
const path = __importStar(require("path"));
|
|
53
53
|
const summarizer_1 = require("../ai/summarizer");
|
|
54
|
+
const html_1 = require("../html");
|
|
54
55
|
const client_1 = require("../azure/client");
|
|
55
56
|
const test_cases_1 = require("../azure/test-cases");
|
|
57
|
+
const id_markers_1 = require("../id-markers");
|
|
56
58
|
const csharp_1 = require("../parsers/csharp");
|
|
57
59
|
const csv_1 = require("../parsers/csv");
|
|
58
60
|
const dart_1 = require("../parsers/dart");
|
|
@@ -116,13 +118,13 @@ function supportsPullWriteback(localType) {
|
|
|
116
118
|
return localType === 'gherkin' || localType === 'reqnroll' || localType === 'markdown' || localType === 'csv';
|
|
117
119
|
}
|
|
118
120
|
function buildPushDiff(test, remote, config, cached) {
|
|
119
|
-
const
|
|
121
|
+
const markerTagPrefixes = (0, id_markers_1.getMarkerTagPrefixes)(config);
|
|
120
122
|
const desiredAzure = (0, test_cases_1.buildAzureSyncContent)(test, config.sync?.format);
|
|
121
123
|
const localStepsText = desiredAzure.steps.map((s) => `${s.action}|${s.expected ?? ''}`).join('\n');
|
|
122
124
|
const remoteStepsText = remote.steps.map((s) => `${s.action}|${s.expected ?? ''}`).join('\n');
|
|
123
125
|
const titleChanged = remote.title !== desiredAzure.title;
|
|
124
126
|
const stepsChanged = localStepsText !== remoteStepsText;
|
|
125
|
-
const localTags = new Set(test.tags.filter((t) => !
|
|
127
|
+
const localTags = new Set(test.tags.filter((t) => !(0, id_markers_1.isMarkerTag)(t, markerTagPrefixes)));
|
|
126
128
|
const remoteTags = new Set(remote.tags);
|
|
127
129
|
const tagsChanged = [...localTags].some((t) => !remoteTags.has(t));
|
|
128
130
|
const localDescHash = (0, cache_1.hashString)(test.description);
|
|
@@ -155,7 +157,7 @@ function buildPushDiff(test, remote, config, cached) {
|
|
|
155
157
|
return { changedFields, diffDetail };
|
|
156
158
|
}
|
|
157
159
|
async function parseLocalFiles(filePaths, config, tagsFilter) {
|
|
158
|
-
const tagPrefix = config
|
|
160
|
+
const tagPrefix = (0, id_markers_1.getMarkerTagPrefixes)(config);
|
|
159
161
|
const linkConfigs = config.sync?.links;
|
|
160
162
|
const autoLinkStories = config.sync?.autoLinkStories ?? false;
|
|
161
163
|
const attachmentsConfig = config.sync?.attachments;
|
|
@@ -463,7 +465,7 @@ async function pushSingle(config, configDir, opts) {
|
|
|
463
465
|
` Check: correct project name, testPlan.id, and that your PAT has "Test Management: Read & Write" permission.`);
|
|
464
466
|
}
|
|
465
467
|
}
|
|
466
|
-
const tagPrefix = config
|
|
468
|
+
const tagPrefix = (0, id_markers_1.getPreferredMarkerTagPrefix)(config);
|
|
467
469
|
const titleField = config.sync?.titleField ?? 'System.Title';
|
|
468
470
|
const conflictAction = config.sync?.conflictAction ?? 'overwrite';
|
|
469
471
|
const disableLocal = config.sync?.disableLocalChanges ?? false;
|
|
@@ -536,7 +538,12 @@ async function pushSingle(config, configDir, opts) {
|
|
|
536
538
|
results.push(result);
|
|
537
539
|
opts.onProgress?.(++done, resolvedTests.length, result);
|
|
538
540
|
};
|
|
539
|
-
|
|
541
|
+
// Concurrency invariant: workers share pushQueue, results, pendingWritebacks,
|
|
542
|
+
// suiteCache, and conditionSuiteCache via plain Array/Map mutations. This is
|
|
543
|
+
// safe because Node.js is single-threaded — array.shift() and map.set() execute
|
|
544
|
+
// atomically within a tick. Suspension only occurs at `await` boundaries, so
|
|
545
|
+
// no two workers mutate shared state simultaneously.
|
|
546
|
+
const PUSH_CONCURRENCY = 4;
|
|
540
547
|
const pushQueue = [...resolvedTests];
|
|
541
548
|
const pushWorkers = Array.from({ length: Math.min(PUSH_CONCURRENCY, pushQueue.length) }, async () => {
|
|
542
549
|
while (pushQueue.length > 0) {
|
|
@@ -700,8 +707,10 @@ async function pushSingle(config, configDir, opts) {
|
|
|
700
707
|
}
|
|
701
708
|
}
|
|
702
709
|
}
|
|
703
|
-
// Removed TC detection
|
|
704
|
-
|
|
710
|
+
// Removed TC detection is only safe on full-scope runs.
|
|
711
|
+
// Tag-filtered or condition-filtered pushes intentionally operate on a subset.
|
|
712
|
+
const shouldDetectRemoved = !opts.tags && !config.local.condition;
|
|
713
|
+
if (shouldDetectRemoved) {
|
|
705
714
|
try {
|
|
706
715
|
// Reuse the pre-loaded remote TCs if we already fetched them for automatedTestName
|
|
707
716
|
// matching, otherwise fetch now. This avoids a redundant round-trip.
|
|
@@ -754,7 +763,7 @@ async function pullSingle(config, configDir, opts) {
|
|
|
754
763
|
const tests = parsed.tests;
|
|
755
764
|
const client = await client_1.AzureClient.create(config);
|
|
756
765
|
const titleField = config.sync?.titleField ?? 'System.Title';
|
|
757
|
-
const tagPrefix = config
|
|
766
|
+
const tagPrefix = (0, id_markers_1.getPreferredMarkerTagPrefix)(config);
|
|
758
767
|
const disableLocal = config.sync?.disableLocalChanges ?? false;
|
|
759
768
|
const results = [];
|
|
760
769
|
const cache = (0, cache_1.loadCache)(configDir);
|
|
@@ -841,31 +850,41 @@ async function pullSingle(config, configDir, opts) {
|
|
|
841
850
|
}
|
|
842
851
|
// Pull-create: generate new local files for Azure TCs that have no local counterpart
|
|
843
852
|
if (config.sync?.pull?.enableCreatingNewLocalTestCases && !disableLocal) {
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
+
if (!supportsPullWriteback(config.local.type)) {
|
|
854
|
+
results.push({
|
|
855
|
+
action: 'error',
|
|
856
|
+
filePath: '',
|
|
857
|
+
title: '',
|
|
858
|
+
detail: `Pull-create is not supported for local.type "${config.local.type}".`,
|
|
859
|
+
});
|
|
860
|
+
}
|
|
861
|
+
else {
|
|
862
|
+
try {
|
|
863
|
+
const remoteTcs = await (0, test_cases_1.getTestCasesInSuite)(client, config);
|
|
864
|
+
const linkedIds = new Set(linked.map((t) => t.azureId));
|
|
865
|
+
const unlinked = remoteTcs.filter((tc) => !linkedIds.has(tc.id));
|
|
866
|
+
for (const tc of unlinked) {
|
|
867
|
+
try {
|
|
868
|
+
const newFilePath = createLocalFileFromRemote(tc, config, configDir, tagPrefix, !opts.dryRun);
|
|
869
|
+
if (!opts.dryRun) {
|
|
870
|
+
updateCacheEntry(cache, { filePath: newFilePath, title: tc.title, description: tc.description, steps: tc.steps.map((s) => ({ keyword: 'Step', text: s.action, expected: s.expected })), tags: tc.tags, line: 1, azureId: tc.id }, tc);
|
|
871
|
+
}
|
|
872
|
+
results.push({
|
|
873
|
+
action: 'created',
|
|
874
|
+
filePath: newFilePath,
|
|
875
|
+
title: tc.title,
|
|
876
|
+
azureId: tc.id,
|
|
877
|
+
detail: 'new local file from Azure TC',
|
|
878
|
+
});
|
|
879
|
+
}
|
|
880
|
+
catch (err) {
|
|
881
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
882
|
+
results.push({ action: 'error', filePath: '', title: tc.title, azureId: tc.id, detail: `pull-create: ${msg}` });
|
|
853
883
|
}
|
|
854
|
-
results.push({
|
|
855
|
-
action: 'created',
|
|
856
|
-
filePath: newFilePath,
|
|
857
|
-
title: tc.title,
|
|
858
|
-
azureId: tc.id,
|
|
859
|
-
detail: 'new local file from Azure TC',
|
|
860
|
-
});
|
|
861
|
-
}
|
|
862
|
-
catch (err) {
|
|
863
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
864
|
-
results.push({ action: 'error', filePath: '', title: tc.title, azureId: tc.id, detail: `pull-create: ${msg}` });
|
|
865
884
|
}
|
|
866
885
|
}
|
|
886
|
+
catch { /* best-effort */ }
|
|
867
887
|
}
|
|
868
|
-
catch { /* best-effort */ }
|
|
869
888
|
}
|
|
870
889
|
if (!opts.dryRun) {
|
|
871
890
|
(0, cache_1.saveCache)(configDir, cache);
|
|
@@ -903,8 +922,10 @@ function applyRemoteToLocal(test, newTitle, newSteps, newDescription, localType,
|
|
|
903
922
|
else if (localType === 'csv') {
|
|
904
923
|
(0, csv_1.applyRemoteToCsv)(test.filePath, test.title, newTitle, newSteps);
|
|
905
924
|
}
|
|
906
|
-
|
|
907
|
-
|
|
925
|
+
else if (localType === 'excel') {
|
|
926
|
+
throw new Error('Pull is not supported for local.type "excel" (in-place xlsx editing is not implemented).');
|
|
927
|
+
}
|
|
928
|
+
// csharp / java / python / javascript / etc.: pull not supported (code files are managed locally)
|
|
908
929
|
}
|
|
909
930
|
function applyRemoteToGherkin(test, newTitle, newSteps) {
|
|
910
931
|
const raw = fs.readFileSync(test.filePath, 'utf8');
|
|
@@ -924,27 +945,7 @@ function applyRemoteToGherkin(test, newTitle, newSteps) {
|
|
|
924
945
|
lines.splice(stepStart, stepEnd - stepStart, ...stepLines);
|
|
925
946
|
fs.writeFileSync(test.filePath, lines.join('\n'), 'utf8');
|
|
926
947
|
}
|
|
927
|
-
|
|
928
|
-
function stripHtml(html) {
|
|
929
|
-
let result = html;
|
|
930
|
-
let previous;
|
|
931
|
-
do {
|
|
932
|
-
previous = result;
|
|
933
|
-
result = result
|
|
934
|
-
.replace(/<br\s*\/?>/gi, '\n')
|
|
935
|
-
.replace(/<\/p>/gi, '\n')
|
|
936
|
-
.replace(/<[^>]+>/g, '');
|
|
937
|
-
} while (result !== previous);
|
|
938
|
-
return result
|
|
939
|
-
// Do not decode < or > to avoid reintroducing HTML tag delimiters such as <script>.
|
|
940
|
-
// .replace(/</g, '<')
|
|
941
|
-
// .replace(/>/g, '>')
|
|
942
|
-
.replace(/"/g, '"')
|
|
943
|
-
.replace(/ /g, ' ')
|
|
944
|
-
.replace(/&/g, '&')
|
|
945
|
-
.replace(/\n{3,}/g, '\n\n')
|
|
946
|
-
.trim();
|
|
947
|
-
}
|
|
948
|
+
// stripHtml is imported from ../html (shared, XSS-safe — does not decode </>)
|
|
948
949
|
function applyRemoteToMarkdown(test, newTitle, newSteps, newDescription, tagPrefix) {
|
|
949
950
|
const raw = fs.readFileSync(test.filePath, 'utf8');
|
|
950
951
|
const lines = raw.split('\n');
|
|
@@ -1000,7 +1001,7 @@ function applyRemoteToMarkdown(test, newTitle, newSteps, newDescription, tagPref
|
|
|
1000
1001
|
}
|
|
1001
1002
|
// Update description (Gap 8)
|
|
1002
1003
|
if (newDescription !== undefined && descEnd !== -1) {
|
|
1003
|
-
const cleanDesc = stripHtml(newDescription);
|
|
1004
|
+
const cleanDesc = (0, html_1.stripHtml)(newDescription);
|
|
1004
1005
|
if (cleanDesc) {
|
|
1005
1006
|
// Description block is headingLineIdx+1 .. descEnd (skip comment lines)
|
|
1006
1007
|
let descBlockStart = headingLineIdx + 1;
|
|
@@ -1077,7 +1078,7 @@ function buildPullGherkinContent(tc, tagPrefix) {
|
|
|
1077
1078
|
lines.push(`Feature: ${tc.title}`);
|
|
1078
1079
|
if (tc.description) {
|
|
1079
1080
|
lines.push('');
|
|
1080
|
-
for (const line of stripHtml(tc.description).split('\n')) {
|
|
1081
|
+
for (const line of (0, html_1.stripHtml)(tc.description).split('\n')) {
|
|
1081
1082
|
lines.push(` ${line}`);
|
|
1082
1083
|
}
|
|
1083
1084
|
}
|
|
@@ -1109,7 +1110,7 @@ function buildPullMarkdownContent(tc, tagPrefix) {
|
|
|
1109
1110
|
lines.push('');
|
|
1110
1111
|
}
|
|
1111
1112
|
if (tc.description) {
|
|
1112
|
-
lines.push(stripHtml(tc.description));
|
|
1113
|
+
lines.push((0, html_1.stripHtml)(tc.description));
|
|
1113
1114
|
lines.push('');
|
|
1114
1115
|
}
|
|
1115
1116
|
// Scenario heading with TC ID
|