@suffolklitlab/alkiln 5.0.0-experimental1 → 5.0.0-experimental2

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/CHANGELOG.md CHANGED
@@ -62,6 +62,7 @@ Format:
62
62
  - Shorten path names to try to accommodate limitations of windows systems while still keeping enough useful information to help devs identify the test outputs. https://github.com/SuffolkLITLab/ALKiln/issues/618
63
63
  - Updated field decoding to handle new object field encoding. See [#711](https://github.com/SuffolkLITLab/ALKiln/issues/711)
64
64
  - Allows ALKilnInThePlayground to upload files. See https://github.com/SuffolkLITLab/docassemble-ALKilnInThePlayground/issues/18.
65
+ - Conform upload file behavior to that of other Story Table rows - avoid erroring when field isn't set properly unless using all variables is required.
65
66
 
66
67
  ### Security
67
68
  - Pass docassemble API keys through HTTP headers instead of as parameters.
package/lib/scope.js CHANGED
@@ -2,6 +2,7 @@ const { expect } = require('chai');
2
2
  const cheerio = require('cheerio');
3
3
  const path = require('path');
4
4
  const fs = require('fs');
5
+ const { globSync } = require('glob');
5
6
  const { AxePuppeteer } = require('@axe-core/puppeteer');
6
7
  const safe_filename = require("sanitize-filename");
7
8
  // "en" is faster to import: https://github.com/faker-js/faker/issues/1114#issuecomment-1169532948
@@ -1528,7 +1529,10 @@ module.exports = {
1528
1529
  let row = matching_input_rows[ matching_input_rows.length - 1 ];
1529
1530
  let answer = row.value;
1530
1531
 
1531
- await scope.funnel_the_answer( scope, { handle, answer, field });
1532
+ // Will implement `was_used` in cases as they come along. For now, this is
1533
+ // necessary for file uploads to be as flexible as any other Story Table row.
1534
+ let was_used = await scope.funnel_the_answer( scope, { handle, answer, field });
1535
+ if ( was_used === false ) { row = null; }
1532
1536
 
1533
1537
  return row;
1534
1538
  }, // Ends scope.setVariable()
@@ -1590,16 +1594,18 @@ module.exports = {
1590
1594
  custom_datatype = await scope.get_custom_datatype( scope, { handle });
1591
1595
  }
1592
1596
 
1597
+ let row_was_used = true;
1593
1598
  // If there is a custom datatype function available, use it to set the field
1594
1599
  if ( scope.setCustomDatatype[ custom_datatype ] !== undefined ) {
1595
1600
  // Set da package custom fields. TODO: find `custom_handle` in the setter?
1596
1601
  let custom_handle = await handle.evaluateHandle(( elem )=> { return elem.closest( `.da-form-group` ) });
1597
- await scope.setCustomDatatype[ custom_datatype ]( scope, { handle: custom_handle, answer });
1602
+ row_was_used = await scope.setCustomDatatype[ custom_datatype ]( scope, { handle: custom_handle, answer });
1598
1603
  } else {
1599
1604
  // If no custom datatype, set a regular field
1600
- await scope.enter_answer[ field.tag ]( scope, { handle, answer });
1605
+ row_was_used = await scope.enter_answer[ field.tag ]( scope, { handle, answer });
1601
1606
  }
1602
1607
 
1608
+ return row_was_used;
1603
1609
  }, // Ends scope.funnel_the_answer()
1604
1610
 
1605
1611
  // Handle setting values for da custom datatypes. E.g. `da-field-container-datatype-BirthDate`
@@ -1660,10 +1666,14 @@ module.exports = {
1660
1666
  }, // ends setCustomDatatype {}
1661
1667
 
