ado-sync 0.1.22 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,7 +17,7 @@ Local files ado-sync Azure DevOps
17
17
  .csv files ── push ──► (push-only)
18
18
  .xlsx files ── push ──► (push-only)
19
19
  write ID back
20
- @tc:12345 / <!-- tc: 12345 --> / col A
20
+ @tc:12345 / col A (csv/xlsx)
21
21
  ```
22
22
 
23
23
  On the **first push** of a scenario, a new Test Case is created in Azure DevOps and its ID is written back into the local file as a tag or comment. Every subsequent push uses that ID to update the existing Test Case. Pulling fetches the latest title and steps from Azure and overwrites the local file.
@@ -334,7 +334,7 @@ After a scenario is pushed for the first time, ado-sync writes the Azure Test Ca
334
334
  | Format | Writeback location |
335
335
  |--------|--------------------|
336
336
  | Gherkin | `@tc:12345` tag above the `Scenario:` line |
337
- | Markdown | `<!-- tc: 12345 -->` comment after the `### heading` |
337
+ | Markdown | `@tc:12345` tag after the `### heading` |
338
338
  | CSV | Numeric ID in column A of the matching title row |
339
339
  | Excel | Numeric ID in cell A of the matching title row |
340
340
 
@@ -368,11 +368,11 @@ For `Scenario Outline`, a **single** parametrized Test Case is created in Azure
368
368
 
369
369
  ### Markdown
370
370
 
371
- The ID comment is inserted on the line immediately after the `### heading`:
371
+ The ID tag is inserted on the line immediately after the `### heading`:
372
372
 
373
373
  ```markdown
374
374
  ### 1. Login (happy path)
375
- <!-- tc: 1042 -->
375
+ @tc:1042
376
376
 
377
377
  Assumption: Fresh browser session.
378
378
 
@@ -388,8 +388,6 @@ Expected results:
388
388
  ---
389
389
  ```
390
390
 
391
- The comment is invisible when the Markdown is rendered.
392
-
393
391
  ### Custom prefix
394
392
 
395
393
  Change the `sync.tagPrefix` in your config to use a different prefix:
@@ -400,7 +398,7 @@ Change the `sync.tagPrefix` in your config to use a different prefix:
400
398
 
401
399
  Result:
402
400
  - Gherkin: `@azure:1042`
403
- - Markdown: `<!-- azure: 1042 -->`
401
+ - Markdown: `@azure:1042`
404
402
 
405
403
  > **Warning:** Changing the prefix on an existing project means all existing ID tags will no longer be recognised. Do a project-wide find-and-replace on the old prefix before changing it.
406
404
 
@@ -449,7 +447,7 @@ Add a `<!-- tags: -->` HTML comment anywhere inside a scenario block to assign t
449
447
 
450
448
  ```markdown
451
449
  ### Login with valid credentials
452
- <!-- tc: 1042 -->
450
+ @tc:1042
453
451
  <!-- tags: @smoke, @regression -->
454
452
 
455
453
  Steps:
@@ -644,7 +642,7 @@ Tags matching a configured `links` prefix are turned into Azure DevOps work item
644
642
 
645
643
  ```markdown
646
644
  ### User can add items to cart
647
- <!-- tc: 1042 -->
645
+ @tc:1042
648
646
  <!-- tags: @story:555, @bug:789 -->