1662
1668
  enter_answer: {
1663
- button: async function ( scope, { handle, answer }) { await scope.tapElement( scope, handle ); },
1669
+ button: async function ( scope, { handle, answer }) {
1670
+ await scope.tapElement( scope, handle );
1671
+ return true;
1672
+ },
1664
1673
  textarea: async function ( scope, { handle, answer }) {
1665
1674
  await scope.setText( scope, { handle, answer });
1666
1675
  await scope.afterStep(scope); // No showifs for this one?
1676
+ return true;
1667
1677
  },
1668
1678
  select: async function ( scope, { handle, answer }) {
1669
1679
  // Note: I don't remember what's really going on in here.
@@ -1692,13 +1702,16 @@ module.exports = {
1692
1702
  }
1693
1703
 
1694
1704
  await scope.afterStep(scope, { waitForShowIf: true });
1705
+ return true;
1695
1706
  },
1696
1707
  canvas: async function ( scope, { handle, answer }) {
1697
1708
  await scope.draw_signature( scope );
1698
1709
  await scope.afterStep( scope );
1710
+ return true;
1699
1711
  },
1700
1712
  input: async function ( scope, { handle, answer }) {
1701
1713
  /* Set value of some `input` element to the given value. */
1714
+ let row_was_used = true;
1702
1715
 
1703
1716
  let type = await handle.evaluate( elem => { return elem.getAttribute('type'); });
1704
1717
  if ( type === `radio` || type === `checkbox` ) {
@@ -1717,7 +1730,7 @@ module.exports = {
1717
1730
  await scope.afterStep(scope, { waitForShowIf: true });
1718
1731
 
1719
1732
  } else if ( type === `file` ) {
1720
- await scope.uploadFiles( scope, { handle, answer });
1733
+ row_was_used = await scope.uploadFiles( scope, { handle, answer });
1721
1734
  await scope.afterStep(scope, { waitForShowIf: true });
1722
1735
 
1723
1736
  } else if (type == `date`) {
@@ -1746,6 +1759,8 @@ module.exports = {
1746
1759
  await scope.setText( scope, { handle, answer });
1747
1760
  await scope.afterStep(scope, { waitForShowIf: true });
1748
1761
  }
1762
+
1763
+ return row_was_used;
1749
1764
  }, // Ends scope.enter_answer.input()
1750
1765
  hidden: async function ( scope, { handle, answer }) {
1751
1766
  // Do nothing. The only way the code should get here is if
@@ -1762,80 +1777,57 @@ module.exports = {
1762
1777
  uploadFiles: async function ( scope, { handle, answer }) {
1763
1778
  /* Try to upload one or more files to a file-type input field.
1764
1779
  * Does not submit, so no danger of timeout with server reload.
1780
+ *
1781
+ * Returns whether the row was used or not.
1765
1782
  */
1783
+ console.log( process.cwd() );
1766
1784
 
1767
- // Tests should be one place: docassemble/*/data/sources, where * is the only folder in `docassemble`.
1768
- // Makes an absolute path from the folder in which `npm run` was used plus our internal folders
1769
- let docassemble_pkg_path = `${ process.cwd() }/docassemble`;
1770
- let subpackage_name = session_vars.get_package_name().substring(12);
1771
- let pkg_paths = [];
1772
- try {
1773
- fs.accessSync(docassemble_pkg_path);
1774
- // https://stackoverflow.com/a/24594123/11416267
1775
- let dirs = fs.readdirSync(docassemble_pkg_path, {withFileTypes: true}).filter(dirent => dirent.isDirectory()).map(dirent => dirent.name);
1776
- if (dirs.length < 1) {
1777
- let msg = `You can store files to upload in 'docassemble/${ subpackage_name }/data/source'. These tests could not find a folder like that starting at ${ process.cwd() }.`;
1778
- await scope.addToReport( scope, { type: `warning`, value: msg});
1779
- throw Error(msg); // Most people will want to know the sources folder path;
1780
- }
1781
- for (let dir of dirs) {
1782
- pkg_paths.push(`${docassemble_pkg_path}/${dir}`);
1783
- }
1784
- } catch ( error_da ) {
1785
- let msg = `You can store files to upload in 'docassemble/${ subpackage_name }/data/source'. ` +
1786
- `These tests could not find a folder like that. The current directory is ` +
1787
- ` ${ process.cwd() }; is that in the top level folder of your docassemble package? (${ session_vars.get_package_name() })?`;
1788
- await scope.addToReport( scope, { type: `warning`, value: msg});
1789
- throw error_da; // Most people will want to know the sources folder path;
1790
- }
1791
-
1792
- let chosen_dir = null;
1793
- let err_paths = [];
1794
- for (let pkg_path of pkg_paths) {
1795
- let dir = `${ pkg_path }/data/sources`;
1796
- try {
1797
- fs.accessSync(dir);
1798
- chosen_dir = dir;
1799
- break;
1800
- } catch ( error_full ) {
1801
- err_paths.push(`'${dir}'`);
1802
- }
1803
- }
1804
- if (chosen_dir === null) {
1805
- let msg = `You can store files to upload in ${err_paths.join(", or ")}. These tests could not find any of those folders.`;
1806
- await scope.addToReport( scope, { type: `warning`, value: msg });
1807
- throw Error(msg); // Most people will want to know the sources folder path;
1785
+ // First make sure the list of files is of the correct format
1786
+ // Allow a typo where someone forgot to include a space after a comma
1787
+ let uploads_names = answer.split(`,`);
1788
+ if ( uploads_names.length === 0 ) {
1789
+ await scope.addToReport( scope, {
1790
+ type: `error`,
1791
+ value: `Your list of files to upload is empty.`
1792
+ });
1793
+ return false;
1808
1794
  }
1809
1795
 
1810
- if (pkg_paths.length > 1 && pkg_paths.length - err_paths.length > 1) {
1811
- await scope.addToReport( scope, { type: `warning`, value: `You have multiple folders in the 'docassemble' folder (${ pkg_paths }). These tests will use the first folder with a "data/sources" subfolder (${chosen_dir}).` });
1796
+ // Make sure sources directory exists
1797
+ let dirs = globSync( `**/data/sources` );
1798
+ if ( dirs.length === 0 ) {
1799
+ await scope.addToReport( scope, {
1800
+ type: `warning`,
1801
+ value: `ALKiln couldn't find a "sources" directory in "${ process.cwd() }" where it could get files to upload.`
1802
+ });
1803
+ return false;
1812
1804
  }
1805
+ let dir = dirs[0];
1813
1806
 
1814
- // Allow a typo where someone forgot to include a space after a comma
1815
- let file_names = answer.split(`,`);
1816
-
1817
- // If a file exist, add it to a list of files to be uploaded. If it doesn't, add a warning.
1818
1807
  let paths = [];
1819
- for ( let name of file_names ) {
1808
+ let missing_files = [];
1809
+ for ( let name of uploads_names ) {
1810
+ let trimmed_name = name.trim();
1811
+ let matching_paths = globSync( `${ dir }/${ trimmed_name }` );
1812
+ if ( matching_paths.length === 0 ) {
1813
+ missing_files.push( trimmed_name );
1814
+ } else {
1815
+ paths.push( matching_paths[0] );
1816
+ }
1817
+ }
1820
1818
 
1821
- // If the developer correctly used a ", ", there will be a space at the
1822
- // start of the string. Remove it. If they forgot the space, that's fine too.
1823
- name = name.replace(/^\s/, '');
1824
- let file_path = path.join( chosen_dir, name );
1819
+ if ( missing_files.length > 0 ) {
1820
+ await scope.addToReport( scope, {
1821
+ type: `warning`,
1822
+ value: `ALKiln could not find "${ missing_files.join('", "') }" in "${ dir }".`
1823
+ });
1824
+ }
1825
1825
 
1826
- try {
1827
- fs.accessSync( file_path );
1828
- paths.push( file_path );
1829
- } catch ( err ) {
1830
- // TODO: Should this throw an error?
1831
- await scope.addToReport( scope, { type: `warning`, value: `Could not find "${ name }" in "${ chosen_dir }"` });
1832
- }
1826
+ // If all files missing, return that the row wasn't used
1827
+ if ( missing_files.length === uploads_names.length ) {
1828
+ return false;
1833
1829
  }
1834
1830
 
1835
- if ( paths.length === 0 ) {
1836
- await scope.addToReport( scope, { type: `error`, value: `Could not find "${answer}".` });
1837
- throw ReferenceError(`Could not find "${answer}".`)
1838
- }
1839
1831
  // Prepare to wait for upload to complete
1840
1832
  let name = await handle.evaluate( elem => { return elem.getAttribute(`name`); });
1841
1833
  let selector = `*[name="${ name }"]`
@@ -1855,8 +1847,9 @@ module.exports = {
1855
1847
  await wait_for_disable;
1856
1848
  // When it's again enabled, the files have finished loading. Or so I have observed.
1857
1849
  await scope.page.waitForSelector( enabled_selector );
1858
-
1859
1850
 
1851
+ // Return that the row was used
1852
+ return true;
1860
1853
  }, // Ends scope.uploadFiles()
1861
1854
 
1862
1855
  setCheckbox: async function ( scope, { label, answer }) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@suffolklitlab/alkiln",
3
- "version": "5.0.0-pre-3",
3
+ "version": "5.0.0-experimental1",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@suffolklitlab/alkiln",
9
- "version": "5.0.0-pre-3",
9
+ "version": "5.0.0-experimental1",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@axe-core/puppeteer": "4.4.2",
@@ -17,6 +17,7 @@
17
17
  "cheerio": "1.0.0-rc.10",
18
18
  "deep-equal-in-any-order": "^2.0.0",
19
19
  "dotenv": "8.2.0",
20
+ "glob": "^10.2.7",
20
21
  "mocha": "9.2.0",
21
22
  "puppeteer": "13.1.3",
22
23
  "qs": "6.10.2",
@@ -156,6 +157,36 @@
156
157
  }
157
158
  }
158
159
  },
160
+ "node_modules/@cucumber/cucumber/node_modules/glob": {
161
+ "version": "7.2.3",
162
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
163
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
164
+ "dependencies": {
165
+ "fs.realpath": "^1.0.0",
166
+ "inflight": "^1.0.4",
167
+ "inherits": "2",
168
+ "minimatch": "^3.1.1",
169
+ "once": "^1.3.0",
170
+ "path-is-absolute": "^1.0.0"
171
+ },
172
+ "engines": {
173
+ "node": "*"
174
+ },
175
+ "funding": {
176
+ "url": "https://github.com/sponsors/isaacs"
177
+ }
178
+ },
179
+ "node_modules/@cucumber/cucumber/node_modules/minimatch": {
180
+ "version": "3.1.2",
181
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
182
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
183
+ "dependencies": {
184
+ "brace-expansion": "^1.1.7"
185
+ },
186
+ "engines": {
187
+ "node": "*"
188
+ }
189
+ },
159
190
  "node_modules/@cucumber/cucumber/node_modules/ms": {
160
191
  "version": "2.1.2",
161
192
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -256,6 +287,95 @@
256
287
  "npm": ">=6.0.0"
257
288
  }
258
289
  },
290
+ "node_modules/@isaacs/cliui": {
291
+ "version": "8.0.2",
292
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
293
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
294
+ "dependencies": {
295
+ "string-width": "^5.1.2",
296
+ "string-width-cjs": "npm:string-width@^4.2.0",
297
+ "strip-ansi": "^7.0.1",
298
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
299
+ "wrap-ansi": "^8.1.0",
300
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
301
+ },
302
+ "engines": {
303
+ "node": ">=12"
304
+ }
305
+ },
306
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
307
+ "version": "6.0.1",
308
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
309
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
310
+ "engines": {
311
+ "node": ">=12"
312
+ },
313
+ "funding": {
314
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
315
+ }
316
+ },
317
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
318
+ "version": "6.2.1",
319
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
320
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
321
+ "engines": {
322
+ "node": ">=12"
323
+ },
324
+ "funding": {
325
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
326
+ }
327
+ },
328
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
329
+ "version": "9.2.2",
330
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
331
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
332
+ },
333
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
334
+ "version": "5.1.2",
335
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
336
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
337
+ "dependencies": {
338
+ "eastasianwidth": "^0.2.0",
339
+ "emoji-regex": "^9.2.2",
340
+ "strip-ansi": "^7.0.1"
341
+ },
342
+ "engines": {
343
+ "node": ">=12"
344
+ },
345
+ "funding": {
346
+ "url": "https://github.com/sponsors/sindresorhus"
347
+ }
348
+ },
349
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
350
+ "version": "7.1.0",
351
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
352
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
353
+ "dependencies": {
354
+ "ansi-regex": "^6.0.1"
355
+ },
356
+ "engines": {
357
+ "node": ">=12"
358
+ },
359
+ "funding": {
360
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
361
+ }
362
+ },
363
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
364
+ "version": "8.1.0",
365
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
366
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
367
+ "dependencies": {
368
+ "ansi-styles": "^6.1.0",
369
+ "string-width": "^5.0.1",
370
+ "strip-ansi": "^7.0.1"
371
+ },
372
+ "engines": {
373
+ "node": ">=12"
374
+ },
375
+ "funding": {
376
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
377
+ }
378
+ },
259
379
  "node_modules/@jridgewell/resolve-uri": {
260
380
  "version": "3.1.0",
261
381
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
@@ -278,6 +398,15 @@
278
398
  "@jridgewell/sourcemap-codec": "^1.4.10"
279
399
  }
280
400
  },
401
+ "node_modules/@pkgjs/parseargs": {
402
+ "version": "0.11.0",
403
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
404
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
405
+ "optional": true,
406
+ "engines": {
407
+ "node": ">=14"
408
+ }
409
+ },
281
410
  "node_modules/@teppeis/multimaps": {
282
411
  "version": "2.0.0",
283
412
  "resolved": "https://registry.npmjs.org/@teppeis/multimaps/-/multimaps-2.0.0.tgz",
@@ -730,6 +859,19 @@
730
859
  "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
731
860
  "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
732
861
  },
862
+ "node_modules/cross-spawn": {
863
+ "version": "7.0.3",
864
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
865
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
866
+ "dependencies": {
867
+ "path-key": "^3.1.0",
868
+ "shebang-command": "^2.0.0",
869
+ "which": "^2.0.1"
870
+ },
871
+ "engines": {
872
+ "node": ">= 8"
873
+ }
874
+ },
733
875
  "node_modules/css-select": {
734
876
  "version": "4.1.3",
735
877
  "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
@@ -906,6 +1048,11 @@
906
1048
  "node": ">=0.10.0"
907
1049
  }
908
1050
  },
1051
+ "node_modules/eastasianwidth": {
1052
+ "version": "0.2.0",
1053
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1054
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
1055
+ },
909
1056
  "node_modules/emoji-regex": {
910
1057
  "version": "8.0.0",
911
1058
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -1087,6 +1234,21 @@
1087
1234
  }