649
647
  ```
650
648
 
@@ -1,19 +1,19 @@
1
1
  /**
2
2
  * Excel (.xlsx) test spec parser.
3
3
  *
4
- * Reads the Azure DevOps / SpecSync xlsx export format. The xlsx files produced
5
- * by this toolchain use a custom non-standard structure (no shared strings,
6
- * inline strings for rich-text step cells), so we parse the raw XML directly
7
- * using JSZip (already a transitive dependency) instead of a heavyweight xlsx
8
- * library that may not handle this format.
4
+ * Reads the Azure DevOps / SpecSync xlsx export format.
9
5
  *
10
- * Cell types observed:
11
- * t="str" plain string in <v>
12
- * t="n" number in <v>
13
- * t="inlineStr" → rich text in <is><r><t> …</t></r></is>; concat all <t> runs
6
+ * Cell types handled:
7
+ * t="s" shared string; <v> holds an index into xl/sharedStrings.xml
8
+ * t="str" formula-result string in <v>
9
+ * t="n" / none number in <v>
10
+ * t="inlineStr"→ rich text in <is><r><t>…</t></r></is>; concat all <t> runs
14
11
  *
15
- * ID writeback rewrites the xlsx XML in place (updates the ID cell on the
16
- * matching title row).
12
+ * Rows in xlsx are sparse empty cells are omitted. We restore correct column
13
+ * positions using the cell reference attribute (r="C5" → col index 2).
14
+ *
15
+ * ID writeback rewrites the xlsx XML in place (updates or inserts the ID cell
16
+ * on the matching title row).
17
17
  */
18
18
  import { LinkConfig, ParsedTest } from '../types';
19
19
  export declare function parseExcelFile(filePath: string, tagPrefix: string, linkConfigs?: LinkConfig[]): Promise<ParsedTest[]>;
@@ -21,10 +21,10 @@ export declare function parseExcelFile(filePath: string, tagPrefix: string, link
21
21
  * Write (or update) the TC ID in column A of the matching title row in an xlsx file.
22
22
  *
23
23
  * Strategy:
24
- * 1. Load the xlsx zip.
25
- * 2. Parse the sheet XML.
26
- * 3. Find the row matching the test title where ID is currently empty.
27
- * 4. Replace the empty ID cell XML with a numeric cell containing the new id.
28
- * 5. Repack the zip and write back.
24
+ * 1. Load the xlsx zip and shared strings.
25
+ * 2. Find the row where col C (Title) matches and col D (Test Step) is empty.
26
+ * 3. If col A cell exists, replace its value; if it's missing (sparse row),
27
+ * insert a new numeric cell at the start of the row.
28
+ * 4. Repack and write.
29
29
  */
30
30
  export declare function writebackExcel(filePath: string, title: string, id: number): Promise<void>;
@@ -2,19 +2,19 @@
2
2
  /**
3
3
  * Excel (.xlsx) test spec parser.
4
4
  *
5
- * Reads the Azure DevOps / SpecSync xlsx export format. The xlsx files produced
6
- * by this toolchain use a custom non-standard structure (no shared strings,
7
- * inline strings for rich-text step cells), so we parse the raw XML directly
8
- * using JSZip (already a transitive dependency) instead of a heavyweight xlsx
9
- * library that may not handle this format.
5
+ * Reads the Azure DevOps / SpecSync xlsx export format.
10
6
  *
11
- * Cell types observed:
12
- * t="str" plain string in <v>
13
- * t="n" number in <v>
14
- * t="inlineStr" → rich text in <is><r><t> …</t></r></is>; concat all <t> runs
7
+ * Cell types handled:
8
+ * t="s" shared string; <v> holds an index into xl/sharedStrings.xml
9
+ * t="str" formula-result string in <v>
10
+ * t="n" / none number in <v>
11
+ * t="inlineStr"→ rich text in <is><r><t>…</t></r></is>; concat all <t> runs
15
12
  *
16
- * ID writeback rewrites the xlsx XML in place (updates the ID cell on the
17
- * matching title row).
13
+ * Rows in xlsx are sparse empty cells are omitted. We restore correct column
14
+ * positions using the cell reference attribute (r="C5" → col index 2).
15
+ *
16
+ * ID writeback rewrites the xlsx XML in place (updates or inserts the ID cell
17
+ * on the matching title row).
18
18
  */
19
19
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
20
  if (k2 === undefined) k2 = k;
@@ -64,28 +64,73 @@ function detectNsPrefix(xml) {
64
64
  const m = xml.match(/xmlns(?::(\w+))?="http:\/\/schemas\.openxmlformats\.org\/spreadsheetml\/2006\/main"/);
65
65
  return m?.[1] ? `${m[1]}:` : '';
66
66
  }
67
- /** Extract the text value from a cell element string. */
68
- function cellText(cellXml, nsPrefix) {
69
- // inlineStr: <{ns}is> containing <{ns}r><{ns}t>…</…> runs
67
+ /** Unescape XML entities. */
68
+ function unescapeXml(s) {
69
+ return s
70
+ .replace(/&lt;/g, '<')
71
+ .replace(/&gt;/g, '>')
72
+ .replace(/&amp;/g, '&')
73
+ .replace(/&quot;/g, '"')
74
+ .replace(/&apos;/g, "'");
75
+ }
76
+ /**
77
+ * Parse xl/sharedStrings.xml into a lookup array.
78
+ * Each <si> element is one entry; rich-text runs (<r><t>…</t></r>) are concatenated.
79
+ */
80
+ function parseSharedStrings(xml) {
81
+ const strings = [];
82
+ const siRe = /<si[^>]*>([\s\S]*?)<\/si>/g;
83
+ let m;
84
+ while ((m = siRe.exec(xml)) !== null) {
85
+ const tRe = /<t[^>]*>([\s\S]*?)<\/t>/g;
86
+ const parts = [];
87
+ let tm;
88
+ while ((tm = tRe.exec(m[1])) !== null) {
89
+ parts.push(unescapeXml(tm[1]));
90
+ }
91
+ strings.push(parts.join(''));
92
+ }
93
+ return strings;
94
+ }
95
+ /** Convert column letter(s) to 0-based index: A→0, B→1, Z→25, AA→26. */
96
+ function colLetterToIndex(letters) {
97
+ let n = 0;
98
+ for (const ch of letters.toUpperCase()) {
99
+ n = n * 26 + (ch.charCodeAt(0) - 64);
100
+ }
101
+ return n - 1;
102
+ }
103
+ /**
104
+ * Extract the text value from a single <c> element, resolving shared strings.
105
+ * cellXml: the full <c …>…</c> XML string.
106
+ */
107
+ function cellValue(cellXml, nsPrefix, sharedStrings) {
108
+ // inlineStr: <ns:is> containing <ns:r><ns:t>…</ns:t></ns:r> runs
70
109
  const isMatch = cellXml.match(new RegExp(`<${nsPrefix}is>([\\s\\S]*?)<\\/${nsPrefix}is>`));
71
110
  if (isMatch) {
72
111
  const tRe = new RegExp(`<${nsPrefix}t[^>]*>([\\s\\S]*?)<\\/${nsPrefix}t>`, 'g');
73
112
  const parts = [];
74
113
  let m;
75
114
  while ((m = tRe.exec(isMatch[1])) !== null) {
76
- parts.push(m[1].replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&').replace(/&quot;/g, '"'));
115
+ parts.push(unescapeXml(m[1]));
77
116
  }
78
117
  return parts.join('');
79
118
  }
80
- // plain value in <v>
81
119
  const vMatch = cellXml.match(new RegExp(`<${nsPrefix}v>([\\s\\S]*?)<\\/${nsPrefix}v>`));
82
- if (vMatch) {
83
- return vMatch[1].replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&').replace(/&quot;/g, '"');
120
+ if (!vMatch)
121
+ return '';
122
+ // Shared string: t="s"
123
+ if (/\bt="s"/.test(cellXml)) {
124
+ const idx = parseInt(vMatch[1], 10);
125
+ return sharedStrings[idx] ?? '';
84
126
  }
85
- return '';
127
+ return unescapeXml(vMatch[1]);
86
128
  }
87
- /** Parse all rows from the sheet XML. Returns array of string-array rows. */
88
- function parseSheetXml(xml) {
129
+ /**
130
+ * Parse all rows from the sheet XML into string[][] with correct column positions.
131
+ * Uses the cell reference attribute (r="C5") to fill sparse rows correctly.
132
+ */
133
+ function parseSheetXml(xml, sharedStrings) {
89
134
  const nsPrefix = detectNsPrefix(xml);
90
135
  const rowRe = new RegExp(`<${nsPrefix}row([^>]*)>([\\s\\S]*?)<\\/${nsPrefix}row>`, 'g');
91
136
  const cellRe = new RegExp(`<${nsPrefix}c([^>]*)>([\\s\\S]*?)<\\/${nsPrefix}c>`, 'g');
@@ -93,12 +138,25 @@ function parseSheetXml(xml) {
93
138
  let rowMatch;
94
139
  while ((rowMatch = rowRe.exec(xml)) !== null) {
95
140
  const rowContent = rowMatch[2];
96
- const cells = [];
141
+ const cellData = [];
97
142
  let cellMatch;
98
143
  while ((cellMatch = cellRe.exec(rowContent)) !== null) {
99
- cells.push(cellText(cellMatch[0], nsPrefix));
144
+ const attrs = cellMatch[1];
145
+ // r="C5" → extract column letters "C"
146
+ const refMatch = attrs.match(/\br="([A-Z]+)\d+"/i);
147
+ const colIdx = refMatch ? colLetterToIndex(refMatch[1]) : cellData.length;
148
+ const value = cellValue(cellMatch[0], nsPrefix, sharedStrings);
149
+ cellData.push({ colIdx, value });
150
+ }
151
+ if (cellData.length === 0)
152
+ continue; // skip fully empty rows
153
+ // Build dense row array: fill gaps with empty strings
154
+ const maxColIdx = Math.max(...cellData.map((c) => c.colIdx));
155
+ const row = new Array(maxColIdx + 1).fill('');
156
+ for (const { colIdx, value } of cellData) {
157
+ row[colIdx] = value;
100
158
  }
101
- rows.push(cells);
159
+ rows.push(row);
102
160
  }
103
161
  return rows;
104
162
  }
@@ -106,18 +164,22 @@ function parseSheetXml(xml) {
106
164
  async function parseExcelFile(filePath, tagPrefix, linkConfigs) {
107
165
  const buffer = fs.readFileSync(filePath);
108
166
  const zip = await jszip_1.default.loadAsync(buffer);
109
- // Find the sheet XML may be sheet.xml or sheet1.xml
167
+ // Load shared strings table (present in most xlsx files)
168
+ const ssEntry = zip.file('xl/sharedStrings.xml');
169
+ const sharedStrings = ssEntry
170
+ ? parseSharedStrings(await ssEntry.async('string'))
171
+ : [];
172
+ // Find the worksheet XML
110
173
  const sheetEntry = zip.file('xl/worksheets/sheet.xml') ??
111
174
  zip.file('xl/worksheets/sheet1.xml');
112
175
  if (!sheetEntry)
113
176
  throw new Error(`No worksheet found in ${filePath}`);
114
177
  const xml = await sheetEntry.async('string');
115
- // Strip BOM if present
116
178
  const cleanXml = xml.startsWith('\uFEFF') ? xml.slice(1) : xml;
117
- const rawRows = parseSheetXml(cleanXml);
179
+ const rawRows = parseSheetXml(cleanXml, sharedStrings);
118
180
  const rows = rawRows.map((cells, idx) => ({
119
181
  cells: cells.concat(Array(Math.max(0, 9 - cells.length)).fill('')),
120
- rowIndex: idx + 1, // 1-based
182
+ rowIndex: idx + 1,
121
183
  }));
122
184
  return (0, tabular_1.parseTabularRows)(rows, filePath, tagPrefix, linkConfigs);
123
185
  }
@@ -126,11 +188,11 @@ async function parseExcelFile(filePath, tagPrefix, linkConfigs) {
126
188
  * Write (or update) the TC ID in column A of the matching title row in an xlsx file.
127
189
  *
128
190
  * Strategy:
129
- * 1. Load the xlsx zip.
130
- * 2. Parse the sheet XML.
131
- * 3. Find the row matching the test title where ID is currently empty.
132
- * 4. Replace the empty ID cell XML with a numeric cell containing the new id.
133
- * 5. Repack the zip and write back.
191
+ * 1. Load the xlsx zip and shared strings.
192
+ * 2. Find the row where col C (Title) matches and col D (Test Step) is empty.
193
+ * 3. If col A cell exists, replace its value; if it's missing (sparse row),
194
+ * insert a new numeric cell at the start of the row.
195
+ * 4. Repack and write.
134
196
  */
135
197
  async function writebackExcel(filePath, title, id) {
136
198
  const buffer = fs.readFileSync(filePath);
@@ -140,6 +202,8 @@ async function writebackExcel(filePath, title, id) {
140
202
  null;
141
203
  if (!sheetKey)
142
204
  throw new Error(`No worksheet found in ${filePath}`);
205
+ const ssEntry = zip.file('xl/sharedStrings.xml');
206
+ const sharedStrings = ssEntry ? parseSharedStrings(await ssEntry.async('string')) : [];
143
207
  let xml = await zip.file(sheetKey).async('string');
144
208
  const hasBom = xml.startsWith('\uFEFF');
145
209
  if (hasBom)
@@ -147,38 +211,48 @@ async function writebackExcel(filePath, title, id) {
147
211
  const nsPrefix = detectNsPrefix(xml);
148
212
  const TITLE_STRIP_RE = /^(Scenario Outline|Scenario)\s*:\s*/i;
149
213
  const normalise = (s) => s.replace(TITLE_STRIP_RE, '').trim();
150
- // Split into rows, find the matching one, and update its first cell
151
- const rowRe = new RegExp(`(<${nsPrefix}row[^>]*>)([\\s\\S]*?)(<\\/${nsPrefix}row>)`, 'g');
214
+ const rowRe = new RegExp(`(<${nsPrefix}row([^>]*)>)([\\s\\S]*?)(<\\/${nsPrefix}row>)`, 'g');
152
215
  let updated = false;
153
- const newXml = xml.replace(rowRe, (_full, open, content, close) => {
216
+ const newXml = xml.replace(rowRe, (_full, open, rowAttrs, content, close) => {
154
217
  if (updated)
155
218
  return open + content + close;
156
- // Extract cells from this row
157
- const cellRe = new RegExp(`<${nsPrefix}c([^>]*)>([\\s\\S]*?)<\\/${nsPrefix}c>`, 'g');
158
- const cellMatches = [...content.matchAll(cellRe)];
159
- if (cellMatches.length < 3)
219
+ // Collect all cells with their column index
220
+ const cellMatches = [...content.matchAll(new RegExp(`(<${nsPrefix}c([^>]*)>)([\\s\\S]*?)(<\\/${nsPrefix}c>)`, 'g'))];
221
+ const getCellAtCol = (colLetter) => {
222
+ const targetIdx = colLetterToIndex(colLetter);
223
+ return cellMatches.find((m) => {
224
+ const refMatch = m[2].match(/\br="([A-Z]+)\d+"/i);
225
+ return refMatch ? colLetterToIndex(refMatch[1]) === targetIdx : false;
226
+ });
227
+ };
228
+ const titleMatch = getCellAtCol('C');
229
+ const stepMatch = getCellAtCol('D');
230
+ const idMatch = getCellAtCol('A');
231
+ const titleVal = titleMatch ? cellValue(titleMatch[0], nsPrefix, sharedStrings) : '';
232
+ const stepVal = stepMatch ? cellValue(stepMatch[0], nsPrefix, sharedStrings) : '';
233
+ const idVal = idMatch ? cellValue(idMatch[0], nsPrefix, sharedStrings) : '';
234
+ if (!titleVal || stepVal || idVal)
235
+ return open + content + close;
236
+ if (normalise(titleVal) !== title)
160
237
  return open + content + close;
161
- const idCell = cellText(cellMatches[0]?.[0] ?? '', nsPrefix);
162
- const titleCell = cellText(cellMatches[2]?.[0] ?? '', nsPrefix);
163
- const stepCell = cellText(cellMatches[3]?.[0] ?? '', nsPrefix);
164
- // Match: no existing ID, has title, no step number, title matches
165
- if (!idCell && titleCell && !stepCell && normalise(titleCell) === title) {
166
- // Replace the first cell (empty string) with a numeric cell
167
- const firstCellFull = cellMatches[0][0];
168
- const numericCell = firstCellFull
169
- .replace(new RegExp(`(<${nsPrefix}c)([^>]*t="str")`), `$1 t="n"`)
170
- .replace(new RegExp(`<${nsPrefix}v>[^<]*<\\/${nsPrefix}v>`), `<${nsPrefix}v>${id}</${nsPrefix}v>`);
171
- const newContent = content.replace(firstCellFull, numericCell);
172
- updated = true;
173
- return open + newContent + close;
238
+ // Extract row number from the row's r attribute or first cell reference
239
+ const rowNumMatch = rowAttrs.match(/\br="(\d+)"/);
240
+ const rowNum = rowNumMatch ? rowNumMatch[1] : '1';
241
+ const numericCellXml = `<${nsPrefix}c r="A${rowNum}" t="n"><${nsPrefix}v>${id}</${nsPrefix}v></${nsPrefix}c>`;
242
+ let newContent;
243
+ if (idMatch) {
244
+ // Replace existing (empty) A cell
245
+ newContent = content.replace(idMatch[0], numericCellXml);
174
246
  }
175
- return open + content + close;
247
+ else {
248
+ // Insert new A cell at start of row content
249
+ newContent = numericCellXml + content;
250
+ }
251
+ updated = true;
252
+ return open + newContent + close;
176
253
  });
177
254
  zip.file(sheetKey, (hasBom ? '\uFEFF' : '') + newXml);
178
- const outBuffer = await zip.generateAsync({
179
- type: 'nodebuffer',
180
- compression: 'DEFLATE',
181
- });
255
+ const outBuffer = await zip.generateAsync({ type: 'nodebuffer', compression: 'DEFLATE' });
182
256
  fs.writeFileSync(filePath, outBuffer);
183
257
  }
184
258
  //# sourceMappingURL=excel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"excel.js","sourceRoot":"","sources":["../../src/parsers/excel.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DH,wCA2BC;AAcD,wCA0DC;AAhKD,uCAAyB;AACzB,kDAA0B;AAG1B,uCAAyD;AAEzD,iFAAiF;AAEjF,6EAA6E;AAC7E,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC;IAC3G,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,yDAAyD;AACzD,SAAS,QAAQ,CAAC,OAAe,EAAE,QAAgB;IACjD,0DAA0D;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,QAAQ,sBAAsB,QAAQ,KAAK,CAAC,CAAC,CAAC;IAC3F,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,QAAQ,0BAA0B,QAAQ,IAAI,EAAE,GAAG,CAAC,CAAC;QAChF,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAyB,CAAC;QAC9B,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9G,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,qBAAqB;IACrB,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,QAAQ,qBAAqB,QAAQ,IAAI,CAAC,CAAC,CAAC;IACxF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,6EAA6E;AAC7E,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,QAAQ,8BAA8B,QAAQ,MAAM,EAAE,GAAG,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,QAAQ,4BAA4B,QAAQ,IAAI,EAAE,GAAG,CAAC,CAAC;IAErF,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,IAAI,QAAgC,CAAC;IAErC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,SAAiC,CAAC;QAEtC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AAE1E,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,SAAiB,EACjB,WAA0B;IAE1B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE1C,sDAAsD;IACtD,MAAM,UAAU,GACd,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAEvC,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IAEtE,MAAM,GAAG,GAAW,MAAM,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrD,uBAAuB;IACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAE/D,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAExC,MAAM,IAAI,GAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACtD,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,QAAQ,EAAE,GAAG,GAAG,CAAC,EAAE,UAAU;KAC9B,CAAC,CAAC,CAAC;IAEJ,OAAO,IAAA,0BAAgB,EAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAClE,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;GASG;AACI,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,KAAa,EAAE,EAAU;IAC9E,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,QAAQ,GACZ,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;YACnE,IAAI,CAAC;IAEP,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IAEpE,IAAI,GAAG,GAAW,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,sCAAsC,CAAC;IAC9D,MAAM,SAAS,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEtE,oEAAoE;IACpE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,QAAQ,8BAA8B,QAAQ,OAAO,EAAE,GAAG,CAAC,CAAC;IAE1F,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAChE,IAAI,OAAO;YAAE,OAAO,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC;QAE3C,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,QAAQ,4BAA4B,QAAQ,IAAI,EAAE,GAAG,CAAC,CAAC;QACrF,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC;QAE1D,MAAM,MAAM,GAAM,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEhE,kEAAkE;QAClE,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;YACxE,4DAA4D;YAC5D,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,aAAa;iBAC9B,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,QAAQ,kBAAkB,CAAC,EAAE,UAAU,CAAC;iBAChE,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,QAAQ,cAAc,QAAQ,IAAI,CAAC,EAAE,IAAI,QAAQ,KAAK,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC;YAErG,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YAC/D,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,IAAI,GAAG,UAAU,GAAG,KAAK,CAAC;QACnC,CAAC;QAED,OAAO,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC;QACxC,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,SAAS;KACvB,CAAC,CAAC;IACH,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"excel.js","sourceRoot":"","sources":["../../src/parsers/excel.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ado-sync",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "description": "Bidirectional sync between local test specs (Cucumber/Markdown) and Azure DevOps Test Cases",
5
5
  "bin": {
6
6
  "ado-sync": "./dist/cli.js"