1088
1235
  }
1089
1236
  },
1237
+ "node_modules/foreground-child": {
1238
+ "version": "3.1.1",
1239
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
1240
+ "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
1241
+ "dependencies": {
1242
+ "cross-spawn": "^7.0.0",
1243
+ "signal-exit": "^4.0.1"
1244
+ },
1245
+ "engines": {
1246
+ "node": ">=14"
1247
+ },
1248
+ "funding": {
1249
+ "url": "https://github.com/sponsors/isaacs"
1250
+ }
1251
+ },
1090
1252
  "node_modules/fs-constants": {
1091
1253
  "version": "1.0.0",
1092
1254
  "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
@@ -1095,7 +1257,7 @@
1095
1257
  "node_modules/fs.realpath": {
1096
1258
  "version": "1.0.0",
1097
1259
  "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1098
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
1260
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
1099
1261
  },
1100
1262
  "node_modules/function-bind": {
1101
1263
  "version": "1.1.1",
@@ -1146,19 +1308,21 @@
1146
1308
  }
1147
1309
  },
1148
1310
  "node_modules/glob": {
1149
- "version": "7.2.0",
1150
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
1151
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
1311
+ "version": "10.2.7",
1312
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz",
1313
+ "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==",
1152
1314
  "dependencies": {
1153
- "fs.realpath": "^1.0.0",
1154
- "inflight": "^1.0.4",
1155
- "inherits": "2",
1156
- "minimatch": "^3.0.4",
1157
- "once": "^1.3.0",
1158
- "path-is-absolute": "^1.0.0"
1315
+ "foreground-child": "^3.1.0",
1316
+ "jackspeak": "^2.0.3",
1317
+ "minimatch": "^9.0.1",
1318
+ "minipass": "^5.0.0 || ^6.0.2",
1319
+ "path-scurry": "^1.7.0"
1320
+ },
1321
+ "bin": {
1322
+ "glob": "dist/cjs/src/bin.js"
1159
1323
  },
1160
1324
  "engines": {
1161
- "node": "*"
1325
+ "node": ">=16 || 14 >=14.17"
1162
1326
  },
1163
1327
  "funding": {
1164
1328
  "url": "https://github.com/sponsors/isaacs"
@@ -1292,7 +1456,7 @@
1292
1456
  "node_modules/inflight": {
1293
1457
  "version": "1.0.6",
1294
1458
  "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1295
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1459
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1296
1460
  "dependencies": {
1297
1461
  "once": "^1.3.0",
1298
1462
  "wrappy": "1"
@@ -1412,6 +1576,23 @@
1412
1576
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1413
1577
  "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
1414
1578
  },
1579
+ "node_modules/jackspeak": {
1580
+ "version": "2.2.1",
1581
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz",
1582
+ "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==",
1583
+ "dependencies": {
1584
+ "@isaacs/cliui": "^8.0.2"
1585
+ },
1586
+ "engines": {
1587
+ "node": ">=14"
1588
+ },
1589
+ "funding": {
1590
+ "url": "https://github.com/sponsors/isaacs"
1591
+ },
1592
+ "optionalDependencies": {
1593
+ "@pkgjs/parseargs": "^0.11.0"
1594
+ }
1595
+ },
1415
1596
  "node_modules/js-yaml": {
1416
1597
  "version": "4.1.0",
1417
1598
  "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -1497,14 +1678,33 @@
1497
1678
  }
1498
1679
  },
1499
1680
  "node_modules/minimatch": {
1500
- "version": "3.1.2",
1501
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1502
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1681
+ "version": "9.0.1",
1682
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
1683
+ "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
1503
1684
  "dependencies": {
1504
- "brace-expansion": "^1.1.7"
1685
+ "brace-expansion": "^2.0.1"
1505
1686
  },
1506
1687
  "engines": {
1507
- "node": "*"
1688
+ "node": ">=16 || 14 >=14.17"
1689
+ },
1690
+ "funding": {
1691
+ "url": "https://github.com/sponsors/isaacs"
1692
+ }
1693
+ },
1694
+ "node_modules/minimatch/node_modules/brace-expansion": {
1695
+ "version": "2.0.1",
1696
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1697
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1698
+ "dependencies": {
1699
+ "balanced-match": "^1.0.0"
1700
+ }
1701
+ },
1702
+ "node_modules/minipass": {
1703
+ "version": "6.0.2",
1704
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz",
1705
+ "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==",
1706
+ "engines": {
1707
+ "node": ">=16 || 14 >=14.17"
1508
1708
  }
1509
1709
  },
1510
1710
  "node_modules/mkdirp-classic": {
@@ -1573,6 +1773,25 @@
1573
1773
  "url": "https://github.com/sponsors/sindresorhus"
1574
1774
  }
1575
1775
  },
1776
+ "node_modules/mocha/node_modules/glob": {
1777
+ "version": "7.2.0",
1778
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
1779
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
1780
+ "dependencies": {
1781
+ "fs.realpath": "^1.0.0",
1782
+ "inflight": "^1.0.4",
1783
+ "inherits": "2",
1784
+ "minimatch": "^3.0.4",
1785
+ "once": "^1.3.0",
1786
+ "path-is-absolute": "^1.0.0"
1787
+ },
1788
+ "engines": {
1789
+ "node": "*"
1790
+ },
1791
+ "funding": {
1792
+ "url": "https://github.com/sponsors/isaacs"
1793
+ }
1794
+ },
1576
1795
  "node_modules/mocha/node_modules/minimatch": {
1577
1796
  "version": "3.0.4",
1578
1797
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -1772,11 +1991,42 @@
1772
1991
  "node_modules/path-is-absolute": {
1773
1992
  "version": "1.0.1",
1774
1993
  "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1775
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1994
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1776
1995
  "engines": {
1777
1996
  "node": ">=0.10.0"
1778
1997
  }
1779
1998
  },
1999
+ "node_modules/path-key": {
2000
+ "version": "3.1.1",
2001
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2002
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2003
+ "engines": {
2004
+ "node": ">=8"
2005
+ }
2006
+ },
2007
+ "node_modules/path-scurry": {
2008
+ "version": "1.9.2",
2009
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz",
2010
+ "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==",
2011
+ "dependencies": {
2012
+ "lru-cache": "^9.1.1",
2013
+ "minipass": "^5.0.0 || ^6.0.2"
2014
+ },
2015
+ "engines": {
2016
+ "node": ">=16 || 14 >=14.17"
2017
+ },
2018
+ "funding": {
2019
+ "url": "https://github.com/sponsors/isaacs"
2020
+ }
2021
+ },
2022
+ "node_modules/path-scurry/node_modules/lru-cache": {
2023
+ "version": "9.1.2",
2024
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz",
2025
+ "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==",
2026
+ "engines": {
2027
+ "node": "14 || >=16.14"
2028
+ }
2029
+ },
1780
2030
  "node_modules/pathval": {
1781
2031
  "version": "1.1.1",
1782
2032
  "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
@@ -2072,6 +2322,36 @@
2072
2322
  "url": "https://github.com/sponsors/isaacs"
2073
2323
  }
2074
2324
  },
2325
+ "node_modules/rimraf/node_modules/glob": {
2326
+ "version": "7.2.3",
2327
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
2328
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
2329
+ "dependencies": {
2330
+ "fs.realpath": "^1.0.0",
2331
+ "inflight": "^1.0.4",
2332
+ "inherits": "2",
2333
+ "minimatch": "^3.1.1",
2334
+ "once": "^1.3.0",
2335
+ "path-is-absolute": "^1.0.0"
2336
+ },
2337
+ "engines": {
2338
+ "node": "*"
2339
+ },
2340
+ "funding": {
2341
+ "url": "https://github.com/sponsors/isaacs"
2342
+ }
2343
+ },
2344
+ "node_modules/rimraf/node_modules/minimatch": {
2345
+ "version": "3.1.2",
2346
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2347
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2348
+ "dependencies": {
2349
+ "brace-expansion": "^1.1.7"
2350
+ },
2351
+ "engines": {
2352
+ "node": "*"
2353
+ }
2354
+ },
2075
2355
  "node_modules/safe-buffer": {
2076
2356
  "version": "5.2.1",
2077
2357
  "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -2126,6 +2406,25 @@
2126
2406
  "randombytes": "^2.1.0"
2127
2407
  }
2128
2408
  },
2409
+ "node_modules/shebang-command": {
2410
+ "version": "2.0.0",
2411
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2412
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2413
+ "dependencies": {
2414
+ "shebang-regex": "^3.0.0"
2415
+ },
2416
+ "engines": {
2417
+ "node": ">=8"
2418
+ }
2419
+ },
2420
+ "node_modules/shebang-regex": {
2421
+ "version": "3.0.0",
2422
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2423
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2424
+ "engines": {
2425
+ "node": ">=8"
2426
+ }
2427
+ },
2129
2428
  "node_modules/side-channel": {
2130
2429
  "version": "1.0.4",
2131
2430
  "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -2139,6 +2438,17 @@
2139
2438
  "url": "https://github.com/sponsors/ljharb"
2140
2439
  }
2141
2440
  },
2441
+ "node_modules/signal-exit": {
2442
+ "version": "4.0.2",
2443
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz",
2444
+ "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==",
2445
+ "engines": {
2446
+ "node": ">=14"
2447
+ },
2448
+ "funding": {
2449
+ "url": "https://github.com/sponsors/isaacs"
2450
+ }
2451
+ },
2142
2452
  "node_modules/sort-any": {
2143
2453
  "version": "2.0.0",
2144
2454
  "resolved": "https://registry.npmjs.org/sort-any/-/sort-any-2.0.0.tgz",
@@ -2198,6 +2508,20 @@
2198
2508
  "node": ">=8"
2199
2509
  }
2200
2510
  },
2511
+ "node_modules/string-width-cjs": {
2512
+ "name": "string-width",
2513
+ "version": "4.2.3",
2514
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2515
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2516
+ "dependencies": {
2517
+ "emoji-regex": "^8.0.0",
2518
+ "is-fullwidth-code-point": "^3.0.0",
2519
+ "strip-ansi": "^6.0.1"
2520
+ },
2521
+ "engines": {
2522
+ "node": ">=8"
2523
+ }
2524
+ },
2201
2525
  "node_modules/strip-ansi": {
2202
2526
  "version": "6.0.1",
2203
2527
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -2209,6 +2533,26 @@
2209
2533
  "node": ">=8"
2210
2534
  }
2211
2535
  },
2536
+ "node_modules/strip-ansi-cjs": {
2537
+ "name": "strip-ansi",
2538
+ "version": "6.0.1",
2539
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2540
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2541
+ "dependencies": {
2542
+ "ansi-regex": "^5.0.1"
2543
+ },
2544
+ "engines": {
2545
+ "node": ">=8"
2546
+ }
2547
+ },
2548
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
2549
+ "version": "5.0.1",
2550
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2551
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2552
+ "engines": {
2553
+ "node": ">=8"
2554
+ }
2555
+ },
2212
2556
  "node_modules/strip-ansi/node_modules/ansi-regex": {
2213
2557
  "version": "5.0.1",
2214
2558
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -2433,6 +2777,23 @@
2433
2777
  "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2434
2778
  }
2435
2779
  },
2780
+ "node_modules/wrap-ansi-cjs": {
2781
+ "name": "wrap-ansi",
2782
+ "version": "7.0.0",
2783
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2784
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2785
+ "dependencies": {
2786
+ "ansi-styles": "^4.0.0",
2787
+ "string-width": "^4.1.0",
2788
+ "strip-ansi": "^6.0.0"
2789
+ },
2790
+ "engines": {
2791
+ "node": ">=10"
2792
+ },
2793
+ "funding": {
2794
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2795
+ }
2796
+ },
2436
2797
  "node_modules/wrappy": {
2437
2798
  "version": "1.0.2",
2438
2799
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -2618,6 +2979,27 @@
2618
2979
  "ms": "2.1.2"
2619
2980
  }
2620
2981
  },
2982
+ "glob": {
2983
+ "version": "7.2.3",
2984
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
2985
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
2986
+ "requires": {
2987
+ "fs.realpath": "^1.0.0",
2988
+ "inflight": "^1.0.4",
2989
+ "inherits": "2",
2990
+ "minimatch": "^3.1.1",
2991
+ "once": "^1.3.0",
2992
+ "path-is-absolute": "^1.0.0"
2993
+ }
2994
+ },
2995
+ "minimatch": {
2996
+ "version": "3.1.2",
2997
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2998
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2999
+ "requires": {
3000
+ "brace-expansion": "^1.1.7"
3001
+ }
3002
+ },
2621
3003
  "ms": {
2622
3004
  "version": "2.1.2",
2623
3005
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -2707,6 +3089,64 @@
2707
3089
  "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.3.0.tgz",
2708
3090
  "integrity": "sha512-1W0PZezq2rxlAssoWemi9gFRD8IQxvf0FPL5Km3TOmGHFG7ib0TbFBJ0yC7D/1NsxunjNTK6WjUXV8ao/mKZ5w=="
2709
3091
  },
3092
+ "@isaacs/cliui": {
3093
+ "version": "8.0.2",
3094
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
3095
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
3096
+ "requires": {
3097
+ "string-width": "^5.1.2",
3098
+ "string-width-cjs": "npm:string-width@^4.2.0",
3099
+ "strip-ansi": "^7.0.1",
3100
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
3101
+ "wrap-ansi": "^8.1.0",
3102
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
3103
+ },
3104
+ "dependencies": {
3105
+ "ansi-regex": {
3106
+ "version": "6.0.1",
3107
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
3108
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="
3109
+ },
3110
+ "ansi-styles": {
3111
+ "version": "6.2.1",
3112
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
3113
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
3114
+ },
3115
+ "emoji-regex": {
3116
+ "version": "9.2.2",
3117
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
3118
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
3119
+ },
3120
+ "string-width": {
3121
+ "version": "5.1.2",
3122
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
3123
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
3124
+ "requires": {
3125
+ "eastasianwidth": "^0.2.0",
3126
+ "emoji-regex": "^9.2.2",
3127
+ "strip-ansi": "^7.0.1"
3128
+ }
3129
+ },
3130
+ "strip-ansi": {
3131
+ "version": "7.1.0",
3132
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
3133
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
3134
+ "requires": {
3135
+ "ansi-regex": "^6.0.1"
3136
+ }
3137
+ },
3138
+ "wrap-ansi": {
3139
+ "version": "8.1.0",
3140
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
3141
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
3142
+ "requires": {
3143
+ "ansi-styles": "^6.1.0",
3144
+ "string-width": "^5.0.1",
3145
+ "strip-ansi": "^7.0.1"
3146
+ }
3147
+ }
3148
+ }
3149
+ },
2710
3150
  "@jridgewell/resolve-uri": {
2711
3151
  "version": "3.1.0",
2712
3152
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
@@ -2726,6 +3166,12 @@
2726
3166
  "@jridgewell/sourcemap-codec": "^1.4.10"
2727
3167
  }
2728
3168
  },
3169
+ "@pkgjs/parseargs": {
3170
+ "version": "0.11.0",
3171
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
3172
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
3173
+ "optional": true
3174
+ },
2729
3175
  "@teppeis/multimaps": {
2730
3176
  "version": "2.0.0",
2731
3177
  "resolved": "https://registry.npmjs.org/@teppeis/multimaps/-/multimaps-2.0.0.tgz",
@@ -3088,6 +3534,16 @@
3088
3534
  "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
3089
3535
  "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
3090
3536
  },
3537
+ "cross-spawn": {
3538
+ "version": "7.0.3",
3539
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
3540
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
3541
+ "requires": {
3542
+ "path-key": "^3.1.0",
3543
+ "shebang-command": "^2.0.0",
3544
+ "which": "^2.0.1"
3545
+ }
3546
+ },
3091
3547
  "css-select": {
3092
3548
  "version": "4.1.3",
3093
3549
  "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
@@ -3213,6 +3669,11 @@
3213
3669
  "resolved": "https://registry.npmjs.org/durations/-/durations-3.4.2.tgz",
3214
3670
  "integrity": "sha512-V/lf7y33dGaypZZetVI1eu7BmvkbC4dItq12OElLRpKuaU5JxQstV2zHwLv8P7cNbQ+KL1WD80zMCTx5dNC4dg=="
3215
3671
  },
3672
+ "eastasianwidth": {
3673
+ "version": "0.2.0",
3674
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
3675
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
3676
+ },
3216
3677
  "emoji-regex": {
3217
3678
  "version": "8.0.0",
3218
3679
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -3346,6 +3807,15 @@
3346
3807
  "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
3347
3808
  "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w=="
3348
3809
  },
3810
+ "foreground-child": {
3811
+ "version": "3.1.1",
3812
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
3813
+ "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
3814
+ "requires": {
3815
+ "cross-spawn": "^7.0.0",
3816
+ "signal-exit": "^4.0.1"
3817
+ }
3818
+ },
3349
3819
  "fs-constants": {
3350
3820
  "version": "1.0.0",
3351
3821
  "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
@@ -3354,7 +3824,7 @@
3354
3824
  "fs.realpath": {
3355
3825
  "version": "1.0.0",
3356
3826
  "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
3357
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
3827
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
3358
3828
  },
3359
3829
  "function-bind": {
3360
3830
  "version": "1.1.1",
@@ -3390,16 +3860,15 @@
3390
3860
  }
3391
3861
  },
3392
3862
  "glob": {
3393
- "version": "7.2.0",
3394
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
3395
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
3863
+ "version": "10.2.7",
3864
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz",
3865
+ "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==",
3396
3866
  "requires": {
3397
- "fs.realpath": "^1.0.0",
3398
- "inflight": "^1.0.4",
3399
- "inherits": "2",
3400
- "minimatch": "^3.0.4",
3401
- "once": "^1.3.0",
3402
- "path-is-absolute": "^1.0.0"
3867
+ "foreground-child": "^3.1.0",
3868
+ "jackspeak": "^2.0.3",
3869
+ "minimatch": "^9.0.1",
3870
+ "minipass": "^5.0.0 || ^6.0.2",
3871
+ "path-scurry": "^1.7.0"
3403
3872
  }
3404
3873
  },
3405
3874
  "glob-parent": {
@@ -3487,7 +3956,7 @@
3487
3956
  "inflight": {
3488
3957
  "version": "1.0.6",
3489
3958
  "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
3490
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
3959
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
3491
3960
  "requires": {
3492
3961
  "once": "^1.3.0",
3493
3962
  "wrappy": "1"
@@ -3568,6 +4037,15 @@
3568
4037
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
3569
4038
  "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
3570
4039
  },
4040
+ "jackspeak": {
4041
+ "version": "2.2.1",
4042
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz",
4043
+ "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==",
4044
+ "requires": {
4045
+ "@isaacs/cliui": "^8.0.2",
4046
+ "@pkgjs/parseargs": "^0.11.0"
4047
+ }
4048
+ },
3571
4049
  "js-yaml": {
3572
4050
  "version": "4.1.0",
3573
4051
  "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -3635,13 +4113,28 @@
3635
4113
  }
3636
4114
  },
3637
4115
  "minimatch": {
3638
- "version": "3.1.2",
3639
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
3640
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
4116
+ "version": "9.0.1",
4117
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
4118
+ "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
3641
4119
  "requires": {
3642
- "brace-expansion": "^1.1.7"
4120
+ "brace-expansion": "^2.0.1"
4121
+ },
4122
+ "dependencies": {
4123
+ "brace-expansion": {
4124
+ "version": "2.0.1",
4125
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
4126
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
4127
+ "requires": {
4128
+ "balanced-match": "^1.0.0"
4129
+ }
4130
+ }
3643
4131
  }
3644
4132
  },
4133
+ "minipass": {
4134
+ "version": "6.0.2",
4135
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz",
4136
+ "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w=="
4137
+ },
3645
4138
  "mkdirp-classic": {
3646
4139
  "version": "0.5.3",
3647
4140
  "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
@@ -3688,6 +4181,19 @@
3688
4181
  "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
3689
4182
  "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
3690
4183
  },
4184
+ "glob": {
4185
+ "version": "7.2.0",
4186
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
4187
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
4188
+ "requires": {
4189
+ "fs.realpath": "^1.0.0",
4190
+ "inflight": "^1.0.4",
4191
+ "inherits": "2",
4192
+ "minimatch": "^3.0.4",
4193
+ "once": "^1.3.0",
4194
+ "path-is-absolute": "^1.0.0"
4195
+ }
4196
+ },
3691
4197
  "minimatch": {
3692
4198
  "version": "3.0.4",
3693
4199
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -3838,7 +4344,28 @@
3838
4344
  "path-is-absolute": {
3839
4345
  "version": "1.0.1",
3840
4346
  "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
3841
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
4347
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
4348
+ },
4349
+ "path-key": {
4350
+ "version": "3.1.1",
4351
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
4352
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
4353
+ },
4354
+ "path-scurry": {
4355
+ "version": "1.9.2",
4356
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz",
4357
+ "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==",
4358
+ "requires": {
4359
+ "lru-cache": "^9.1.1",
4360
+ "minipass": "^5.0.0 || ^6.0.2"
4361
+ },
4362
+ "dependencies": {
4363
+ "lru-cache": {
4364
+ "version": "9.1.2",
4365
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz",
4366
+ "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ=="
4367
+ }
4368
+ }
3842
4369
  },
3843
4370
  "pathval": {
3844
4371
  "version": "1.1.1",
@@ -4048,6 +4575,29 @@
4048
4575
  "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
4049
4576
  "requires": {
4050
4577
  "glob": "^7.1.3"
4578
+ },
4579
+ "dependencies": {
4580
+ "glob": {
4581
+ "version": "7.2.3",
4582
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
4583
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
4584
+ "requires": {
4585
+ "fs.realpath": "^1.0.0",
4586
+ "inflight": "^1.0.4",
4587
+ "inherits": "2",
4588
+ "minimatch": "^3.1.1",
4589
+ "once": "^1.3.0",
4590
+ "path-is-absolute": "^1.0.0"
4591
+ }
4592
+ },
4593
+ "minimatch": {
4594
+ "version": "3.1.2",
4595
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
4596
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
4597
+ "requires": {
4598
+ "brace-expansion": "^1.1.7"
4599
+ }
4600
+ }
4051
4601
  }
4052
4602
  },
4053
4603
  "safe-buffer": {
@@ -4084,6 +4634,19 @@
4084
4634
  "randombytes": "^2.1.0"
4085
4635
  }
4086
4636
  },
4637
+ "shebang-command": {
4638
+ "version": "2.0.0",
4639
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
4640
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
4641
+ "requires": {
4642
+ "shebang-regex": "^3.0.0"
4643
+ }
4644
+ },
4645
+ "shebang-regex": {
4646
+ "version": "3.0.0",
4647
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
4648
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
4649
+ },
4087
4650
  "side-channel": {
4088
4651
  "version": "1.0.4",
4089
4652
  "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -4094,6 +4657,11 @@
4094
4657
  "object-inspect": "^1.9.0"
4095
4658
  }
4096
4659
  },
4660
+ "signal-exit": {
4661
+ "version": "4.0.2",
4662
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz",
4663
+ "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q=="
4664
+ },
4097
4665
  "sort-any": {
4098
4666
  "version": "2.0.0",
4099
4667
  "resolved": "https://registry.npmjs.org/sort-any/-/sort-any-2.0.0.tgz",
@@ -4144,6 +4712,16 @@
4144
4712
  "strip-ansi": "^6.0.1"
4145
4713
  }
4146
4714
  },
4715
+ "string-width-cjs": {
4716
+ "version": "npm:string-width@4.2.3",
4717
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
4718
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
4719
+ "requires": {
4720
+ "emoji-regex": "^8.0.0",
4721
+ "is-fullwidth-code-point": "^3.0.0",
4722
+ "strip-ansi": "^6.0.1"
4723
+ }
4724
+ },
4147
4725
  "strip-ansi": {
4148
4726
  "version": "6.0.1",
4149
4727
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -4159,6 +4737,21 @@
4159
4737
  }
4160
4738
  }
4161
4739
  },
4740
+ "strip-ansi-cjs": {
4741
+ "version": "npm:strip-ansi@6.0.1",
4742
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
4743
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
4744
+ "requires": {
4745
+ "ansi-regex": "^5.0.1"
4746
+ },
4747
+ "dependencies": {
4748
+ "ansi-regex": {
4749
+ "version": "5.0.1",
4750
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
4751
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
4752
+ }
4753
+ }
4754
+ },
4162
4755
  "strip-json-comments": {
4163
4756
  "version": "3.1.1",
4164
4757
  "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -4330,6 +4923,16 @@
4330
4923
  "strip-ansi": "^6.0.0"
4331
4924
  }
4332
4925
  },
4926
+ "wrap-ansi-cjs": {
4927
+ "version": "npm:wrap-ansi@7.0.0",
4928
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
4929
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
4930
+ "requires": {
4931
+ "ansi-styles": "^4.0.0",
4932
+ "string-width": "^4.1.0",
4933
+ "strip-ansi": "^6.0.0"
4934
+ }
4935
+ },
4333
4936
  "wrappy": {
4334
4937
  "version": "1.0.2",
4335
4938
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suffolklitlab/alkiln",
3
- "version": "5.0.0-experimental1",
3
+ "version": "5.0.0-experimental2",
4
4
  "description": "Integrated automated end-to-end testing with docassemble, puppeteer, and cucumber.",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -41,6 +41,7 @@
41
41
  "cheerio": "1.0.0-rc.10",
42
42
  "deep-equal-in-any-order": "^2.0.0",
43
43
  "dotenv": "8.2.0",
44
+ "glob": "^10.2.7",
44
45
  "mocha": "9.2.0",
45
46
  "puppeteer": "13.1.3",
46
47
  "qs": "6.10.2",