From f1f2076a57f86cc7ea0ad550f9b7a399ffa02834 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Tue, 20 Aug 2024 17:07:00 +0000 Subject: [PATCH 01/24] move test data to json file --- tests/config/nf-test.config | 60 ++++--------------------------------- tests/config/test_data.json | 55 ++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 55 deletions(-) create mode 100644 tests/config/test_data.json diff --git a/tests/config/nf-test.config b/tests/config/nf-test.config index 4859b9e5..06ab8905 100644 --- a/tests/config/nf-test.config +++ b/tests/config/nf-test.config @@ -1,3 +1,5 @@ +import groovy.json.JsonSlurper + params { outdir = "output/" publish_dir_mode = "copy" @@ -5,61 +7,9 @@ params { nf_scil_test_data_remote = "https://scil.usherbrooke.ca" nf_scil_test_database_path = "scil_test_data/dvc-store/files/md5" - nf_scil_test_data_associations = [ - "commit_amico.zip": "c190e6b9d22350b51e222c60febe13b4", - "bundles.zip": "6d3ebc21062bf320714483b7314a230a", - "stats.zip": "2aeac4da5ab054b3a460fc5fdc5e4243", - "bst.zip": "eed227fd246255e7417f92d49eb1066a", - "filtering.zip": "19116ff4244d057c8214ee3fe8e05f71", - "ihMT.zip": "08fcf44848ba2649aad5a5a470b3cb06", - "tractometry.zip": "890bfa70e44b15c0d044085de54e00c6", - "bids_json.zip": "97fd9a414849567fbfdfdb0ef400488b", - "MT.zip": "1f4345485248683b3652c97f2630950e", - "btensor_testdata.zip": "7ada72201a767292d56634e0a7bbd9ad", - "tracking.zip": "4793a470812318ce15f1624e24750e4d", - "atlas.zip": "dc34e073fc582476504b3caf127e53ef", - "anatomical_filtering.zip": "5282020575bd485e15d3251257b97e01", - "connectivity.zip": "fe8c47f444d33067f292508d7050acc4", - "plot.zip": "a1dc54cad7e1d17e55228c2518a1b34e", - "others.zip": "82248b4888a63b0aeffc8070cc206995", - "fodf_filtering.zip": "5985c0644321ecf81fd694fb91e2c898", - "processing.zip": "eece5cdbf437b8e4b5cb89c797872e28", - "surface_vtk_fib.zip": "241f3afd6344c967d7176b43e4a99a41", - "tractograms.zip": "5497d0bf3ccc35f8f4f117829d790267", - "registration.zip": "95ebaa64866bac18d8b0fcd96cd10958", - "topup_eddy.zip": "7847496510dc85fb205ba9586f0011ff", - "topup_eddy_light.zip": "54369410cfd0587e1d8916047945c1fd", - "bids.zip": "68b9efa1e009a59a83adef3aeea9b469", - "antsbet.zip": "66850bea7af7c1f3fc4e7d371d12d6e8", - "freesurfer.zip": "3b876fba6fd77d4962243ac9647bc505", - "freesurfer_reslice.zip": "636ee21cd2ed2910a8f64d432b47f578", - "freesurfer_transforms.zip": "5c562afd9dea52eb99f13ab4dffd4113", - "light.zip": "f2a3a8bddf43d1f67a5e8867ce9ebaa2", - "heavy.zip": "6f2cd0bbdb162455e71de1c7d3b4eb18", - "raw_b0.zip": "6e7b8181b3e929f4235a9364aa60656b", - "raw_DWIms300-1000-2000-dir8-32-60.zip": "cfa4cb9cc9595a18272fdb0ef3a08ce5", - "raw_DWIms300-1000-dir8-32.zip": "29dfaba220a1e921f95e16f811977f36", - "raw_DWIms1000-2000-dir32-60.zip": "7fed32798f158ab8118a116fd9a69f52", - "raw_DWIss300-dir8.zip": "33e735bf7514159b803f8302f4d97db8", - "raw_DWIss1000-dir32.zip": "55246c8f6fe8c04cb8538715cad21c38", - "raw_DWIss2000-dir60.zip": "8dc746ccf9eed5f8931265bad379e2e5", - "raw_EPI.zip": "631e9781bda5ae482d92bba1c612bbf5", - "raw_FLAIR.zip": "67663a38ce23120b1b42d73fa9268d2d", - "raw_T1w.zip": "2a4adad9dd05a0fb626cb71945bc11b5", - "raw_segmentation.zip": "6aac249229e1e360d1fca90bc4a4bec2", - "topup_results.zip": "f83628eac00c9851cb015588909c4ef8", - "b0.zip": "fefd7452a61a80f6ceac7352e6231a0d", - "DWIms300-1000-2000-dir8-32-60.zip": "6249618893c832dfb4392c72fd7c81cb", - "DWIms300-1000-dir8-32.zip": "52e67fa54a2494d2ad5b496d25e6ee99", - "DWIms1000-2000-dir32-60.zip": "5db0cc6624da1d5ec99893b08629e45f", - "DWIss300-dir8.zip": "ef1335775c9fbf11452c71e01b097282", - "DWIss1000-dir32.zip": "c72fd590a3f400278299a068eeffd1d0", - "DWIss2000-dir60.zip": "9ad7ccb4e30b39c47f374018db2e6424", - "T1w.zip": "10e27bb2ddd4d01be968a93b2166096c", - "dti.zip": "ba866c59fc4d984f626691a6b941fc32", - "responses.zip": "1a5b862b91c72740bcce0431a1f9254a", - "segmentation.zip": "ab51be6d142ad1a8e30ffb964447d010" - ] + nf_scil_test_data_associations = new JsonSlurper().parse( + new File("$projectDir/tests/config/test_data.json") + ) } process { diff --git a/tests/config/test_data.json b/tests/config/test_data.json new file mode 100644 index 00000000..f52c60d8 --- /dev/null +++ b/tests/config/test_data.json @@ -0,0 +1,55 @@ +{ + "commit_amico.zip": "c190e6b9d22350b51e222c60febe13b4", + "bundles.zip": "6d3ebc21062bf320714483b7314a230a", + "stats.zip": "2aeac4da5ab054b3a460fc5fdc5e4243", + "bst.zip": "eed227fd246255e7417f92d49eb1066a", + "filtering.zip": "19116ff4244d057c8214ee3fe8e05f71", + "ihMT.zip": "08fcf44848ba2649aad5a5a470b3cb06", + "tractometry.zip": "890bfa70e44b15c0d044085de54e00c6", + "bids_json.zip": "97fd9a414849567fbfdfdb0ef400488b", + "MT.zip": "1f4345485248683b3652c97f2630950e", + "btensor_testdata.zip": "7ada72201a767292d56634e0a7bbd9ad", + "tracking.zip": "4793a470812318ce15f1624e24750e4d", + "atlas.zip": "dc34e073fc582476504b3caf127e53ef", + "anatomical_filtering.zip": "5282020575bd485e15d3251257b97e01", + "connectivity.zip": "fe8c47f444d33067f292508d7050acc4", + "plot.zip": "a1dc54cad7e1d17e55228c2518a1b34e", + "others.zip": "82248b4888a63b0aeffc8070cc206995", + "fodf_filtering.zip": "5985c0644321ecf81fd694fb91e2c898", + "processing.zip": "eece5cdbf437b8e4b5cb89c797872e28", + "surface_vtk_fib.zip": "241f3afd6344c967d7176b43e4a99a41", + "tractograms.zip": "5497d0bf3ccc35f8f4f117829d790267", + "registration.zip": "95ebaa64866bac18d8b0fcd96cd10958", + "topup_eddy.zip": "7847496510dc85fb205ba9586f0011ff", + "topup_eddy_light.zip": "54369410cfd0587e1d8916047945c1fd", + "bids.zip": "68b9efa1e009a59a83adef3aeea9b469", + "antsbet.zip": "66850bea7af7c1f3fc4e7d371d12d6e8", + "freesurfer.zip": "3b876fba6fd77d4962243ac9647bc505", + "freesurfer_reslice.zip": "636ee21cd2ed2910a8f64d432b47f578", + "freesurfer_transforms.zip": "5c562afd9dea52eb99f13ab4dffd4113", + "light.zip": "f2a3a8bddf43d1f67a5e8867ce9ebaa2", + "heavy.zip": "6f2cd0bbdb162455e71de1c7d3b4eb18", + "raw_b0.zip": "6e7b8181b3e929f4235a9364aa60656b", + "raw_DWIms300-1000-2000-dir8-32-60.zip": "cfa4cb9cc9595a18272fdb0ef3a08ce5", + "raw_DWIms300-1000-dir8-32.zip": "29dfaba220a1e921f95e16f811977f36", + "raw_DWIms1000-2000-dir32-60.zip": "7fed32798f158ab8118a116fd9a69f52", + "raw_DWIss300-dir8.zip": "33e735bf7514159b803f8302f4d97db8", + "raw_DWIss1000-dir32.zip": "55246c8f6fe8c04cb8538715cad21c38", + "raw_DWIss2000-dir60.zip": "8dc746ccf9eed5f8931265bad379e2e5", + "raw_EPI.zip": "631e9781bda5ae482d92bba1c612bbf5", + "raw_FLAIR.zip": "67663a38ce23120b1b42d73fa9268d2d", + "raw_T1w.zip": "2a4adad9dd05a0fb626cb71945bc11b5", + "raw_segmentation.zip": "6aac249229e1e360d1fca90bc4a4bec2", + "topup_results.zip": "f83628eac00c9851cb015588909c4ef8", + "b0.zip": "fefd7452a61a80f6ceac7352e6231a0d", + "DWIms300-1000-2000-dir8-32-60.zip": "6249618893c832dfb4392c72fd7c81cb", + "DWIms300-1000-dir8-32.zip": "52e67fa54a2494d2ad5b496d25e6ee99", + "DWIms1000-2000-dir32-60.zip": "5db0cc6624da1d5ec99893b08629e45f", + "DWIss300-dir8.zip": "ef1335775c9fbf11452c71e01b097282", + "DWIss1000-dir32.zip": "c72fd590a3f400278299a068eeffd1d0", + "DWIss2000-dir60.zip": "9ad7ccb4e30b39c47f374018db2e6424", + "T1w.zip": "10e27bb2ddd4d01be968a93b2166096c", + "dti.zip": "ba866c59fc4d984f626691a6b941fc32", + "responses.zip": "1a5b862b91c72740bcce0431a1f9254a", + "segmentation.zip": "ab51be6d142ad1a8e30ffb964447d010" +} From 2da0b36ccfb485e45a0c48c389da0c0f2508b9bd Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Thu, 22 Aug 2024 23:09:34 -0400 Subject: [PATCH 02/24] setup container for vscode extension dev --- .devcontainer/Dockerfile | 8 +++++++- .devcontainer/devcontainer.json | 3 +++ .devcontainer/onCreateCommand.sh | 9 +++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 624e73ea..2cabc482 100755 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -17,4 +17,10 @@ RUN python3 -m pip install pipx && \ pipx install poetry RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - &&\ - apt-get install -y nodejs + apt-get install -y nodejs && \ + groupadd --gid 501 yeoman && \ + useradd --uid 501 --gid yeoman --shell /bin/bash --create-home yeoman && \ + echo "yeoman ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + +RUN mkdir /generated && chown yeoman:yeoman /generated +WORKDIR /generated diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 6412e4d1..bad07d20 100755 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -10,6 +10,9 @@ "onCreateCommand": "bash .devcontainer/onCreateCommand.sh", "updateContentCommand": "bash .devcontainer/updateContentCommand.sh", "postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}", + "containerEnv": { + "WORKSPACE": "${containerWorkspaceFolder}" + }, "features": { "ghcr.io/devcontainers/features/git:1": {}, "ghcr.io/devcontainers/features/git-lfs:1": {}, diff --git a/.devcontainer/onCreateCommand.sh b/.devcontainer/onCreateCommand.sh index 011dd957..946c505a 100755 --- a/.devcontainer/onCreateCommand.sh +++ b/.devcontainer/onCreateCommand.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +# Setup for NF-CORE + npm install -g --save-dev --save-exact prettier npm install -g editorconfig npm install -g --save-dev editorconfig-checker @@ -12,3 +14,10 @@ mkdir -p /nf-test/bin cd /nf-test/bin/ curl -fsSL https://code.askimed.com/install/nf-test | bash -s ${NFTEST_VERSION} echo "PATH=$PATH:/nf-test/bin" >> ~/.bashrc + + +# Setup for VSCODE Extensions Development + +npm install -g typescript +npm install -g tslint +npm install -g yo generator-code From 4cffe1826c4cd8d0013e7fee63eafe5ba56d74d1 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Thu, 22 Aug 2024 23:10:06 -0400 Subject: [PATCH 03/24] move extension package to its own directory --- .../{ => extension-package}/.vscode/launch.json | 0 .../{ => extension-package}/.vscodeignore | 0 .../{ => extension-package}/CHANGELOG.md | 0 .../{ => extension-package}/README.md | 0 .../{ => extension-package}/icon.avif | Bin .../{ => extension-package}/package.json | 0 .../vsc-extension-quickstart.md | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename nf-scil-extensions/{ => extension-package}/.vscode/launch.json (100%) rename nf-scil-extensions/{ => extension-package}/.vscodeignore (100%) rename nf-scil-extensions/{ => extension-package}/CHANGELOG.md (100%) rename nf-scil-extensions/{ => extension-package}/README.md (100%) rename nf-scil-extensions/{ => extension-package}/icon.avif (100%) rename nf-scil-extensions/{ => extension-package}/package.json (100%) rename nf-scil-extensions/{ => extension-package}/vsc-extension-quickstart.md (100%) diff --git a/nf-scil-extensions/.vscode/launch.json b/nf-scil-extensions/extension-package/.vscode/launch.json similarity index 100% rename from nf-scil-extensions/.vscode/launch.json rename to nf-scil-extensions/extension-package/.vscode/launch.json diff --git a/nf-scil-extensions/.vscodeignore b/nf-scil-extensions/extension-package/.vscodeignore similarity index 100% rename from nf-scil-extensions/.vscodeignore rename to nf-scil-extensions/extension-package/.vscodeignore diff --git a/nf-scil-extensions/CHANGELOG.md b/nf-scil-extensions/extension-package/CHANGELOG.md similarity index 100% rename from nf-scil-extensions/CHANGELOG.md rename to nf-scil-extensions/extension-package/CHANGELOG.md diff --git a/nf-scil-extensions/README.md b/nf-scil-extensions/extension-package/README.md similarity index 100% rename from nf-scil-extensions/README.md rename to nf-scil-extensions/extension-package/README.md diff --git a/nf-scil-extensions/icon.avif b/nf-scil-extensions/extension-package/icon.avif similarity index 100% rename from nf-scil-extensions/icon.avif rename to nf-scil-extensions/extension-package/icon.avif diff --git a/nf-scil-extensions/package.json b/nf-scil-extensions/extension-package/package.json similarity index 100% rename from nf-scil-extensions/package.json rename to nf-scil-extensions/extension-package/package.json diff --git a/nf-scil-extensions/vsc-extension-quickstart.md b/nf-scil-extensions/extension-package/vsc-extension-quickstart.md similarity index 100% rename from nf-scil-extensions/vsc-extension-quickstart.md rename to nf-scil-extensions/extension-package/vsc-extension-quickstart.md From 2b5fce47e59fd8f51e9447fd49e7cd255db8a021 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Thu, 22 Aug 2024 23:13:37 -0400 Subject: [PATCH 04/24] test data treeview extension first try --- .../test-data-treeview/dist/extension.js | 3018 +++++++++++++++++ .../test-data-treeview/dist/extension.js.map | 6 + 2 files changed, 3024 insertions(+) create mode 100644 nf-scil-extensions/test-data-treeview/dist/extension.js create mode 100644 nf-scil-extensions/test-data-treeview/dist/extension.js.map diff --git a/nf-scil-extensions/test-data-treeview/dist/extension.js b/nf-scil-extensions/test-data-treeview/dist/extension.js new file mode 100644 index 00000000..9d62c42e --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/dist/extension.js @@ -0,0 +1,3018 @@ +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// node_modules/adm-zip/util/constants.js +var require_constants = __commonJS({ + "node_modules/adm-zip/util/constants.js"(exports2, module2) { + module2.exports = { + /* The local file header */ + LOCHDR: 30, + // LOC header size + LOCSIG: 67324752, + // "PK\003\004" + LOCVER: 4, + // version needed to extract + LOCFLG: 6, + // general purpose bit flag + LOCHOW: 8, + // compression method + LOCTIM: 10, + // modification time (2 bytes time, 2 bytes date) + LOCCRC: 14, + // uncompressed file crc-32 value + LOCSIZ: 18, + // compressed size + LOCLEN: 22, + // uncompressed size + LOCNAM: 26, + // filename length + LOCEXT: 28, + // extra field length + /* The Data descriptor */ + EXTSIG: 134695760, + // "PK\007\008" + EXTHDR: 16, + // EXT header size + EXTCRC: 4, + // uncompressed file crc-32 value + EXTSIZ: 8, + // compressed size + EXTLEN: 12, + // uncompressed size + /* The central directory file header */ + CENHDR: 46, + // CEN header size + CENSIG: 33639248, + // "PK\001\002" + CENVEM: 4, + // version made by + CENVER: 6, + // version needed to extract + CENFLG: 8, + // encrypt, decrypt flags + CENHOW: 10, + // compression method + CENTIM: 12, + // modification time (2 bytes time, 2 bytes date) + CENCRC: 16, + // uncompressed file crc-32 value + CENSIZ: 20, + // compressed size + CENLEN: 24, + // uncompressed size + CENNAM: 28, + // filename length + CENEXT: 30, + // extra field length + CENCOM: 32, + // file comment length + CENDSK: 34, + // volume number start + CENATT: 36, + // internal file attributes + CENATX: 38, + // external file attributes (host system dependent) + CENOFF: 42, + // LOC header offset + /* The entries in the end of central directory */ + ENDHDR: 22, + // END header size + ENDSIG: 101010256, + // "PK\005\006" + ENDSUB: 8, + // number of entries on this disk + ENDTOT: 10, + // total number of entries + ENDSIZ: 12, + // central directory size in bytes + ENDOFF: 16, + // offset of first CEN header + ENDCOM: 20, + // zip file comment length + END64HDR: 20, + // zip64 END header size + END64SIG: 117853008, + // zip64 Locator signature, "PK\006\007" + END64START: 4, + // number of the disk with the start of the zip64 + END64OFF: 8, + // relative offset of the zip64 end of central directory + END64NUMDISKS: 16, + // total number of disks + ZIP64SIG: 101075792, + // zip64 signature, "PK\006\006" + ZIP64HDR: 56, + // zip64 record minimum size + ZIP64LEAD: 12, + // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE + ZIP64SIZE: 4, + // zip64 size of the central directory record + ZIP64VEM: 12, + // zip64 version made by + ZIP64VER: 14, + // zip64 version needed to extract + ZIP64DSK: 16, + // zip64 number of this disk + ZIP64DSKDIR: 20, + // number of the disk with the start of the record directory + ZIP64SUB: 24, + // number of entries on this disk + ZIP64TOT: 32, + // total number of entries + ZIP64SIZB: 40, + // zip64 central directory size in bytes + ZIP64OFF: 48, + // offset of start of central directory with respect to the starting disk number + ZIP64EXTRA: 56, + // extensible data sector + /* Compression methods */ + STORED: 0, + // no compression + SHRUNK: 1, + // shrunk + REDUCED1: 2, + // reduced with compression factor 1 + REDUCED2: 3, + // reduced with compression factor 2 + REDUCED3: 4, + // reduced with compression factor 3 + REDUCED4: 5, + // reduced with compression factor 4 + IMPLODED: 6, + // imploded + // 7 reserved for Tokenizing compression algorithm + DEFLATED: 8, + // deflated + ENHANCED_DEFLATED: 9, + // enhanced deflated + PKWARE: 10, + // PKWare DCL imploded + // 11 reserved by PKWARE + BZIP2: 12, + // compressed using BZIP2 + // 13 reserved by PKWARE + LZMA: 14, + // LZMA + // 15-17 reserved by PKWARE + IBM_TERSE: 18, + // compressed using IBM TERSE + IBM_LZ77: 19, + // IBM LZ77 z + AES_ENCRYPT: 99, + // WinZIP AES encryption method + /* General purpose bit flag */ + // values can obtained with expression 2**bitnr + FLG_ENC: 1, + // Bit 0: encrypted file + FLG_COMP1: 2, + // Bit 1, compression option + FLG_COMP2: 4, + // Bit 2, compression option + FLG_DESC: 8, + // Bit 3, data descriptor + FLG_ENH: 16, + // Bit 4, enhanced deflating + FLG_PATCH: 32, + // Bit 5, indicates that the file is compressed patched data. + FLG_STR: 64, + // Bit 6, strong encryption (patented) + // Bits 7-10: Currently unused. + FLG_EFS: 2048, + // Bit 11: Language encoding flag (EFS) + // Bit 12: Reserved by PKWARE for enhanced compression. + // Bit 13: encrypted the Central Directory (patented). + // Bits 14-15: Reserved by PKWARE. + FLG_MSK: 4096, + // mask header values + /* Load type */ + FILE: 2, + BUFFER: 1, + NONE: 0, + /* 4.5 Extensible data fields */ + EF_ID: 0, + EF_SIZE: 2, + /* Header IDs */ + ID_ZIP64: 1, + ID_AVINFO: 7, + ID_PFS: 8, + ID_OS2: 9, + ID_NTFS: 10, + ID_OPENVMS: 12, + ID_UNIX: 13, + ID_FORK: 14, + ID_PATCH: 15, + ID_X509_PKCS7: 20, + ID_X509_CERTID_F: 21, + ID_X509_CERTID_C: 22, + ID_STRONGENC: 23, + ID_RECORD_MGT: 24, + ID_X509_PKCS7_RL: 25, + ID_IBM1: 101, + ID_IBM2: 102, + ID_POSZIP: 18064, + EF_ZIP64_OR_32: 4294967295, + EF_ZIP64_OR_16: 65535, + EF_ZIP64_SUNCOMP: 0, + EF_ZIP64_SCOMP: 8, + EF_ZIP64_RHO: 16, + EF_ZIP64_DSN: 24 + }; + } +}); + +// node_modules/adm-zip/util/errors.js +var require_errors = __commonJS({ + "node_modules/adm-zip/util/errors.js"(exports2) { + var errors = { + /* Header error messages */ + INVALID_LOC: "Invalid LOC header (bad signature)", + INVALID_CEN: "Invalid CEN header (bad signature)", + INVALID_END: "Invalid END header (bad signature)", + /* Descriptor */ + DESCRIPTOR_NOT_EXIST: "No descriptor present", + DESCRIPTOR_UNKNOWN: "Unknown descriptor format", + DESCRIPTOR_FAULTY: "Descriptor data is malformed", + /* ZipEntry error messages*/ + NO_DATA: "Nothing to decompress", + BAD_CRC: "CRC32 checksum failed {0}", + FILE_IN_THE_WAY: "There is a file in the way: {0}", + UNKNOWN_METHOD: "Invalid/unsupported compression method", + /* Inflater error messages */ + AVAIL_DATA: "inflate::Available inflate data did not terminate", + INVALID_DISTANCE: "inflate::Invalid literal/length or distance code in fixed or dynamic block", + TO_MANY_CODES: "inflate::Dynamic block code description: too many length or distance codes", + INVALID_REPEAT_LEN: "inflate::Dynamic block code description: repeat more than specified lengths", + INVALID_REPEAT_FIRST: "inflate::Dynamic block code description: repeat lengths with no first length", + INCOMPLETE_CODES: "inflate::Dynamic block code description: code lengths codes incomplete", + INVALID_DYN_DISTANCE: "inflate::Dynamic block code description: invalid distance code lengths", + INVALID_CODES_LEN: "inflate::Dynamic block code description: invalid literal/length code lengths", + INVALID_STORE_BLOCK: "inflate::Stored block length did not match one's complement", + INVALID_BLOCK_TYPE: "inflate::Invalid block type (type == 3)", + /* ADM-ZIP error messages */ + CANT_EXTRACT_FILE: "Could not extract the file", + CANT_OVERRIDE: "Target file already exists", + DISK_ENTRY_TOO_LARGE: "Number of disk entries is too large", + NO_ZIP: "No zip file was loaded", + NO_ENTRY: "Entry doesn't exist", + DIRECTORY_CONTENT_ERROR: "A directory cannot have content", + FILE_NOT_FOUND: 'File not found: "{0}"', + NOT_IMPLEMENTED: "Not implemented", + INVALID_FILENAME: "Invalid filename", + INVALID_FORMAT: "Invalid or unsupported zip format. No END header found", + INVALID_PASS_PARAM: "Incompatible password parameter", + WRONG_PASSWORD: "Wrong Password", + /* ADM-ZIP */ + COMMENT_TOO_LONG: "Comment is too long", + // Comment can be max 65535 bytes long (NOTE: some non-US characters may take more space) + EXTRA_FIELD_PARSE_ERROR: "Extra field parsing error" + }; + function E(message) { + return function(...args) { + if (args.length) { + message = message.replace(/\{(\d)\}/g, (_, n) => args[n] || ""); + } + return new Error("ADM-ZIP: " + message); + }; + } + for (const msg of Object.keys(errors)) { + exports2[msg] = E(errors[msg]); + } + } +}); + +// node_modules/adm-zip/util/utils.js +var require_utils = __commonJS({ + "node_modules/adm-zip/util/utils.js"(exports2, module2) { + var fsystem = require("fs"); + var pth = require("path"); + var Constants = require_constants(); + var Errors = require_errors(); + var isWin = typeof process === "object" && "win32" === process.platform; + var is_Obj = (obj) => typeof obj === "object" && obj !== null; + var crcTable = new Uint32Array(256).map((t, c) => { + for (let k = 0; k < 8; k++) { + if ((c & 1) !== 0) { + c = 3988292384 ^ c >>> 1; + } else { + c >>>= 1; + } + } + return c >>> 0; + }); + function Utils(opts) { + this.sep = pth.sep; + this.fs = fsystem; + if (is_Obj(opts)) { + if (is_Obj(opts.fs) && typeof opts.fs.statSync === "function") { + this.fs = opts.fs; + } + } + } + module2.exports = Utils; + Utils.prototype.makeDir = function(folder) { + const self = this; + function mkdirSync2(fpath2) { + let resolvedPath = fpath2.split(self.sep)[0]; + fpath2.split(self.sep).forEach(function(name) { + if (!name || name.substr(-1, 1) === ":") return; + resolvedPath += self.sep + name; + var stat; + try { + stat = self.fs.statSync(resolvedPath); + } catch (e) { + self.fs.mkdirSync(resolvedPath); + } + if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY(`"${resolvedPath}"`); + }); + } + mkdirSync2(folder); + }; + Utils.prototype.writeFileTo = function(path, content, overwrite, attr) { + const self = this; + if (self.fs.existsSync(path)) { + if (!overwrite) return false; + var stat = self.fs.statSync(path); + if (stat.isDirectory()) { + return false; + } + } + var folder = pth.dirname(path); + if (!self.fs.existsSync(folder)) { + self.makeDir(folder); + } + var fd; + try { + fd = self.fs.openSync(path, "w", 438); + } catch (e) { + self.fs.chmodSync(path, 438); + fd = self.fs.openSync(path, "w", 438); + } + if (fd) { + try { + self.fs.writeSync(fd, content, 0, content.length, 0); + } finally { + self.fs.closeSync(fd); + } + } + self.fs.chmodSync(path, attr || 438); + return true; + }; + Utils.prototype.writeFileToAsync = function(path, content, overwrite, attr, callback) { + if (typeof attr === "function") { + callback = attr; + attr = void 0; + } + const self = this; + self.fs.exists(path, function(exist) { + if (exist && !overwrite) return callback(false); + self.fs.stat(path, function(err, stat) { + if (exist && stat.isDirectory()) { + return callback(false); + } + var folder = pth.dirname(path); + self.fs.exists(folder, function(exists) { + if (!exists) self.makeDir(folder); + self.fs.open(path, "w", 438, function(err2, fd) { + if (err2) { + self.fs.chmod(path, 438, function() { + self.fs.open(path, "w", 438, function(err3, fd2) { + self.fs.write(fd2, content, 0, content.length, 0, function() { + self.fs.close(fd2, function() { + self.fs.chmod(path, attr || 438, function() { + callback(true); + }); + }); + }); + }); + }); + } else if (fd) { + self.fs.write(fd, content, 0, content.length, 0, function() { + self.fs.close(fd, function() { + self.fs.chmod(path, attr || 438, function() { + callback(true); + }); + }); + }); + } else { + self.fs.chmod(path, attr || 438, function() { + callback(true); + }); + } + }); + }); + }); + }); + }; + Utils.prototype.findFiles = function(path) { + const self = this; + function findSync(dir, pattern, recursive) { + if (typeof pattern === "boolean") { + recursive = pattern; + pattern = void 0; + } + let files = []; + self.fs.readdirSync(dir).forEach(function(file) { + const path2 = pth.join(dir, file); + const stat = self.fs.statSync(path2); + if (!pattern || pattern.test(path2)) { + files.push(pth.normalize(path2) + (stat.isDirectory() ? self.sep : "")); + } + if (stat.isDirectory() && recursive) files = files.concat(findSync(path2, pattern, recursive)); + }); + return files; + } + return findSync(path, void 0, true); + }; + Utils.prototype.findFilesAsync = function(dir, cb) { + const self = this; + let results = []; + self.fs.readdir(dir, function(err, list) { + if (err) return cb(err); + let list_length = list.length; + if (!list_length) return cb(null, results); + list.forEach(function(file) { + file = pth.join(dir, file); + self.fs.stat(file, function(err2, stat) { + if (err2) return cb(err2); + if (stat) { + results.push(pth.normalize(file) + (stat.isDirectory() ? self.sep : "")); + if (stat.isDirectory()) { + self.findFilesAsync(file, function(err3, res) { + if (err3) return cb(err3); + results = results.concat(res); + if (!--list_length) cb(null, results); + }); + } else { + if (!--list_length) cb(null, results); + } + } + }); + }); + }); + }; + Utils.prototype.getAttributes = function() { + }; + Utils.prototype.setAttributes = function() { + }; + Utils.crc32update = function(crc, byte) { + return crcTable[(crc ^ byte) & 255] ^ crc >>> 8; + }; + Utils.crc32 = function(buf) { + if (typeof buf === "string") { + buf = Buffer.from(buf, "utf8"); + } + let len = buf.length; + let crc = ~0; + for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]); + return ~crc >>> 0; + }; + Utils.methodToString = function(method) { + switch (method) { + case Constants.STORED: + return "STORED (" + method + ")"; + case Constants.DEFLATED: + return "DEFLATED (" + method + ")"; + default: + return "UNSUPPORTED (" + method + ")"; + } + }; + Utils.canonical = function(path) { + if (!path) return ""; + const safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/")); + return pth.join(".", safeSuffix); + }; + Utils.zipnamefix = function(path) { + if (!path) return ""; + const safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/")); + return pth.posix.join(".", safeSuffix); + }; + Utils.findLast = function(arr, callback) { + if (!Array.isArray(arr)) throw new TypeError("arr is not array"); + const len = arr.length >>> 0; + for (let i = len - 1; i >= 0; i--) { + if (callback(arr[i], i, arr)) { + return arr[i]; + } + } + return void 0; + }; + Utils.sanitize = function(prefix, name) { + prefix = pth.resolve(pth.normalize(prefix)); + var parts = name.split("/"); + for (var i = 0, l = parts.length; i < l; i++) { + var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep))); + if (path.indexOf(prefix) === 0) { + return path; + } + } + return pth.normalize(pth.join(prefix, pth.basename(name))); + }; + Utils.toBuffer = function toBuffer(input, encoder) { + if (Buffer.isBuffer(input)) { + return input; + } else if (input instanceof Uint8Array) { + return Buffer.from(input); + } else { + return typeof input === "string" ? encoder(input) : Buffer.alloc(0); + } + }; + Utils.readBigUInt64LE = function(buffer, index) { + var slice = Buffer.from(buffer.slice(index, index + 8)); + slice.swap64(); + return parseInt(`0x${slice.toString("hex")}`); + }; + Utils.fromDOS2Date = function(val) { + return new Date((val >> 25 & 127) + 1980, Math.max((val >> 21 & 15) - 1, 0), Math.max(val >> 16 & 31, 1), val >> 11 & 31, val >> 5 & 63, (val & 31) << 1); + }; + Utils.fromDate2DOS = function(val) { + let date = 0; + let time = 0; + if (val.getFullYear() > 1979) { + date = (val.getFullYear() - 1980 & 127) << 9 | val.getMonth() + 1 << 5 | val.getDate(); + time = val.getHours() << 11 | val.getMinutes() << 5 | val.getSeconds() >> 1; + } + return date << 16 | time; + }; + Utils.isWin = isWin; + Utils.crcTable = crcTable; + } +}); + +// node_modules/adm-zip/util/fattr.js +var require_fattr = __commonJS({ + "node_modules/adm-zip/util/fattr.js"(exports2, module2) { + var pth = require("path"); + module2.exports = function(path, { fs: fs2 }) { + var _path = path || "", _obj = newAttr(), _stat = null; + function newAttr() { + return { + directory: false, + readonly: false, + hidden: false, + executable: false, + mtime: 0, + atime: 0 + }; + } + if (_path && fs2.existsSync(_path)) { + _stat = fs2.statSync(_path); + _obj.directory = _stat.isDirectory(); + _obj.mtime = _stat.mtime; + _obj.atime = _stat.atime; + _obj.executable = (73 & _stat.mode) !== 0; + _obj.readonly = (128 & _stat.mode) === 0; + _obj.hidden = pth.basename(_path)[0] === "."; + } else { + console.warn("Invalid path: " + _path); + } + return { + get directory() { + return _obj.directory; + }, + get readOnly() { + return _obj.readonly; + }, + get hidden() { + return _obj.hidden; + }, + get mtime() { + return _obj.mtime; + }, + get atime() { + return _obj.atime; + }, + get executable() { + return _obj.executable; + }, + decodeAttributes: function() { + }, + encodeAttributes: function() { + }, + toJSON: function() { + return { + path: _path, + isDirectory: _obj.directory, + isReadOnly: _obj.readonly, + isHidden: _obj.hidden, + isExecutable: _obj.executable, + mTime: _obj.mtime, + aTime: _obj.atime + }; + }, + toString: function() { + return JSON.stringify(this.toJSON(), null, " "); + } + }; + }; + } +}); + +// node_modules/adm-zip/util/decoder.js +var require_decoder = __commonJS({ + "node_modules/adm-zip/util/decoder.js"(exports2, module2) { + module2.exports = { + efs: true, + encode: (data) => Buffer.from(data, "utf8"), + decode: (data) => data.toString("utf8") + }; + } +}); + +// node_modules/adm-zip/util/index.js +var require_util = __commonJS({ + "node_modules/adm-zip/util/index.js"(exports2, module2) { + module2.exports = require_utils(); + module2.exports.Constants = require_constants(); + module2.exports.Errors = require_errors(); + module2.exports.FileAttr = require_fattr(); + module2.exports.decoder = require_decoder(); + } +}); + +// node_modules/adm-zip/headers/entryHeader.js +var require_entryHeader = __commonJS({ + "node_modules/adm-zip/headers/entryHeader.js"(exports2, module2) { + var Utils = require_util(); + var Constants = Utils.Constants; + module2.exports = function() { + var _verMade = 20, _version = 10, _flags = 0, _method = 0, _time = 0, _crc = 0, _compressedSize = 0, _size = 0, _fnameLen = 0, _extraLen = 0, _comLen = 0, _diskStart = 0, _inattr = 0, _attr = 0, _offset = 0; + _verMade |= Utils.isWin ? 2560 : 768; + _flags |= Constants.FLG_EFS; + const _localHeader = { + extraLen: 0 + }; + const uint32 = (val) => Math.max(0, val) >>> 0; + const uint16 = (val) => Math.max(0, val) & 65535; + const uint8 = (val) => Math.max(0, val) & 255; + _time = Utils.fromDate2DOS(/* @__PURE__ */ new Date()); + return { + get made() { + return _verMade; + }, + set made(val) { + _verMade = val; + }, + get version() { + return _version; + }, + set version(val) { + _version = val; + }, + get flags() { + return _flags; + }, + set flags(val) { + _flags = val; + }, + get flags_efs() { + return (_flags & Constants.FLG_EFS) > 0; + }, + set flags_efs(val) { + if (val) { + _flags |= Constants.FLG_EFS; + } else { + _flags &= ~Constants.FLG_EFS; + } + }, + get flags_desc() { + return (_flags & Constants.FLG_DESC) > 0; + }, + set flags_desc(val) { + if (val) { + _flags |= Constants.FLG_DESC; + } else { + _flags &= ~Constants.FLG_DESC; + } + }, + get method() { + return _method; + }, + set method(val) { + switch (val) { + case Constants.STORED: + this.version = 10; + case Constants.DEFLATED: + default: + this.version = 20; + } + _method = val; + }, + get time() { + return Utils.fromDOS2Date(this.timeval); + }, + set time(val) { + this.timeval = Utils.fromDate2DOS(val); + }, + get timeval() { + return _time; + }, + set timeval(val) { + _time = uint32(val); + }, + get timeHighByte() { + return uint8(_time >>> 8); + }, + get crc() { + return _crc; + }, + set crc(val) { + _crc = uint32(val); + }, + get compressedSize() { + return _compressedSize; + }, + set compressedSize(val) { + _compressedSize = uint32(val); + }, + get size() { + return _size; + }, + set size(val) { + _size = uint32(val); + }, + get fileNameLength() { + return _fnameLen; + }, + set fileNameLength(val) { + _fnameLen = val; + }, + get extraLength() { + return _extraLen; + }, + set extraLength(val) { + _extraLen = val; + }, + get extraLocalLength() { + return _localHeader.extraLen; + }, + set extraLocalLength(val) { + _localHeader.extraLen = val; + }, + get commentLength() { + return _comLen; + }, + set commentLength(val) { + _comLen = val; + }, + get diskNumStart() { + return _diskStart; + }, + set diskNumStart(val) { + _diskStart = uint32(val); + }, + get inAttr() { + return _inattr; + }, + set inAttr(val) { + _inattr = uint32(val); + }, + get attr() { + return _attr; + }, + set attr(val) { + _attr = uint32(val); + }, + // get Unix file permissions + get fileAttr() { + return uint16(_attr >> 16) & 4095; + }, + get offset() { + return _offset; + }, + set offset(val) { + _offset = uint32(val); + }, + get encrypted() { + return (_flags & Constants.FLG_ENC) === Constants.FLG_ENC; + }, + get centralHeaderSize() { + return Constants.CENHDR + _fnameLen + _extraLen + _comLen; + }, + get realDataOffset() { + return _offset + Constants.LOCHDR + _localHeader.fnameLen + _localHeader.extraLen; + }, + get localHeader() { + return _localHeader; + }, + loadLocalHeaderFromBinary: function(input) { + var data = input.slice(_offset, _offset + Constants.LOCHDR); + if (data.readUInt32LE(0) !== Constants.LOCSIG) { + throw Utils.Errors.INVALID_LOC(); + } + _localHeader.version = data.readUInt16LE(Constants.LOCVER); + _localHeader.flags = data.readUInt16LE(Constants.LOCFLG); + _localHeader.method = data.readUInt16LE(Constants.LOCHOW); + _localHeader.time = data.readUInt32LE(Constants.LOCTIM); + _localHeader.crc = data.readUInt32LE(Constants.LOCCRC); + _localHeader.compressedSize = data.readUInt32LE(Constants.LOCSIZ); + _localHeader.size = data.readUInt32LE(Constants.LOCLEN); + _localHeader.fnameLen = data.readUInt16LE(Constants.LOCNAM); + _localHeader.extraLen = data.readUInt16LE(Constants.LOCEXT); + const extraStart = _offset + Constants.LOCHDR + _localHeader.fnameLen; + const extraEnd = extraStart + _localHeader.extraLen; + return input.slice(extraStart, extraEnd); + }, + loadFromBinary: function(data) { + if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) { + throw Utils.Errors.INVALID_CEN(); + } + _verMade = data.readUInt16LE(Constants.CENVEM); + _version = data.readUInt16LE(Constants.CENVER); + _flags = data.readUInt16LE(Constants.CENFLG); + _method = data.readUInt16LE(Constants.CENHOW); + _time = data.readUInt32LE(Constants.CENTIM); + _crc = data.readUInt32LE(Constants.CENCRC); + _compressedSize = data.readUInt32LE(Constants.CENSIZ); + _size = data.readUInt32LE(Constants.CENLEN); + _fnameLen = data.readUInt16LE(Constants.CENNAM); + _extraLen = data.readUInt16LE(Constants.CENEXT); + _comLen = data.readUInt16LE(Constants.CENCOM); + _diskStart = data.readUInt16LE(Constants.CENDSK); + _inattr = data.readUInt16LE(Constants.CENATT); + _attr = data.readUInt32LE(Constants.CENATX); + _offset = data.readUInt32LE(Constants.CENOFF); + }, + localHeaderToBinary: function() { + var data = Buffer.alloc(Constants.LOCHDR); + data.writeUInt32LE(Constants.LOCSIG, 0); + data.writeUInt16LE(_version, Constants.LOCVER); + data.writeUInt16LE(_flags, Constants.LOCFLG); + data.writeUInt16LE(_method, Constants.LOCHOW); + data.writeUInt32LE(_time, Constants.LOCTIM); + data.writeUInt32LE(_crc, Constants.LOCCRC); + data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); + data.writeUInt32LE(_size, Constants.LOCLEN); + data.writeUInt16LE(_fnameLen, Constants.LOCNAM); + data.writeUInt16LE(_localHeader.extraLen, Constants.LOCEXT); + return data; + }, + centralHeaderToBinary: function() { + var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen); + data.writeUInt32LE(Constants.CENSIG, 0); + data.writeUInt16LE(_verMade, Constants.CENVEM); + data.writeUInt16LE(_version, Constants.CENVER); + data.writeUInt16LE(_flags, Constants.CENFLG); + data.writeUInt16LE(_method, Constants.CENHOW); + data.writeUInt32LE(_time, Constants.CENTIM); + data.writeUInt32LE(_crc, Constants.CENCRC); + data.writeUInt32LE(_compressedSize, Constants.CENSIZ); + data.writeUInt32LE(_size, Constants.CENLEN); + data.writeUInt16LE(_fnameLen, Constants.CENNAM); + data.writeUInt16LE(_extraLen, Constants.CENEXT); + data.writeUInt16LE(_comLen, Constants.CENCOM); + data.writeUInt16LE(_diskStart, Constants.CENDSK); + data.writeUInt16LE(_inattr, Constants.CENATT); + data.writeUInt32LE(_attr, Constants.CENATX); + data.writeUInt32LE(_offset, Constants.CENOFF); + return data; + }, + toJSON: function() { + const bytes = function(nr) { + return nr + " bytes"; + }; + return { + made: _verMade, + version: _version, + flags: _flags, + method: Utils.methodToString(_method), + time: this.time, + crc: "0x" + _crc.toString(16).toUpperCase(), + compressedSize: bytes(_compressedSize), + size: bytes(_size), + fileNameLength: bytes(_fnameLen), + extraLength: bytes(_extraLen), + commentLength: bytes(_comLen), + diskNumStart: _diskStart, + inAttr: _inattr, + attr: _attr, + offset: _offset, + centralHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen) + }; + }, + toString: function() { + return JSON.stringify(this.toJSON(), null, " "); + } + }; + }; + } +}); + +// node_modules/adm-zip/headers/mainHeader.js +var require_mainHeader = __commonJS({ + "node_modules/adm-zip/headers/mainHeader.js"(exports2, module2) { + var Utils = require_util(); + var Constants = Utils.Constants; + module2.exports = function() { + var _volumeEntries = 0, _totalEntries = 0, _size = 0, _offset = 0, _commentLength = 0; + return { + get diskEntries() { + return _volumeEntries; + }, + set diskEntries(val) { + _volumeEntries = _totalEntries = val; + }, + get totalEntries() { + return _totalEntries; + }, + set totalEntries(val) { + _totalEntries = _volumeEntries = val; + }, + get size() { + return _size; + }, + set size(val) { + _size = val; + }, + get offset() { + return _offset; + }, + set offset(val) { + _offset = val; + }, + get commentLength() { + return _commentLength; + }, + set commentLength(val) { + _commentLength = val; + }, + get mainHeaderSize() { + return Constants.ENDHDR + _commentLength; + }, + loadFromBinary: function(data) { + if ((data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) && (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)) { + throw Utils.Errors.INVALID_END(); + } + if (data.readUInt32LE(0) === Constants.ENDSIG) { + _volumeEntries = data.readUInt16LE(Constants.ENDSUB); + _totalEntries = data.readUInt16LE(Constants.ENDTOT); + _size = data.readUInt32LE(Constants.ENDSIZ); + _offset = data.readUInt32LE(Constants.ENDOFF); + _commentLength = data.readUInt16LE(Constants.ENDCOM); + } else { + _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB); + _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT); + _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZE); + _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF); + _commentLength = 0; + } + }, + toBinary: function() { + var b = Buffer.alloc(Constants.ENDHDR + _commentLength); + b.writeUInt32LE(Constants.ENDSIG, 0); + b.writeUInt32LE(0, 4); + b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); + b.writeUInt16LE(_totalEntries, Constants.ENDTOT); + b.writeUInt32LE(_size, Constants.ENDSIZ); + b.writeUInt32LE(_offset, Constants.ENDOFF); + b.writeUInt16LE(_commentLength, Constants.ENDCOM); + b.fill(" ", Constants.ENDHDR); + return b; + }, + toJSON: function() { + const offset = function(nr, len) { + let offs = nr.toString(16).toUpperCase(); + while (offs.length < len) offs = "0" + offs; + return "0x" + offs; + }; + return { + diskEntries: _volumeEntries, + totalEntries: _totalEntries, + size: _size + " bytes", + offset: offset(_offset, 4), + commentLength: _commentLength + }; + }, + toString: function() { + return JSON.stringify(this.toJSON(), null, " "); + } + }; + }; + } +}); + +// node_modules/adm-zip/headers/index.js +var require_headers = __commonJS({ + "node_modules/adm-zip/headers/index.js"(exports2) { + exports2.EntryHeader = require_entryHeader(); + exports2.MainHeader = require_mainHeader(); + } +}); + +// node_modules/adm-zip/methods/deflater.js +var require_deflater = __commonJS({ + "node_modules/adm-zip/methods/deflater.js"(exports2, module2) { + module2.exports = function(inbuf) { + var zlib = require("zlib"); + var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 }; + return { + deflate: function() { + return zlib.deflateRawSync(inbuf, opts); + }, + deflateAsync: function(callback) { + var tmp = zlib.createDeflateRaw(opts), parts = [], total = 0; + tmp.on("data", function(data) { + parts.push(data); + total += data.length; + }); + tmp.on("end", function() { + var buf = Buffer.alloc(total), written = 0; + buf.fill(0); + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + part.copy(buf, written); + written += part.length; + } + callback && callback(buf); + }); + tmp.end(inbuf); + } + }; + }; + } +}); + +// node_modules/adm-zip/methods/inflater.js +var require_inflater = __commonJS({ + "node_modules/adm-zip/methods/inflater.js"(exports2, module2) { + var version = +(process.versions ? process.versions.node : "").split(".")[0] || 0; + module2.exports = function(inbuf, expectedLength) { + var zlib = require("zlib"); + const option = version >= 15 && expectedLength > 0 ? { maxOutputLength: expectedLength } : {}; + return { + inflate: function() { + return zlib.inflateRawSync(inbuf, option); + }, + inflateAsync: function(callback) { + var tmp = zlib.createInflateRaw(option), parts = [], total = 0; + tmp.on("data", function(data) { + parts.push(data); + total += data.length; + }); + tmp.on("end", function() { + var buf = Buffer.alloc(total), written = 0; + buf.fill(0); + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + part.copy(buf, written); + written += part.length; + } + callback && callback(buf); + }); + tmp.end(inbuf); + } + }; + }; + } +}); + +// node_modules/adm-zip/methods/zipcrypto.js +var require_zipcrypto = __commonJS({ + "node_modules/adm-zip/methods/zipcrypto.js"(exports2, module2) { + "use strict"; + var { randomFillSync } = require("crypto"); + var Errors = require_errors(); + var crctable = new Uint32Array(256).map((t, crc) => { + for (let j = 0; j < 8; j++) { + if (0 !== (crc & 1)) { + crc = crc >>> 1 ^ 3988292384; + } else { + crc >>>= 1; + } + } + return crc >>> 0; + }); + var uMul = (a, b) => Math.imul(a, b) >>> 0; + var crc32update = (pCrc32, bval) => { + return crctable[(pCrc32 ^ bval) & 255] ^ pCrc32 >>> 8; + }; + var genSalt = () => { + if ("function" === typeof randomFillSync) { + return randomFillSync(Buffer.alloc(12)); + } else { + return genSalt.node(); + } + }; + genSalt.node = () => { + const salt = Buffer.alloc(12); + const len = salt.length; + for (let i = 0; i < len; i++) salt[i] = Math.random() * 256 & 255; + return salt; + }; + var config = { + genSalt + }; + function Initkeys(pw) { + const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw); + this.keys = new Uint32Array([305419896, 591751049, 878082192]); + for (let i = 0; i < pass.length; i++) { + this.updateKeys(pass[i]); + } + } + Initkeys.prototype.updateKeys = function(byteValue) { + const keys = this.keys; + keys[0] = crc32update(keys[0], byteValue); + keys[1] += keys[0] & 255; + keys[1] = uMul(keys[1], 134775813) + 1; + keys[2] = crc32update(keys[2], keys[1] >>> 24); + return byteValue; + }; + Initkeys.prototype.next = function() { + const k = (this.keys[2] | 2) >>> 0; + return uMul(k, k ^ 1) >> 8 & 255; + }; + function make_decrypter(pwd) { + const keys = new Initkeys(pwd); + return function(data) { + const result = Buffer.alloc(data.length); + let pos = 0; + for (let c of data) { + result[pos++] = keys.updateKeys(c ^ keys.next()); + } + return result; + }; + } + function make_encrypter(pwd) { + const keys = new Initkeys(pwd); + return function(data, result, pos = 0) { + if (!result) result = Buffer.alloc(data.length); + for (let c of data) { + const k = keys.next(); + result[pos++] = c ^ k; + keys.updateKeys(c); + } + return result; + }; + } + function decrypt(data, header, pwd) { + if (!data || !Buffer.isBuffer(data) || data.length < 12) { + return Buffer.alloc(0); + } + const decrypter = make_decrypter(pwd); + const salt = decrypter(data.slice(0, 12)); + const verifyByte = (header.flags & 8) === 8 ? header.timeHighByte : header.crc >>> 24; + if (salt[11] !== verifyByte) { + throw Errors.WRONG_PASSWORD(); + } + return decrypter(data.slice(12)); + } + function _salter(data) { + if (Buffer.isBuffer(data) && data.length >= 12) { + config.genSalt = function() { + return data.slice(0, 12); + }; + } else if (data === "node") { + config.genSalt = genSalt.node; + } else { + config.genSalt = genSalt; + } + } + function encrypt(data, header, pwd, oldlike = false) { + if (data == null) data = Buffer.alloc(0); + if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString()); + const encrypter = make_encrypter(pwd); + const salt = config.genSalt(); + salt[11] = header.crc >>> 24 & 255; + if (oldlike) salt[10] = header.crc >>> 16 & 255; + const result = Buffer.alloc(data.length + 12); + encrypter(salt, result); + return encrypter(data, result, 12); + } + module2.exports = { decrypt, encrypt, _salter }; + } +}); + +// node_modules/adm-zip/methods/index.js +var require_methods = __commonJS({ + "node_modules/adm-zip/methods/index.js"(exports2) { + exports2.Deflater = require_deflater(); + exports2.Inflater = require_inflater(); + exports2.ZipCrypto = require_zipcrypto(); + } +}); + +// node_modules/adm-zip/zipEntry.js +var require_zipEntry = __commonJS({ + "node_modules/adm-zip/zipEntry.js"(exports2, module2) { + var Utils = require_util(); + var Headers = require_headers(); + var Constants = Utils.Constants; + var Methods = require_methods(); + module2.exports = function(options, input) { + var _centralHeader = new Headers.EntryHeader(), _entryName = Buffer.alloc(0), _comment = Buffer.alloc(0), _isDirectory = false, uncompressedData = null, _extra = Buffer.alloc(0), _extralocal = Buffer.alloc(0), _efs = true; + const opts = options; + const decoder = typeof opts.decoder === "object" ? opts.decoder : Utils.decoder; + _efs = decoder.hasOwnProperty("efs") ? decoder.efs : false; + function getCompressedDataFromZip() { + if (!input || !(input instanceof Uint8Array)) { + return Buffer.alloc(0); + } + _extralocal = _centralHeader.loadLocalHeaderFromBinary(input); + return input.slice(_centralHeader.realDataOffset, _centralHeader.realDataOffset + _centralHeader.compressedSize); + } + function crc32OK(data) { + if (!_centralHeader.flags_desc) { + if (Utils.crc32(data) !== _centralHeader.localHeader.crc) { + return false; + } + } else { + const descriptor = {}; + const dataEndOffset = _centralHeader.realDataOffset + _centralHeader.compressedSize; + if (input.readUInt32LE(dataEndOffset) == Constants.LOCSIG || input.readUInt32LE(dataEndOffset) == Constants.CENSIG) { + throw Utils.Errors.DESCRIPTOR_NOT_EXIST(); + } + if (input.readUInt32LE(dataEndOffset) == Constants.EXTSIG) { + descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC); + descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ); + descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN); + } else if (input.readUInt16LE(dataEndOffset + 12) === 19280) { + descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC - 4); + descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ - 4); + descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN - 4); + } else { + throw Utils.Errors.DESCRIPTOR_UNKNOWN(); + } + if (descriptor.compressedSize !== _centralHeader.compressedSize || descriptor.size !== _centralHeader.size || descriptor.crc !== _centralHeader.crc) { + throw Utils.Errors.DESCRIPTOR_FAULTY(); + } + if (Utils.crc32(data) !== descriptor.crc) { + return false; + } + } + return true; + } + function decompress(async, callback, pass) { + if (typeof callback === "undefined" && typeof async === "string") { + pass = async; + async = void 0; + } + if (_isDirectory) { + if (async && callback) { + callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR()); + } + return Buffer.alloc(0); + } + var compressedData = getCompressedDataFromZip(); + if (compressedData.length === 0) { + if (async && callback) callback(compressedData); + return compressedData; + } + if (_centralHeader.encrypted) { + if ("string" !== typeof pass && !Buffer.isBuffer(pass)) { + throw Utils.Errors.INVALID_PASS_PARAM(); + } + compressedData = Methods.ZipCrypto.decrypt(compressedData, _centralHeader, pass); + } + var data = Buffer.alloc(_centralHeader.size); + switch (_centralHeader.method) { + case Utils.Constants.STORED: + compressedData.copy(data); + if (!crc32OK(data)) { + if (async && callback) callback(data, Utils.Errors.BAD_CRC()); + throw Utils.Errors.BAD_CRC(); + } else { + if (async && callback) callback(data); + return data; + } + case Utils.Constants.DEFLATED: + var inflater = new Methods.Inflater(compressedData, _centralHeader.size); + if (!async) { + const result = inflater.inflate(data); + result.copy(data, 0); + if (!crc32OK(data)) { + throw Utils.Errors.BAD_CRC(`"${decoder.decode(_entryName)}"`); + } + return data; + } else { + inflater.inflateAsync(function(result) { + result.copy(result, 0); + if (callback) { + if (!crc32OK(result)) { + callback(result, Utils.Errors.BAD_CRC()); + } else { + callback(result); + } + } + }); + } + break; + default: + if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD()); + throw Utils.Errors.UNKNOWN_METHOD(); + } + } + function compress(async, callback) { + if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { + if (async && callback) callback(getCompressedDataFromZip()); + return getCompressedDataFromZip(); + } + if (uncompressedData.length && !_isDirectory) { + var compressedData; + switch (_centralHeader.method) { + case Utils.Constants.STORED: + _centralHeader.compressedSize = _centralHeader.size; + compressedData = Buffer.alloc(uncompressedData.length); + uncompressedData.copy(compressedData); + if (async && callback) callback(compressedData); + return compressedData; + default: + case Utils.Constants.DEFLATED: + var deflater = new Methods.Deflater(uncompressedData); + if (!async) { + var deflated = deflater.deflate(); + _centralHeader.compressedSize = deflated.length; + return deflated; + } else { + deflater.deflateAsync(function(data) { + compressedData = Buffer.alloc(data.length); + _centralHeader.compressedSize = data.length; + data.copy(compressedData); + callback && callback(compressedData); + }); + } + deflater = null; + break; + } + } else if (async && callback) { + callback(Buffer.alloc(0)); + } else { + return Buffer.alloc(0); + } + } + function readUInt64LE(buffer, offset) { + return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset); + } + function parseExtra(data) { + try { + var offset = 0; + var signature, size, part; + while (offset + 4 < data.length) { + signature = data.readUInt16LE(offset); + offset += 2; + size = data.readUInt16LE(offset); + offset += 2; + part = data.slice(offset, offset + size); + offset += size; + if (Constants.ID_ZIP64 === signature) { + parseZip64ExtendedInformation(part); + } + } + } catch (error) { + throw Utils.Errors.EXTRA_FIELD_PARSE_ERROR(); + } + } + function parseZip64ExtendedInformation(data) { + var size, compressedSize, offset, diskNumStart; + if (data.length >= Constants.EF_ZIP64_SCOMP) { + size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP); + if (_centralHeader.size === Constants.EF_ZIP64_OR_32) { + _centralHeader.size = size; + } + } + if (data.length >= Constants.EF_ZIP64_RHO) { + compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP); + if (_centralHeader.compressedSize === Constants.EF_ZIP64_OR_32) { + _centralHeader.compressedSize = compressedSize; + } + } + if (data.length >= Constants.EF_ZIP64_DSN) { + offset = readUInt64LE(data, Constants.EF_ZIP64_RHO); + if (_centralHeader.offset === Constants.EF_ZIP64_OR_32) { + _centralHeader.offset = offset; + } + } + if (data.length >= Constants.EF_ZIP64_DSN + 4) { + diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN); + if (_centralHeader.diskNumStart === Constants.EF_ZIP64_OR_16) { + _centralHeader.diskNumStart = diskNumStart; + } + } + } + return { + get entryName() { + return decoder.decode(_entryName); + }, + get rawEntryName() { + return _entryName; + }, + set entryName(val) { + _entryName = Utils.toBuffer(val, decoder.encode); + var lastChar = _entryName[_entryName.length - 1]; + _isDirectory = lastChar === 47 || lastChar === 92; + _centralHeader.fileNameLength = _entryName.length; + }, + get efs() { + if (typeof _efs === "function") { + return _efs(this.entryName); + } else { + return _efs; + } + }, + get extra() { + return _extra; + }, + set extra(val) { + _extra = val; + _centralHeader.extraLength = val.length; + parseExtra(val); + }, + get comment() { + return decoder.decode(_comment); + }, + set comment(val) { + _comment = Utils.toBuffer(val, decoder.encode); + _centralHeader.commentLength = _comment.length; + if (_comment.length > 65535) throw Utils.Errors.COMMENT_TOO_LONG(); + }, + get name() { + var n = decoder.decode(_entryName); + return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); + }, + get isDirectory() { + return _isDirectory; + }, + getCompressedData: function() { + return compress(false, null); + }, + getCompressedDataAsync: function(callback) { + compress(true, callback); + }, + setData: function(value) { + uncompressedData = Utils.toBuffer(value, Utils.decoder.encode); + if (!_isDirectory && uncompressedData.length) { + _centralHeader.size = uncompressedData.length; + _centralHeader.method = Utils.Constants.DEFLATED; + _centralHeader.crc = Utils.crc32(value); + _centralHeader.changed = true; + } else { + _centralHeader.method = Utils.Constants.STORED; + } + }, + getData: function(pass) { + if (_centralHeader.changed) { + return uncompressedData; + } else { + return decompress(false, null, pass); + } + }, + getDataAsync: function(callback, pass) { + if (_centralHeader.changed) { + callback(uncompressedData); + } else { + decompress(true, callback, pass); + } + }, + set attr(attr) { + _centralHeader.attr = attr; + }, + get attr() { + return _centralHeader.attr; + }, + set header(data) { + _centralHeader.loadFromBinary(data); + }, + get header() { + return _centralHeader; + }, + packCentralHeader: function() { + _centralHeader.flags_efs = this.efs; + _centralHeader.extraLength = _extra.length; + var header = _centralHeader.centralHeaderToBinary(); + var addpos = Utils.Constants.CENHDR; + _entryName.copy(header, addpos); + addpos += _entryName.length; + _extra.copy(header, addpos); + addpos += _centralHeader.extraLength; + _comment.copy(header, addpos); + return header; + }, + packLocalHeader: function() { + let addpos = 0; + _centralHeader.flags_efs = this.efs; + _centralHeader.extraLocalLength = _extralocal.length; + const localHeaderBuf = _centralHeader.localHeaderToBinary(); + const localHeader = Buffer.alloc(localHeaderBuf.length + _entryName.length + _centralHeader.extraLocalLength); + localHeaderBuf.copy(localHeader, addpos); + addpos += localHeaderBuf.length; + _entryName.copy(localHeader, addpos); + addpos += _entryName.length; + _extralocal.copy(localHeader, addpos); + addpos += _extralocal.length; + return localHeader; + }, + toJSON: function() { + const bytes = function(nr) { + return "<" + (nr && nr.length + " bytes buffer" || "null") + ">"; + }; + return { + entryName: this.entryName, + name: this.name, + comment: this.comment, + isDirectory: this.isDirectory, + header: _centralHeader.toJSON(), + compressedData: bytes(input), + data: bytes(uncompressedData) + }; + }, + toString: function() { + return JSON.stringify(this.toJSON(), null, " "); + } + }; + }; + } +}); + +// node_modules/adm-zip/zipFile.js +var require_zipFile = __commonJS({ + "node_modules/adm-zip/zipFile.js"(exports2, module2) { + var ZipEntry = require_zipEntry(); + var Headers = require_headers(); + var Utils = require_util(); + module2.exports = function(inBuffer, options) { + var entryList = [], entryTable = {}, _comment = Buffer.alloc(0), mainHeader = new Headers.MainHeader(), loadedEntries = false; + var password = null; + const temporary = /* @__PURE__ */ new Set(); + const opts = options; + const { noSort, decoder } = opts; + if (inBuffer) { + readMainHeader(opts.readEntries); + } else { + loadedEntries = true; + } + function makeTemporaryFolders() { + const foldersList = /* @__PURE__ */ new Set(); + for (const elem of Object.keys(entryTable)) { + const elements = elem.split("/"); + elements.pop(); + if (!elements.length) continue; + for (let i = 0; i < elements.length; i++) { + const sub = elements.slice(0, i + 1).join("/") + "/"; + foldersList.add(sub); + } + } + for (const elem of foldersList) { + if (!(elem in entryTable)) { + const tempfolder = new ZipEntry(opts); + tempfolder.entryName = elem; + tempfolder.attr = 16; + tempfolder.temporary = true; + entryList.push(tempfolder); + entryTable[tempfolder.entryName] = tempfolder; + temporary.add(tempfolder); + } + } + } + function readEntries() { + loadedEntries = true; + entryTable = {}; + if (mainHeader.diskEntries > (inBuffer.length - mainHeader.offset) / Utils.Constants.CENHDR) { + throw Utils.Errors.DISK_ENTRY_TOO_LARGE(); + } + entryList = new Array(mainHeader.diskEntries); + var index = mainHeader.offset; + for (var i = 0; i < entryList.length; i++) { + var tmp = index, entry = new ZipEntry(opts, inBuffer); + entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); + entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); + if (entry.header.extraLength) { + entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); + } + if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); + index += entry.header.centralHeaderSize; + entryList[i] = entry; + entryTable[entry.entryName] = entry; + } + temporary.clear(); + makeTemporaryFolders(); + } + function readMainHeader(readNow) { + var i = inBuffer.length - Utils.Constants.ENDHDR, max = Math.max(0, i - 65535), n = max, endStart = inBuffer.length, endOffset = -1, commentEnd = 0; + const trailingSpace = typeof opts.trailingSpace === "boolean" ? opts.trailingSpace : false; + if (trailingSpace) max = 0; + for (i; i >= n; i--) { + if (inBuffer[i] !== 80) continue; + if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) { + endOffset = i; + commentEnd = i; + endStart = i + Utils.Constants.ENDHDR; + n = i - Utils.Constants.END64HDR; + continue; + } + if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) { + n = max; + continue; + } + if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) { + endOffset = i; + endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD; + break; + } + } + if (endOffset == -1) throw Utils.Errors.INVALID_FORMAT(); + mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart)); + if (mainHeader.commentLength) { + _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR); + } + if (readNow) readEntries(); + } + function sortEntries() { + if (entryList.length > 1 && !noSort) { + entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase())); + } + } + return { + /** + * Returns an array of ZipEntry objects existent in the current opened archive + * @return Array + */ + get entries() { + if (!loadedEntries) { + readEntries(); + } + return entryList.filter((e) => !temporary.has(e)); + }, + /** + * Archive comment + * @return {String} + */ + get comment() { + return decoder.decode(_comment); + }, + set comment(val) { + _comment = Utils.toBuffer(val, decoder.encode); + mainHeader.commentLength = _comment.length; + }, + getEntryCount: function() { + if (!loadedEntries) { + return mainHeader.diskEntries; + } + return entryList.length; + }, + forEach: function(callback) { + this.entries.forEach(callback); + }, + /** + * Returns a reference to the entry with the given name or null if entry is inexistent + * + * @param entryName + * @return ZipEntry + */ + getEntry: function(entryName) { + if (!loadedEntries) { + readEntries(); + } + return entryTable[entryName] || null; + }, + /** + * Adds the given entry to the entry list + * + * @param entry + */ + setEntry: function(entry) { + if (!loadedEntries) { + readEntries(); + } + entryList.push(entry); + entryTable[entry.entryName] = entry; + mainHeader.totalEntries = entryList.length; + }, + /** + * Removes the file with the given name from the entry list. + * + * If the entry is a directory, then all nested files and directories will be removed + * @param entryName + * @returns {void} + */ + deleteFile: function(entryName, withsubfolders = true) { + if (!loadedEntries) { + readEntries(); + } + const entry = entryTable[entryName]; + const list = this.getEntryChildren(entry, withsubfolders).map((child) => child.entryName); + list.forEach(this.deleteEntry); + }, + /** + * Removes the entry with the given name from the entry list. + * + * @param {string} entryName + * @returns {void} + */ + deleteEntry: function(entryName) { + if (!loadedEntries) { + readEntries(); + } + const entry = entryTable[entryName]; + const index = entryList.indexOf(entry); + if (index >= 0) { + entryList.splice(index, 1); + delete entryTable[entryName]; + mainHeader.totalEntries = entryList.length; + } + }, + /** + * Iterates and returns all nested files and directories of the given entry + * + * @param entry + * @return Array + */ + getEntryChildren: function(entry, subfolders = true) { + if (!loadedEntries) { + readEntries(); + } + if (typeof entry === "object") { + if (entry.isDirectory && subfolders) { + const list = []; + const name = entry.entryName; + for (const zipEntry of entryList) { + if (zipEntry.entryName.startsWith(name)) { + list.push(zipEntry); + } + } + return list; + } else { + return [entry]; + } + } + return []; + }, + /** + * How many child elements entry has + * + * @param {ZipEntry} entry + * @return {integer} + */ + getChildCount: function(entry) { + if (entry && entry.isDirectory) { + const list = this.getEntryChildren(entry); + return list.includes(entry) ? list.length - 1 : list.length; + } + return 0; + }, + /** + * Returns the zip file + * + * @return Buffer + */ + compressToBuffer: function() { + if (!loadedEntries) { + readEntries(); + } + sortEntries(); + const dataBlock = []; + const headerBlocks = []; + let totalSize = 0; + let dindex = 0; + mainHeader.size = 0; + mainHeader.offset = 0; + totalEntries = 0; + for (const entry of this.entries) { + const compressedData = entry.getCompressedData(); + entry.header.offset = dindex; + const localHeader = entry.packLocalHeader(); + const dataLength = localHeader.length + compressedData.length; + dindex += dataLength; + dataBlock.push(localHeader); + dataBlock.push(compressedData); + const centralHeader = entry.packCentralHeader(); + headerBlocks.push(centralHeader); + mainHeader.size += centralHeader.length; + totalSize += dataLength + centralHeader.length; + totalEntries++; + } + totalSize += mainHeader.mainHeaderSize; + mainHeader.offset = dindex; + mainHeader.totalEntries = totalEntries; + dindex = 0; + const outBuffer = Buffer.alloc(totalSize); + for (const content of dataBlock) { + content.copy(outBuffer, dindex); + dindex += content.length; + } + for (const content of headerBlocks) { + content.copy(outBuffer, dindex); + dindex += content.length; + } + const mh = mainHeader.toBinary(); + if (_comment) { + _comment.copy(mh, Utils.Constants.ENDHDR); + } + mh.copy(outBuffer, dindex); + inBuffer = outBuffer; + loadedEntries = false; + return outBuffer; + }, + toAsyncBuffer: function(onSuccess, onFail, onItemStart, onItemEnd) { + try { + if (!loadedEntries) { + readEntries(); + } + sortEntries(); + const dataBlock = []; + const centralHeaders = []; + let totalSize = 0; + let dindex = 0; + let totalEntries2 = 0; + mainHeader.size = 0; + mainHeader.offset = 0; + const compress2Buffer = function(entryLists) { + if (entryLists.length > 0) { + const entry = entryLists.shift(); + const name = entry.entryName + entry.extra.toString(); + if (onItemStart) onItemStart(name); + entry.getCompressedDataAsync(function(compressedData) { + if (onItemEnd) onItemEnd(name); + entry.header.offset = dindex; + const localHeader = entry.packLocalHeader(); + const dataLength = localHeader.length + compressedData.length; + dindex += dataLength; + dataBlock.push(localHeader); + dataBlock.push(compressedData); + const centalHeader = entry.packCentralHeader(); + centralHeaders.push(centalHeader); + mainHeader.size += centalHeader.length; + totalSize += dataLength + centalHeader.length; + totalEntries2++; + compress2Buffer(entryLists); + }); + } else { + totalSize += mainHeader.mainHeaderSize; + mainHeader.offset = dindex; + mainHeader.totalEntries = totalEntries2; + dindex = 0; + const outBuffer = Buffer.alloc(totalSize); + dataBlock.forEach(function(content) { + content.copy(outBuffer, dindex); + dindex += content.length; + }); + centralHeaders.forEach(function(content) { + content.copy(outBuffer, dindex); + dindex += content.length; + }); + const mh = mainHeader.toBinary(); + if (_comment) { + _comment.copy(mh, Utils.Constants.ENDHDR); + } + mh.copy(outBuffer, dindex); + inBuffer = outBuffer; + loadedEntries = false; + onSuccess(outBuffer); + } + }; + compress2Buffer(Array.from(this.entries)); + } catch (e) { + onFail(e); + } + } + }; + }; + } +}); + +// node_modules/adm-zip/adm-zip.js +var require_adm_zip = __commonJS({ + "node_modules/adm-zip/adm-zip.js"(exports2, module2) { + var Utils = require_util(); + var pth = require("path"); + var ZipEntry = require_zipEntry(); + var ZipFile = require_zipFile(); + var get_Bool = (...val) => Utils.findLast(val, (c) => typeof c === "boolean"); + var get_Str = (...val) => Utils.findLast(val, (c) => typeof c === "string"); + var get_Fun = (...val) => Utils.findLast(val, (c) => typeof c === "function"); + var defaultOptions = { + // option "noSort" : if true it disables files sorting + noSort: false, + // read entries during load (initial loading may be slower) + readEntries: false, + // default method is none + method: Utils.Constants.NONE, + // file system + fs: null + }; + module2.exports = function(input, options) { + let inBuffer = null; + const opts = Object.assign(/* @__PURE__ */ Object.create(null), defaultOptions); + if (input && "object" === typeof input) { + if (!(input instanceof Uint8Array)) { + Object.assign(opts, input); + input = opts.input ? opts.input : void 0; + if (opts.input) delete opts.input; + } + if (Buffer.isBuffer(input)) { + inBuffer = input; + opts.method = Utils.Constants.BUFFER; + input = void 0; + } + } + Object.assign(opts, options); + const filetools = new Utils(opts); + if (typeof opts.decoder !== "object" || typeof opts.decoder.encode !== "function" || typeof opts.decoder.decode !== "function") { + opts.decoder = Utils.decoder; + } + if (input && "string" === typeof input) { + if (filetools.fs.existsSync(input)) { + opts.method = Utils.Constants.FILE; + opts.filename = input; + inBuffer = filetools.fs.readFileSync(input); + } else { + throw Utils.Errors.INVALID_FILENAME(); + } + } + const _zip = new ZipFile(inBuffer, opts); + const { canonical, sanitize, zipnamefix } = Utils; + function getEntry(entry) { + if (entry && _zip) { + var item; + if (typeof entry === "string") item = _zip.getEntry(pth.posix.normalize(entry)); + if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName); + if (item) { + return item; + } + } + return null; + } + function fixPath(zipPath) { + const { join: join2, normalize, sep } = pth.posix; + return join2(".", normalize(sep + zipPath.split("\\").join(sep) + sep)); + } + function filenameFilter(filterfn) { + if (filterfn instanceof RegExp) { + return /* @__PURE__ */ function(rx) { + return function(filename) { + return rx.test(filename); + }; + }(filterfn); + } else if ("function" !== typeof filterfn) { + return () => true; + } + return filterfn; + } + const relativePath = (local, entry) => { + let lastChar = entry.slice(-1); + lastChar = lastChar === filetools.sep ? filetools.sep : ""; + return pth.relative(local, entry) + lastChar; + }; + return { + /** + * Extracts the given entry from the archive and returns the content as a Buffer object + * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry + * @param {Buffer|string} [pass] - password + * @return Buffer or Null in case of error + */ + readFile: function(entry, pass) { + var item = getEntry(entry); + return item && item.getData(pass) || null; + }, + /** + * Returns how many child elements has on entry (directories) on files it is always 0 + * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry + * @returns {integer} + */ + childCount: function(entry) { + const item = getEntry(entry); + if (item) { + return _zip.getChildCount(item); + } + }, + /** + * Asynchronous readFile + * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry + * @param {callback} callback + * + * @return Buffer or Null in case of error + */ + readFileAsync: function(entry, callback) { + var item = getEntry(entry); + if (item) { + item.getDataAsync(callback); + } else { + callback(null, "getEntry failed for:" + entry); + } + }, + /** + * Extracts the given entry from the archive and returns the content as plain text in the given encoding + * @param {ZipEntry|string} entry - ZipEntry object or String with the full path of the entry + * @param {string} encoding - Optional. If no encoding is specified utf8 is used + * + * @return String + */ + readAsText: function(entry, encoding) { + var item = getEntry(entry); + if (item) { + var data = item.getData(); + if (data && data.length) { + return data.toString(encoding || "utf8"); + } + } + return ""; + }, + /** + * Asynchronous readAsText + * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry + * @param {callback} callback + * @param {string} [encoding] - Optional. If no encoding is specified utf8 is used + * + * @return String + */ + readAsTextAsync: function(entry, callback, encoding) { + var item = getEntry(entry); + if (item) { + item.getDataAsync(function(data, err) { + if (err) { + callback(data, err); + return; + } + if (data && data.length) { + callback(data.toString(encoding || "utf8")); + } else { + callback(""); + } + }); + } else { + callback(""); + } + }, + /** + * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory + * + * @param {ZipEntry|string} entry + * @returns {void} + */ + deleteFile: function(entry, withsubfolders = true) { + var item = getEntry(entry); + if (item) { + _zip.deleteFile(item.entryName, withsubfolders); + } + }, + /** + * Remove the entry from the file or directory without affecting any nested entries + * + * @param {ZipEntry|string} entry + * @returns {void} + */ + deleteEntry: function(entry) { + var item = getEntry(entry); + if (item) { + _zip.deleteEntry(item.entryName); + } + }, + /** + * Adds a comment to the zip. The zip must be rewritten after adding the comment. + * + * @param {string} comment + */ + addZipComment: function(comment) { + _zip.comment = comment; + }, + /** + * Returns the zip comment + * + * @return String + */ + getZipComment: function() { + return _zip.comment || ""; + }, + /** + * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment + * The comment cannot exceed 65535 characters in length + * + * @param {ZipEntry} entry + * @param {string} comment + */ + addZipEntryComment: function(entry, comment) { + var item = getEntry(entry); + if (item) { + item.comment = comment; + } + }, + /** + * Returns the comment of the specified entry + * + * @param {ZipEntry} entry + * @return String + */ + getZipEntryComment: function(entry) { + var item = getEntry(entry); + if (item) { + return item.comment || ""; + } + return ""; + }, + /** + * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content + * + * @param {ZipEntry} entry + * @param {Buffer} content + */ + updateFile: function(entry, content) { + var item = getEntry(entry); + if (item) { + item.setData(content); + } + }, + /** + * Adds a file from the disk to the archive + * + * @param {string} localPath File to add to zip + * @param {string} [zipPath] Optional path inside the zip + * @param {string} [zipName] Optional name for the file + * @param {string} [comment] Optional file comment + */ + addLocalFile: function(localPath2, zipPath, zipName, comment) { + if (filetools.fs.existsSync(localPath2)) { + zipPath = zipPath ? fixPath(zipPath) : ""; + const p = pth.win32.basename(pth.win32.normalize(localPath2)); + zipPath += zipName ? zipName : p; + const _attr = filetools.fs.statSync(localPath2); + const data = _attr.isFile() ? filetools.fs.readFileSync(localPath2) : Buffer.alloc(0); + if (_attr.isDirectory()) zipPath += filetools.sep; + this.addFile(zipPath, data, comment, _attr); + } else { + throw Utils.Errors.FILE_NOT_FOUND(localPath2); + } + }, + /** + * Callback for showing if everything was done. + * + * @callback doneCallback + * @param {Error} err - Error object + * @param {boolean} done - was request fully completed + */ + /** + * Adds a file from the disk to the archive + * + * @param {(object|string)} options - options object, if it is string it us used as localPath. + * @param {string} options.localPath - Local path to the file. + * @param {string} [options.comment] - Optional file comment. + * @param {string} [options.zipPath] - Optional path inside the zip + * @param {string} [options.zipName] - Optional name for the file + * @param {doneCallback} callback - The callback that handles the response. + */ + addLocalFileAsync: function(options2, callback) { + options2 = typeof options2 === "object" ? options2 : { localPath: options2 }; + const localPath2 = pth.resolve(options2.localPath); + const { comment } = options2; + let { zipPath, zipName } = options2; + const self = this; + filetools.fs.stat(localPath2, function(err, stats) { + if (err) return callback(err, false); + zipPath = zipPath ? fixPath(zipPath) : ""; + const p = pth.win32.basename(pth.win32.normalize(localPath2)); + zipPath += zipName ? zipName : p; + if (stats.isFile()) { + filetools.fs.readFile(localPath2, function(err2, data) { + if (err2) return callback(err2, false); + self.addFile(zipPath, data, comment, stats); + return setImmediate(callback, void 0, true); + }); + } else if (stats.isDirectory()) { + zipPath += filetools.sep; + self.addFile(zipPath, Buffer.alloc(0), comment, stats); + return setImmediate(callback, void 0, true); + } + }); + }, + /** + * Adds a local directory and all its nested files and directories to the archive + * + * @param {string} localPath - local path to the folder + * @param {string} [zipPath] - optional path inside zip + * @param {(RegExp|function)} [filter] - optional RegExp or Function if files match will be included. + */ + addLocalFolder: function(localPath2, zipPath, filter) { + filter = filenameFilter(filter); + zipPath = zipPath ? fixPath(zipPath) : ""; + localPath2 = pth.normalize(localPath2); + if (filetools.fs.existsSync(localPath2)) { + const items = filetools.findFiles(localPath2); + const self = this; + if (items.length) { + for (const filepath of items) { + const p = pth.join(zipPath, relativePath(localPath2, filepath)); + if (filter(p)) { + self.addLocalFile(filepath, pth.dirname(p)); + } + } + } + } else { + throw Utils.Errors.FILE_NOT_FOUND(localPath2); + } + }, + /** + * Asynchronous addLocalFolder + * @param {string} localPath + * @param {callback} callback + * @param {string} [zipPath] optional path inside zip + * @param {RegExp|function} [filter] optional RegExp or Function if files match will + * be included. + */ + addLocalFolderAsync: function(localPath2, callback, zipPath, filter) { + filter = filenameFilter(filter); + zipPath = zipPath ? fixPath(zipPath) : ""; + localPath2 = pth.normalize(localPath2); + var self = this; + filetools.fs.open(localPath2, "r", function(err) { + if (err && err.code === "ENOENT") { + callback(void 0, Utils.Errors.FILE_NOT_FOUND(localPath2)); + } else if (err) { + callback(void 0, err); + } else { + var items = filetools.findFiles(localPath2); + var i = -1; + var next = function() { + i += 1; + if (i < items.length) { + var filepath = items[i]; + var p = relativePath(localPath2, filepath).split("\\").join("/"); + p = p.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, ""); + if (filter(p)) { + filetools.fs.stat(filepath, function(er0, stats) { + if (er0) callback(void 0, er0); + if (stats.isFile()) { + filetools.fs.readFile(filepath, function(er1, data) { + if (er1) { + callback(void 0, er1); + } else { + self.addFile(zipPath + p, data, "", stats); + next(); + } + }); + } else { + self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats); + next(); + } + }); + } else { + process.nextTick(() => { + next(); + }); + } + } else { + callback(true, void 0); + } + }; + next(); + } + }); + }, + /** + * Adds a local directory and all its nested files and directories to the archive + * + * @param {object | string} options - options object, if it is string it us used as localPath. + * @param {string} options.localPath - Local path to the folder. + * @param {string} [options.zipPath] - optional path inside zip. + * @param {RegExp|function} [options.filter] - optional RegExp or Function if files match will be included. + * @param {function|string} [options.namefix] - optional function to help fix filename + * @param {doneCallback} callback - The callback that handles the response. + * + */ + addLocalFolderAsync2: function(options2, callback) { + const self = this; + options2 = typeof options2 === "object" ? options2 : { localPath: options2 }; + localPath = pth.resolve(fixPath(options2.localPath)); + let { zipPath, filter, namefix } = options2; + if (filter instanceof RegExp) { + filter = /* @__PURE__ */ function(rx) { + return function(filename) { + return rx.test(filename); + }; + }(filter); + } else if ("function" !== typeof filter) { + filter = function() { + return true; + }; + } + zipPath = zipPath ? fixPath(zipPath) : ""; + if (namefix == "latin1") { + namefix = (str) => str.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, ""); + } + if (typeof namefix !== "function") namefix = (str) => str; + const relPathFix = (entry) => pth.join(zipPath, namefix(relativePath(localPath, entry))); + const fileNameFix = (entry) => pth.win32.basename(pth.win32.normalize(namefix(entry))); + filetools.fs.open(localPath, "r", function(err) { + if (err && err.code === "ENOENT") { + callback(void 0, Utils.Errors.FILE_NOT_FOUND(localPath)); + } else if (err) { + callback(void 0, err); + } else { + filetools.findFilesAsync(localPath, function(err2, fileEntries) { + if (err2) return callback(err2); + fileEntries = fileEntries.filter((dir) => filter(relPathFix(dir))); + if (!fileEntries.length) callback(void 0, false); + setImmediate( + fileEntries.reverse().reduce(function(next, entry) { + return function(err3, done) { + if (err3 || done === false) return setImmediate(next, err3, false); + self.addLocalFileAsync( + { + localPath: entry, + zipPath: pth.dirname(relPathFix(entry)), + zipName: fileNameFix(entry) + }, + next + ); + }; + }, callback) + ); + }); + } + }); + }, + /** + * Adds a local directory and all its nested files and directories to the archive + * + * @param {string} localPath - path where files will be extracted + * @param {object} props - optional properties + * @param {string} [props.zipPath] - optional path inside zip + * @param {RegExp|function} [props.filter] - optional RegExp or Function if files match will be included. + * @param {function|string} [props.namefix] - optional function to help fix filename + */ + addLocalFolderPromise: function(localPath2, props) { + return new Promise((resolve, reject) => { + this.addLocalFolderAsync2(Object.assign({ localPath: localPath2 }, props), (err, done) => { + if (err) reject(err); + if (done) resolve(this); + }); + }); + }, + /** + * Allows you to create a entry (file or directory) in the zip file. + * If you want to create a directory the entryName must end in / and a null buffer should be provided. + * Comment and attributes are optional + * + * @param {string} entryName + * @param {Buffer | string} content - file content as buffer or utf8 coded string + * @param {string} [comment] - file comment + * @param {number | object} [attr] - number as unix file permissions, object as filesystem Stats object + */ + addFile: function(entryName, content, comment, attr) { + entryName = zipnamefix(entryName); + let entry = getEntry(entryName); + const update = entry != null; + if (!update) { + entry = new ZipEntry(opts); + entry.entryName = entryName; + } + entry.comment = comment || ""; + const isStat = "object" === typeof attr && attr instanceof filetools.fs.Stats; + if (isStat) { + entry.header.time = attr.mtime; + } + var fileattr = entry.isDirectory ? 16 : 0; + let unix = entry.isDirectory ? 16384 : 32768; + if (isStat) { + unix |= 4095 & attr.mode; + } else if ("number" === typeof attr) { + unix |= 4095 & attr; + } else { + unix |= entry.isDirectory ? 493 : 420; + } + fileattr = (fileattr | unix << 16) >>> 0; + entry.attr = fileattr; + entry.setData(content); + if (!update) _zip.setEntry(entry); + return entry; + }, + /** + * Returns an array of ZipEntry objects representing the files and folders inside the archive + * + * @param {string} [password] + * @returns Array + */ + getEntries: function(password) { + _zip.password = password; + return _zip ? _zip.entries : []; + }, + /** + * Returns a ZipEntry object representing the file or folder specified by ``name``. + * + * @param {string} name + * @return ZipEntry + */ + getEntry: function(name) { + return getEntry(name); + }, + getEntryCount: function() { + return _zip.getEntryCount(); + }, + forEach: function(callback) { + return _zip.forEach(callback); + }, + /** + * Extracts the given entry to the given targetPath + * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted + * + * @param {string|ZipEntry} entry - ZipEntry object or String with the full path of the entry + * @param {string} targetPath - Target folder where to write the file + * @param {boolean} [maintainEntryPath=true] - If maintainEntryPath is true and the entry is inside a folder, the entry folder will be created in targetPath as well. Default is TRUE + * @param {boolean} [overwrite=false] - If the file already exists at the target path, the file will be overwriten if this is true. + * @param {boolean} [keepOriginalPermission=false] - The file will be set as the permission from the entry if this is true. + * @param {string} [outFileName] - String If set will override the filename of the extracted file (Only works if the entry is a file) + * + * @return Boolean + */ + extractEntryTo: function(entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) { + overwrite = get_Bool(false, overwrite); + keepOriginalPermission = get_Bool(false, keepOriginalPermission); + maintainEntryPath = get_Bool(true, maintainEntryPath); + outFileName = get_Str(keepOriginalPermission, outFileName); + var item = getEntry(entry); + if (!item) { + throw Utils.Errors.NO_ENTRY(); + } + var entryName = canonical(item.entryName); + var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName)); + if (item.isDirectory) { + var children = _zip.getEntryChildren(item); + children.forEach(function(child) { + if (child.isDirectory) return; + var content2 = child.getData(); + if (!content2) { + throw Utils.Errors.CANT_EXTRACT_FILE(); + } + var name = canonical(child.entryName); + var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name)); + const fileAttr2 = keepOriginalPermission ? child.header.fileAttr : void 0; + filetools.writeFileTo(childName, content2, overwrite, fileAttr2); + }); + return true; + } + var content = item.getData(_zip.password); + if (!content) throw Utils.Errors.CANT_EXTRACT_FILE(); + if (filetools.fs.existsSync(target) && !overwrite) { + throw Utils.Errors.CANT_OVERRIDE(); + } + const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; + filetools.writeFileTo(target, content, overwrite, fileAttr); + return true; + }, + /** + * Test the archive + * @param {string} [pass] + */ + test: function(pass) { + if (!_zip) { + return false; + } + for (var entry in _zip.entries) { + try { + if (entry.isDirectory) { + continue; + } + var content = _zip.entries[entry].getData(pass); + if (!content) { + return false; + } + } catch (err) { + return false; + } + } + return true; + }, + /** + * Extracts the entire archive to the given location + * + * @param {string} targetPath Target location + * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true. + * Default is FALSE + * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true. + * Default is FALSE + * @param {string|Buffer} [pass] password + */ + extractAllTo: function(targetPath, overwrite, keepOriginalPermission, pass) { + keepOriginalPermission = get_Bool(false, keepOriginalPermission); + pass = get_Str(keepOriginalPermission, pass); + overwrite = get_Bool(false, overwrite); + if (!_zip) throw Utils.Errors.NO_ZIP(); + _zip.entries.forEach(function(entry) { + var entryName = sanitize(targetPath, canonical(entry.entryName)); + if (entry.isDirectory) { + filetools.makeDir(entryName); + return; + } + var content = entry.getData(pass); + if (!content) { + throw Utils.Errors.CANT_EXTRACT_FILE(); + } + const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; + filetools.writeFileTo(entryName, content, overwrite, fileAttr); + try { + filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time); + } catch (err) { + throw Utils.Errors.CANT_EXTRACT_FILE(); + } + }); + }, + /** + * Asynchronous extractAllTo + * + * @param {string} targetPath Target location + * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true. + * Default is FALSE + * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true. + * Default is FALSE + * @param {function} callback The callback will be executed when all entries are extracted successfully or any error is thrown. + */ + extractAllToAsync: function(targetPath, overwrite, keepOriginalPermission, callback) { + callback = get_Fun(overwrite, keepOriginalPermission, callback); + keepOriginalPermission = get_Bool(false, keepOriginalPermission); + overwrite = get_Bool(false, overwrite); + if (!callback) { + return new Promise((resolve, reject) => { + this.extractAllToAsync(targetPath, overwrite, keepOriginalPermission, function(err) { + if (err) { + reject(err); + } else { + resolve(this); + } + }); + }); + } + if (!_zip) { + callback(Utils.Errors.NO_ZIP()); + return; + } + targetPath = pth.resolve(targetPath); + const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName))); + const getError = (msg, file) => new Error(msg + ': "' + file + '"'); + const dirEntries = []; + const fileEntries = []; + _zip.entries.forEach((e) => { + if (e.isDirectory) { + dirEntries.push(e); + } else { + fileEntries.push(e); + } + }); + for (const entry of dirEntries) { + const dirPath = getPath(entry); + const dirAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; + try { + filetools.makeDir(dirPath); + if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr); + filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time); + } catch (er) { + callback(getError("Unable to create folder", dirPath)); + } + } + fileEntries.reverse().reduce(function(next, entry) { + return function(err) { + if (err) { + next(err); + } else { + const entryName = pth.normalize(canonical(entry.entryName)); + const filePath = sanitize(targetPath, entryName); + entry.getDataAsync(function(content, err_1) { + if (err_1) { + next(err_1); + } else if (!content) { + next(Utils.Errors.CANT_EXTRACT_FILE()); + } else { + const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; + filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function(succ) { + if (!succ) { + next(getError("Unable to write file", filePath)); + } + filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function(err_2) { + if (err_2) { + next(getError("Unable to set times", filePath)); + } else { + next(); + } + }); + }); + } + }); + } + }; + }, callback)(); + }, + /** + * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip + * + * @param {string} targetFileName + * @param {function} callback + */ + writeZip: function(targetFileName, callback) { + if (arguments.length === 1) { + if (typeof targetFileName === "function") { + callback = targetFileName; + targetFileName = ""; + } + } + if (!targetFileName && opts.filename) { + targetFileName = opts.filename; + } + if (!targetFileName) return; + var zipData = _zip.compressToBuffer(); + if (zipData) { + var ok = filetools.writeFileTo(targetFileName, zipData, true); + if (typeof callback === "function") callback(!ok ? new Error("failed") : null, ""); + } + }, + /** + * + * @param {string} targetFileName + * @param {object} [props] + * @param {boolean} [props.overwrite=true] If the file already exists at the target path, the file will be overwriten if this is true. + * @param {boolean} [props.perm] The file will be set as the permission from the entry if this is true. + + * @returns {Promise} + */ + writeZipPromise: function(targetFileName, props) { + const { overwrite, perm } = Object.assign({ overwrite: true }, props); + return new Promise((resolve, reject) => { + if (!targetFileName && opts.filename) targetFileName = opts.filename; + if (!targetFileName) reject("ADM-ZIP: ZIP File Name Missing"); + this.toBufferPromise().then((zipData) => { + const ret = (done) => done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file"); + filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret); + }, reject); + }); + }, + /** + * @returns {Promise} A promise to the Buffer. + */ + toBufferPromise: function() { + return new Promise((resolve, reject) => { + _zip.toAsyncBuffer(resolve, reject); + }); + }, + /** + * Returns the content of the entire zip file as a Buffer object + * + * @prop {function} [onSuccess] + * @prop {function} [onFail] + * @prop {function} [onItemStart] + * @prop {function} [onItemEnd] + * @returns {Buffer} + */ + toBuffer: function(onSuccess, onFail, onItemStart, onItemEnd) { + if (typeof onSuccess === "function") { + _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd); + return null; + } + return _zip.compressToBuffer(); + } + }; + }; + } +}); + +// src/extension.ts +var extension_exports = {}; +__export(extension_exports, { + activate: () => activate +}); +module.exports = __toCommonJS(extension_exports); +var vscode2 = __toESM(require("vscode")); + +// src/nfscilTestData.ts +var vscode = __toESM(require("vscode")); +var fs = __toESM(require("fs")); +var https = __toESM(require("https")); +var fpath = __toESM(require("path")); +var url = __toESM(require("url")); +var AdmZip = require_adm_zip(); +var NFSCIL_REPOSITORY = "AlexVCaron/nf-scil"; +var NFSCIL_REF_BRANCH = "test/data"; +var TEST_DATA_REPOSITORY = "scil_test_data/dvc-store/files/md5"; +var NFSCIL_RAW_URL = url.format({ + protocol: "https", + hostname: "raw.githubusercontent.com", + pathname: NFSCIL_REPOSITORY +}); +var TEST_DATA_URL = url.format({ + protocol: "https", + hostname: "scil.usherbrooke.ca", + pathname: TEST_DATA_REPOSITORY +}); +var TestDataProvider = class { + constructor(workspaceRoot, storagePath) { + this.workspaceRoot = workspaceRoot; + this._onDidChangeTreeData = new vscode.EventEmitter(); + this.onDidChangeTreeData = this._onDidChangeTreeData.event; + this.listing = ""; + this.pullOnline = true; + this.workspaceRoot = workspaceRoot; + this.storagePath = storagePath; + this.temp = storagePath; + this.packagePath = fpath.join(this.temp, "packages"); + this.contentPath = fpath.join(this.temp, "unpacked"); + if (workspaceRoot) { + this.listing = fpath.join(workspaceRoot, "tests", "config", "test_data.json"); + } + fs.mkdirSync(storagePath, { recursive: true }); + fs.mkdirSync(this.packagePath, { recursive: true }); + fs.mkdirSync(this.contentPath, { recursive: true }); + } + refresh(all = true) { + if (all) { + this.pullOnline = true; + if (this.workspaceRoot) { + this.listing = fpath.join(this.workspaceRoot, "tests", "config", "test_data.json"); + } + } + this._onDidChangeTreeData.fire(); + } + clear(all = true) { + fs.rmdirSync(this.packagePath, { recursive: true }); + fs.rmdirSync(this.contentPath, { recursive: true }); + fs.mkdirSync(this.packagePath, { recursive: true }); + fs.mkdirSync(this.contentPath, { recursive: true }); + if (all) { + this.listing = ""; + this.pullOnline = false; + } + this.refresh(false); + } + forceDownloadListing() { + if (this.listing || !this.pullOnline) { + this.clear(true); + this.listing = ""; + this.pullOnline = true; + this.refresh(false); + } + } + loadListing(listing) { + if (!fs.existsSync(listing)) { + vscode.window.showErrorMessage("Listing does not exist"); + return; + } + this.listing = listing; + this.refresh(false); + } + getTreeItem(element) { + return element; + } + getChildren(element) { + if (!this.workspaceRoot) { + return Promise.resolve([]); + } + if (element) { + return Promise.resolve(this.getChildrenItems(element)); + } else { + return Promise.resolve(this.getTestDataPackages()); + } + } + downloadFile(source, target) { + if (fs.existsSync(target)) { + return Promise.resolve(); + } + const file = fs.createWriteStream(target); + console.log("Downloading file from: " + source); + return new Promise((resolve, reject) => { + const request = https.get(source, function(response) { + response.on("error", (err) => { + fs.unlink(target, () => { + console.log("Failed to download file: " + err.message); + vscode.window.showErrorMessage("Failed to download file: " + source); + }); + reject(err); + }).pipe(file); + file.on("finish", () => { + file.close(() => { + console.log("Downloaded file to: " + target); + }); + resolve(); + }); + }).on("error", (err) => { + fs.unlink(target, () => { + console.log("Failed to download file: " + err.message); + vscode.window.showErrorMessage("Failed to download file: " + source); + }); + reject(err); + }); + request.end(); + }); + } + loadTestDataListing(listing) { + if (this.workspaceRoot) { + let listingPromise; + if (listing && fs.existsSync(listing)) { + listingPromise = Promise.resolve(listing); + } else if (this.pullOnline) { + console.log("Fetching listing from nf-scil/" + NFSCIL_REF_BRANCH); + const listing2 = fpath.join(this.temp, "test_data.json"); + fs.rmSync(listing2, { force: true }); + listingPromise = new Promise((resolve) => { + this.downloadFile( + fpath.join(NFSCIL_RAW_URL, NFSCIL_REF_BRANCH, "tests", "config", "test_data.json"), + listing2 + ).then(() => { + resolve(listing2); + }); + }); + } else { + return Promise.resolve([]); + } + return listingPromise.then((listing2) => { + const testPackages = []; + const data = JSON.parse(fs.readFileSync(listing2, "utf8")); + for (const key in data) { + const value = data[key]; + testPackages.push( + new TestDataPackage( + key, + vscode.TreeItemCollapsibleState.Collapsed, + "", + value + ) + ); + } + return testPackages; + }); + } + } + getTestDataPackages() { + return Promise.resolve(this.loadTestDataListing(this.listing) || []); + } + unpackArchive(archive) { + const zip = new AdmZip(archive); + const name = fpath.basename(archive, fpath.extname(archive)); + const content = fpath.join(this.contentPath, name); + if (fs.existsSync(content)) { + return Promise.resolve(content); + } + return new Promise((resolve, reject) => { + try { + zip.extractAllTo(this.contentPath, true); + resolve(content); + } catch (err) { + vscode.window.showErrorMessage("Failed to unpack archive: " + name + ".zip"); + reject(err); + } + }); + } + getFolderContents(folder) { + const contents = []; + for (const file of fs.readdirSync(folder)) { + const filePath = fpath.join(folder, file); + const stat = fs.statSync(filePath); + const relPath = fpath.relative(this.contentPath, filePath); + if (stat.isFile()) { + contents.push(new TestDataFile(file, vscode.TreeItemCollapsibleState.None, relPath)); + } else if (stat.isDirectory()) { + contents.push( + new TestDataFolder(file, vscode.TreeItemCollapsibleState.Collapsed, relPath) + ); + } + } + return contents; + } + getTestDataPackageContents(element) { + const location = fpath.join(element.md5sum.substring(0, 2), element.md5sum.substring(2)); + const packagePath = fpath.join(this.packagePath, element.label); + return new Promise((resolve) => { + this.downloadFile(fpath.join(TEST_DATA_URL, location), packagePath).then(() => { + this.unpackArchive(packagePath).then((location2) => { + resolve(this.getFolderContents(location2)); + }); + }); + }); + } + getChildrenItems(element) { + if (element instanceof TestDataPackage) { + return this.getTestDataPackageContents(element); + } else if (element instanceof TestDataFolder) { + return Promise.resolve( + this.getFolderContents(fpath.join(this.contentPath, element.path)) + ); + } + return Promise.resolve([]); + } + openInEditor(element) { + Promise.resolve(vscode.commands.executeCommand( + "vscode.open", + vscode.Uri.file(fpath.join(this.contentPath, element.path)) + )); + } + saveAs(element) { + if (this.workspaceRoot) { + vscode.window.showSaveDialog({ + defaultUri: vscode.Uri.file(this.workspaceRoot), + filters: { + "All files": ["*"] + } + }).then((uri) => { + if (uri) { + fs.copyFileSync(fpath.join(this.contentPath, element.path), uri.fsPath); + } + }); + } + } +}; +var TestDataItem = class extends vscode.TreeItem { + constructor(label, collapsibleState, path, command) { + super(label, collapsibleState); + this.label = label; + this.collapsibleState = collapsibleState; + this.path = path; + this.command = command; + this.contextValue = "testDataItem"; + this.path = path; + } +}; +var TestDataPackage = class extends TestDataItem { + constructor(label, collapsibleState, path, md5sum, command) { + super(label, collapsibleState, path, command); + this.label = label; + this.collapsibleState = collapsibleState; + this.path = path; + this.md5sum = md5sum; + this.command = command; + this.iconPath = "$(archive)"; + this.md5sum = md5sum; + } +}; +var TestDataFolder = class extends TestDataItem { + constructor() { + super(...arguments); + this.iconPath = "$(file-directory)"; + } +}; +var TestDataFile = class extends TestDataItem { + constructor() { + super(...arguments); + this.contextValue = "testDataFile"; + this.iconPath = "$(file)"; + } +}; + +// src/extension.ts +function activate(context) { + const rootPath = vscode2.workspace.workspaceFolders && vscode2.workspace.workspaceFolders.length > 0 ? vscode2.workspace.workspaceFolders[0].uri.fsPath : void 0; + const storagePath = context.globalStorageUri.fsPath; + const testDataProvider = new TestDataProvider(rootPath, storagePath); + vscode2.window.registerTreeDataProvider("nfscilTestData", testDataProvider); + vscode2.commands.registerCommand( + "nfscilTestData.refreshEntry", + () => testDataProvider.refresh() + ); + vscode2.commands.registerCommand( + "nfscilTestData.clearCache", + () => testDataProvider.clear(false) + ); + vscode2.commands.registerCommand("nfscilTestData.loadListing", () => { + vscode2.window.showOpenDialog({ + canSelectFiles: true, + canSelectFolders: false, + canSelectMany: false, + openLabel: "Load package listing", + filters: { + "JSON files": ["json"] + }, + defaultUri: rootPath ? vscode2.Uri.file(rootPath) : void 0 + }).then((uri) => { + if (uri && uri[0]) { + testDataProvider.loadListing(uri[0].fsPath); + } else { + vscode2.window.showErrorMessage("No file selected"); + } + }); + }); + vscode2.commands.registerCommand( + "nfscilTestData.forceDownloadListing", + () => testDataProvider.forceDownloadListing() + ); + vscode2.commands.registerCommand( + "nfscilTestData.openInEditor", + (element) => testDataProvider.openInEditor(element) + ); + vscode2.commands.registerCommand( + "nfscilTestData.saveAs", + (element) => testDataProvider.saveAs(element) + ); +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + activate +}); +//# sourceMappingURL=extension.js.map diff --git a/nf-scil-extensions/test-data-treeview/dist/extension.js.map b/nf-scil-extensions/test-data-treeview/dist/extension.js.map new file mode 100644 index 00000000..5d0bb75f --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/dist/extension.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": ["../node_modules/adm-zip/util/constants.js", "../node_modules/adm-zip/util/errors.js", "../node_modules/adm-zip/util/utils.js", "../node_modules/adm-zip/util/fattr.js", "../node_modules/adm-zip/util/decoder.js", "../node_modules/adm-zip/util/index.js", "../node_modules/adm-zip/headers/entryHeader.js", "../node_modules/adm-zip/headers/mainHeader.js", "../node_modules/adm-zip/headers/index.js", "../node_modules/adm-zip/methods/deflater.js", "../node_modules/adm-zip/methods/inflater.js", "../node_modules/adm-zip/methods/zipcrypto.js", "../node_modules/adm-zip/methods/index.js", "../node_modules/adm-zip/zipEntry.js", "../node_modules/adm-zip/zipFile.js", "../node_modules/adm-zip/adm-zip.js", "../src/extension.ts", "../src/nfscilTestData.ts"], + "mappings": "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", + "names": ["exports", "module", "exports", "exports", "module", "mkdirSync", "fpath", "err", "fd", "path", "exports", "module", "fs", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "exports", "module", "exports", "module", "exports", "module", "exports", "exports", "module", "exports", "module", "totalEntries", "exports", "module", "join", "localPath", "options", "err", "content", "fileAttr", "vscode", "listing", "location"] +} From 65084fea59b54419fd33569923aeefb942891ec7 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Thu, 22 Aug 2024 23:13:37 -0400 Subject: [PATCH 05/24] test data treeview extension first try --- .../extension-package/package-lock.json | 15 + .../test-data-treeview/.eslintignore | 1 + .../test-data-treeview/.eslintrc.json | 30 + .../test-data-treeview/.gitignore | 4 + .../test-data-treeview/.vscode-test.mjs | 5 + .../.vscode/extensions.json | 5 + .../test-data-treeview/.vscode/launch.json | 21 + .../test-data-treeview/.vscode/settings.json | 13 + .../test-data-treeview/.vscode/tasks.json | 64 + .../test-data-treeview/.vscodeignore | 14 + .../test-data-treeview/CHANGELOG.md | 9 + .../test-data-treeview/README.md | 10 + .../test-data-treeview/esbuild.js | 56 + .../test-data-treeview/package-lock.json | 5552 +++++++++++++++++ .../test-data-treeview/package.json | 129 + .../test-data-treeview/src/extension.ts | 55 + .../test-data-treeview/src/nfscilTestData.ts | 328 + .../src/test/extension.test.ts | 15 + .../test-data-treeview/tsconfig.json | 15 + .../vsc-extension-quickstart.md | 48 + 20 files changed, 6389 insertions(+) create mode 100644 nf-scil-extensions/extension-package/package-lock.json create mode 100644 nf-scil-extensions/test-data-treeview/.eslintignore create mode 100644 nf-scil-extensions/test-data-treeview/.eslintrc.json create mode 100644 nf-scil-extensions/test-data-treeview/.gitignore create mode 100644 nf-scil-extensions/test-data-treeview/.vscode-test.mjs create mode 100644 nf-scil-extensions/test-data-treeview/.vscode/extensions.json create mode 100644 nf-scil-extensions/test-data-treeview/.vscode/launch.json create mode 100644 nf-scil-extensions/test-data-treeview/.vscode/settings.json create mode 100644 nf-scil-extensions/test-data-treeview/.vscode/tasks.json create mode 100644 nf-scil-extensions/test-data-treeview/.vscodeignore create mode 100644 nf-scil-extensions/test-data-treeview/CHANGELOG.md create mode 100644 nf-scil-extensions/test-data-treeview/README.md create mode 100644 nf-scil-extensions/test-data-treeview/esbuild.js create mode 100644 nf-scil-extensions/test-data-treeview/package-lock.json create mode 100644 nf-scil-extensions/test-data-treeview/package.json create mode 100644 nf-scil-extensions/test-data-treeview/src/extension.ts create mode 100644 nf-scil-extensions/test-data-treeview/src/nfscilTestData.ts create mode 100644 nf-scil-extensions/test-data-treeview/src/test/extension.test.ts create mode 100644 nf-scil-extensions/test-data-treeview/tsconfig.json create mode 100644 nf-scil-extensions/test-data-treeview/vsc-extension-quickstart.md diff --git a/nf-scil-extensions/extension-package/package-lock.json b/nf-scil-extensions/extension-package/package-lock.json new file mode 100644 index 00000000..1836e475 --- /dev/null +++ b/nf-scil-extensions/extension-package/package-lock.json @@ -0,0 +1,15 @@ +{ + "name": "nf-scil-extensions", + "version": "0.0.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nf-scil-extensions", + "version": "0.0.2", + "engines": { + "vscode": "^1.84.0" + } + } + } +} diff --git a/nf-scil-extensions/test-data-treeview/.eslintignore b/nf-scil-extensions/test-data-treeview/.eslintignore new file mode 100644 index 00000000..868f47fa --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/.eslintignore @@ -0,0 +1 @@ +vscode.proposed.d.ts diff --git a/nf-scil-extensions/test-data-treeview/.eslintrc.json b/nf-scil-extensions/test-data-treeview/.eslintrc.json new file mode 100644 index 00000000..86c86f37 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/.eslintrc.json @@ -0,0 +1,30 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/naming-convention": [ + "warn", + { + "selector": "import", + "format": [ "camelCase", "PascalCase" ] + } + ], + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off" + }, + "ignorePatterns": [ + "out", + "dist", + "**/*.d.ts" + ] +} \ No newline at end of file diff --git a/nf-scil-extensions/test-data-treeview/.gitignore b/nf-scil-extensions/test-data-treeview/.gitignore new file mode 100644 index 00000000..1fc50e99 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/.gitignore @@ -0,0 +1,4 @@ +out +node_modules +yarn.lock +.vscode-test \ No newline at end of file diff --git a/nf-scil-extensions/test-data-treeview/.vscode-test.mjs b/nf-scil-extensions/test-data-treeview/.vscode-test.mjs new file mode 100644 index 00000000..b62ba25f --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/.vscode-test.mjs @@ -0,0 +1,5 @@ +import { defineConfig } from '@vscode/test-cli'; + +export default defineConfig({ + files: 'out/test/**/*.test.js', +}); diff --git a/nf-scil-extensions/test-data-treeview/.vscode/extensions.json b/nf-scil-extensions/test-data-treeview/.vscode/extensions.json new file mode 100644 index 00000000..d7a3ca11 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["dbaeumer.vscode-eslint", "connor4312.esbuild-problem-matchers", "ms-vscode.extension-test-runner"] +} diff --git a/nf-scil-extensions/test-data-treeview/.vscode/launch.json b/nf-scil-extensions/test-data-treeview/.vscode/launch.json new file mode 100644 index 00000000..c42edc04 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/.vscode/launch.json @@ -0,0 +1,21 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/dist/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] +} diff --git a/nf-scil-extensions/test-data-treeview/.vscode/settings.json b/nf-scil-extensions/test-data-treeview/.vscode/settings.json new file mode 100644 index 00000000..5c5ac48c --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/.vscode/settings.json @@ -0,0 +1,13 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false, // set this to true to hide the "out" folder with the compiled JS files + "dist": false // set this to true to hide the "dist" folder with the compiled JS files + }, + "search.exclude": { + "out": true, // set this to false to include "out" folder in search results + "dist": true // set this to false to include "dist" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} \ No newline at end of file diff --git a/nf-scil-extensions/test-data-treeview/.vscode/tasks.json b/nf-scil-extensions/test-data-treeview/.vscode/tasks.json new file mode 100644 index 00000000..3cf99c37 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/.vscode/tasks.json @@ -0,0 +1,64 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "label": "watch", + "dependsOn": [ + "npm: watch:tsc", + "npm: watch:esbuild" + ], + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "type": "npm", + "script": "watch:esbuild", + "group": "build", + "problemMatcher": "$esbuild-watch", + "isBackground": true, + "label": "npm: watch:esbuild", + "presentation": { + "group": "watch", + "reveal": "never" + } + }, + { + "type": "npm", + "script": "watch:tsc", + "group": "build", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "label": "npm: watch:tsc", + "presentation": { + "group": "watch", + "reveal": "never" + } + }, + { + "type": "npm", + "script": "watch-tests", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never", + "group": "watchers" + }, + "group": "build" + }, + { + "label": "tasks: watch-tests", + "dependsOn": [ + "npm: watch", + "npm: watch-tests" + ], + "problemMatcher": [] + } + ] +} diff --git a/nf-scil-extensions/test-data-treeview/.vscodeignore b/nf-scil-extensions/test-data-treeview/.vscodeignore new file mode 100644 index 00000000..b73723ab --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/.vscodeignore @@ -0,0 +1,14 @@ +.vscode/** +.vscode-test/** +out/** +node_modules/** +src/** +.gitignore +.yarnrc +esbuild.js +vsc-extension-quickstart.md +**/tsconfig.json +**/.eslintrc.json +**/*.map +**/*.ts +**/.vscode-test.* diff --git a/nf-scil-extensions/test-data-treeview/CHANGELOG.md b/nf-scil-extensions/test-data-treeview/CHANGELOG.md new file mode 100644 index 00000000..c21eaea9 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +All notable changes to the "test-data-treeview" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + +## [Unreleased] + +- Initial release \ No newline at end of file diff --git a/nf-scil-extensions/test-data-treeview/README.md b/nf-scil-extensions/test-data-treeview/README.md new file mode 100644 index 00000000..d2dc7cee --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/README.md @@ -0,0 +1,10 @@ +# test-data-treeview README + +This extension is designed to provide a treeview of test data files for **nf-scil**. It adds a new view to the **Explorer** sidebar that displays the test data files in the workspace. Through it, the user can explore available packages' contents, open files for visualization and download them locally. + +## Release Notes + +No release notes yet. + +--- + diff --git a/nf-scil-extensions/test-data-treeview/esbuild.js b/nf-scil-extensions/test-data-treeview/esbuild.js new file mode 100644 index 00000000..cc2be598 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/esbuild.js @@ -0,0 +1,56 @@ +const esbuild = require("esbuild"); + +const production = process.argv.includes('--production'); +const watch = process.argv.includes('--watch'); + +/** + * @type {import('esbuild').Plugin} + */ +const esbuildProblemMatcherPlugin = { + name: 'esbuild-problem-matcher', + + setup(build) { + build.onStart(() => { + console.log('[watch] build started'); + }); + build.onEnd((result) => { + result.errors.forEach(({ text, location }) => { + console.error(`✘ [ERROR] ${text}`); + console.error(` ${location.file}:${location.line}:${location.column}:`); + }); + console.log('[watch] build finished'); + }); + }, +}; + +async function main() { + const ctx = await esbuild.context({ + entryPoints: [ + 'src/extension.ts' + ], + bundle: true, + format: 'cjs', + minify: production, + sourcemap: !production, + sourcesContent: false, + platform: 'node', + outfile: 'dist/extension.js', + external: ['vscode'], + logLevel: 'silent', + plugins: [ + /* add to the end of plugins array */ + esbuildProblemMatcherPlugin, + ], + }); + if (watch) { + await ctx.watch(); + } else { + await ctx.rebuild(); + await ctx.dispose(); + } +} + +main().catch(e => { + console.error(e); + process.exit(1); +}); diff --git a/nf-scil-extensions/test-data-treeview/package-lock.json b/nf-scil-extensions/test-data-treeview/package-lock.json new file mode 100644 index 00000000..bd54206e --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/package-lock.json @@ -0,0 +1,5552 @@ +{ + "name": "nf-scil-test-data-treeview", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nf-scil-test-data-treeview", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "adm-zip": "^0.5.15" + }, + "devDependencies": { + "@types/adm-zip": "^0.5.5", + "@types/mocha": "^10.0.7", + "@types/node": "20.x", + "@types/vscode": "^1.92.0", + "@typescript-eslint/eslint-plugin": "^7.14.1", + "@typescript-eslint/parser": "^7.11.0", + "@vscode/test-cli": "^0.0.9", + "@vscode/test-electron": "^2.4.0", + "esbuild": "^0.21.5", + "eslint": "^8.57.0", + "npm-run-all": "^4.1.5", + "typescript": "^5.4.5" + }, + "engines": { + "vscode": "^1.92.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/adm-zip": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.5.tgz", + "integrity": "sha512-YCGstVMjc4LTY5uK9/obvxBya93axZOVOyf2GSUulADzmLhYE45u2nAssCs/fWBs1Ifq5Vat75JTPwd5XZoPJw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", + "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.16.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz", + "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/vscode": { + "version": "1.92.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.92.0.tgz", + "integrity": "sha512-DcZoCj17RXlzB4XJ7IfKdPTcTGDLYvTOcTNkvtjXWF+K2TlKzHHkBEXNWQRpBIXixNEUgx39cQeTFunY0E2msw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vscode/test-cli": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.9.tgz", + "integrity": "sha512-vsl5/ueE3Jf0f6XzB0ECHHMsd5A0Yu6StElb8a+XsubZW7kHNAOw4Y3TSSuDzKEpLnJ92nbMy1Zl+KLGCE6NaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mocha": "^10.0.2", + "c8": "^9.1.0", + "chokidar": "^3.5.3", + "enhanced-resolve": "^5.15.0", + "glob": "^10.3.10", + "minimatch": "^9.0.3", + "mocha": "^10.2.0", + "supports-color": "^9.4.0", + "yargs": "^17.7.2" + }, + "bin": { + "vscode-test": "out/bin.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.1.tgz", + "integrity": "sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "jszip": "^3.10.1", + "ora": "^7.0.1", + "semver": "^7.6.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adm-zip": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.15.tgz", + "integrity": "sha512-jYPWSeOA8EFoZnucrKCNihqBjoEGQSU4HKgHYQgKNEQ0pQF9a/DYuo/+fAxY76k4qe75LUlLWpAM1QWcBMTOKw==", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/c8": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", + "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=14.14.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mocha": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", + "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.9.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.3.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "string-width": "^6.1.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/string-width": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^10.2.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/nf-scil-extensions/test-data-treeview/package.json b/nf-scil-extensions/test-data-treeview/package.json new file mode 100644 index 00000000..703a2b38 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/package.json @@ -0,0 +1,129 @@ +{ + "name": "nf-scil-test-data-treeview", + "displayName": "nf-scil Test Data Treeview", + "description": "Test data treeview for nf-scil", + "version": "0.0.1", + "publisher": "AlexVCaron", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/scilus/nf-scil.git" + }, + "engines": { + "vscode": "^1.92.0" + }, + "categories": [ + "Other" + ], + "activationEvents": [], + "main": "./dist/extension.js", + "contributes": { + "views": { + "explorer": [ + { + "id": "nfscilTestData", + "name": "nf-scil Test Data" + } + ] + }, + "menus": { + "view/title": [ + { + "command": "nfscilTestData.clearCache", + "when": "view == nfscilTestData", + "group": "navigation" + }, + { + "command": "nfscilTestData.loadListing", + "when": "view == nfscilTestData", + "group": "navigation" + }, + { + "command": "nfscilTestData.forceDownloadListing", + "when": "view == nfscilTestData", + "group": "navigation" + }, + { + "command": "nfscilTestData.refreshEntry", + "when": "view == nfscilTestData", + "group": "navigation" + } + ], + "view/item/context": [ + { + "command": "nfscilTestData.openInEditor", + "when": "view == nfscilTestData && viewItem == testDataFile", + "group": "inline" + }, + { + "command": "nfscilTestData.saveAs", + "when": "view == nfscilTestData && viewItem == testDataFile", + "group": "inline" + } + ] + }, + "commands": [ + { + "command": "nfscilTestData.refreshEntry", + "title": "Refresh packages", + "icon": "$(refresh)" + }, + { + "command": "nfscilTestData.clearCache", + "title": "Clear cache", + "icon": "$(trash)" + }, + { + "command": "nfscilTestData.loadListing", + "title": "Load package listing", + "icon": "$(list-tree)" + }, + { + "command": "nfscilTestData.forceDownloadListing", + "title": "Force online package listing", + "icon": "$(cloud-download)" + }, + { + "command": "nfscilTestData.openInEditor", + "title": "Open file in the editor", + "icon": "$(eye)" + }, + { + "command": "nfscilTestData.saveAs", + "title": "Save as...", + "icon": "$(desktop-download)" + } + ] + }, + "scripts": { + "vscode:prepublish": "npm run package", + "compile": "npm run check-types && npm run lint && node esbuild.js", + "watch": "npm-run-all -p watch:*", + "watch:esbuild": "node esbuild.js --watch", + "watch:tsc": "tsc --noEmit --watch --project tsconfig.json", + "package": "npm run check-types && npm run lint && node esbuild.js --production", + "compile-tests": "tsc -p . --outDir out", + "watch-tests": "tsc -p . -w --outDir out", + "pretest": "npm run compile-tests && npm run compile && npm run lint", + "check-types": "tsc --noEmit", + "lint": "eslint src --ext ts", + "test": "vscode-test" + }, + "devDependencies": { + "@types/adm-zip": "^0.5.5", + "@types/mocha": "^10.0.7", + "@types/node": "20.x", + "@types/vscode": "^1.92.0", + "@typescript-eslint/eslint-plugin": "^7.14.1", + "@typescript-eslint/parser": "^7.11.0", + "@vscode/test-cli": "^0.0.9", + "@vscode/test-electron": "^2.4.0", + "esbuild": "^0.21.5", + "eslint": "^8.57.0", + "npm-run-all": "^4.1.5", + "typescript": "^5.4.5" + }, + "dependencies": { + "adm-zip": "^0.5.15" + } +} diff --git a/nf-scil-extensions/test-data-treeview/src/extension.ts b/nf-scil-extensions/test-data-treeview/src/extension.ts new file mode 100644 index 00000000..8e08cbe8 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/src/extension.ts @@ -0,0 +1,55 @@ +'use strict'; + +import * as vscode from 'vscode'; + +import { TestDataProvider } from './nfscilTestData'; + +export function activate(context: vscode.ExtensionContext) { + const rootPath = + vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0 + ? vscode.workspace.workspaceFolders[0].uri.fsPath + : undefined; + + const storagePath = context.globalStorageUri.fsPath; + + const testDataProvider = new TestDataProvider(rootPath, storagePath); + + vscode.window.registerTreeDataProvider('nfscilTestData', testDataProvider); + + vscode.commands.registerCommand('nfscilTestData.refreshEntry', () => + testDataProvider.refresh() + ); + vscode.commands.registerCommand('nfscilTestData.clearCache', () => + testDataProvider.clear(false) + ); + vscode.commands.registerCommand('nfscilTestData.loadListing', () => { + vscode.window.showOpenDialog({ + canSelectFiles: true, + canSelectFolders: false, + canSelectMany: false, + openLabel: 'Load package listing', + filters: { + 'JSON files': ['json'] + }, + defaultUri: rootPath ? vscode.Uri.file(rootPath) : undefined + }).then((uri) => { + if (uri && uri[0]) { + testDataProvider.loadListing(uri[0].fsPath); + } + else { + vscode.window.showErrorMessage('No file selected'); + } + }); + }); + vscode.commands.registerCommand('nfscilTestData.forceDownloadListing', () => + testDataProvider.forceDownloadListing() + ); + + vscode.commands.registerCommand('nfscilTestData.openInEditor', (element) => + testDataProvider.openInEditor(element) + ); + vscode.commands.registerCommand('nfscilTestData.saveAs', (element) => + testDataProvider.saveAs(element) + ); +} + diff --git a/nf-scil-extensions/test-data-treeview/src/nfscilTestData.ts b/nf-scil-extensions/test-data-treeview/src/nfscilTestData.ts new file mode 100644 index 00000000..dcbdca39 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/src/nfscilTestData.ts @@ -0,0 +1,328 @@ +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import * as https from 'https'; +import * as fpath from 'path'; +import * as url from 'url'; +import AdmZip = require('adm-zip'); + + +const NFSCIL_REPOSITORY = "AlexVCaron/nf-scil"; +const NFSCIL_REF_BRANCH = "test/data"; +const TEST_DATA_REPOSITORY = "scil_test_data/dvc-store/files/md5"; + +const NFSCIL_RAW_URL = url.format({ + protocol: "https", + hostname: "raw.githubusercontent.com", + pathname: NFSCIL_REPOSITORY +}); +const TEST_DATA_URL = url.format({ + protocol: "https", + hostname: "scil.usherbrooke.ca", + pathname: TEST_DATA_REPOSITORY +}); + + +export class TestDataProvider implements vscode.TreeDataProvider { + + private _onDidChangeTreeData: vscode.EventEmitter = new vscode.EventEmitter(); + readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; + + temp: string; + storagePath: string; + packagePath: string; + contentPath: string; + + listing: string = ""; + pullOnline: boolean = true; + + constructor(private workspaceRoot: string | undefined, storagePath: string) { + // Get temporary directory to store transitory files + this.workspaceRoot = workspaceRoot; + this.storagePath = storagePath; + this.temp = storagePath; + this.packagePath = fpath.join(this.temp, "packages"); + this.contentPath = fpath.join(this.temp, "unpacked"); + + if (workspaceRoot) { + this.listing = fpath.join(workspaceRoot, "tests", "config", "test_data.json"); + } + + fs.mkdirSync(storagePath, { recursive: true }); + fs.mkdirSync(this.packagePath, { recursive: true }); + fs.mkdirSync(this.contentPath, { recursive: true }); + } + + refresh(all: boolean = true): void { + if (all) { + this.pullOnline = true; + + if (this.workspaceRoot) { + this.listing = fpath.join(this.workspaceRoot, "tests", "config", "test_data.json"); + } + } + + this._onDidChangeTreeData.fire(); + } + + clear(all: boolean = true): void { + fs.rmdirSync(this.packagePath, { recursive: true }); + fs.rmdirSync(this.contentPath, { recursive: true }); + fs.mkdirSync(this.packagePath, { recursive: true }); + fs.mkdirSync(this.contentPath, { recursive: true }); + + if (all) { + this.listing = ""; + this.pullOnline = false; + } + + this.refresh(false); + } + + forceDownloadListing() { + if (this.listing || !this.pullOnline) { + this.clear(true); + this.listing = ""; + this.pullOnline = true; + this.refresh(false); + } + } + + loadListing(listing: string) { + if (!fs.existsSync(listing)) { + vscode.window.showErrorMessage('Listing does not exist'); + return; + } + + this.listing = listing; + this.refresh(false); + } + + getTreeItem(element: TestDataItem): vscode.TreeItem { + return element; + } + + getChildren(element?: TestDataItem): Thenable { + if (!this.workspaceRoot) { + return Promise.resolve([]); + } + + if (element) { + return Promise.resolve(this.getChildrenItems(element)); + } else { + return Promise.resolve(this.getTestDataPackages()); + } + } + + downloadFile(source: string, target: string): Thenable { + if (fs.existsSync(target)) { + return Promise.resolve(); + } + + const file = fs.createWriteStream(target); + console.log('Downloading file from: ' + source); + + return new Promise((resolve, reject) => { + const request = https.get(source, function(response) { + response.on('error', (err) => { + fs.unlink(target, () => { + console.log('Failed to download file: ' + err.message); + vscode.window.showErrorMessage('Failed to download file: ' + source); + }); + reject(err); + }).pipe(file); + file.on('finish', () => { + file.close(() => { + console.log('Downloaded file to: ' + target); + }); + resolve(); + }); + }).on('error', (err) => { + fs.unlink(target, () => { + console.log('Failed to download file: ' + err.message); + vscode.window.showErrorMessage('Failed to download file: ' + source); + }); + reject(err); + }); + request.end(); + }); + } + + loadTestDataListing(listing?: string): Thenable | void { + if (this.workspaceRoot) { + let listingPromise : Promise; + + if (listing && fs.existsSync(listing)) { + listingPromise = Promise.resolve(listing); + } + else if (this.pullOnline) { + console.log('Fetching listing from nf-scil/' + NFSCIL_REF_BRANCH); + const listing = fpath.join(this.temp, "test_data.json"); + fs.rmSync(listing, { force: true }); + listingPromise = new Promise(resolve => { + this.downloadFile( + fpath.join(NFSCIL_RAW_URL, NFSCIL_REF_BRANCH, "tests", "config", "test_data.json"), + listing + ).then(() => { + resolve(listing); + }); + }); + } + else { + return Promise.resolve([]); + } + + return listingPromise.then(listing => { + const testPackages: TestDataPackage[] = []; + const data = JSON.parse(fs.readFileSync(listing, 'utf8')); + + for (const key in data) { + const value = data[key]; + testPackages.push( + new TestDataPackage( + key, + vscode.TreeItemCollapsibleState.Collapsed, + "", + value + ) + ); + } + + return testPackages; + }); + } + } + + getTestDataPackages(): Thenable { + return Promise.resolve(this.loadTestDataListing(this.listing) || []); + } + + unpackArchive(archive: string): Thenable { + const zip = new AdmZip(archive); + const name = fpath.basename(archive, fpath.extname(archive)); + const content = fpath.join(this.contentPath, name); + + if (fs.existsSync(content)) { + return Promise.resolve(content); + } + + return new Promise((resolve, reject) => { + try { + zip.extractAllTo(this.contentPath, true); + resolve(content); + } + catch (err) { + vscode.window.showErrorMessage('Failed to unpack archive: ' + name + '.zip'); + reject(err); + } + }); + } + + getFolderContents(folder: string): TestDataItem[] { + const contents: TestDataItem[] = []; + + for (const file of fs.readdirSync(folder)) { + const filePath = fpath.join(folder, file); + const stat = fs.statSync(filePath); + const relPath = fpath.relative(this.contentPath, filePath); + if (stat.isFile()) { + contents.push(new TestDataFile(file, vscode.TreeItemCollapsibleState.None, relPath)); + } else if (stat.isDirectory()) { + contents.push( + new TestDataFolder(file, vscode.TreeItemCollapsibleState.Collapsed, relPath) + ); + } + } + + return contents; + } + + getTestDataPackageContents(element: TestDataPackage): Thenable { + const location = fpath.join(element.md5sum.substring(0, 2), element.md5sum.substring(2)); + const packagePath = fpath.join(this.packagePath, element.label); + + return new Promise(resolve => { + this.downloadFile(fpath.join(TEST_DATA_URL, location), packagePath).then(() => { + this.unpackArchive(packagePath).then((location) => { + resolve(this.getFolderContents(location)); + }); + }); + }); + + } + + getChildrenItems(element: TestDataItem): Thenable { + if (element instanceof TestDataPackage) { + return this.getTestDataPackageContents(element); + } + else if (element instanceof TestDataFolder) { + return Promise.resolve( + this.getFolderContents(fpath.join(this.contentPath, element.path)) + ); + } + + return Promise.resolve([]); + } + + openInEditor(element: TestDataItem): void { + Promise.resolve(vscode.commands.executeCommand( + 'vscode.open', + vscode.Uri.file(fpath.join(this.contentPath, element.path)) + )); + } + + saveAs(element: TestDataItem): void { + if (this.workspaceRoot) { + vscode.window.showSaveDialog({ + defaultUri: vscode.Uri.file(this.workspaceRoot), + filters: { + 'All files': ['*'] + } + }).then((uri) => { + if (uri) { + fs.copyFileSync(fpath.join(this.contentPath, element.path), uri.fsPath); + } + }); + } + } +} + +export abstract class TestDataItem extends vscode.TreeItem { + constructor( + public readonly label: string, + public readonly collapsibleState: vscode.TreeItemCollapsibleState, + public readonly path: string, + public readonly command?: vscode.Command + ) { + super(label, collapsibleState); + this.path = path; + } + + abstract iconPath: { light: string; dark: string; } | string; + + contextValue = 'testDataItem'; +} + + +export class TestDataPackage extends TestDataItem { + constructor( + public readonly label: string, + public readonly collapsibleState: vscode.TreeItemCollapsibleState, + public readonly path: string, + public readonly md5sum: string, + public readonly command?: vscode.Command + ) { + super(label, collapsibleState, path, command); + this.md5sum = md5sum; + } + + iconPath = "$(archive)"; +} + +export class TestDataFolder extends TestDataItem { + iconPath = "$(file-directory)"; +} + +export class TestDataFile extends TestDataItem { + contextValue = 'testDataFile'; + iconPath = "$(file)"; +} diff --git a/nf-scil-extensions/test-data-treeview/src/test/extension.test.ts b/nf-scil-extensions/test-data-treeview/src/test/extension.test.ts new file mode 100644 index 00000000..4ca0ab41 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/src/test/extension.test.ts @@ -0,0 +1,15 @@ +import * as assert from 'assert'; + +// You can import and use all API from the 'vscode' module +// as well as import your extension to test it +import * as vscode from 'vscode'; +// import * as myExtension from '../../extension'; + +suite('Extension Test Suite', () => { + vscode.window.showInformationMessage('Start all tests.'); + + test('Sample test', () => { + assert.strictEqual(-1, [1, 2, 3].indexOf(5)); + assert.strictEqual(-1, [1, 2, 3].indexOf(0)); + }); +}); diff --git a/nf-scil-extensions/test-data-treeview/tsconfig.json b/nf-scil-extensions/test-data-treeview/tsconfig.json new file mode 100644 index 00000000..e5fada0f --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es2020", + "lib": ["es2020"], + "outDir": "out", + "sourceMap": true, + "rootDir": "src", + "strict": true + }, + "exclude": [ + "node_modules", + ".vscode-test" + ] +} diff --git a/nf-scil-extensions/test-data-treeview/vsc-extension-quickstart.md b/nf-scil-extensions/test-data-treeview/vsc-extension-quickstart.md new file mode 100644 index 00000000..f518bb84 --- /dev/null +++ b/nf-scil-extensions/test-data-treeview/vsc-extension-quickstart.md @@ -0,0 +1,48 @@ +# Welcome to your VS Code Extension + +## What's in the folder + +* This folder contains all of the files necessary for your extension. +* `package.json` - this is the manifest file in which you declare your extension and command. + * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. +* `src/extension.ts` - this is the main file where you will provide the implementation of your command. + * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. + * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. + +## Setup + +* install the recommended extensions (amodio.tsl-problem-matcher, ms-vscode.extension-test-runner, and dbaeumer.vscode-eslint) + + +## Get up and running straight away + +* Press `F5` to open a new window with your extension loaded. +* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. +* Set breakpoints in your code inside `src/extension.ts` to debug your extension. +* Find output from your extension in the debug console. + +## Make changes + +* You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. +* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. + + +## Explore the API + +* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. + +## Run tests + +* Install the [Extension Test Runner](https://marketplace.visualstudio.com/items?itemName=ms-vscode.extension-test-runner) +* Run the "watch" task via the **Tasks: Run Task** command. Make sure this is running, or tests might not be discovered. +* Open the Testing view from the activity bar and click the Run Test" button, or use the hotkey `Ctrl/Cmd + ; A` +* See the output of the test result in the Test Results view. +* Make changes to `src/test/extension.test.ts` or create new test files inside the `test` folder. + * The provided test runner will only consider files matching the name pattern `**.test.ts`. + * You can create folders inside the `test` folder to structure your tests any way you want. + +## Go further + +* Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). +* [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VS Code extension marketplace. +* Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). From 33fb0ebbe3b9c782b150215a9228fbd64d4b985e Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Fri, 23 Aug 2024 03:41:03 +0000 Subject: [PATCH 06/24] remove dist --- .../test-data-treeview/.gitignore | 3 +- .../test-data-treeview/dist/extension.js | 3018 ----------------- .../test-data-treeview/dist/extension.js.map | 6 - 3 files changed, 2 insertions(+), 3025 deletions(-) delete mode 100644 nf-scil-extensions/test-data-treeview/dist/extension.js delete mode 100644 nf-scil-extensions/test-data-treeview/dist/extension.js.map diff --git a/nf-scil-extensions/test-data-treeview/.gitignore b/nf-scil-extensions/test-data-treeview/.gitignore index 1fc50e99..da385c69 100644 --- a/nf-scil-extensions/test-data-treeview/.gitignore +++ b/nf-scil-extensions/test-data-treeview/.gitignore @@ -1,4 +1,5 @@ out node_modules yarn.lock -.vscode-test \ No newline at end of file +.vscode-test +dist diff --git a/nf-scil-extensions/test-data-treeview/dist/extension.js b/nf-scil-extensions/test-data-treeview/dist/extension.js deleted file mode 100644 index 9d62c42e..00000000 --- a/nf-scil-extensions/test-data-treeview/dist/extension.js +++ /dev/null @@ -1,3018 +0,0 @@ -"use strict"; -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; -}; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// node_modules/adm-zip/util/constants.js -var require_constants = __commonJS({ - "node_modules/adm-zip/util/constants.js"(exports2, module2) { - module2.exports = { - /* The local file header */ - LOCHDR: 30, - // LOC header size - LOCSIG: 67324752, - // "PK\003\004" - LOCVER: 4, - // version needed to extract - LOCFLG: 6, - // general purpose bit flag - LOCHOW: 8, - // compression method - LOCTIM: 10, - // modification time (2 bytes time, 2 bytes date) - LOCCRC: 14, - // uncompressed file crc-32 value - LOCSIZ: 18, - // compressed size - LOCLEN: 22, - // uncompressed size - LOCNAM: 26, - // filename length - LOCEXT: 28, - // extra field length - /* The Data descriptor */ - EXTSIG: 134695760, - // "PK\007\008" - EXTHDR: 16, - // EXT header size - EXTCRC: 4, - // uncompressed file crc-32 value - EXTSIZ: 8, - // compressed size - EXTLEN: 12, - // uncompressed size - /* The central directory file header */ - CENHDR: 46, - // CEN header size - CENSIG: 33639248, - // "PK\001\002" - CENVEM: 4, - // version made by - CENVER: 6, - // version needed to extract - CENFLG: 8, - // encrypt, decrypt flags - CENHOW: 10, - // compression method - CENTIM: 12, - // modification time (2 bytes time, 2 bytes date) - CENCRC: 16, - // uncompressed file crc-32 value - CENSIZ: 20, - // compressed size - CENLEN: 24, - // uncompressed size - CENNAM: 28, - // filename length - CENEXT: 30, - // extra field length - CENCOM: 32, - // file comment length - CENDSK: 34, - // volume number start - CENATT: 36, - // internal file attributes - CENATX: 38, - // external file attributes (host system dependent) - CENOFF: 42, - // LOC header offset - /* The entries in the end of central directory */ - ENDHDR: 22, - // END header size - ENDSIG: 101010256, - // "PK\005\006" - ENDSUB: 8, - // number of entries on this disk - ENDTOT: 10, - // total number of entries - ENDSIZ: 12, - // central directory size in bytes - ENDOFF: 16, - // offset of first CEN header - ENDCOM: 20, - // zip file comment length - END64HDR: 20, - // zip64 END header size - END64SIG: 117853008, - // zip64 Locator signature, "PK\006\007" - END64START: 4, - // number of the disk with the start of the zip64 - END64OFF: 8, - // relative offset of the zip64 end of central directory - END64NUMDISKS: 16, - // total number of disks - ZIP64SIG: 101075792, - // zip64 signature, "PK\006\006" - ZIP64HDR: 56, - // zip64 record minimum size - ZIP64LEAD: 12, - // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE - ZIP64SIZE: 4, - // zip64 size of the central directory record - ZIP64VEM: 12, - // zip64 version made by - ZIP64VER: 14, - // zip64 version needed to extract - ZIP64DSK: 16, - // zip64 number of this disk - ZIP64DSKDIR: 20, - // number of the disk with the start of the record directory - ZIP64SUB: 24, - // number of entries on this disk - ZIP64TOT: 32, - // total number of entries - ZIP64SIZB: 40, - // zip64 central directory size in bytes - ZIP64OFF: 48, - // offset of start of central directory with respect to the starting disk number - ZIP64EXTRA: 56, - // extensible data sector - /* Compression methods */ - STORED: 0, - // no compression - SHRUNK: 1, - // shrunk - REDUCED1: 2, - // reduced with compression factor 1 - REDUCED2: 3, - // reduced with compression factor 2 - REDUCED3: 4, - // reduced with compression factor 3 - REDUCED4: 5, - // reduced with compression factor 4 - IMPLODED: 6, - // imploded - // 7 reserved for Tokenizing compression algorithm - DEFLATED: 8, - // deflated - ENHANCED_DEFLATED: 9, - // enhanced deflated - PKWARE: 10, - // PKWare DCL imploded - // 11 reserved by PKWARE - BZIP2: 12, - // compressed using BZIP2 - // 13 reserved by PKWARE - LZMA: 14, - // LZMA - // 15-17 reserved by PKWARE - IBM_TERSE: 18, - // compressed using IBM TERSE - IBM_LZ77: 19, - // IBM LZ77 z - AES_ENCRYPT: 99, - // WinZIP AES encryption method - /* General purpose bit flag */ - // values can obtained with expression 2**bitnr - FLG_ENC: 1, - // Bit 0: encrypted file - FLG_COMP1: 2, - // Bit 1, compression option - FLG_COMP2: 4, - // Bit 2, compression option - FLG_DESC: 8, - // Bit 3, data descriptor - FLG_ENH: 16, - // Bit 4, enhanced deflating - FLG_PATCH: 32, - // Bit 5, indicates that the file is compressed patched data. - FLG_STR: 64, - // Bit 6, strong encryption (patented) - // Bits 7-10: Currently unused. - FLG_EFS: 2048, - // Bit 11: Language encoding flag (EFS) - // Bit 12: Reserved by PKWARE for enhanced compression. - // Bit 13: encrypted the Central Directory (patented). - // Bits 14-15: Reserved by PKWARE. - FLG_MSK: 4096, - // mask header values - /* Load type */ - FILE: 2, - BUFFER: 1, - NONE: 0, - /* 4.5 Extensible data fields */ - EF_ID: 0, - EF_SIZE: 2, - /* Header IDs */ - ID_ZIP64: 1, - ID_AVINFO: 7, - ID_PFS: 8, - ID_OS2: 9, - ID_NTFS: 10, - ID_OPENVMS: 12, - ID_UNIX: 13, - ID_FORK: 14, - ID_PATCH: 15, - ID_X509_PKCS7: 20, - ID_X509_CERTID_F: 21, - ID_X509_CERTID_C: 22, - ID_STRONGENC: 23, - ID_RECORD_MGT: 24, - ID_X509_PKCS7_RL: 25, - ID_IBM1: 101, - ID_IBM2: 102, - ID_POSZIP: 18064, - EF_ZIP64_OR_32: 4294967295, - EF_ZIP64_OR_16: 65535, - EF_ZIP64_SUNCOMP: 0, - EF_ZIP64_SCOMP: 8, - EF_ZIP64_RHO: 16, - EF_ZIP64_DSN: 24 - }; - } -}); - -// node_modules/adm-zip/util/errors.js -var require_errors = __commonJS({ - "node_modules/adm-zip/util/errors.js"(exports2) { - var errors = { - /* Header error messages */ - INVALID_LOC: "Invalid LOC header (bad signature)", - INVALID_CEN: "Invalid CEN header (bad signature)", - INVALID_END: "Invalid END header (bad signature)", - /* Descriptor */ - DESCRIPTOR_NOT_EXIST: "No descriptor present", - DESCRIPTOR_UNKNOWN: "Unknown descriptor format", - DESCRIPTOR_FAULTY: "Descriptor data is malformed", - /* ZipEntry error messages*/ - NO_DATA: "Nothing to decompress", - BAD_CRC: "CRC32 checksum failed {0}", - FILE_IN_THE_WAY: "There is a file in the way: {0}", - UNKNOWN_METHOD: "Invalid/unsupported compression method", - /* Inflater error messages */ - AVAIL_DATA: "inflate::Available inflate data did not terminate", - INVALID_DISTANCE: "inflate::Invalid literal/length or distance code in fixed or dynamic block", - TO_MANY_CODES: "inflate::Dynamic block code description: too many length or distance codes", - INVALID_REPEAT_LEN: "inflate::Dynamic block code description: repeat more than specified lengths", - INVALID_REPEAT_FIRST: "inflate::Dynamic block code description: repeat lengths with no first length", - INCOMPLETE_CODES: "inflate::Dynamic block code description: code lengths codes incomplete", - INVALID_DYN_DISTANCE: "inflate::Dynamic block code description: invalid distance code lengths", - INVALID_CODES_LEN: "inflate::Dynamic block code description: invalid literal/length code lengths", - INVALID_STORE_BLOCK: "inflate::Stored block length did not match one's complement", - INVALID_BLOCK_TYPE: "inflate::Invalid block type (type == 3)", - /* ADM-ZIP error messages */ - CANT_EXTRACT_FILE: "Could not extract the file", - CANT_OVERRIDE: "Target file already exists", - DISK_ENTRY_TOO_LARGE: "Number of disk entries is too large", - NO_ZIP: "No zip file was loaded", - NO_ENTRY: "Entry doesn't exist", - DIRECTORY_CONTENT_ERROR: "A directory cannot have content", - FILE_NOT_FOUND: 'File not found: "{0}"', - NOT_IMPLEMENTED: "Not implemented", - INVALID_FILENAME: "Invalid filename", - INVALID_FORMAT: "Invalid or unsupported zip format. No END header found", - INVALID_PASS_PARAM: "Incompatible password parameter", - WRONG_PASSWORD: "Wrong Password", - /* ADM-ZIP */ - COMMENT_TOO_LONG: "Comment is too long", - // Comment can be max 65535 bytes long (NOTE: some non-US characters may take more space) - EXTRA_FIELD_PARSE_ERROR: "Extra field parsing error" - }; - function E(message) { - return function(...args) { - if (args.length) { - message = message.replace(/\{(\d)\}/g, (_, n) => args[n] || ""); - } - return new Error("ADM-ZIP: " + message); - }; - } - for (const msg of Object.keys(errors)) { - exports2[msg] = E(errors[msg]); - } - } -}); - -// node_modules/adm-zip/util/utils.js -var require_utils = __commonJS({ - "node_modules/adm-zip/util/utils.js"(exports2, module2) { - var fsystem = require("fs"); - var pth = require("path"); - var Constants = require_constants(); - var Errors = require_errors(); - var isWin = typeof process === "object" && "win32" === process.platform; - var is_Obj = (obj) => typeof obj === "object" && obj !== null; - var crcTable = new Uint32Array(256).map((t, c) => { - for (let k = 0; k < 8; k++) { - if ((c & 1) !== 0) { - c = 3988292384 ^ c >>> 1; - } else { - c >>>= 1; - } - } - return c >>> 0; - }); - function Utils(opts) { - this.sep = pth.sep; - this.fs = fsystem; - if (is_Obj(opts)) { - if (is_Obj(opts.fs) && typeof opts.fs.statSync === "function") { - this.fs = opts.fs; - } - } - } - module2.exports = Utils; - Utils.prototype.makeDir = function(folder) { - const self = this; - function mkdirSync2(fpath2) { - let resolvedPath = fpath2.split(self.sep)[0]; - fpath2.split(self.sep).forEach(function(name) { - if (!name || name.substr(-1, 1) === ":") return; - resolvedPath += self.sep + name; - var stat; - try { - stat = self.fs.statSync(resolvedPath); - } catch (e) { - self.fs.mkdirSync(resolvedPath); - } - if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY(`"${resolvedPath}"`); - }); - } - mkdirSync2(folder); - }; - Utils.prototype.writeFileTo = function(path, content, overwrite, attr) { - const self = this; - if (self.fs.existsSync(path)) { - if (!overwrite) return false; - var stat = self.fs.statSync(path); - if (stat.isDirectory()) { - return false; - } - } - var folder = pth.dirname(path); - if (!self.fs.existsSync(folder)) { - self.makeDir(folder); - } - var fd; - try { - fd = self.fs.openSync(path, "w", 438); - } catch (e) { - self.fs.chmodSync(path, 438); - fd = self.fs.openSync(path, "w", 438); - } - if (fd) { - try { - self.fs.writeSync(fd, content, 0, content.length, 0); - } finally { - self.fs.closeSync(fd); - } - } - self.fs.chmodSync(path, attr || 438); - return true; - }; - Utils.prototype.writeFileToAsync = function(path, content, overwrite, attr, callback) { - if (typeof attr === "function") { - callback = attr; - attr = void 0; - } - const self = this; - self.fs.exists(path, function(exist) { - if (exist && !overwrite) return callback(false); - self.fs.stat(path, function(err, stat) { - if (exist && stat.isDirectory()) { - return callback(false); - } - var folder = pth.dirname(path); - self.fs.exists(folder, function(exists) { - if (!exists) self.makeDir(folder); - self.fs.open(path, "w", 438, function(err2, fd) { - if (err2) { - self.fs.chmod(path, 438, function() { - self.fs.open(path, "w", 438, function(err3, fd2) { - self.fs.write(fd2, content, 0, content.length, 0, function() { - self.fs.close(fd2, function() { - self.fs.chmod(path, attr || 438, function() { - callback(true); - }); - }); - }); - }); - }); - } else if (fd) { - self.fs.write(fd, content, 0, content.length, 0, function() { - self.fs.close(fd, function() { - self.fs.chmod(path, attr || 438, function() { - callback(true); - }); - }); - }); - } else { - self.fs.chmod(path, attr || 438, function() { - callback(true); - }); - } - }); - }); - }); - }); - }; - Utils.prototype.findFiles = function(path) { - const self = this; - function findSync(dir, pattern, recursive) { - if (typeof pattern === "boolean") { - recursive = pattern; - pattern = void 0; - } - let files = []; - self.fs.readdirSync(dir).forEach(function(file) { - const path2 = pth.join(dir, file); - const stat = self.fs.statSync(path2); - if (!pattern || pattern.test(path2)) { - files.push(pth.normalize(path2) + (stat.isDirectory() ? self.sep : "")); - } - if (stat.isDirectory() && recursive) files = files.concat(findSync(path2, pattern, recursive)); - }); - return files; - } - return findSync(path, void 0, true); - }; - Utils.prototype.findFilesAsync = function(dir, cb) { - const self = this; - let results = []; - self.fs.readdir(dir, function(err, list) { - if (err) return cb(err); - let list_length = list.length; - if (!list_length) return cb(null, results); - list.forEach(function(file) { - file = pth.join(dir, file); - self.fs.stat(file, function(err2, stat) { - if (err2) return cb(err2); - if (stat) { - results.push(pth.normalize(file) + (stat.isDirectory() ? self.sep : "")); - if (stat.isDirectory()) { - self.findFilesAsync(file, function(err3, res) { - if (err3) return cb(err3); - results = results.concat(res); - if (!--list_length) cb(null, results); - }); - } else { - if (!--list_length) cb(null, results); - } - } - }); - }); - }); - }; - Utils.prototype.getAttributes = function() { - }; - Utils.prototype.setAttributes = function() { - }; - Utils.crc32update = function(crc, byte) { - return crcTable[(crc ^ byte) & 255] ^ crc >>> 8; - }; - Utils.crc32 = function(buf) { - if (typeof buf === "string") { - buf = Buffer.from(buf, "utf8"); - } - let len = buf.length; - let crc = ~0; - for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]); - return ~crc >>> 0; - }; - Utils.methodToString = function(method) { - switch (method) { - case Constants.STORED: - return "STORED (" + method + ")"; - case Constants.DEFLATED: - return "DEFLATED (" + method + ")"; - default: - return "UNSUPPORTED (" + method + ")"; - } - }; - Utils.canonical = function(path) { - if (!path) return ""; - const safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/")); - return pth.join(".", safeSuffix); - }; - Utils.zipnamefix = function(path) { - if (!path) return ""; - const safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/")); - return pth.posix.join(".", safeSuffix); - }; - Utils.findLast = function(arr, callback) { - if (!Array.isArray(arr)) throw new TypeError("arr is not array"); - const len = arr.length >>> 0; - for (let i = len - 1; i >= 0; i--) { - if (callback(arr[i], i, arr)) { - return arr[i]; - } - } - return void 0; - }; - Utils.sanitize = function(prefix, name) { - prefix = pth.resolve(pth.normalize(prefix)); - var parts = name.split("/"); - for (var i = 0, l = parts.length; i < l; i++) { - var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep))); - if (path.indexOf(prefix) === 0) { - return path; - } - } - return pth.normalize(pth.join(prefix, pth.basename(name))); - }; - Utils.toBuffer = function toBuffer(input, encoder) { - if (Buffer.isBuffer(input)) { - return input; - } else if (input instanceof Uint8Array) { - return Buffer.from(input); - } else { - return typeof input === "string" ? encoder(input) : Buffer.alloc(0); - } - }; - Utils.readBigUInt64LE = function(buffer, index) { - var slice = Buffer.from(buffer.slice(index, index + 8)); - slice.swap64(); - return parseInt(`0x${slice.toString("hex")}`); - }; - Utils.fromDOS2Date = function(val) { - return new Date((val >> 25 & 127) + 1980, Math.max((val >> 21 & 15) - 1, 0), Math.max(val >> 16 & 31, 1), val >> 11 & 31, val >> 5 & 63, (val & 31) << 1); - }; - Utils.fromDate2DOS = function(val) { - let date = 0; - let time = 0; - if (val.getFullYear() > 1979) { - date = (val.getFullYear() - 1980 & 127) << 9 | val.getMonth() + 1 << 5 | val.getDate(); - time = val.getHours() << 11 | val.getMinutes() << 5 | val.getSeconds() >> 1; - } - return date << 16 | time; - }; - Utils.isWin = isWin; - Utils.crcTable = crcTable; - } -}); - -// node_modules/adm-zip/util/fattr.js -var require_fattr = __commonJS({ - "node_modules/adm-zip/util/fattr.js"(exports2, module2) { - var pth = require("path"); - module2.exports = function(path, { fs: fs2 }) { - var _path = path || "", _obj = newAttr(), _stat = null; - function newAttr() { - return { - directory: false, - readonly: false, - hidden: false, - executable: false, - mtime: 0, - atime: 0 - }; - } - if (_path && fs2.existsSync(_path)) { - _stat = fs2.statSync(_path); - _obj.directory = _stat.isDirectory(); - _obj.mtime = _stat.mtime; - _obj.atime = _stat.atime; - _obj.executable = (73 & _stat.mode) !== 0; - _obj.readonly = (128 & _stat.mode) === 0; - _obj.hidden = pth.basename(_path)[0] === "."; - } else { - console.warn("Invalid path: " + _path); - } - return { - get directory() { - return _obj.directory; - }, - get readOnly() { - return _obj.readonly; - }, - get hidden() { - return _obj.hidden; - }, - get mtime() { - return _obj.mtime; - }, - get atime() { - return _obj.atime; - }, - get executable() { - return _obj.executable; - }, - decodeAttributes: function() { - }, - encodeAttributes: function() { - }, - toJSON: function() { - return { - path: _path, - isDirectory: _obj.directory, - isReadOnly: _obj.readonly, - isHidden: _obj.hidden, - isExecutable: _obj.executable, - mTime: _obj.mtime, - aTime: _obj.atime - }; - }, - toString: function() { - return JSON.stringify(this.toJSON(), null, " "); - } - }; - }; - } -}); - -// node_modules/adm-zip/util/decoder.js -var require_decoder = __commonJS({ - "node_modules/adm-zip/util/decoder.js"(exports2, module2) { - module2.exports = { - efs: true, - encode: (data) => Buffer.from(data, "utf8"), - decode: (data) => data.toString("utf8") - }; - } -}); - -// node_modules/adm-zip/util/index.js -var require_util = __commonJS({ - "node_modules/adm-zip/util/index.js"(exports2, module2) { - module2.exports = require_utils(); - module2.exports.Constants = require_constants(); - module2.exports.Errors = require_errors(); - module2.exports.FileAttr = require_fattr(); - module2.exports.decoder = require_decoder(); - } -}); - -// node_modules/adm-zip/headers/entryHeader.js -var require_entryHeader = __commonJS({ - "node_modules/adm-zip/headers/entryHeader.js"(exports2, module2) { - var Utils = require_util(); - var Constants = Utils.Constants; - module2.exports = function() { - var _verMade = 20, _version = 10, _flags = 0, _method = 0, _time = 0, _crc = 0, _compressedSize = 0, _size = 0, _fnameLen = 0, _extraLen = 0, _comLen = 0, _diskStart = 0, _inattr = 0, _attr = 0, _offset = 0; - _verMade |= Utils.isWin ? 2560 : 768; - _flags |= Constants.FLG_EFS; - const _localHeader = { - extraLen: 0 - }; - const uint32 = (val) => Math.max(0, val) >>> 0; - const uint16 = (val) => Math.max(0, val) & 65535; - const uint8 = (val) => Math.max(0, val) & 255; - _time = Utils.fromDate2DOS(/* @__PURE__ */ new Date()); - return { - get made() { - return _verMade; - }, - set made(val) { - _verMade = val; - }, - get version() { - return _version; - }, - set version(val) { - _version = val; - }, - get flags() { - return _flags; - }, - set flags(val) { - _flags = val; - }, - get flags_efs() { - return (_flags & Constants.FLG_EFS) > 0; - }, - set flags_efs(val) { - if (val) { - _flags |= Constants.FLG_EFS; - } else { - _flags &= ~Constants.FLG_EFS; - } - }, - get flags_desc() { - return (_flags & Constants.FLG_DESC) > 0; - }, - set flags_desc(val) { - if (val) { - _flags |= Constants.FLG_DESC; - } else { - _flags &= ~Constants.FLG_DESC; - } - }, - get method() { - return _method; - }, - set method(val) { - switch (val) { - case Constants.STORED: - this.version = 10; - case Constants.DEFLATED: - default: - this.version = 20; - } - _method = val; - }, - get time() { - return Utils.fromDOS2Date(this.timeval); - }, - set time(val) { - this.timeval = Utils.fromDate2DOS(val); - }, - get timeval() { - return _time; - }, - set timeval(val) { - _time = uint32(val); - }, - get timeHighByte() { - return uint8(_time >>> 8); - }, - get crc() { - return _crc; - }, - set crc(val) { - _crc = uint32(val); - }, - get compressedSize() { - return _compressedSize; - }, - set compressedSize(val) { - _compressedSize = uint32(val); - }, - get size() { - return _size; - }, - set size(val) { - _size = uint32(val); - }, - get fileNameLength() { - return _fnameLen; - }, - set fileNameLength(val) { - _fnameLen = val; - }, - get extraLength() { - return _extraLen; - }, - set extraLength(val) { - _extraLen = val; - }, - get extraLocalLength() { - return _localHeader.extraLen; - }, - set extraLocalLength(val) { - _localHeader.extraLen = val; - }, - get commentLength() { - return _comLen; - }, - set commentLength(val) { - _comLen = val; - }, - get diskNumStart() { - return _diskStart; - }, - set diskNumStart(val) { - _diskStart = uint32(val); - }, - get inAttr() { - return _inattr; - }, - set inAttr(val) { - _inattr = uint32(val); - }, - get attr() { - return _attr; - }, - set attr(val) { - _attr = uint32(val); - }, - // get Unix file permissions - get fileAttr() { - return uint16(_attr >> 16) & 4095; - }, - get offset() { - return _offset; - }, - set offset(val) { - _offset = uint32(val); - }, - get encrypted() { - return (_flags & Constants.FLG_ENC) === Constants.FLG_ENC; - }, - get centralHeaderSize() { - return Constants.CENHDR + _fnameLen + _extraLen + _comLen; - }, - get realDataOffset() { - return _offset + Constants.LOCHDR + _localHeader.fnameLen + _localHeader.extraLen; - }, - get localHeader() { - return _localHeader; - }, - loadLocalHeaderFromBinary: function(input) { - var data = input.slice(_offset, _offset + Constants.LOCHDR); - if (data.readUInt32LE(0) !== Constants.LOCSIG) { - throw Utils.Errors.INVALID_LOC(); - } - _localHeader.version = data.readUInt16LE(Constants.LOCVER); - _localHeader.flags = data.readUInt16LE(Constants.LOCFLG); - _localHeader.method = data.readUInt16LE(Constants.LOCHOW); - _localHeader.time = data.readUInt32LE(Constants.LOCTIM); - _localHeader.crc = data.readUInt32LE(Constants.LOCCRC); - _localHeader.compressedSize = data.readUInt32LE(Constants.LOCSIZ); - _localHeader.size = data.readUInt32LE(Constants.LOCLEN); - _localHeader.fnameLen = data.readUInt16LE(Constants.LOCNAM); - _localHeader.extraLen = data.readUInt16LE(Constants.LOCEXT); - const extraStart = _offset + Constants.LOCHDR + _localHeader.fnameLen; - const extraEnd = extraStart + _localHeader.extraLen; - return input.slice(extraStart, extraEnd); - }, - loadFromBinary: function(data) { - if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) { - throw Utils.Errors.INVALID_CEN(); - } - _verMade = data.readUInt16LE(Constants.CENVEM); - _version = data.readUInt16LE(Constants.CENVER); - _flags = data.readUInt16LE(Constants.CENFLG); - _method = data.readUInt16LE(Constants.CENHOW); - _time = data.readUInt32LE(Constants.CENTIM); - _crc = data.readUInt32LE(Constants.CENCRC); - _compressedSize = data.readUInt32LE(Constants.CENSIZ); - _size = data.readUInt32LE(Constants.CENLEN); - _fnameLen = data.readUInt16LE(Constants.CENNAM); - _extraLen = data.readUInt16LE(Constants.CENEXT); - _comLen = data.readUInt16LE(Constants.CENCOM); - _diskStart = data.readUInt16LE(Constants.CENDSK); - _inattr = data.readUInt16LE(Constants.CENATT); - _attr = data.readUInt32LE(Constants.CENATX); - _offset = data.readUInt32LE(Constants.CENOFF); - }, - localHeaderToBinary: function() { - var data = Buffer.alloc(Constants.LOCHDR); - data.writeUInt32LE(Constants.LOCSIG, 0); - data.writeUInt16LE(_version, Constants.LOCVER); - data.writeUInt16LE(_flags, Constants.LOCFLG); - data.writeUInt16LE(_method, Constants.LOCHOW); - data.writeUInt32LE(_time, Constants.LOCTIM); - data.writeUInt32LE(_crc, Constants.LOCCRC); - data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); - data.writeUInt32LE(_size, Constants.LOCLEN); - data.writeUInt16LE(_fnameLen, Constants.LOCNAM); - data.writeUInt16LE(_localHeader.extraLen, Constants.LOCEXT); - return data; - }, - centralHeaderToBinary: function() { - var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen); - data.writeUInt32LE(Constants.CENSIG, 0); - data.writeUInt16LE(_verMade, Constants.CENVEM); - data.writeUInt16LE(_version, Constants.CENVER); - data.writeUInt16LE(_flags, Constants.CENFLG); - data.writeUInt16LE(_method, Constants.CENHOW); - data.writeUInt32LE(_time, Constants.CENTIM); - data.writeUInt32LE(_crc, Constants.CENCRC); - data.writeUInt32LE(_compressedSize, Constants.CENSIZ); - data.writeUInt32LE(_size, Constants.CENLEN); - data.writeUInt16LE(_fnameLen, Constants.CENNAM); - data.writeUInt16LE(_extraLen, Constants.CENEXT); - data.writeUInt16LE(_comLen, Constants.CENCOM); - data.writeUInt16LE(_diskStart, Constants.CENDSK); - data.writeUInt16LE(_inattr, Constants.CENATT); - data.writeUInt32LE(_attr, Constants.CENATX); - data.writeUInt32LE(_offset, Constants.CENOFF); - return data; - }, - toJSON: function() { - const bytes = function(nr) { - return nr + " bytes"; - }; - return { - made: _verMade, - version: _version, - flags: _flags, - method: Utils.methodToString(_method), - time: this.time, - crc: "0x" + _crc.toString(16).toUpperCase(), - compressedSize: bytes(_compressedSize), - size: bytes(_size), - fileNameLength: bytes(_fnameLen), - extraLength: bytes(_extraLen), - commentLength: bytes(_comLen), - diskNumStart: _diskStart, - inAttr: _inattr, - attr: _attr, - offset: _offset, - centralHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen) - }; - }, - toString: function() { - return JSON.stringify(this.toJSON(), null, " "); - } - }; - }; - } -}); - -// node_modules/adm-zip/headers/mainHeader.js -var require_mainHeader = __commonJS({ - "node_modules/adm-zip/headers/mainHeader.js"(exports2, module2) { - var Utils = require_util(); - var Constants = Utils.Constants; - module2.exports = function() { - var _volumeEntries = 0, _totalEntries = 0, _size = 0, _offset = 0, _commentLength = 0; - return { - get diskEntries() { - return _volumeEntries; - }, - set diskEntries(val) { - _volumeEntries = _totalEntries = val; - }, - get totalEntries() { - return _totalEntries; - }, - set totalEntries(val) { - _totalEntries = _volumeEntries = val; - }, - get size() { - return _size; - }, - set size(val) { - _size = val; - }, - get offset() { - return _offset; - }, - set offset(val) { - _offset = val; - }, - get commentLength() { - return _commentLength; - }, - set commentLength(val) { - _commentLength = val; - }, - get mainHeaderSize() { - return Constants.ENDHDR + _commentLength; - }, - loadFromBinary: function(data) { - if ((data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) && (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)) { - throw Utils.Errors.INVALID_END(); - } - if (data.readUInt32LE(0) === Constants.ENDSIG) { - _volumeEntries = data.readUInt16LE(Constants.ENDSUB); - _totalEntries = data.readUInt16LE(Constants.ENDTOT); - _size = data.readUInt32LE(Constants.ENDSIZ); - _offset = data.readUInt32LE(Constants.ENDOFF); - _commentLength = data.readUInt16LE(Constants.ENDCOM); - } else { - _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB); - _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT); - _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZE); - _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF); - _commentLength = 0; - } - }, - toBinary: function() { - var b = Buffer.alloc(Constants.ENDHDR + _commentLength); - b.writeUInt32LE(Constants.ENDSIG, 0); - b.writeUInt32LE(0, 4); - b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); - b.writeUInt16LE(_totalEntries, Constants.ENDTOT); - b.writeUInt32LE(_size, Constants.ENDSIZ); - b.writeUInt32LE(_offset, Constants.ENDOFF); - b.writeUInt16LE(_commentLength, Constants.ENDCOM); - b.fill(" ", Constants.ENDHDR); - return b; - }, - toJSON: function() { - const offset = function(nr, len) { - let offs = nr.toString(16).toUpperCase(); - while (offs.length < len) offs = "0" + offs; - return "0x" + offs; - }; - return { - diskEntries: _volumeEntries, - totalEntries: _totalEntries, - size: _size + " bytes", - offset: offset(_offset, 4), - commentLength: _commentLength - }; - }, - toString: function() { - return JSON.stringify(this.toJSON(), null, " "); - } - }; - }; - } -}); - -// node_modules/adm-zip/headers/index.js -var require_headers = __commonJS({ - "node_modules/adm-zip/headers/index.js"(exports2) { - exports2.EntryHeader = require_entryHeader(); - exports2.MainHeader = require_mainHeader(); - } -}); - -// node_modules/adm-zip/methods/deflater.js -var require_deflater = __commonJS({ - "node_modules/adm-zip/methods/deflater.js"(exports2, module2) { - module2.exports = function(inbuf) { - var zlib = require("zlib"); - var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 }; - return { - deflate: function() { - return zlib.deflateRawSync(inbuf, opts); - }, - deflateAsync: function(callback) { - var tmp = zlib.createDeflateRaw(opts), parts = [], total = 0; - tmp.on("data", function(data) { - parts.push(data); - total += data.length; - }); - tmp.on("end", function() { - var buf = Buffer.alloc(total), written = 0; - buf.fill(0); - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf); - } - }; - }; - } -}); - -// node_modules/adm-zip/methods/inflater.js -var require_inflater = __commonJS({ - "node_modules/adm-zip/methods/inflater.js"(exports2, module2) { - var version = +(process.versions ? process.versions.node : "").split(".")[0] || 0; - module2.exports = function(inbuf, expectedLength) { - var zlib = require("zlib"); - const option = version >= 15 && expectedLength > 0 ? { maxOutputLength: expectedLength } : {}; - return { - inflate: function() { - return zlib.inflateRawSync(inbuf, option); - }, - inflateAsync: function(callback) { - var tmp = zlib.createInflateRaw(option), parts = [], total = 0; - tmp.on("data", function(data) { - parts.push(data); - total += data.length; - }); - tmp.on("end", function() { - var buf = Buffer.alloc(total), written = 0; - buf.fill(0); - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - part.copy(buf, written); - written += part.length; - } - callback && callback(buf); - }); - tmp.end(inbuf); - } - }; - }; - } -}); - -// node_modules/adm-zip/methods/zipcrypto.js -var require_zipcrypto = __commonJS({ - "node_modules/adm-zip/methods/zipcrypto.js"(exports2, module2) { - "use strict"; - var { randomFillSync } = require("crypto"); - var Errors = require_errors(); - var crctable = new Uint32Array(256).map((t, crc) => { - for (let j = 0; j < 8; j++) { - if (0 !== (crc & 1)) { - crc = crc >>> 1 ^ 3988292384; - } else { - crc >>>= 1; - } - } - return crc >>> 0; - }); - var uMul = (a, b) => Math.imul(a, b) >>> 0; - var crc32update = (pCrc32, bval) => { - return crctable[(pCrc32 ^ bval) & 255] ^ pCrc32 >>> 8; - }; - var genSalt = () => { - if ("function" === typeof randomFillSync) { - return randomFillSync(Buffer.alloc(12)); - } else { - return genSalt.node(); - } - }; - genSalt.node = () => { - const salt = Buffer.alloc(12); - const len = salt.length; - for (let i = 0; i < len; i++) salt[i] = Math.random() * 256 & 255; - return salt; - }; - var config = { - genSalt - }; - function Initkeys(pw) { - const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw); - this.keys = new Uint32Array([305419896, 591751049, 878082192]); - for (let i = 0; i < pass.length; i++) { - this.updateKeys(pass[i]); - } - } - Initkeys.prototype.updateKeys = function(byteValue) { - const keys = this.keys; - keys[0] = crc32update(keys[0], byteValue); - keys[1] += keys[0] & 255; - keys[1] = uMul(keys[1], 134775813) + 1; - keys[2] = crc32update(keys[2], keys[1] >>> 24); - return byteValue; - }; - Initkeys.prototype.next = function() { - const k = (this.keys[2] | 2) >>> 0; - return uMul(k, k ^ 1) >> 8 & 255; - }; - function make_decrypter(pwd) { - const keys = new Initkeys(pwd); - return function(data) { - const result = Buffer.alloc(data.length); - let pos = 0; - for (let c of data) { - result[pos++] = keys.updateKeys(c ^ keys.next()); - } - return result; - }; - } - function make_encrypter(pwd) { - const keys = new Initkeys(pwd); - return function(data, result, pos = 0) { - if (!result) result = Buffer.alloc(data.length); - for (let c of data) { - const k = keys.next(); - result[pos++] = c ^ k; - keys.updateKeys(c); - } - return result; - }; - } - function decrypt(data, header, pwd) { - if (!data || !Buffer.isBuffer(data) || data.length < 12) { - return Buffer.alloc(0); - } - const decrypter = make_decrypter(pwd); - const salt = decrypter(data.slice(0, 12)); - const verifyByte = (header.flags & 8) === 8 ? header.timeHighByte : header.crc >>> 24; - if (salt[11] !== verifyByte) { - throw Errors.WRONG_PASSWORD(); - } - return decrypter(data.slice(12)); - } - function _salter(data) { - if (Buffer.isBuffer(data) && data.length >= 12) { - config.genSalt = function() { - return data.slice(0, 12); - }; - } else if (data === "node") { - config.genSalt = genSalt.node; - } else { - config.genSalt = genSalt; - } - } - function encrypt(data, header, pwd, oldlike = false) { - if (data == null) data = Buffer.alloc(0); - if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString()); - const encrypter = make_encrypter(pwd); - const salt = config.genSalt(); - salt[11] = header.crc >>> 24 & 255; - if (oldlike) salt[10] = header.crc >>> 16 & 255; - const result = Buffer.alloc(data.length + 12); - encrypter(salt, result); - return encrypter(data, result, 12); - } - module2.exports = { decrypt, encrypt, _salter }; - } -}); - -// node_modules/adm-zip/methods/index.js -var require_methods = __commonJS({ - "node_modules/adm-zip/methods/index.js"(exports2) { - exports2.Deflater = require_deflater(); - exports2.Inflater = require_inflater(); - exports2.ZipCrypto = require_zipcrypto(); - } -}); - -// node_modules/adm-zip/zipEntry.js -var require_zipEntry = __commonJS({ - "node_modules/adm-zip/zipEntry.js"(exports2, module2) { - var Utils = require_util(); - var Headers = require_headers(); - var Constants = Utils.Constants; - var Methods = require_methods(); - module2.exports = function(options, input) { - var _centralHeader = new Headers.EntryHeader(), _entryName = Buffer.alloc(0), _comment = Buffer.alloc(0), _isDirectory = false, uncompressedData = null, _extra = Buffer.alloc(0), _extralocal = Buffer.alloc(0), _efs = true; - const opts = options; - const decoder = typeof opts.decoder === "object" ? opts.decoder : Utils.decoder; - _efs = decoder.hasOwnProperty("efs") ? decoder.efs : false; - function getCompressedDataFromZip() { - if (!input || !(input instanceof Uint8Array)) { - return Buffer.alloc(0); - } - _extralocal = _centralHeader.loadLocalHeaderFromBinary(input); - return input.slice(_centralHeader.realDataOffset, _centralHeader.realDataOffset + _centralHeader.compressedSize); - } - function crc32OK(data) { - if (!_centralHeader.flags_desc) { - if (Utils.crc32(data) !== _centralHeader.localHeader.crc) { - return false; - } - } else { - const descriptor = {}; - const dataEndOffset = _centralHeader.realDataOffset + _centralHeader.compressedSize; - if (input.readUInt32LE(dataEndOffset) == Constants.LOCSIG || input.readUInt32LE(dataEndOffset) == Constants.CENSIG) { - throw Utils.Errors.DESCRIPTOR_NOT_EXIST(); - } - if (input.readUInt32LE(dataEndOffset) == Constants.EXTSIG) { - descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC); - descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ); - descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN); - } else if (input.readUInt16LE(dataEndOffset + 12) === 19280) { - descriptor.crc = input.readUInt32LE(dataEndOffset + Constants.EXTCRC - 4); - descriptor.compressedSize = input.readUInt32LE(dataEndOffset + Constants.EXTSIZ - 4); - descriptor.size = input.readUInt32LE(dataEndOffset + Constants.EXTLEN - 4); - } else { - throw Utils.Errors.DESCRIPTOR_UNKNOWN(); - } - if (descriptor.compressedSize !== _centralHeader.compressedSize || descriptor.size !== _centralHeader.size || descriptor.crc !== _centralHeader.crc) { - throw Utils.Errors.DESCRIPTOR_FAULTY(); - } - if (Utils.crc32(data) !== descriptor.crc) { - return false; - } - } - return true; - } - function decompress(async, callback, pass) { - if (typeof callback === "undefined" && typeof async === "string") { - pass = async; - async = void 0; - } - if (_isDirectory) { - if (async && callback) { - callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR()); - } - return Buffer.alloc(0); - } - var compressedData = getCompressedDataFromZip(); - if (compressedData.length === 0) { - if (async && callback) callback(compressedData); - return compressedData; - } - if (_centralHeader.encrypted) { - if ("string" !== typeof pass && !Buffer.isBuffer(pass)) { - throw Utils.Errors.INVALID_PASS_PARAM(); - } - compressedData = Methods.ZipCrypto.decrypt(compressedData, _centralHeader, pass); - } - var data = Buffer.alloc(_centralHeader.size); - switch (_centralHeader.method) { - case Utils.Constants.STORED: - compressedData.copy(data); - if (!crc32OK(data)) { - if (async && callback) callback(data, Utils.Errors.BAD_CRC()); - throw Utils.Errors.BAD_CRC(); - } else { - if (async && callback) callback(data); - return data; - } - case Utils.Constants.DEFLATED: - var inflater = new Methods.Inflater(compressedData, _centralHeader.size); - if (!async) { - const result = inflater.inflate(data); - result.copy(data, 0); - if (!crc32OK(data)) { - throw Utils.Errors.BAD_CRC(`"${decoder.decode(_entryName)}"`); - } - return data; - } else { - inflater.inflateAsync(function(result) { - result.copy(result, 0); - if (callback) { - if (!crc32OK(result)) { - callback(result, Utils.Errors.BAD_CRC()); - } else { - callback(result); - } - } - }); - } - break; - default: - if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD()); - throw Utils.Errors.UNKNOWN_METHOD(); - } - } - function compress(async, callback) { - if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) { - if (async && callback) callback(getCompressedDataFromZip()); - return getCompressedDataFromZip(); - } - if (uncompressedData.length && !_isDirectory) { - var compressedData; - switch (_centralHeader.method) { - case Utils.Constants.STORED: - _centralHeader.compressedSize = _centralHeader.size; - compressedData = Buffer.alloc(uncompressedData.length); - uncompressedData.copy(compressedData); - if (async && callback) callback(compressedData); - return compressedData; - default: - case Utils.Constants.DEFLATED: - var deflater = new Methods.Deflater(uncompressedData); - if (!async) { - var deflated = deflater.deflate(); - _centralHeader.compressedSize = deflated.length; - return deflated; - } else { - deflater.deflateAsync(function(data) { - compressedData = Buffer.alloc(data.length); - _centralHeader.compressedSize = data.length; - data.copy(compressedData); - callback && callback(compressedData); - }); - } - deflater = null; - break; - } - } else if (async && callback) { - callback(Buffer.alloc(0)); - } else { - return Buffer.alloc(0); - } - } - function readUInt64LE(buffer, offset) { - return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset); - } - function parseExtra(data) { - try { - var offset = 0; - var signature, size, part; - while (offset + 4 < data.length) { - signature = data.readUInt16LE(offset); - offset += 2; - size = data.readUInt16LE(offset); - offset += 2; - part = data.slice(offset, offset + size); - offset += size; - if (Constants.ID_ZIP64 === signature) { - parseZip64ExtendedInformation(part); - } - } - } catch (error) { - throw Utils.Errors.EXTRA_FIELD_PARSE_ERROR(); - } - } - function parseZip64ExtendedInformation(data) { - var size, compressedSize, offset, diskNumStart; - if (data.length >= Constants.EF_ZIP64_SCOMP) { - size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP); - if (_centralHeader.size === Constants.EF_ZIP64_OR_32) { - _centralHeader.size = size; - } - } - if (data.length >= Constants.EF_ZIP64_RHO) { - compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP); - if (_centralHeader.compressedSize === Constants.EF_ZIP64_OR_32) { - _centralHeader.compressedSize = compressedSize; - } - } - if (data.length >= Constants.EF_ZIP64_DSN) { - offset = readUInt64LE(data, Constants.EF_ZIP64_RHO); - if (_centralHeader.offset === Constants.EF_ZIP64_OR_32) { - _centralHeader.offset = offset; - } - } - if (data.length >= Constants.EF_ZIP64_DSN + 4) { - diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN); - if (_centralHeader.diskNumStart === Constants.EF_ZIP64_OR_16) { - _centralHeader.diskNumStart = diskNumStart; - } - } - } - return { - get entryName() { - return decoder.decode(_entryName); - }, - get rawEntryName() { - return _entryName; - }, - set entryName(val) { - _entryName = Utils.toBuffer(val, decoder.encode); - var lastChar = _entryName[_entryName.length - 1]; - _isDirectory = lastChar === 47 || lastChar === 92; - _centralHeader.fileNameLength = _entryName.length; - }, - get efs() { - if (typeof _efs === "function") { - return _efs(this.entryName); - } else { - return _efs; - } - }, - get extra() { - return _extra; - }, - set extra(val) { - _extra = val; - _centralHeader.extraLength = val.length; - parseExtra(val); - }, - get comment() { - return decoder.decode(_comment); - }, - set comment(val) { - _comment = Utils.toBuffer(val, decoder.encode); - _centralHeader.commentLength = _comment.length; - if (_comment.length > 65535) throw Utils.Errors.COMMENT_TOO_LONG(); - }, - get name() { - var n = decoder.decode(_entryName); - return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop(); - }, - get isDirectory() { - return _isDirectory; - }, - getCompressedData: function() { - return compress(false, null); - }, - getCompressedDataAsync: function(callback) { - compress(true, callback); - }, - setData: function(value) { - uncompressedData = Utils.toBuffer(value, Utils.decoder.encode); - if (!_isDirectory && uncompressedData.length) { - _centralHeader.size = uncompressedData.length; - _centralHeader.method = Utils.Constants.DEFLATED; - _centralHeader.crc = Utils.crc32(value); - _centralHeader.changed = true; - } else { - _centralHeader.method = Utils.Constants.STORED; - } - }, - getData: function(pass) { - if (_centralHeader.changed) { - return uncompressedData; - } else { - return decompress(false, null, pass); - } - }, - getDataAsync: function(callback, pass) { - if (_centralHeader.changed) { - callback(uncompressedData); - } else { - decompress(true, callback, pass); - } - }, - set attr(attr) { - _centralHeader.attr = attr; - }, - get attr() { - return _centralHeader.attr; - }, - set header(data) { - _centralHeader.loadFromBinary(data); - }, - get header() { - return _centralHeader; - }, - packCentralHeader: function() { - _centralHeader.flags_efs = this.efs; - _centralHeader.extraLength = _extra.length; - var header = _centralHeader.centralHeaderToBinary(); - var addpos = Utils.Constants.CENHDR; - _entryName.copy(header, addpos); - addpos += _entryName.length; - _extra.copy(header, addpos); - addpos += _centralHeader.extraLength; - _comment.copy(header, addpos); - return header; - }, - packLocalHeader: function() { - let addpos = 0; - _centralHeader.flags_efs = this.efs; - _centralHeader.extraLocalLength = _extralocal.length; - const localHeaderBuf = _centralHeader.localHeaderToBinary(); - const localHeader = Buffer.alloc(localHeaderBuf.length + _entryName.length + _centralHeader.extraLocalLength); - localHeaderBuf.copy(localHeader, addpos); - addpos += localHeaderBuf.length; - _entryName.copy(localHeader, addpos); - addpos += _entryName.length; - _extralocal.copy(localHeader, addpos); - addpos += _extralocal.length; - return localHeader; - }, - toJSON: function() { - const bytes = function(nr) { - return "<" + (nr && nr.length + " bytes buffer" || "null") + ">"; - }; - return { - entryName: this.entryName, - name: this.name, - comment: this.comment, - isDirectory: this.isDirectory, - header: _centralHeader.toJSON(), - compressedData: bytes(input), - data: bytes(uncompressedData) - }; - }, - toString: function() { - return JSON.stringify(this.toJSON(), null, " "); - } - }; - }; - } -}); - -// node_modules/adm-zip/zipFile.js -var require_zipFile = __commonJS({ - "node_modules/adm-zip/zipFile.js"(exports2, module2) { - var ZipEntry = require_zipEntry(); - var Headers = require_headers(); - var Utils = require_util(); - module2.exports = function(inBuffer, options) { - var entryList = [], entryTable = {}, _comment = Buffer.alloc(0), mainHeader = new Headers.MainHeader(), loadedEntries = false; - var password = null; - const temporary = /* @__PURE__ */ new Set(); - const opts = options; - const { noSort, decoder } = opts; - if (inBuffer) { - readMainHeader(opts.readEntries); - } else { - loadedEntries = true; - } - function makeTemporaryFolders() { - const foldersList = /* @__PURE__ */ new Set(); - for (const elem of Object.keys(entryTable)) { - const elements = elem.split("/"); - elements.pop(); - if (!elements.length) continue; - for (let i = 0; i < elements.length; i++) { - const sub = elements.slice(0, i + 1).join("/") + "/"; - foldersList.add(sub); - } - } - for (const elem of foldersList) { - if (!(elem in entryTable)) { - const tempfolder = new ZipEntry(opts); - tempfolder.entryName = elem; - tempfolder.attr = 16; - tempfolder.temporary = true; - entryList.push(tempfolder); - entryTable[tempfolder.entryName] = tempfolder; - temporary.add(tempfolder); - } - } - } - function readEntries() { - loadedEntries = true; - entryTable = {}; - if (mainHeader.diskEntries > (inBuffer.length - mainHeader.offset) / Utils.Constants.CENHDR) { - throw Utils.Errors.DISK_ENTRY_TOO_LARGE(); - } - entryList = new Array(mainHeader.diskEntries); - var index = mainHeader.offset; - for (var i = 0; i < entryList.length; i++) { - var tmp = index, entry = new ZipEntry(opts, inBuffer); - entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR); - entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength); - if (entry.header.extraLength) { - entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength); - } - if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength); - index += entry.header.centralHeaderSize; - entryList[i] = entry; - entryTable[entry.entryName] = entry; - } - temporary.clear(); - makeTemporaryFolders(); - } - function readMainHeader(readNow) { - var i = inBuffer.length - Utils.Constants.ENDHDR, max = Math.max(0, i - 65535), n = max, endStart = inBuffer.length, endOffset = -1, commentEnd = 0; - const trailingSpace = typeof opts.trailingSpace === "boolean" ? opts.trailingSpace : false; - if (trailingSpace) max = 0; - for (i; i >= n; i--) { - if (inBuffer[i] !== 80) continue; - if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) { - endOffset = i; - commentEnd = i; - endStart = i + Utils.Constants.ENDHDR; - n = i - Utils.Constants.END64HDR; - continue; - } - if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) { - n = max; - continue; - } - if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) { - endOffset = i; - endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD; - break; - } - } - if (endOffset == -1) throw Utils.Errors.INVALID_FORMAT(); - mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart)); - if (mainHeader.commentLength) { - _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR); - } - if (readNow) readEntries(); - } - function sortEntries() { - if (entryList.length > 1 && !noSort) { - entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase())); - } - } - return { - /** - * Returns an array of ZipEntry objects existent in the current opened archive - * @return Array - */ - get entries() { - if (!loadedEntries) { - readEntries(); - } - return entryList.filter((e) => !temporary.has(e)); - }, - /** - * Archive comment - * @return {String} - */ - get comment() { - return decoder.decode(_comment); - }, - set comment(val) { - _comment = Utils.toBuffer(val, decoder.encode); - mainHeader.commentLength = _comment.length; - }, - getEntryCount: function() { - if (!loadedEntries) { - return mainHeader.diskEntries; - } - return entryList.length; - }, - forEach: function(callback) { - this.entries.forEach(callback); - }, - /** - * Returns a reference to the entry with the given name or null if entry is inexistent - * - * @param entryName - * @return ZipEntry - */ - getEntry: function(entryName) { - if (!loadedEntries) { - readEntries(); - } - return entryTable[entryName] || null; - }, - /** - * Adds the given entry to the entry list - * - * @param entry - */ - setEntry: function(entry) { - if (!loadedEntries) { - readEntries(); - } - entryList.push(entry); - entryTable[entry.entryName] = entry; - mainHeader.totalEntries = entryList.length; - }, - /** - * Removes the file with the given name from the entry list. - * - * If the entry is a directory, then all nested files and directories will be removed - * @param entryName - * @returns {void} - */ - deleteFile: function(entryName, withsubfolders = true) { - if (!loadedEntries) { - readEntries(); - } - const entry = entryTable[entryName]; - const list = this.getEntryChildren(entry, withsubfolders).map((child) => child.entryName); - list.forEach(this.deleteEntry); - }, - /** - * Removes the entry with the given name from the entry list. - * - * @param {string} entryName - * @returns {void} - */ - deleteEntry: function(entryName) { - if (!loadedEntries) { - readEntries(); - } - const entry = entryTable[entryName]; - const index = entryList.indexOf(entry); - if (index >= 0) { - entryList.splice(index, 1); - delete entryTable[entryName]; - mainHeader.totalEntries = entryList.length; - } - }, - /** - * Iterates and returns all nested files and directories of the given entry - * - * @param entry - * @return Array - */ - getEntryChildren: function(entry, subfolders = true) { - if (!loadedEntries) { - readEntries(); - } - if (typeof entry === "object") { - if (entry.isDirectory && subfolders) { - const list = []; - const name = entry.entryName; - for (const zipEntry of entryList) { - if (zipEntry.entryName.startsWith(name)) { - list.push(zipEntry); - } - } - return list; - } else { - return [entry]; - } - } - return []; - }, - /** - * How many child elements entry has - * - * @param {ZipEntry} entry - * @return {integer} - */ - getChildCount: function(entry) { - if (entry && entry.isDirectory) { - const list = this.getEntryChildren(entry); - return list.includes(entry) ? list.length - 1 : list.length; - } - return 0; - }, - /** - * Returns the zip file - * - * @return Buffer - */ - compressToBuffer: function() { - if (!loadedEntries) { - readEntries(); - } - sortEntries(); - const dataBlock = []; - const headerBlocks = []; - let totalSize = 0; - let dindex = 0; - mainHeader.size = 0; - mainHeader.offset = 0; - totalEntries = 0; - for (const entry of this.entries) { - const compressedData = entry.getCompressedData(); - entry.header.offset = dindex; - const localHeader = entry.packLocalHeader(); - const dataLength = localHeader.length + compressedData.length; - dindex += dataLength; - dataBlock.push(localHeader); - dataBlock.push(compressedData); - const centralHeader = entry.packCentralHeader(); - headerBlocks.push(centralHeader); - mainHeader.size += centralHeader.length; - totalSize += dataLength + centralHeader.length; - totalEntries++; - } - totalSize += mainHeader.mainHeaderSize; - mainHeader.offset = dindex; - mainHeader.totalEntries = totalEntries; - dindex = 0; - const outBuffer = Buffer.alloc(totalSize); - for (const content of dataBlock) { - content.copy(outBuffer, dindex); - dindex += content.length; - } - for (const content of headerBlocks) { - content.copy(outBuffer, dindex); - dindex += content.length; - } - const mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); - } - mh.copy(outBuffer, dindex); - inBuffer = outBuffer; - loadedEntries = false; - return outBuffer; - }, - toAsyncBuffer: function(onSuccess, onFail, onItemStart, onItemEnd) { - try { - if (!loadedEntries) { - readEntries(); - } - sortEntries(); - const dataBlock = []; - const centralHeaders = []; - let totalSize = 0; - let dindex = 0; - let totalEntries2 = 0; - mainHeader.size = 0; - mainHeader.offset = 0; - const compress2Buffer = function(entryLists) { - if (entryLists.length > 0) { - const entry = entryLists.shift(); - const name = entry.entryName + entry.extra.toString(); - if (onItemStart) onItemStart(name); - entry.getCompressedDataAsync(function(compressedData) { - if (onItemEnd) onItemEnd(name); - entry.header.offset = dindex; - const localHeader = entry.packLocalHeader(); - const dataLength = localHeader.length + compressedData.length; - dindex += dataLength; - dataBlock.push(localHeader); - dataBlock.push(compressedData); - const centalHeader = entry.packCentralHeader(); - centralHeaders.push(centalHeader); - mainHeader.size += centalHeader.length; - totalSize += dataLength + centalHeader.length; - totalEntries2++; - compress2Buffer(entryLists); - }); - } else { - totalSize += mainHeader.mainHeaderSize; - mainHeader.offset = dindex; - mainHeader.totalEntries = totalEntries2; - dindex = 0; - const outBuffer = Buffer.alloc(totalSize); - dataBlock.forEach(function(content) { - content.copy(outBuffer, dindex); - dindex += content.length; - }); - centralHeaders.forEach(function(content) { - content.copy(outBuffer, dindex); - dindex += content.length; - }); - const mh = mainHeader.toBinary(); - if (_comment) { - _comment.copy(mh, Utils.Constants.ENDHDR); - } - mh.copy(outBuffer, dindex); - inBuffer = outBuffer; - loadedEntries = false; - onSuccess(outBuffer); - } - }; - compress2Buffer(Array.from(this.entries)); - } catch (e) { - onFail(e); - } - } - }; - }; - } -}); - -// node_modules/adm-zip/adm-zip.js -var require_adm_zip = __commonJS({ - "node_modules/adm-zip/adm-zip.js"(exports2, module2) { - var Utils = require_util(); - var pth = require("path"); - var ZipEntry = require_zipEntry(); - var ZipFile = require_zipFile(); - var get_Bool = (...val) => Utils.findLast(val, (c) => typeof c === "boolean"); - var get_Str = (...val) => Utils.findLast(val, (c) => typeof c === "string"); - var get_Fun = (...val) => Utils.findLast(val, (c) => typeof c === "function"); - var defaultOptions = { - // option "noSort" : if true it disables files sorting - noSort: false, - // read entries during load (initial loading may be slower) - readEntries: false, - // default method is none - method: Utils.Constants.NONE, - // file system - fs: null - }; - module2.exports = function(input, options) { - let inBuffer = null; - const opts = Object.assign(/* @__PURE__ */ Object.create(null), defaultOptions); - if (input && "object" === typeof input) { - if (!(input instanceof Uint8Array)) { - Object.assign(opts, input); - input = opts.input ? opts.input : void 0; - if (opts.input) delete opts.input; - } - if (Buffer.isBuffer(input)) { - inBuffer = input; - opts.method = Utils.Constants.BUFFER; - input = void 0; - } - } - Object.assign(opts, options); - const filetools = new Utils(opts); - if (typeof opts.decoder !== "object" || typeof opts.decoder.encode !== "function" || typeof opts.decoder.decode !== "function") { - opts.decoder = Utils.decoder; - } - if (input && "string" === typeof input) { - if (filetools.fs.existsSync(input)) { - opts.method = Utils.Constants.FILE; - opts.filename = input; - inBuffer = filetools.fs.readFileSync(input); - } else { - throw Utils.Errors.INVALID_FILENAME(); - } - } - const _zip = new ZipFile(inBuffer, opts); - const { canonical, sanitize, zipnamefix } = Utils; - function getEntry(entry) { - if (entry && _zip) { - var item; - if (typeof entry === "string") item = _zip.getEntry(pth.posix.normalize(entry)); - if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName); - if (item) { - return item; - } - } - return null; - } - function fixPath(zipPath) { - const { join: join2, normalize, sep } = pth.posix; - return join2(".", normalize(sep + zipPath.split("\\").join(sep) + sep)); - } - function filenameFilter(filterfn) { - if (filterfn instanceof RegExp) { - return /* @__PURE__ */ function(rx) { - return function(filename) { - return rx.test(filename); - }; - }(filterfn); - } else if ("function" !== typeof filterfn) { - return () => true; - } - return filterfn; - } - const relativePath = (local, entry) => { - let lastChar = entry.slice(-1); - lastChar = lastChar === filetools.sep ? filetools.sep : ""; - return pth.relative(local, entry) + lastChar; - }; - return { - /** - * Extracts the given entry from the archive and returns the content as a Buffer object - * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry - * @param {Buffer|string} [pass] - password - * @return Buffer or Null in case of error - */ - readFile: function(entry, pass) { - var item = getEntry(entry); - return item && item.getData(pass) || null; - }, - /** - * Returns how many child elements has on entry (directories) on files it is always 0 - * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry - * @returns {integer} - */ - childCount: function(entry) { - const item = getEntry(entry); - if (item) { - return _zip.getChildCount(item); - } - }, - /** - * Asynchronous readFile - * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry - * @param {callback} callback - * - * @return Buffer or Null in case of error - */ - readFileAsync: function(entry, callback) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(callback); - } else { - callback(null, "getEntry failed for:" + entry); - } - }, - /** - * Extracts the given entry from the archive and returns the content as plain text in the given encoding - * @param {ZipEntry|string} entry - ZipEntry object or String with the full path of the entry - * @param {string} encoding - Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsText: function(entry, encoding) { - var item = getEntry(entry); - if (item) { - var data = item.getData(); - if (data && data.length) { - return data.toString(encoding || "utf8"); - } - } - return ""; - }, - /** - * Asynchronous readAsText - * @param {ZipEntry|string} entry ZipEntry object or String with the full path of the entry - * @param {callback} callback - * @param {string} [encoding] - Optional. If no encoding is specified utf8 is used - * - * @return String - */ - readAsTextAsync: function(entry, callback, encoding) { - var item = getEntry(entry); - if (item) { - item.getDataAsync(function(data, err) { - if (err) { - callback(data, err); - return; - } - if (data && data.length) { - callback(data.toString(encoding || "utf8")); - } else { - callback(""); - } - }); - } else { - callback(""); - } - }, - /** - * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory - * - * @param {ZipEntry|string} entry - * @returns {void} - */ - deleteFile: function(entry, withsubfolders = true) { - var item = getEntry(entry); - if (item) { - _zip.deleteFile(item.entryName, withsubfolders); - } - }, - /** - * Remove the entry from the file or directory without affecting any nested entries - * - * @param {ZipEntry|string} entry - * @returns {void} - */ - deleteEntry: function(entry) { - var item = getEntry(entry); - if (item) { - _zip.deleteEntry(item.entryName); - } - }, - /** - * Adds a comment to the zip. The zip must be rewritten after adding the comment. - * - * @param {string} comment - */ - addZipComment: function(comment) { - _zip.comment = comment; - }, - /** - * Returns the zip comment - * - * @return String - */ - getZipComment: function() { - return _zip.comment || ""; - }, - /** - * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment - * The comment cannot exceed 65535 characters in length - * - * @param {ZipEntry} entry - * @param {string} comment - */ - addZipEntryComment: function(entry, comment) { - var item = getEntry(entry); - if (item) { - item.comment = comment; - } - }, - /** - * Returns the comment of the specified entry - * - * @param {ZipEntry} entry - * @return String - */ - getZipEntryComment: function(entry) { - var item = getEntry(entry); - if (item) { - return item.comment || ""; - } - return ""; - }, - /** - * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content - * - * @param {ZipEntry} entry - * @param {Buffer} content - */ - updateFile: function(entry, content) { - var item = getEntry(entry); - if (item) { - item.setData(content); - } - }, - /** - * Adds a file from the disk to the archive - * - * @param {string} localPath File to add to zip - * @param {string} [zipPath] Optional path inside the zip - * @param {string} [zipName] Optional name for the file - * @param {string} [comment] Optional file comment - */ - addLocalFile: function(localPath2, zipPath, zipName, comment) { - if (filetools.fs.existsSync(localPath2)) { - zipPath = zipPath ? fixPath(zipPath) : ""; - const p = pth.win32.basename(pth.win32.normalize(localPath2)); - zipPath += zipName ? zipName : p; - const _attr = filetools.fs.statSync(localPath2); - const data = _attr.isFile() ? filetools.fs.readFileSync(localPath2) : Buffer.alloc(0); - if (_attr.isDirectory()) zipPath += filetools.sep; - this.addFile(zipPath, data, comment, _attr); - } else { - throw Utils.Errors.FILE_NOT_FOUND(localPath2); - } - }, - /** - * Callback for showing if everything was done. - * - * @callback doneCallback - * @param {Error} err - Error object - * @param {boolean} done - was request fully completed - */ - /** - * Adds a file from the disk to the archive - * - * @param {(object|string)} options - options object, if it is string it us used as localPath. - * @param {string} options.localPath - Local path to the file. - * @param {string} [options.comment] - Optional file comment. - * @param {string} [options.zipPath] - Optional path inside the zip - * @param {string} [options.zipName] - Optional name for the file - * @param {doneCallback} callback - The callback that handles the response. - */ - addLocalFileAsync: function(options2, callback) { - options2 = typeof options2 === "object" ? options2 : { localPath: options2 }; - const localPath2 = pth.resolve(options2.localPath); - const { comment } = options2; - let { zipPath, zipName } = options2; - const self = this; - filetools.fs.stat(localPath2, function(err, stats) { - if (err) return callback(err, false); - zipPath = zipPath ? fixPath(zipPath) : ""; - const p = pth.win32.basename(pth.win32.normalize(localPath2)); - zipPath += zipName ? zipName : p; - if (stats.isFile()) { - filetools.fs.readFile(localPath2, function(err2, data) { - if (err2) return callback(err2, false); - self.addFile(zipPath, data, comment, stats); - return setImmediate(callback, void 0, true); - }); - } else if (stats.isDirectory()) { - zipPath += filetools.sep; - self.addFile(zipPath, Buffer.alloc(0), comment, stats); - return setImmediate(callback, void 0, true); - } - }); - }, - /** - * Adds a local directory and all its nested files and directories to the archive - * - * @param {string} localPath - local path to the folder - * @param {string} [zipPath] - optional path inside zip - * @param {(RegExp|function)} [filter] - optional RegExp or Function if files match will be included. - */ - addLocalFolder: function(localPath2, zipPath, filter) { - filter = filenameFilter(filter); - zipPath = zipPath ? fixPath(zipPath) : ""; - localPath2 = pth.normalize(localPath2); - if (filetools.fs.existsSync(localPath2)) { - const items = filetools.findFiles(localPath2); - const self = this; - if (items.length) { - for (const filepath of items) { - const p = pth.join(zipPath, relativePath(localPath2, filepath)); - if (filter(p)) { - self.addLocalFile(filepath, pth.dirname(p)); - } - } - } - } else { - throw Utils.Errors.FILE_NOT_FOUND(localPath2); - } - }, - /** - * Asynchronous addLocalFolder - * @param {string} localPath - * @param {callback} callback - * @param {string} [zipPath] optional path inside zip - * @param {RegExp|function} [filter] optional RegExp or Function if files match will - * be included. - */ - addLocalFolderAsync: function(localPath2, callback, zipPath, filter) { - filter = filenameFilter(filter); - zipPath = zipPath ? fixPath(zipPath) : ""; - localPath2 = pth.normalize(localPath2); - var self = this; - filetools.fs.open(localPath2, "r", function(err) { - if (err && err.code === "ENOENT") { - callback(void 0, Utils.Errors.FILE_NOT_FOUND(localPath2)); - } else if (err) { - callback(void 0, err); - } else { - var items = filetools.findFiles(localPath2); - var i = -1; - var next = function() { - i += 1; - if (i < items.length) { - var filepath = items[i]; - var p = relativePath(localPath2, filepath).split("\\").join("/"); - p = p.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, ""); - if (filter(p)) { - filetools.fs.stat(filepath, function(er0, stats) { - if (er0) callback(void 0, er0); - if (stats.isFile()) { - filetools.fs.readFile(filepath, function(er1, data) { - if (er1) { - callback(void 0, er1); - } else { - self.addFile(zipPath + p, data, "", stats); - next(); - } - }); - } else { - self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats); - next(); - } - }); - } else { - process.nextTick(() => { - next(); - }); - } - } else { - callback(true, void 0); - } - }; - next(); - } - }); - }, - /** - * Adds a local directory and all its nested files and directories to the archive - * - * @param {object | string} options - options object, if it is string it us used as localPath. - * @param {string} options.localPath - Local path to the folder. - * @param {string} [options.zipPath] - optional path inside zip. - * @param {RegExp|function} [options.filter] - optional RegExp or Function if files match will be included. - * @param {function|string} [options.namefix] - optional function to help fix filename - * @param {doneCallback} callback - The callback that handles the response. - * - */ - addLocalFolderAsync2: function(options2, callback) { - const self = this; - options2 = typeof options2 === "object" ? options2 : { localPath: options2 }; - localPath = pth.resolve(fixPath(options2.localPath)); - let { zipPath, filter, namefix } = options2; - if (filter instanceof RegExp) { - filter = /* @__PURE__ */ function(rx) { - return function(filename) { - return rx.test(filename); - }; - }(filter); - } else if ("function" !== typeof filter) { - filter = function() { - return true; - }; - } - zipPath = zipPath ? fixPath(zipPath) : ""; - if (namefix == "latin1") { - namefix = (str) => str.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, ""); - } - if (typeof namefix !== "function") namefix = (str) => str; - const relPathFix = (entry) => pth.join(zipPath, namefix(relativePath(localPath, entry))); - const fileNameFix = (entry) => pth.win32.basename(pth.win32.normalize(namefix(entry))); - filetools.fs.open(localPath, "r", function(err) { - if (err && err.code === "ENOENT") { - callback(void 0, Utils.Errors.FILE_NOT_FOUND(localPath)); - } else if (err) { - callback(void 0, err); - } else { - filetools.findFilesAsync(localPath, function(err2, fileEntries) { - if (err2) return callback(err2); - fileEntries = fileEntries.filter((dir) => filter(relPathFix(dir))); - if (!fileEntries.length) callback(void 0, false); - setImmediate( - fileEntries.reverse().reduce(function(next, entry) { - return function(err3, done) { - if (err3 || done === false) return setImmediate(next, err3, false); - self.addLocalFileAsync( - { - localPath: entry, - zipPath: pth.dirname(relPathFix(entry)), - zipName: fileNameFix(entry) - }, - next - ); - }; - }, callback) - ); - }); - } - }); - }, - /** - * Adds a local directory and all its nested files and directories to the archive - * - * @param {string} localPath - path where files will be extracted - * @param {object} props - optional properties - * @param {string} [props.zipPath] - optional path inside zip - * @param {RegExp|function} [props.filter] - optional RegExp or Function if files match will be included. - * @param {function|string} [props.namefix] - optional function to help fix filename - */ - addLocalFolderPromise: function(localPath2, props) { - return new Promise((resolve, reject) => { - this.addLocalFolderAsync2(Object.assign({ localPath: localPath2 }, props), (err, done) => { - if (err) reject(err); - if (done) resolve(this); - }); - }); - }, - /** - * Allows you to create a entry (file or directory) in the zip file. - * If you want to create a directory the entryName must end in / and a null buffer should be provided. - * Comment and attributes are optional - * - * @param {string} entryName - * @param {Buffer | string} content - file content as buffer or utf8 coded string - * @param {string} [comment] - file comment - * @param {number | object} [attr] - number as unix file permissions, object as filesystem Stats object - */ - addFile: function(entryName, content, comment, attr) { - entryName = zipnamefix(entryName); - let entry = getEntry(entryName); - const update = entry != null; - if (!update) { - entry = new ZipEntry(opts); - entry.entryName = entryName; - } - entry.comment = comment || ""; - const isStat = "object" === typeof attr && attr instanceof filetools.fs.Stats; - if (isStat) { - entry.header.time = attr.mtime; - } - var fileattr = entry.isDirectory ? 16 : 0; - let unix = entry.isDirectory ? 16384 : 32768; - if (isStat) { - unix |= 4095 & attr.mode; - } else if ("number" === typeof attr) { - unix |= 4095 & attr; - } else { - unix |= entry.isDirectory ? 493 : 420; - } - fileattr = (fileattr | unix << 16) >>> 0; - entry.attr = fileattr; - entry.setData(content); - if (!update) _zip.setEntry(entry); - return entry; - }, - /** - * Returns an array of ZipEntry objects representing the files and folders inside the archive - * - * @param {string} [password] - * @returns Array - */ - getEntries: function(password) { - _zip.password = password; - return _zip ? _zip.entries : []; - }, - /** - * Returns a ZipEntry object representing the file or folder specified by ``name``. - * - * @param {string} name - * @return ZipEntry - */ - getEntry: function(name) { - return getEntry(name); - }, - getEntryCount: function() { - return _zip.getEntryCount(); - }, - forEach: function(callback) { - return _zip.forEach(callback); - }, - /** - * Extracts the given entry to the given targetPath - * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted - * - * @param {string|ZipEntry} entry - ZipEntry object or String with the full path of the entry - * @param {string} targetPath - Target folder where to write the file - * @param {boolean} [maintainEntryPath=true] - If maintainEntryPath is true and the entry is inside a folder, the entry folder will be created in targetPath as well. Default is TRUE - * @param {boolean} [overwrite=false] - If the file already exists at the target path, the file will be overwriten if this is true. - * @param {boolean} [keepOriginalPermission=false] - The file will be set as the permission from the entry if this is true. - * @param {string} [outFileName] - String If set will override the filename of the extracted file (Only works if the entry is a file) - * - * @return Boolean - */ - extractEntryTo: function(entry, targetPath, maintainEntryPath, overwrite, keepOriginalPermission, outFileName) { - overwrite = get_Bool(false, overwrite); - keepOriginalPermission = get_Bool(false, keepOriginalPermission); - maintainEntryPath = get_Bool(true, maintainEntryPath); - outFileName = get_Str(keepOriginalPermission, outFileName); - var item = getEntry(entry); - if (!item) { - throw Utils.Errors.NO_ENTRY(); - } - var entryName = canonical(item.entryName); - var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName)); - if (item.isDirectory) { - var children = _zip.getEntryChildren(item); - children.forEach(function(child) { - if (child.isDirectory) return; - var content2 = child.getData(); - if (!content2) { - throw Utils.Errors.CANT_EXTRACT_FILE(); - } - var name = canonical(child.entryName); - var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name)); - const fileAttr2 = keepOriginalPermission ? child.header.fileAttr : void 0; - filetools.writeFileTo(childName, content2, overwrite, fileAttr2); - }); - return true; - } - var content = item.getData(_zip.password); - if (!content) throw Utils.Errors.CANT_EXTRACT_FILE(); - if (filetools.fs.existsSync(target) && !overwrite) { - throw Utils.Errors.CANT_OVERRIDE(); - } - const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; - filetools.writeFileTo(target, content, overwrite, fileAttr); - return true; - }, - /** - * Test the archive - * @param {string} [pass] - */ - test: function(pass) { - if (!_zip) { - return false; - } - for (var entry in _zip.entries) { - try { - if (entry.isDirectory) { - continue; - } - var content = _zip.entries[entry].getData(pass); - if (!content) { - return false; - } - } catch (err) { - return false; - } - } - return true; - }, - /** - * Extracts the entire archive to the given location - * - * @param {string} targetPath Target location - * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true. - * Default is FALSE - * @param {string|Buffer} [pass] password - */ - extractAllTo: function(targetPath, overwrite, keepOriginalPermission, pass) { - keepOriginalPermission = get_Bool(false, keepOriginalPermission); - pass = get_Str(keepOriginalPermission, pass); - overwrite = get_Bool(false, overwrite); - if (!_zip) throw Utils.Errors.NO_ZIP(); - _zip.entries.forEach(function(entry) { - var entryName = sanitize(targetPath, canonical(entry.entryName)); - if (entry.isDirectory) { - filetools.makeDir(entryName); - return; - } - var content = entry.getData(pass); - if (!content) { - throw Utils.Errors.CANT_EXTRACT_FILE(); - } - const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; - filetools.writeFileTo(entryName, content, overwrite, fileAttr); - try { - filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time); - } catch (err) { - throw Utils.Errors.CANT_EXTRACT_FILE(); - } - }); - }, - /** - * Asynchronous extractAllTo - * - * @param {string} targetPath Target location - * @param {boolean} [overwrite=false] If the file already exists at the target path, the file will be overwriten if this is true. - * Default is FALSE - * @param {boolean} [keepOriginalPermission=false] The file will be set as the permission from the entry if this is true. - * Default is FALSE - * @param {function} callback The callback will be executed when all entries are extracted successfully or any error is thrown. - */ - extractAllToAsync: function(targetPath, overwrite, keepOriginalPermission, callback) { - callback = get_Fun(overwrite, keepOriginalPermission, callback); - keepOriginalPermission = get_Bool(false, keepOriginalPermission); - overwrite = get_Bool(false, overwrite); - if (!callback) { - return new Promise((resolve, reject) => { - this.extractAllToAsync(targetPath, overwrite, keepOriginalPermission, function(err) { - if (err) { - reject(err); - } else { - resolve(this); - } - }); - }); - } - if (!_zip) { - callback(Utils.Errors.NO_ZIP()); - return; - } - targetPath = pth.resolve(targetPath); - const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName))); - const getError = (msg, file) => new Error(msg + ': "' + file + '"'); - const dirEntries = []; - const fileEntries = []; - _zip.entries.forEach((e) => { - if (e.isDirectory) { - dirEntries.push(e); - } else { - fileEntries.push(e); - } - }); - for (const entry of dirEntries) { - const dirPath = getPath(entry); - const dirAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; - try { - filetools.makeDir(dirPath); - if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr); - filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time); - } catch (er) { - callback(getError("Unable to create folder", dirPath)); - } - } - fileEntries.reverse().reduce(function(next, entry) { - return function(err) { - if (err) { - next(err); - } else { - const entryName = pth.normalize(canonical(entry.entryName)); - const filePath = sanitize(targetPath, entryName); - entry.getDataAsync(function(content, err_1) { - if (err_1) { - next(err_1); - } else if (!content) { - next(Utils.Errors.CANT_EXTRACT_FILE()); - } else { - const fileAttr = keepOriginalPermission ? entry.header.fileAttr : void 0; - filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function(succ) { - if (!succ) { - next(getError("Unable to write file", filePath)); - } - filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function(err_2) { - if (err_2) { - next(getError("Unable to set times", filePath)); - } else { - next(); - } - }); - }); - } - }); - } - }; - }, callback)(); - }, - /** - * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip - * - * @param {string} targetFileName - * @param {function} callback - */ - writeZip: function(targetFileName, callback) { - if (arguments.length === 1) { - if (typeof targetFileName === "function") { - callback = targetFileName; - targetFileName = ""; - } - } - if (!targetFileName && opts.filename) { - targetFileName = opts.filename; - } - if (!targetFileName) return; - var zipData = _zip.compressToBuffer(); - if (zipData) { - var ok = filetools.writeFileTo(targetFileName, zipData, true); - if (typeof callback === "function") callback(!ok ? new Error("failed") : null, ""); - } - }, - /** - * - * @param {string} targetFileName - * @param {object} [props] - * @param {boolean} [props.overwrite=true] If the file already exists at the target path, the file will be overwriten if this is true. - * @param {boolean} [props.perm] The file will be set as the permission from the entry if this is true. - - * @returns {Promise} - */ - writeZipPromise: function(targetFileName, props) { - const { overwrite, perm } = Object.assign({ overwrite: true }, props); - return new Promise((resolve, reject) => { - if (!targetFileName && opts.filename) targetFileName = opts.filename; - if (!targetFileName) reject("ADM-ZIP: ZIP File Name Missing"); - this.toBufferPromise().then((zipData) => { - const ret = (done) => done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file"); - filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret); - }, reject); - }); - }, - /** - * @returns {Promise} A promise to the Buffer. - */ - toBufferPromise: function() { - return new Promise((resolve, reject) => { - _zip.toAsyncBuffer(resolve, reject); - }); - }, - /** - * Returns the content of the entire zip file as a Buffer object - * - * @prop {function} [onSuccess] - * @prop {function} [onFail] - * @prop {function} [onItemStart] - * @prop {function} [onItemEnd] - * @returns {Buffer} - */ - toBuffer: function(onSuccess, onFail, onItemStart, onItemEnd) { - if (typeof onSuccess === "function") { - _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd); - return null; - } - return _zip.compressToBuffer(); - } - }; - }; - } -}); - -// src/extension.ts -var extension_exports = {}; -__export(extension_exports, { - activate: () => activate -}); -module.exports = __toCommonJS(extension_exports); -var vscode2 = __toESM(require("vscode")); - -// src/nfscilTestData.ts -var vscode = __toESM(require("vscode")); -var fs = __toESM(require("fs")); -var https = __toESM(require("https")); -var fpath = __toESM(require("path")); -var url = __toESM(require("url")); -var AdmZip = require_adm_zip(); -var NFSCIL_REPOSITORY = "AlexVCaron/nf-scil"; -var NFSCIL_REF_BRANCH = "test/data"; -var TEST_DATA_REPOSITORY = "scil_test_data/dvc-store/files/md5"; -var NFSCIL_RAW_URL = url.format({ - protocol: "https", - hostname: "raw.githubusercontent.com", - pathname: NFSCIL_REPOSITORY -}); -var TEST_DATA_URL = url.format({ - protocol: "https", - hostname: "scil.usherbrooke.ca", - pathname: TEST_DATA_REPOSITORY -}); -var TestDataProvider = class { - constructor(workspaceRoot, storagePath) { - this.workspaceRoot = workspaceRoot; - this._onDidChangeTreeData = new vscode.EventEmitter(); - this.onDidChangeTreeData = this._onDidChangeTreeData.event; - this.listing = ""; - this.pullOnline = true; - this.workspaceRoot = workspaceRoot; - this.storagePath = storagePath; - this.temp = storagePath; - this.packagePath = fpath.join(this.temp, "packages"); - this.contentPath = fpath.join(this.temp, "unpacked"); - if (workspaceRoot) { - this.listing = fpath.join(workspaceRoot, "tests", "config", "test_data.json"); - } - fs.mkdirSync(storagePath, { recursive: true }); - fs.mkdirSync(this.packagePath, { recursive: true }); - fs.mkdirSync(this.contentPath, { recursive: true }); - } - refresh(all = true) { - if (all) { - this.pullOnline = true; - if (this.workspaceRoot) { - this.listing = fpath.join(this.workspaceRoot, "tests", "config", "test_data.json"); - } - } - this._onDidChangeTreeData.fire(); - } - clear(all = true) { - fs.rmdirSync(this.packagePath, { recursive: true }); - fs.rmdirSync(this.contentPath, { recursive: true }); - fs.mkdirSync(this.packagePath, { recursive: true }); - fs.mkdirSync(this.contentPath, { recursive: true }); - if (all) { - this.listing = ""; - this.pullOnline = false; - } - this.refresh(false); - } - forceDownloadListing() { - if (this.listing || !this.pullOnline) { - this.clear(true); - this.listing = ""; - this.pullOnline = true; - this.refresh(false); - } - } - loadListing(listing) { - if (!fs.existsSync(listing)) { - vscode.window.showErrorMessage("Listing does not exist"); - return; - } - this.listing = listing; - this.refresh(false); - } - getTreeItem(element) { - return element; - } - getChildren(element) { - if (!this.workspaceRoot) { - return Promise.resolve([]); - } - if (element) { - return Promise.resolve(this.getChildrenItems(element)); - } else { - return Promise.resolve(this.getTestDataPackages()); - } - } - downloadFile(source, target) { - if (fs.existsSync(target)) { - return Promise.resolve(); - } - const file = fs.createWriteStream(target); - console.log("Downloading file from: " + source); - return new Promise((resolve, reject) => { - const request = https.get(source, function(response) { - response.on("error", (err) => { - fs.unlink(target, () => { - console.log("Failed to download file: " + err.message); - vscode.window.showErrorMessage("Failed to download file: " + source); - }); - reject(err); - }).pipe(file); - file.on("finish", () => { - file.close(() => { - console.log("Downloaded file to: " + target); - }); - resolve(); - }); - }).on("error", (err) => { - fs.unlink(target, () => { - console.log("Failed to download file: " + err.message); - vscode.window.showErrorMessage("Failed to download file: " + source); - }); - reject(err); - }); - request.end(); - }); - } - loadTestDataListing(listing) { - if (this.workspaceRoot) { - let listingPromise; - if (listing && fs.existsSync(listing)) { - listingPromise = Promise.resolve(listing); - } else if (this.pullOnline) { - console.log("Fetching listing from nf-scil/" + NFSCIL_REF_BRANCH); - const listing2 = fpath.join(this.temp, "test_data.json"); - fs.rmSync(listing2, { force: true }); - listingPromise = new Promise((resolve) => { - this.downloadFile( - fpath.join(NFSCIL_RAW_URL, NFSCIL_REF_BRANCH, "tests", "config", "test_data.json"), - listing2 - ).then(() => { - resolve(listing2); - }); - }); - } else { - return Promise.resolve([]); - } - return listingPromise.then((listing2) => { - const testPackages = []; - const data = JSON.parse(fs.readFileSync(listing2, "utf8")); - for (const key in data) { - const value = data[key]; - testPackages.push( - new TestDataPackage( - key, - vscode.TreeItemCollapsibleState.Collapsed, - "", - value - ) - ); - } - return testPackages; - }); - } - } - getTestDataPackages() { - return Promise.resolve(this.loadTestDataListing(this.listing) || []); - } - unpackArchive(archive) { - const zip = new AdmZip(archive); - const name = fpath.basename(archive, fpath.extname(archive)); - const content = fpath.join(this.contentPath, name); - if (fs.existsSync(content)) { - return Promise.resolve(content); - } - return new Promise((resolve, reject) => { - try { - zip.extractAllTo(this.contentPath, true); - resolve(content); - } catch (err) { - vscode.window.showErrorMessage("Failed to unpack archive: " + name + ".zip"); - reject(err); - } - }); - } - getFolderContents(folder) { - const contents = []; - for (const file of fs.readdirSync(folder)) { - const filePath = fpath.join(folder, file); - const stat = fs.statSync(filePath); - const relPath = fpath.relative(this.contentPath, filePath); - if (stat.isFile()) { - contents.push(new TestDataFile(file, vscode.TreeItemCollapsibleState.None, relPath)); - } else if (stat.isDirectory()) { - contents.push( - new TestDataFolder(file, vscode.TreeItemCollapsibleState.Collapsed, relPath) - ); - } - } - return contents; - } - getTestDataPackageContents(element) { - const location = fpath.join(element.md5sum.substring(0, 2), element.md5sum.substring(2)); - const packagePath = fpath.join(this.packagePath, element.label); - return new Promise((resolve) => { - this.downloadFile(fpath.join(TEST_DATA_URL, location), packagePath).then(() => { - this.unpackArchive(packagePath).then((location2) => { - resolve(this.getFolderContents(location2)); - }); - }); - }); - } - getChildrenItems(element) { - if (element instanceof TestDataPackage) { - return this.getTestDataPackageContents(element); - } else if (element instanceof TestDataFolder) { - return Promise.resolve( - this.getFolderContents(fpath.join(this.contentPath, element.path)) - ); - } - return Promise.resolve([]); - } - openInEditor(element) { - Promise.resolve(vscode.commands.executeCommand( - "vscode.open", - vscode.Uri.file(fpath.join(this.contentPath, element.path)) - )); - } - saveAs(element) { - if (this.workspaceRoot) { - vscode.window.showSaveDialog({ - defaultUri: vscode.Uri.file(this.workspaceRoot), - filters: { - "All files": ["*"] - } - }).then((uri) => { - if (uri) { - fs.copyFileSync(fpath.join(this.contentPath, element.path), uri.fsPath); - } - }); - } - } -}; -var TestDataItem = class extends vscode.TreeItem { - constructor(label, collapsibleState, path, command) { - super(label, collapsibleState); - this.label = label; - this.collapsibleState = collapsibleState; - this.path = path; - this.command = command; - this.contextValue = "testDataItem"; - this.path = path; - } -}; -var TestDataPackage = class extends TestDataItem { - constructor(label, collapsibleState, path, md5sum, command) { - super(label, collapsibleState, path, command); - this.label = label; - this.collapsibleState = collapsibleState; - this.path = path; - this.md5sum = md5sum; - this.command = command; - this.iconPath = "$(archive)"; - this.md5sum = md5sum; - } -}; -var TestDataFolder = class extends TestDataItem { - constructor() { - super(...arguments); - this.iconPath = "$(file-directory)"; - } -}; -var TestDataFile = class extends TestDataItem { - constructor() { - super(...arguments); - this.contextValue = "testDataFile"; - this.iconPath = "$(file)"; - } -}; - -// src/extension.ts -function activate(context) { - const rootPath = vscode2.workspace.workspaceFolders && vscode2.workspace.workspaceFolders.length > 0 ? vscode2.workspace.workspaceFolders[0].uri.fsPath : void 0; - const storagePath = context.globalStorageUri.fsPath; - const testDataProvider = new TestDataProvider(rootPath, storagePath); - vscode2.window.registerTreeDataProvider("nfscilTestData", testDataProvider); - vscode2.commands.registerCommand( - "nfscilTestData.refreshEntry", - () => testDataProvider.refresh() - ); - vscode2.commands.registerCommand( - "nfscilTestData.clearCache", - () => testDataProvider.clear(false) - ); - vscode2.commands.registerCommand("nfscilTestData.loadListing", () => { - vscode2.window.showOpenDialog({ - canSelectFiles: true, - canSelectFolders: false, - canSelectMany: false, - openLabel: "Load package listing", - filters: { - "JSON files": ["json"] - }, - defaultUri: rootPath ? vscode2.Uri.file(rootPath) : void 0 - }).then((uri) => { - if (uri && uri[0]) { - testDataProvider.loadListing(uri[0].fsPath); - } else { - vscode2.window.showErrorMessage("No file selected"); - } - }); - }); - vscode2.commands.registerCommand( - "nfscilTestData.forceDownloadListing", - () => testDataProvider.forceDownloadListing() - ); - vscode2.commands.registerCommand( - "nfscilTestData.openInEditor", - (element) => testDataProvider.openInEditor(element) - ); - vscode2.commands.registerCommand( - "nfscilTestData.saveAs", - (element) => testDataProvider.saveAs(element) - ); -} -// Annotate the CommonJS export names for ESM import in node: -0 && (module.exports = { - activate -}); -//# sourceMappingURL=extension.js.map diff --git a/nf-scil-extensions/test-data-treeview/dist/extension.js.map b/nf-scil-extensions/test-data-treeview/dist/extension.js.map deleted file mode 100644 index 5d0bb75f..00000000 --- a/nf-scil-extensions/test-data-treeview/dist/extension.js.map +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": 3, - "sources": ["../node_modules/adm-zip/util/constants.js", "../node_modules/adm-zip/util/errors.js", "../node_modules/adm-zip/util/utils.js", "../node_modules/adm-zip/util/fattr.js", "../node_modules/adm-zip/util/decoder.js", "../node_modules/adm-zip/util/index.js", "../node_modules/adm-zip/headers/entryHeader.js", "../node_modules/adm-zip/headers/mainHeader.js", "../node_modules/adm-zip/headers/index.js", "../node_modules/adm-zip/methods/deflater.js", "../node_modules/adm-zip/methods/inflater.js", "../node_modules/adm-zip/methods/zipcrypto.js", "../node_modules/adm-zip/methods/index.js", "../node_modules/adm-zip/zipEntry.js", "../node_modules/adm-zip/zipFile.js", "../node_modules/adm-zip/adm-zip.js", "../src/extension.ts", "../src/nfscilTestData.ts"], - "mappings": "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", - "names": ["exports", "module", "exports", "exports", "module", "mkdirSync", "fpath", "err", "fd", "path", "exports", "module", "fs", "exports", "module", "exports", "module", "exports", "module", "exports", "module", "exports", "exports", "module", "exports", "module", "exports", "module", "exports", "exports", "module", "exports", "module", "totalEntries", "exports", "module", "join", "localPath", "options", "err", "content", "fileAttr", "vscode", "listing", "location"] -} From 7648a2f9cc14e4a34e14ed484c25efe25f9275a8 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Fri, 30 Aug 2024 15:29:13 +0000 Subject: [PATCH 07/24] update extension package and create extension publishing workflow --- .github/workflows/checks.yml | 16 ++++++ .github/workflows/publish_extension.yml | 49 +++++++++++++++++++ .../extension-package/package.json | 12 ++++- .../test-data-treeview/.vscodeignore | 19 +++---- 4 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 .github/workflows/publish_extension.yml diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 29b61745..58c1cef9 100755 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -50,6 +50,22 @@ jobs: - name: Run ECLint check run: editorconfig-checker -exclude README.md $(git ls-files | grep -v test) + publish-test-data-treeview-extension: + # Runs only when the event is a push to main + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + uses: ./.github/workflows/publish_extension.yml + with: + name: "test-data-treeview" + secrets: inherit + + publish-extension-package: + # Runs only when the event is a push to main + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + uses: ./.github/workflows/publish_extension.yml + with: + name: "extension-package" + secrets: inherit + nf-test-changes: name: compute - changes runs-on: ubuntu-latest diff --git a/.github/workflows/publish_extension.yml b/.github/workflows/publish_extension.yml new file mode 100644 index 00000000..bff73c24 --- /dev/null +++ b/.github/workflows/publish_extension.yml @@ -0,0 +1,49 @@ +name: Deploy Extension + +on: + workflow_dispatch: + inputs: + name: + description: "Name of the extension to deploy" + required: true + type: string + workflow_call: + inputs: + name: + description: "Name of the extension to deploy" + required: true + type: string + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: | + nf-scil-extensions/${{ inputs.name }} + sparse-checkout-cone-mode: false + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "npm" + + - name: npm clean install + working-directory: nf-scil-extensions/${{ inputs.name }} + run: npm ci + + # - name: Publish to Open VSX Registry + # uses: HaaLeo/publish-vscode-extension@v1 + # with: + # packagePath: nf-scil-extensions/${{ inputs.name }} + # pat: ${{ secrets.OPEN_VSX_TOKEN }} + # skipDuplicate: true + + - name: Publish to Visual Studio Marketplace + uses: HaaLeo/publish-vscode-extension@v1 + with: + packagePath: nf-scil-extensions/${{ inputs.name }} + pat: ${{ secrets.VSCE_TOKEN }} + registryUrl: https://marketplace.visualstudio.com + skipDuplicate: true diff --git a/nf-scil-extensions/extension-package/package.json b/nf-scil-extensions/extension-package/package.json index 3b190d55..c8feff13 100755 --- a/nf-scil-extensions/extension-package/package.json +++ b/nf-scil-extensions/extension-package/package.json @@ -7,7 +7,7 @@ "url": "https://github.com/scilus/nf-scil.git" }, "icon": "icon.avif", - "version": "0.0.2", + "version": "0.0.3", "publisher": "AlexVCaron", "engines": { "vscode": "^1.84.0" @@ -46,6 +46,14 @@ "nf-core.nf-core-extensionpack", "twxs.cmake", "yahyabatulu.vscode-markdown-alert", - "yzhang.markdown-all-in-one" + "yzhang.markdown-all-in-one", + "onnovalkering.vscode-singularity", + "nextflow.nextflow", + "KorbinianEckstein.niivue", + "mutantdino.resourcemonitor", + "christian-kohler.npm-intellisense", + "dbaeumer.vscode-eslint", + "connor4312.esbuild-problem-matchers", + "ms-vscode.extension-test-runner" ] } diff --git a/nf-scil-extensions/test-data-treeview/.vscodeignore b/nf-scil-extensions/test-data-treeview/.vscodeignore index b73723ab..db4b55ab 100644 --- a/nf-scil-extensions/test-data-treeview/.vscodeignore +++ b/nf-scil-extensions/test-data-treeview/.vscodeignore @@ -1,14 +1,7 @@ -.vscode/** -.vscode-test/** -out/** -node_modules/** -src/** -.gitignore -.yarnrc +.vscode +node_modules +out/ +src/ +tsconfig.json +webpack.config.js esbuild.js -vsc-extension-quickstart.md -**/tsconfig.json -**/.eslintrc.json -**/*.map -**/*.ts -**/.vscode-test.* From 606df3100d440ecd5ba03f30911c7cedec65d988 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Fri, 30 Aug 2024 15:46:18 +0000 Subject: [PATCH 08/24] trigger test suite --- .github/workflows/publish_extension.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish_extension.yml b/.github/workflows/publish_extension.yml index bff73c24..c23df601 100644 --- a/.github/workflows/publish_extension.yml +++ b/.github/workflows/publish_extension.yml @@ -1,4 +1,4 @@ -name: Deploy Extension +name: Publish Extension on: workflow_dispatch: From fa6d41e02658dc07fe3afd1d40c13b5321c91e89 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Fri, 30 Aug 2024 15:49:16 +0000 Subject: [PATCH 09/24] run prettier --- .../test-data-treeview/.eslintrc.json | 14 +- .../test-data-treeview/.vscode-test.mjs | 4 +- .../test-data-treeview/CHANGELOG.md | 2 +- .../test-data-treeview/README.md | 1 - .../test-data-treeview/esbuild.js | 82 +++++---- .../test-data-treeview/src/extension.ts | 68 ++++---- .../test-data-treeview/src/nfscilTestData.ts | 156 ++++++++---------- .../src/test/extension.test.ts | 16 +- .../test-data-treeview/tsconfig.json | 23 ++- .../vsc-extension-quickstart.md | 50 +++--- 10 files changed, 192 insertions(+), 224 deletions(-) diff --git a/nf-scil-extensions/test-data-treeview/.eslintrc.json b/nf-scil-extensions/test-data-treeview/.eslintrc.json index 86c86f37..10565a2e 100644 --- a/nf-scil-extensions/test-data-treeview/.eslintrc.json +++ b/nf-scil-extensions/test-data-treeview/.eslintrc.json @@ -5,15 +5,13 @@ "ecmaVersion": 6, "sourceType": "module" }, - "plugins": [ - "@typescript-eslint" - ], + "plugins": ["@typescript-eslint"], "rules": { "@typescript-eslint/naming-convention": [ "warn", { "selector": "import", - "format": [ "camelCase", "PascalCase" ] + "format": ["camelCase", "PascalCase"] } ], "@typescript-eslint/semi": "warn", @@ -22,9 +20,5 @@ "no-throw-literal": "warn", "semi": "off" }, - "ignorePatterns": [ - "out", - "dist", - "**/*.d.ts" - ] -} \ No newline at end of file + "ignorePatterns": ["out", "dist", "**/*.d.ts"] +} diff --git a/nf-scil-extensions/test-data-treeview/.vscode-test.mjs b/nf-scil-extensions/test-data-treeview/.vscode-test.mjs index b62ba25f..36a79aef 100644 --- a/nf-scil-extensions/test-data-treeview/.vscode-test.mjs +++ b/nf-scil-extensions/test-data-treeview/.vscode-test.mjs @@ -1,5 +1,5 @@ -import { defineConfig } from '@vscode/test-cli'; +import { defineConfig } from "@vscode/test-cli"; export default defineConfig({ - files: 'out/test/**/*.test.js', + files: "out/test/**/*.test.js", }); diff --git a/nf-scil-extensions/test-data-treeview/CHANGELOG.md b/nf-scil-extensions/test-data-treeview/CHANGELOG.md index c21eaea9..df400792 100644 --- a/nf-scil-extensions/test-data-treeview/CHANGELOG.md +++ b/nf-scil-extensions/test-data-treeview/CHANGELOG.md @@ -6,4 +6,4 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ## [Unreleased] -- Initial release \ No newline at end of file +- Initial release diff --git a/nf-scil-extensions/test-data-treeview/README.md b/nf-scil-extensions/test-data-treeview/README.md index d2dc7cee..d6a9faa9 100644 --- a/nf-scil-extensions/test-data-treeview/README.md +++ b/nf-scil-extensions/test-data-treeview/README.md @@ -7,4 +7,3 @@ This extension is designed to provide a treeview of test data files for **nf-sci No release notes yet. --- - diff --git a/nf-scil-extensions/test-data-treeview/esbuild.js b/nf-scil-extensions/test-data-treeview/esbuild.js index cc2be598..95ab0413 100644 --- a/nf-scil-extensions/test-data-treeview/esbuild.js +++ b/nf-scil-extensions/test-data-treeview/esbuild.js @@ -1,56 +1,54 @@ const esbuild = require("esbuild"); -const production = process.argv.includes('--production'); -const watch = process.argv.includes('--watch'); +const production = process.argv.includes("--production"); +const watch = process.argv.includes("--watch"); /** * @type {import('esbuild').Plugin} */ const esbuildProblemMatcherPlugin = { - name: 'esbuild-problem-matcher', + name: "esbuild-problem-matcher", - setup(build) { - build.onStart(() => { - console.log('[watch] build started'); - }); - build.onEnd((result) => { - result.errors.forEach(({ text, location }) => { - console.error(`✘ [ERROR] ${text}`); - console.error(` ${location.file}:${location.line}:${location.column}:`); - }); - console.log('[watch] build finished'); - }); - }, + setup(build) { + build.onStart(() => { + console.log("[watch] build started"); + }); + build.onEnd((result) => { + result.errors.forEach(({ text, location }) => { + console.error(`✘ [ERROR] ${text}`); + console.error(` ${location.file}:${location.line}:${location.column}:`); + }); + console.log("[watch] build finished"); + }); + }, }; async function main() { - const ctx = await esbuild.context({ - entryPoints: [ - 'src/extension.ts' - ], - bundle: true, - format: 'cjs', - minify: production, - sourcemap: !production, - sourcesContent: false, - platform: 'node', - outfile: 'dist/extension.js', - external: ['vscode'], - logLevel: 'silent', - plugins: [ - /* add to the end of plugins array */ - esbuildProblemMatcherPlugin, - ], - }); - if (watch) { - await ctx.watch(); - } else { - await ctx.rebuild(); - await ctx.dispose(); - } + const ctx = await esbuild.context({ + entryPoints: ["src/extension.ts"], + bundle: true, + format: "cjs", + minify: production, + sourcemap: !production, + sourcesContent: false, + platform: "node", + outfile: "dist/extension.js", + external: ["vscode"], + logLevel: "silent", + plugins: [ + /* add to the end of plugins array */ + esbuildProblemMatcherPlugin, + ], + }); + if (watch) { + await ctx.watch(); + } else { + await ctx.rebuild(); + await ctx.dispose(); + } } -main().catch(e => { - console.error(e); - process.exit(1); +main().catch((e) => { + console.error(e); + process.exit(1); }); diff --git a/nf-scil-extensions/test-data-treeview/src/extension.ts b/nf-scil-extensions/test-data-treeview/src/extension.ts index 8e08cbe8..307b36c8 100644 --- a/nf-scil-extensions/test-data-treeview/src/extension.ts +++ b/nf-scil-extensions/test-data-treeview/src/extension.ts @@ -1,8 +1,8 @@ -'use strict'; +"use strict"; -import * as vscode from 'vscode'; +import * as vscode from "vscode"; -import { TestDataProvider } from './nfscilTestData'; +import { TestDataProvider } from "./nfscilTestData"; export function activate(context: vscode.ExtensionContext) { const rootPath = @@ -14,42 +14,34 @@ export function activate(context: vscode.ExtensionContext) { const testDataProvider = new TestDataProvider(rootPath, storagePath); - vscode.window.registerTreeDataProvider('nfscilTestData', testDataProvider); - - vscode.commands.registerCommand('nfscilTestData.refreshEntry', () => - testDataProvider.refresh() - ); - vscode.commands.registerCommand('nfscilTestData.clearCache', () => - testDataProvider.clear(false) - ); - vscode.commands.registerCommand('nfscilTestData.loadListing', () => { - vscode.window.showOpenDialog({ - canSelectFiles: true, - canSelectFolders: false, - canSelectMany: false, - openLabel: 'Load package listing', - filters: { - 'JSON files': ['json'] - }, - defaultUri: rootPath ? vscode.Uri.file(rootPath) : undefined - }).then((uri) => { - if (uri && uri[0]) { - testDataProvider.loadListing(uri[0].fsPath); - } - else { - vscode.window.showErrorMessage('No file selected'); - } - }); + vscode.window.registerTreeDataProvider("nfscilTestData", testDataProvider); + + vscode.commands.registerCommand("nfscilTestData.refreshEntry", () => testDataProvider.refresh()); + vscode.commands.registerCommand("nfscilTestData.clearCache", () => testDataProvider.clear(false)); + vscode.commands.registerCommand("nfscilTestData.loadListing", () => { + vscode.window + .showOpenDialog({ + canSelectFiles: true, + canSelectFolders: false, + canSelectMany: false, + openLabel: "Load package listing", + filters: { + "JSON files": ["json"], + }, + defaultUri: rootPath ? vscode.Uri.file(rootPath) : undefined, + }) + .then((uri) => { + if (uri && uri[0]) { + testDataProvider.loadListing(uri[0].fsPath); + } else { + vscode.window.showErrorMessage("No file selected"); + } + }); }); - vscode.commands.registerCommand('nfscilTestData.forceDownloadListing', () => - testDataProvider.forceDownloadListing() + vscode.commands.registerCommand("nfscilTestData.forceDownloadListing", () => + testDataProvider.forceDownloadListing(), ); - vscode.commands.registerCommand('nfscilTestData.openInEditor', (element) => - testDataProvider.openInEditor(element) - ); - vscode.commands.registerCommand('nfscilTestData.saveAs', (element) => - testDataProvider.saveAs(element) - ); + vscode.commands.registerCommand("nfscilTestData.openInEditor", (element) => testDataProvider.openInEditor(element)); + vscode.commands.registerCommand("nfscilTestData.saveAs", (element) => testDataProvider.saveAs(element)); } - diff --git a/nf-scil-extensions/test-data-treeview/src/nfscilTestData.ts b/nf-scil-extensions/test-data-treeview/src/nfscilTestData.ts index dcbdca39..8a23e630 100644 --- a/nf-scil-extensions/test-data-treeview/src/nfscilTestData.ts +++ b/nf-scil-extensions/test-data-treeview/src/nfscilTestData.ts @@ -1,10 +1,9 @@ -import * as vscode from 'vscode'; -import * as fs from 'fs'; -import * as https from 'https'; -import * as fpath from 'path'; -import * as url from 'url'; -import AdmZip = require('adm-zip'); - +import * as vscode from "vscode"; +import * as fs from "fs"; +import * as https from "https"; +import * as fpath from "path"; +import * as url from "url"; +import AdmZip = require("adm-zip"); const NFSCIL_REPOSITORY = "AlexVCaron/nf-scil"; const NFSCIL_REF_BRANCH = "test/data"; @@ -13,18 +12,18 @@ const TEST_DATA_REPOSITORY = "scil_test_data/dvc-store/files/md5"; const NFSCIL_RAW_URL = url.format({ protocol: "https", hostname: "raw.githubusercontent.com", - pathname: NFSCIL_REPOSITORY + pathname: NFSCIL_REPOSITORY, }); const TEST_DATA_URL = url.format({ protocol: "https", hostname: "scil.usherbrooke.ca", - pathname: TEST_DATA_REPOSITORY + pathname: TEST_DATA_REPOSITORY, }); - export class TestDataProvider implements vscode.TreeDataProvider { - - private _onDidChangeTreeData: vscode.EventEmitter = new vscode.EventEmitter(); + private _onDidChangeTreeData: vscode.EventEmitter = new vscode.EventEmitter< + TestDataItem | undefined | void + >(); readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event; temp: string; @@ -35,7 +34,10 @@ export class TestDataProvider implements vscode.TreeDataProvider { listing: string = ""; pullOnline: boolean = true; - constructor(private workspaceRoot: string | undefined, storagePath: string) { + constructor( + private workspaceRoot: string | undefined, + storagePath: string, + ) { // Get temporary directory to store transitory files this.workspaceRoot = workspaceRoot; this.storagePath = storagePath; @@ -89,7 +91,7 @@ export class TestDataProvider implements vscode.TreeDataProvider { loadListing(listing: string) { if (!fs.existsSync(listing)) { - vscode.window.showErrorMessage('Listing does not exist'); + vscode.window.showErrorMessage("Listing does not exist"); return; } @@ -119,72 +121,67 @@ export class TestDataProvider implements vscode.TreeDataProvider { } const file = fs.createWriteStream(target); - console.log('Downloading file from: ' + source); + console.log("Downloading file from: " + source); return new Promise((resolve, reject) => { - const request = https.get(source, function(response) { - response.on('error', (err) => { + const request = https + .get(source, function (response) { + response + .on("error", (err) => { + fs.unlink(target, () => { + console.log("Failed to download file: " + err.message); + vscode.window.showErrorMessage("Failed to download file: " + source); + }); + reject(err); + }) + .pipe(file); + file.on("finish", () => { + file.close(() => { + console.log("Downloaded file to: " + target); + }); + resolve(); + }); + }) + .on("error", (err) => { fs.unlink(target, () => { - console.log('Failed to download file: ' + err.message); - vscode.window.showErrorMessage('Failed to download file: ' + source); + console.log("Failed to download file: " + err.message); + vscode.window.showErrorMessage("Failed to download file: " + source); }); reject(err); - }).pipe(file); - file.on('finish', () => { - file.close(() => { - console.log('Downloaded file to: ' + target); - }); - resolve(); - }); - }).on('error', (err) => { - fs.unlink(target, () => { - console.log('Failed to download file: ' + err.message); - vscode.window.showErrorMessage('Failed to download file: ' + source); }); - reject(err); - }); request.end(); }); } loadTestDataListing(listing?: string): Thenable | void { if (this.workspaceRoot) { - let listingPromise : Promise; + let listingPromise: Promise; if (listing && fs.existsSync(listing)) { listingPromise = Promise.resolve(listing); - } - else if (this.pullOnline) { - console.log('Fetching listing from nf-scil/' + NFSCIL_REF_BRANCH); + } else if (this.pullOnline) { + console.log("Fetching listing from nf-scil/" + NFSCIL_REF_BRANCH); const listing = fpath.join(this.temp, "test_data.json"); fs.rmSync(listing, { force: true }); - listingPromise = new Promise(resolve => { + listingPromise = new Promise((resolve) => { this.downloadFile( fpath.join(NFSCIL_RAW_URL, NFSCIL_REF_BRANCH, "tests", "config", "test_data.json"), - listing + listing, ).then(() => { resolve(listing); }); }); - } - else { + } else { return Promise.resolve([]); } - return listingPromise.then(listing => { + return listingPromise.then((listing) => { const testPackages: TestDataPackage[] = []; - const data = JSON.parse(fs.readFileSync(listing, 'utf8')); + const data = JSON.parse(fs.readFileSync(listing, "utf8")); for (const key in data) { const value = data[key]; - testPackages.push( - new TestDataPackage( - key, - vscode.TreeItemCollapsibleState.Collapsed, - "", - value - ) - ); + testPackages.push(new TestDataPackage(key, vscode.TreeItemCollapsibleState.Collapsed, "", value)); } return testPackages; @@ -209,9 +206,8 @@ export class TestDataProvider implements vscode.TreeDataProvider { try { zip.extractAllTo(this.contentPath, true); resolve(content); - } - catch (err) { - vscode.window.showErrorMessage('Failed to unpack archive: ' + name + '.zip'); + } catch (err) { + vscode.window.showErrorMessage("Failed to unpack archive: " + name + ".zip"); reject(err); } }); @@ -227,9 +223,7 @@ export class TestDataProvider implements vscode.TreeDataProvider { if (stat.isFile()) { contents.push(new TestDataFile(file, vscode.TreeItemCollapsibleState.None, relPath)); } else if (stat.isDirectory()) { - contents.push( - new TestDataFolder(file, vscode.TreeItemCollapsibleState.Collapsed, relPath) - ); + contents.push(new TestDataFolder(file, vscode.TreeItemCollapsibleState.Collapsed, relPath)); } } @@ -240,48 +234,45 @@ export class TestDataProvider implements vscode.TreeDataProvider { const location = fpath.join(element.md5sum.substring(0, 2), element.md5sum.substring(2)); const packagePath = fpath.join(this.packagePath, element.label); - return new Promise(resolve => { + return new Promise((resolve) => { this.downloadFile(fpath.join(TEST_DATA_URL, location), packagePath).then(() => { this.unpackArchive(packagePath).then((location) => { resolve(this.getFolderContents(location)); }); }); }); - } getChildrenItems(element: TestDataItem): Thenable { if (element instanceof TestDataPackage) { return this.getTestDataPackageContents(element); - } - else if (element instanceof TestDataFolder) { - return Promise.resolve( - this.getFolderContents(fpath.join(this.contentPath, element.path)) - ); + } else if (element instanceof TestDataFolder) { + return Promise.resolve(this.getFolderContents(fpath.join(this.contentPath, element.path))); } return Promise.resolve([]); } openInEditor(element: TestDataItem): void { - Promise.resolve(vscode.commands.executeCommand( - 'vscode.open', - vscode.Uri.file(fpath.join(this.contentPath, element.path)) - )); + Promise.resolve( + vscode.commands.executeCommand("vscode.open", vscode.Uri.file(fpath.join(this.contentPath, element.path))), + ); } saveAs(element: TestDataItem): void { if (this.workspaceRoot) { - vscode.window.showSaveDialog({ - defaultUri: vscode.Uri.file(this.workspaceRoot), - filters: { - 'All files': ['*'] - } - }).then((uri) => { - if (uri) { - fs.copyFileSync(fpath.join(this.contentPath, element.path), uri.fsPath); - } - }); + vscode.window + .showSaveDialog({ + defaultUri: vscode.Uri.file(this.workspaceRoot), + filters: { + "All files": ["*"], + }, + }) + .then((uri) => { + if (uri) { + fs.copyFileSync(fpath.join(this.contentPath, element.path), uri.fsPath); + } + }); } } } @@ -291,25 +282,24 @@ export abstract class TestDataItem extends vscode.TreeItem { public readonly label: string, public readonly collapsibleState: vscode.TreeItemCollapsibleState, public readonly path: string, - public readonly command?: vscode.Command + public readonly command?: vscode.Command, ) { super(label, collapsibleState); this.path = path; } - abstract iconPath: { light: string; dark: string; } | string; + abstract iconPath: { light: string; dark: string } | string; - contextValue = 'testDataItem'; + contextValue = "testDataItem"; } - export class TestDataPackage extends TestDataItem { constructor( public readonly label: string, public readonly collapsibleState: vscode.TreeItemCollapsibleState, public readonly path: string, public readonly md5sum: string, - public readonly command?: vscode.Command + public readonly command?: vscode.Command, ) { super(label, collapsibleState, path, command); this.md5sum = md5sum; @@ -323,6 +313,6 @@ export class TestDataFolder extends TestDataItem { } export class TestDataFile extends TestDataItem { - contextValue = 'testDataFile'; + contextValue = "testDataFile"; iconPath = "$(file)"; } diff --git a/nf-scil-extensions/test-data-treeview/src/test/extension.test.ts b/nf-scil-extensions/test-data-treeview/src/test/extension.test.ts index 4ca0ab41..8bcfbcdb 100644 --- a/nf-scil-extensions/test-data-treeview/src/test/extension.test.ts +++ b/nf-scil-extensions/test-data-treeview/src/test/extension.test.ts @@ -1,15 +1,15 @@ -import * as assert from 'assert'; +import * as assert from "assert"; // You can import and use all API from the 'vscode' module // as well as import your extension to test it -import * as vscode from 'vscode'; +import * as vscode from "vscode"; // import * as myExtension from '../../extension'; -suite('Extension Test Suite', () => { - vscode.window.showInformationMessage('Start all tests.'); +suite("Extension Test Suite", () => { + vscode.window.showInformationMessage("Start all tests."); - test('Sample test', () => { - assert.strictEqual(-1, [1, 2, 3].indexOf(5)); - assert.strictEqual(-1, [1, 2, 3].indexOf(0)); - }); + test("Sample test", () => { + assert.strictEqual(-1, [1, 2, 3].indexOf(5)); + assert.strictEqual(-1, [1, 2, 3].indexOf(0)); + }); }); diff --git a/nf-scil-extensions/test-data-treeview/tsconfig.json b/nf-scil-extensions/test-data-treeview/tsconfig.json index e5fada0f..081d57c6 100644 --- a/nf-scil-extensions/test-data-treeview/tsconfig.json +++ b/nf-scil-extensions/test-data-treeview/tsconfig.json @@ -1,15 +1,12 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "es2020", - "lib": ["es2020"], - "outDir": "out", - "sourceMap": true, - "rootDir": "src", - "strict": true - }, - "exclude": [ - "node_modules", - ".vscode-test" - ] + "compilerOptions": { + "module": "commonjs", + "target": "es2020", + "lib": ["es2020"], + "outDir": "out", + "sourceMap": true, + "rootDir": "src", + "strict": true + }, + "exclude": ["node_modules", ".vscode-test"] } diff --git a/nf-scil-extensions/test-data-treeview/vsc-extension-quickstart.md b/nf-scil-extensions/test-data-treeview/vsc-extension-quickstart.md index f518bb84..e2d793c2 100644 --- a/nf-scil-extensions/test-data-treeview/vsc-extension-quickstart.md +++ b/nf-scil-extensions/test-data-treeview/vsc-extension-quickstart.md @@ -2,47 +2,45 @@ ## What's in the folder -* This folder contains all of the files necessary for your extension. -* `package.json` - this is the manifest file in which you declare your extension and command. - * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. -* `src/extension.ts` - this is the main file where you will provide the implementation of your command. - * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. - * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. +- This folder contains all of the files necessary for your extension. +- `package.json` - this is the manifest file in which you declare your extension and command. + - The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. +- `src/extension.ts` - this is the main file where you will provide the implementation of your command. + - The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. + - We pass the function containing the implementation of the command as the second parameter to `registerCommand`. ## Setup -* install the recommended extensions (amodio.tsl-problem-matcher, ms-vscode.extension-test-runner, and dbaeumer.vscode-eslint) - +- install the recommended extensions (amodio.tsl-problem-matcher, ms-vscode.extension-test-runner, and dbaeumer.vscode-eslint) ## Get up and running straight away -* Press `F5` to open a new window with your extension loaded. -* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. -* Set breakpoints in your code inside `src/extension.ts` to debug your extension. -* Find output from your extension in the debug console. +- Press `F5` to open a new window with your extension loaded. +- Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. +- Set breakpoints in your code inside `src/extension.ts` to debug your extension. +- Find output from your extension in the debug console. ## Make changes -* You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. -* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. - +- You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. +- You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. ## Explore the API -* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. +- You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. ## Run tests -* Install the [Extension Test Runner](https://marketplace.visualstudio.com/items?itemName=ms-vscode.extension-test-runner) -* Run the "watch" task via the **Tasks: Run Task** command. Make sure this is running, or tests might not be discovered. -* Open the Testing view from the activity bar and click the Run Test" button, or use the hotkey `Ctrl/Cmd + ; A` -* See the output of the test result in the Test Results view. -* Make changes to `src/test/extension.test.ts` or create new test files inside the `test` folder. - * The provided test runner will only consider files matching the name pattern `**.test.ts`. - * You can create folders inside the `test` folder to structure your tests any way you want. +- Install the [Extension Test Runner](https://marketplace.visualstudio.com/items?itemName=ms-vscode.extension-test-runner) +- Run the "watch" task via the **Tasks: Run Task** command. Make sure this is running, or tests might not be discovered. +- Open the Testing view from the activity bar and click the Run Test" button, or use the hotkey `Ctrl/Cmd + ; A` +- See the output of the test result in the Test Results view. +- Make changes to `src/test/extension.test.ts` or create new test files inside the `test` folder. + - The provided test runner will only consider files matching the name pattern `**.test.ts`. + - You can create folders inside the `test` folder to structure your tests any way you want. ## Go further -* Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). -* [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VS Code extension marketplace. -* Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). +- Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). +- [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VS Code extension marketplace. +- Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). From fc323e7b6de8ece05fe408f919b9ca8d5d6ea753 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Tue, 3 Sep 2024 21:11:58 +0000 Subject: [PATCH 10/24] use cache correctly and streamline versions through workflow reuse --- .github/workflows/checks.yml | 34 ++++++-- .github/workflows/lint_module.yml | 53 ++++++++----- .github/workflows/nf-test_module.yml | 114 +++++++++++++++------------ 3 files changed, 127 insertions(+), 74 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 58c1cef9..4f463a2b 100755 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -1,6 +1,22 @@ name: nf-scil checks on: workflow_call: + inputs: + nextflow_version: + description: "Nextflow version to use" + required: false + type: string + default: "24.04.4" + nf_core_version: + description: "nf-core version to use" + required: false + type: string + default: "2.14.*" + nf_test_version: + description: "nf-test version to use" + required: false + type: string + default: "0.9.0-rc1" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -11,6 +27,8 @@ jobs: steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 + with: + cache: 'pip' - uses: pre-commit/action@v3.0.1 # FIXME Flip this off once we get to less than a couple hundred. Adding # this so it will only run against changed files. It'll make it much @@ -21,13 +39,11 @@ jobs: prettier: runs-on: ubuntu-latest steps: - - name: Check out repository - uses: actions/checkout@v4 - - - name: Install NodeJS - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: "20" + cache: 'npm' - name: Install Prettier run: npm install -g prettier@3.1.0 @@ -39,10 +55,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 with: node-version: "20" + cache: 'npm' - name: Install editorconfig-checker run: npm install -g editorconfig-checker @@ -111,6 +127,8 @@ jobs: with: type: "module" component: ${{ matrix.module }} + nextflow_version: ${{ inputs.nextflow_version }} + nf_core_version: ${{ inputs.nf_core_version }} secrets: inherit lint-subworkflows: @@ -127,6 +145,8 @@ jobs: with: type: "subworkflow" component: ${{ matrix.subworkflow }} + nextflow_version: ${{ inputs.nextflow_version }} + nf_core_version: ${{ inputs.nf_core_version }} secrets: inherit nf-test: @@ -149,6 +169,8 @@ jobs: profile: ${{ matrix.profile }} paths: ${{ matrix.path }} runner: ${{ matrix.runner }} + nextflow_version: ${{ inputs.nextflow_version }} + nf_test_version: ${{ inputs.nf_test_version }} secrets: inherit confirm-pass: diff --git a/.github/workflows/lint_module.yml b/.github/workflows/lint_module.yml index 225840a1..43479814 100755 --- a/.github/workflows/lint_module.yml +++ b/.github/workflows/lint_module.yml @@ -14,6 +14,16 @@ on: options: - module - subworkflow + nextflow_version: + description: "Nextflow version to use" + required: false + type: string + default: "24.04.4" + nf_core_version: + description: "nf-core version to use" + required: false + type: string + default: "2.14.*" workflow_call: inputs: component: @@ -24,6 +34,16 @@ on: description: "Type of component" required: true type: string + nextflow_version: + description: "Nextflow version to use" + required: false + type: string + default: "24.04.4" + nf_core_version: + description: "nf-core version to use" + required: false + type: string + default: "2.14.*" run-name: Lint ${{ inputs.component }} jobs: @@ -33,36 +53,31 @@ jobs: steps: - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v5 + - uses: actions/setup-python@v5 with: python-version: "3.11" - - - uses: actions/cache@v4 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} - restore-keys: | - ${{ runner.os }}-pip - ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} - - - name: Install pip - run: python -m pip install --upgrade pip - + cache: 'pip' - uses: actions/setup-java@v4 with: distribution: "temurin" java-version: "17" + cache: 'gradle' + - uses: nf-core/setup-nextflow@v2 + with: + version: ${{ inputs.nextflow_version }} - - name: Setup Nextflow - uses: nf-core/setup-nextflow@v2 + - name: Upgrade pip + run: python -m pip install --upgrade pip - name: Install nf-core tools run: | - python -m pip install --upgrade --force-reinstall nf-core==2.14.* + python -m pip install --upgrade --force-reinstall nf-core==${{ inputs.nf_core_version }} - name: Lint ${{ inputs.type }} ${{ inputs.component }} env: GIT_CLONE_PROTECTION_ACTIVE: false - run: nf-core --verbose ${{ inputs.type }}s --git-remote https://github.com/scilus/nf-scil.git lint ${{ inputs.component }} + run: | + nf-core --verbose ${{ inputs.type }}s \ + --git-remote https://github.com/${{ github.repository }}.git \ + --branch ${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} + lint ${{ inputs.component }} diff --git a/.github/workflows/nf-test_module.yml b/.github/workflows/nf-test_module.yml index 0faf0841..3d5f5ed3 100644 --- a/.github/workflows/nf-test_module.yml +++ b/.github/workflows/nf-test_module.yml @@ -15,9 +15,19 @@ on: - docker - singularity runner: - description: "Runner label to use for the test run" - default: 'ubuntu-latest' - type: string + description: "Runner label to use for the test run" + default: 'ubuntu-latest' + type: string + nextflow_version: + description: "Nextflow version to use" + required: false + type: string + default: "24.04.4" + nf_test_version: + description: "nf-test version to use" + required: false + type: string + default: "0.9.0-rc1" workflow_call: inputs: profile: @@ -35,6 +45,16 @@ on: description: "Runner label to use for the test run" default: 'ubuntu-latest' type: string + nextflow_version: + description: "Nextflow version to use" + required: false + type: string + default: "24.04.4" + nf_test_version: + description: "nf-test version to use" + required: false + type: string + default: "0.9.0-rc1" env: NXF_SINGULARITY_CACHEDIR: /home/runner/.singularity_cache/.singularity @@ -48,63 +68,64 @@ jobs: if: inputs.paths != '' && inputs.profile != '' env: NXF_ANSI_LOG: false - NFTEST_VER: "0.9.0-rc1" - NFSCIL_TEST_DATA_HOME: /home/runner/_work - + NXF_DISABLE_CHECK_LATEST: true + NFTEST_VERSION: "${{ inputs.nf_test_version }}" + # nf-test directories need to be placed on an ephemeral disk accessible to docker. + # In our case, it's only the _work workspace for security reasons + NXF_WORKDIR: /home/runner/_work steps: - uses: actions/checkout@v4 - + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: 'pip' - uses: actions/setup-java@v4 with: distribution: "temurin" java-version: "17" - - - name: Setup Nextflow - uses: nf-core/setup-nextflow@v2 - + cache: 'gradle' + - uses: nf-core/setup-nextflow@v2 + with: + version: ${{ inputs.nextflow_version }} - name: Setup nf-test uses: AlexVCaron/setup-nf-test@2c5a31b90b34d97abf155b57ee0f79c7f5aa118a # Used to make the action executable on our runners. Related to how the home # and work directories are set up from ephemeral disks. See nf-core/setup-nf-test/issues/6 with: - version: ${{ env.NFTEST_VER }} + version: ${{ inputs.nf_test_version }} + + - name: Install Python dependencies + run: python -m pip install --upgrade pip pdiff cryptography - name: Fix nf-test launching jvm with too much memory run: | sed -i 's/-Xmx10g//' $(which nf-test) - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - uses: actions/cache@v4 - id: cache-pip-pdiff - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-pdiff - restore-keys: | - ${{ runner.os }}-pip-pdiff - - - uses: actions/github-script@v7 + - name: Compute test run UID + uses: actions/github-script@v7 id: test-run-identifier with: script: | identifier='${{ inputs.paths }}'.toLowerCase().replaceAll(/[/. ]+/g, '-').trim('-'); - core.setOutput('tag', identifier); + core.setOutput('uid', identifier); - - uses: actions/cache@v4 + - name: Cache test archives under test UID + uses: actions/cache@v4 with: - path: ${{ env.NFSCIL_TEST_DATA_HOME }}/nf-scil-test-archives - key: nf-scil-test-data-cache-${{ steps.test-run-identifier.outputs.tag }} - - - name: Install Python dependencies - run: python -m pip install --upgrade pip pdiff cryptography + path: ${{ env.NXF_WORKDIR }}/nf-scil-test-archives + key: | + nf-scil-test-data-cache-${{ steps.test-run-identifier.outputs.uid }} + nf-scil-test-data-cache- - name: Run nf-test env: NFT_DIFF: "pdiff" NFT_DIFF_ARGS: "--line-numbers --width 120 --expand-tabs=2" + TMPDIR: ${{ env.NXF_WORKDIR }}/tmpdir + NFT_WORKDIR: ${{ env.NXF_WORKDIR }}/.nf-test + NXF_CACHE_DIR: ${{ env.NXF_WORKDIR }}/.nextflow + NXF_TEMP: ${{ env.NXF_WORKDIR }}/tmpdir + NFSCIL_TEST_DATA_HOME: ${{ env.NXF_WORKDIR }} run: | # use "docker_self_hosted" if it runs on self-hosted runner and inputs.profile=docker if [ "${{ inputs.profile }}" == "docker" ]; then @@ -113,12 +134,7 @@ jobs: PROFILE=${{ inputs.profile }} fi - # nf-test directories need to be placed on an ephemeral disk accessible to docker. - # In our case, it's only the _work workspace for security reasons - mkdir -p /home/runner/_work/tmpdir - - TMPDIR=/home/runner/_work/tmpdir \ - NFT_WORKDIR=/home/runner/_work \ + mkdir -p ${{ env.TMPDIR }} nf-test test \ --profile=$PROFILE \ --tap=test.tap \ @@ -134,26 +150,26 @@ jobs: - name: Tests logs if: failure() run: | - shopt -s globstar - for f in /home/runner/_work/tests/**/work/**/.command.log - do + shopt -s globstar + for f in ${{ env.NXF_WORKDIR }}/.nf-test/tests/**/work/**/.command.log + do - echo "$(sed '3q;d' $(dirname $f)/.command.run)" - cat $f + echo "$(sed '3q;d' $(dirname $f)/.command.run)" + cat $f - done + done - name: Upload images as artifacts if: always() uses: actions/upload-artifact@v4 with: - name: image_artifacts-${{ steps.test-run-identifier.outputs.tag }} - path: /home/runner/_work/tests/**/work/**/*.nii.gz + name: image_artifacts-${{ steps.test-run-identifier.outputs.uid }} + path: ${{ env.NXF_WORKDIR }}/.nf-test/tests/**/work/**/*.nii.gz overwrite: true - retention-days: 2 + retention-days: 1 compression-level: 9 - name: Clean up if: always() run: | - sudo rm -rf /home/ubuntu/tests/ + sudo rm -rf ${{ env.NXF_WORKDIR }}/.nf-test From b38e51b0950db59004480ee3c2fdd456b6b2b3ad Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 14:30:30 +0000 Subject: [PATCH 11/24] fix caching --- .devcontainer/Dockerfile | 4 +- .devcontainer/devcontainer.json | 3 +- .github/workflows/checks.yml | 2 - .github/workflows/code_linting.yml | 70 ------------------------- .github/workflows/lint_module.yml | 19 ++----- .github/workflows/publish_extension.yml | 1 + README.md | 2 +- package-lock.json | 43 +++++++++++++++ 8 files changed, 54 insertions(+), 90 deletions(-) delete mode 100755 .github/workflows/code_linting.yml create mode 100644 package-lock.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2cabc482..48989171 100755 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,9 +1,11 @@ FROM scilus/scilus:2.0.2 ARG NFTEST_VERSION +ARG POETRY_VERSION ENV NODE_MAJOR=18 ENV NFTEST_VERSION=${NFTEST_VERSION:-0.9.0-rc1} +ENV POETRY_VERSION=${POETRY_VERSION:-1.8.*} RUN apt update && apt install -y \ curl \ @@ -14,7 +16,7 @@ RUN apt update && apt install -y \ RUN python3 -m pip install pipx && \ python3 -m pipx ensurepath && \ - pipx install poetry + pipx install poetry==${POETRY_VERSION} RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - &&\ apt-get install -y nodejs && \ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index bad07d20..923e3e6d 100755 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,7 +3,8 @@ "build": { "dockerfile": "Dockerfile", "args": { - "NFTEST_VERSION": "0.9.0-rc1" + "NFTEST_VERSION": "0.9.0-rc1", + "POETRY_VERSION": "1.8.*" } }, "forwardPorts": [3000], diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 4f463a2b..fc3962e4 100755 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -128,7 +128,6 @@ jobs: type: "module" component: ${{ matrix.module }} nextflow_version: ${{ inputs.nextflow_version }} - nf_core_version: ${{ inputs.nf_core_version }} secrets: inherit lint-subworkflows: @@ -146,7 +145,6 @@ jobs: type: "subworkflow" component: ${{ matrix.subworkflow }} nextflow_version: ${{ inputs.nextflow_version }} - nf_core_version: ${{ inputs.nf_core_version }} secrets: inherit nf-test: diff --git a/.github/workflows/code_linting.yml b/.github/workflows/code_linting.yml deleted file mode 100755 index b595d5a7..00000000 --- a/.github/workflows/code_linting.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Code Linting -run-name: Code Linting (automated) -on: - issue_comment: - types: [created] - -jobs: - fix-linting: - # Only run if comment is on a PR with the main repo, and if it contains the magic keywords - if: > - contains(github.event.comment.html_url, '/pull/') && - contains(github.event.comment.body, '@nf-scil-bot fix linting') && - github.repository == 'scilus/nf-scil' - runs-on: scilus-nf-scil-runners - steps: - # Use the @nf-scil-bot token to check out so we can push later - - uses: actions/checkout@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - # indication that the linting is being fixed - - name: React on comment - uses: peter-evans/create-or-update-comment@v3 - with: - comment-id: ${{ github.event.comment.id }} - reactions: eyes - - # Action runs on the issue comment, so we don't get the PR by default - # Use the gh cli to check out the PR - - name: Checkout Pull Request - run: gh pr checkout ${{ github.event.issue.number }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - uses: actions/setup-node@v4 - - - name: Install Prettier - run: npm install -g prettier @prettier/plugin-php - - # Check that we actually need to fix something - - name: Run 'prettier --check' - id: prettier_status - run: | - if prettier --check ${GITHUB_WORKSPACE}; then - echo "::set-output name=result::pass" - else - echo "::set-output name=result::fail" - fi - - name: Run 'prettier --write' - if: steps.prettier_status.outputs.result == 'fail' - run: prettier --write ${GITHUB_WORKSPACE} - - - name: Post nothing-to-do comment - if: steps.prettier_status.outputs.result == 'pass' - uses: peter-evans/create-or-update-comment@v3 - with: - issue-number: ${{ github.event.issue.number }} - body: | - Nothing for me to do here! :shrug: - This is probably because the linting errors come from `nf-core lint` and have to be fixed manually (or with `nf-core lint --fix`). - - name: Commit & push changes - if: steps.prettier_status.outputs.result == 'fail' - run: | - git config user.email "scil@nf-sc.il" - git config user.name "nf-scil-bot" - git config push.default upstream - git add . - git status - git commit -m "[automated] Fix linting with Prettier" - git push diff --git a/.github/workflows/lint_module.yml b/.github/workflows/lint_module.yml index 43479814..d7424603 100755 --- a/.github/workflows/lint_module.yml +++ b/.github/workflows/lint_module.yml @@ -19,11 +19,6 @@ on: required: false type: string default: "24.04.4" - nf_core_version: - description: "nf-core version to use" - required: false - type: string - default: "2.14.*" workflow_call: inputs: component: @@ -39,11 +34,6 @@ on: required: false type: string default: "24.04.4" - nf_core_version: - description: "nf-core version to use" - required: false - type: string - default: "2.14.*" run-name: Lint ${{ inputs.component }} jobs: @@ -57,6 +47,9 @@ jobs: with: python-version: "3.11" cache: 'pip' + - uses: abatilo/actions-poetry@v2 + with: + poetry-version: "1.8.*" - uses: actions/setup-java@v4 with: distribution: "temurin" @@ -65,13 +58,9 @@ jobs: - uses: nf-core/setup-nextflow@v2 with: version: ${{ inputs.nextflow_version }} - - - name: Upgrade pip - run: python -m pip install --upgrade pip - - name: Install nf-core tools run: | - python -m pip install --upgrade --force-reinstall nf-core==${{ inputs.nf_core_version }} + poetry install --no-root - name: Lint ${{ inputs.type }} ${{ inputs.component }} env: diff --git a/.github/workflows/publish_extension.yml b/.github/workflows/publish_extension.yml index c23df601..576660ba 100644 --- a/.github/workflows/publish_extension.yml +++ b/.github/workflows/publish_extension.yml @@ -28,6 +28,7 @@ jobs: with: node-version: 20 cache: "npm" + cache-dependency-path: nf-scil-extensions/${{ inputs.name }}/package-lock.json - name: npm clean install working-directory: nf-scil-extensions/${{ inputs.name }} diff --git a/README.md b/README.md index 4ea9e67d..3f3a0ed4 100755 --- a/README.md +++ b/README.md @@ -138,7 +138,7 @@ run the following commands : ```bash pip install pipx pipx ensurepath -pipx install poetry +pipx install poetry==1.8.* ``` > [!NOTE] diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..7a2c7965 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,43 @@ +{ + "name": "nf-scil", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "editorconfig-checker": "^5.1.8", + "prettier": "^3.1.0" + } + }, + "node_modules/editorconfig-checker": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/editorconfig-checker/-/editorconfig-checker-5.1.8.tgz", + "integrity": "sha512-GM/qCbXA8GajSqqjXiWZN49i0nizQV5PjkVKIwWB9rtsm/pztjnBC+4dts5wW2KdrP2zyMPEltWHtWQwoCadqg==", + "bin": { + "ec": "dist/index.js", + "editorconfig-checker": "dist/index.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/mstruebing" + } + }, + "node_modules/prettier": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + } + } +} From 3cc08c0f155a7706bb52ae784ad32c87e14e4b98 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 14:35:25 +0000 Subject: [PATCH 12/24] fix --- .github/workflows/checks.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index fc3962e4..56135864 100755 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -46,7 +46,7 @@ jobs: cache: 'npm' - name: Install Prettier - run: npm install -g prettier@3.1.0 + run: npm install - name: Run Prettier --check run: prettier --check . @@ -61,7 +61,7 @@ jobs: cache: 'npm' - name: Install editorconfig-checker - run: npm install -g editorconfig-checker + run: npm install - name: Run ECLint check run: editorconfig-checker -exclude README.md $(git ls-files | grep -v test) From 61e2c22d28ce8e963b9484c8030093262ab84bf0 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 14:38:18 +0000 Subject: [PATCH 13/24] add package as well --- .github/workflows/checks.yml | 4 ++-- package.json | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 package.json diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 56135864..6ff3b90b 100755 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -46,7 +46,7 @@ jobs: cache: 'npm' - name: Install Prettier - run: npm install + run: npm ci - name: Run Prettier --check run: prettier --check . @@ -61,7 +61,7 @@ jobs: cache: 'npm' - name: Install editorconfig-checker - run: npm install + run: npm ci - name: Run ECLint check run: editorconfig-checker -exclude README.md $(git ls-files | grep -v test) diff --git a/package.json b/package.json new file mode 100644 index 00000000..910a6885 --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "editorconfig-checker": "^5.1.8", + "prettier": "^3.1.0" + } +} From c2f852f9443e968b6b31759574c8944579ec6799 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 14:51:23 +0000 Subject: [PATCH 14/24] fix + run prettier and editorconfig-checker --- .github/workflows/checks.yml | 4 +- .prettierignore | 1 + .../.vscode/extensions.json | 6 +-- .../test-data-treeview/.vscode/launch.json | 30 ++++++------ .../test-data-treeview/.vscode/settings.json | 2 +- .../test-data-treeview/.vscode/tasks.json | 48 +++++++++---------- package.json | 8 ++-- run_tests.sh | 30 ++++++------ 8 files changed, 65 insertions(+), 64 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 6ff3b90b..27ff1e8a 100755 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -49,7 +49,7 @@ jobs: run: npm ci - name: Run Prettier --check - run: prettier --check . + run: npx prettier --check . editorconfig: runs-on: ubuntu-latest @@ -64,7 +64,7 @@ jobs: run: npm ci - name: Run ECLint check - run: editorconfig-checker -exclude README.md $(git ls-files | grep -v test) + run: npx editorconfig-checker -exclude README.md $(git ls-files | grep -v test) publish-test-data-treeview-extension: # Runs only when the event is a push to main diff --git a/.prettierignore b/.prettierignore index 4c1267e2..cd823bb4 100755 --- a/.prettierignore +++ b/.prettierignore @@ -5,6 +5,7 @@ docs/api/_build testing nf_core/module-template/modules/meta.yml nf_core/module-template/tests/test.yml +**/package-lock.json .github .devcontainer .vscode diff --git a/nf-scil-extensions/test-data-treeview/.vscode/extensions.json b/nf-scil-extensions/test-data-treeview/.vscode/extensions.json index d7a3ca11..9a9d640e 100644 --- a/nf-scil-extensions/test-data-treeview/.vscode/extensions.json +++ b/nf-scil-extensions/test-data-treeview/.vscode/extensions.json @@ -1,5 +1,5 @@ { - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": ["dbaeumer.vscode-eslint", "connor4312.esbuild-problem-matchers", "ms-vscode.extension-test-runner"] + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["dbaeumer.vscode-eslint", "connor4312.esbuild-problem-matchers", "ms-vscode.extension-test-runner"] } diff --git a/nf-scil-extensions/test-data-treeview/.vscode/launch.json b/nf-scil-extensions/test-data-treeview/.vscode/launch.json index c42edc04..909a38b5 100644 --- a/nf-scil-extensions/test-data-treeview/.vscode/launch.json +++ b/nf-scil-extensions/test-data-treeview/.vscode/launch.json @@ -3,19 +3,19 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - "version": "0.2.0", - "configurations": [ - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/dist/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/dist/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] } diff --git a/nf-scil-extensions/test-data-treeview/.vscode/settings.json b/nf-scil-extensions/test-data-treeview/.vscode/settings.json index 5c5ac48c..0873375e 100644 --- a/nf-scil-extensions/test-data-treeview/.vscode/settings.json +++ b/nf-scil-extensions/test-data-treeview/.vscode/settings.json @@ -10,4 +10,4 @@ }, // Turn off tsc task auto detection since we have the necessary tasks as npm scripts "typescript.tsc.autoDetect": "off" -} \ No newline at end of file +} diff --git a/nf-scil-extensions/test-data-treeview/.vscode/tasks.json b/nf-scil-extensions/test-data-treeview/.vscode/tasks.json index 3cf99c37..07b32ad3 100644 --- a/nf-scil-extensions/test-data-treeview/.vscode/tasks.json +++ b/nf-scil-extensions/test-data-treeview/.vscode/tasks.json @@ -1,9 +1,9 @@ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format { - "version": "2.0.0", - "tasks": [ - { + "version": "2.0.0", + "tasks": [ + { "label": "watch", "dependsOn": [ "npm: watch:tsc", @@ -29,7 +29,7 @@ "reveal": "never" } }, - { + { "type": "npm", "script": "watch:tsc", "group": "build", @@ -41,24 +41,24 @@ "reveal": "never" } }, - { - "type": "npm", - "script": "watch-tests", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never", - "group": "watchers" - }, - "group": "build" - }, - { - "label": "tasks: watch-tests", - "dependsOn": [ - "npm: watch", - "npm: watch-tests" - ], - "problemMatcher": [] - } - ] + { + "type": "npm", + "script": "watch-tests", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never", + "group": "watchers" + }, + "group": "build" + }, + { + "label": "tasks: watch-tests", + "dependsOn": [ + "npm: watch", + "npm: watch-tests" + ], + "problemMatcher": [] + } + ] } diff --git a/package.json b/package.json index 910a6885..4abce395 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "dependencies": { - "editorconfig-checker": "^5.1.8", - "prettier": "^3.1.0" - } + "dependencies": { + "editorconfig-checker": "^5.1.8", + "prettier": "^3.1.0" + } } diff --git a/run_tests.sh b/run_tests.sh index 9e5ad4ee..a5a75f9f 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -75,21 +75,21 @@ ONCE=false PROFILE="docker" while getopts "e:uoph:" opt; do - case $opt in - e) EXCLUDES+=($OPTARG) - ;; - u) UPDATE_SNAPS=true - ;; - o) ONCE=true - ;; - p) PROFILE="$OPTARG" - ;; - h) echo "$DESCRIPTION" - ;; - \?) echo "Invalid option -$OPTARG" >&2 - echo "$DESCRIPTION" - ;; - esac + case $opt in + e) EXCLUDES+=($OPTARG) + ;; + u) UPDATE_SNAPS=true + ;; + o) ONCE=true + ;; + p) PROFILE="$OPTARG" + ;; + h) echo "$DESCRIPTION" + ;; + \?) echo "Invalid option -$OPTARG" >&2 + echo "$DESCRIPTION" + ;; + esac done From a5364262887fa429411608ed186b9480d5c4e13a Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 14:52:55 +0000 Subject: [PATCH 15/24] add reports to nf-test outputs --- tests/config/nf-test.config | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/config/nf-test.config b/tests/config/nf-test.config index 06ab8905..7e9747fe 100644 --- a/tests/config/nf-test.config +++ b/tests/config/nf-test.config @@ -12,6 +12,12 @@ params { ) } +report { + enabled = true + file = "$launchDir/report.html" + overwrite = true +} + process { cpus = 4 memory = 5.GB From 22fdf8f0dce611a2e72457d901a009425eb8a904 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 15:46:47 +0000 Subject: [PATCH 16/24] add report upload and merging --- .github/workflows/checks.yml | 17 +++++++++++- .github/workflows/nf-test_module.yml | 39 +++++++++++++++++++++++++--- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 27ff1e8a..911b2843 100755 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -171,10 +171,25 @@ jobs: nf_test_version: ${{ inputs.nf_test_version }} secrets: inherit + upload-reports: + name: upload reports + needs: [nf-test-changes, nf-test] + if: ${{ ( needs.nf-test-changes.outputs.paths != '[]' ) }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/upload-artifact/merge@v4 + with: + name: nf-test-reports + pattern: reports-* + delete-merged: true + retention-days: 10 + compression-level: 9 + confirm-pass: name: status runs-on: ubuntu-latest - needs: [prettier, editorconfig, nf-test-changes, lint-modules, lint-subworkflows, nf-test] + needs: [prettier, editorconfig, nf-test-changes, lint-modules, lint-subworkflows, nf-test, upload-reports] if: ${{ !cancelled() }} steps: - name: All tests ok diff --git a/.github/workflows/nf-test_module.yml b/.github/workflows/nf-test_module.yml index 3d5f5ed3..3b07cf1b 100644 --- a/.github/workflows/nf-test_module.yml +++ b/.github/workflows/nf-test_module.yml @@ -159,15 +159,48 @@ jobs: done - - name: Upload images as artifacts + - name: Collect test reports if: always() + run: | + mkdir -p tests_reports + i=1 + for t in ${{ env.NXF_WORKDIR }}/.nf-test/tests/* + do + tag=$(cat $t/meta/mock.nf | grep -E 'include \{.*' | tail -1 | cut -d' ' -f3)_$i + cp $(dirname $t)/report.html tests_reports/${tag}.html + i=$((i+1)) + done + + - name: Upload test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: reports-${{ steps.test-run-identifier.outputs.uid }} + path: tests_reports/ + overwrite: true + retention-days: 1 + compression-level: 9 + + - name: Collect test working directories + if: failure() + run: | + mkdir -p tests_workdir + for t in ${{ env.NXF_WORKDIR }}/.nf-test/tests/**/work/**/.command.log + do + tag=$(sed -n '3p' $(dirname $t)/.command.run | cut -d' ' -f3 | tr -d "'") + cp -R $(dirname $t) tests_workdir/$tag + done + + - name: Upload test working directories + if: failure() uses: actions/upload-artifact@v4 with: - name: image_artifacts-${{ steps.test-run-identifier.outputs.uid }} - path: ${{ env.NXF_WORKDIR }}/.nf-test/tests/**/work/**/*.nii.gz + name: tests-workdir-${{ steps.test-run-identifier.outputs.uid }} + path: tests_workdir/ overwrite: true retention-days: 1 compression-level: 9 + include-hidden-files: true - name: Clean up if: always() From 6cc8326ab19a705ce4b583478892b6d0f512a882 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 15:49:32 +0000 Subject: [PATCH 17/24] editorconfig fix to trigger tests --- modules/nf-scil/reconst/dtimetrics/tests/main.nf.test | 3 +-- modules/nf-scil/segmentation/fastseg/tests/main.nf.test | 2 +- test.tap | 3 +++ 3 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 test.tap diff --git a/modules/nf-scil/reconst/dtimetrics/tests/main.nf.test b/modules/nf-scil/reconst/dtimetrics/tests/main.nf.test index 91ddbfd6..a18fe531 100644 --- a/modules/nf-scil/reconst/dtimetrics/tests/main.nf.test +++ b/modules/nf-scil/reconst/dtimetrics/tests/main.nf.test @@ -18,8 +18,7 @@ nextflow_process { script "../../../../../subworkflows/nf-scil/load_test_data/main.nf" process { """ - input[0] = Channel.from( [ "DWIss1000-dir32.zip", - "segmentation.zip" ] ) + input[0] = Channel.from( [ "DWIss1000-dir32.zip", "segmentation.zip" ] ) input[1] = "test.load-test-data" """ } diff --git a/modules/nf-scil/segmentation/fastseg/tests/main.nf.test b/modules/nf-scil/segmentation/fastseg/tests/main.nf.test index 0299f948..a081ce87 100644 --- a/modules/nf-scil/segmentation/fastseg/tests/main.nf.test +++ b/modules/nf-scil/segmentation/fastseg/tests/main.nf.test @@ -71,4 +71,4 @@ nextflow_process { ) } } -} \ No newline at end of file +} diff --git a/test.tap b/test.tap new file mode 100644 index 00000000..fdb6e7ec --- /dev/null +++ b/test.tap @@ -0,0 +1,3 @@ +1..2 +ok 1 Test Process DENOISING_NLMEANS: denoising - nlmeans +ok 2 Test Process DENOISING_NLMEANS: denoising - nlmeans - withmask From 59275f038b6b2c1b79b0bd5cc70a2e3505b25d01 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 15:55:51 +0000 Subject: [PATCH 18/24] fix linting cache --- .github/workflows/lint_module.yml | 10 +++++----- .github/workflows/nf-test_module.yml | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/lint_module.yml b/.github/workflows/lint_module.yml index d7424603..c94e4ee2 100755 --- a/.github/workflows/lint_module.yml +++ b/.github/workflows/lint_module.yml @@ -43,21 +43,21 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: "3.11" - cache: 'pip' - uses: abatilo/actions-poetry@v2 with: poetry-version: "1.8.*" + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: 'poetry' - uses: actions/setup-java@v4 with: distribution: "temurin" java-version: "17" - cache: 'gradle' - uses: nf-core/setup-nextflow@v2 with: version: ${{ inputs.nextflow_version }} + - name: Install nf-core tools run: | poetry install --no-root diff --git a/.github/workflows/nf-test_module.yml b/.github/workflows/nf-test_module.yml index 3b07cf1b..5faaa3af 100644 --- a/.github/workflows/nf-test_module.yml +++ b/.github/workflows/nf-test_module.yml @@ -83,7 +83,6 @@ jobs: with: distribution: "temurin" java-version: "17" - cache: 'gradle' - uses: nf-core/setup-nextflow@v2 with: version: ${{ inputs.nextflow_version }} From 03fcbaa226144011460d45d3ad675d0602e2208a Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 16:03:11 +0000 Subject: [PATCH 19/24] call linting through poetry --- .github/workflows/lint_module.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint_module.yml b/.github/workflows/lint_module.yml index c94e4ee2..5882293b 100755 --- a/.github/workflows/lint_module.yml +++ b/.github/workflows/lint_module.yml @@ -66,7 +66,7 @@ jobs: env: GIT_CLONE_PROTECTION_ACTIVE: false run: | - nf-core --verbose ${{ inputs.type }}s \ + poetry run nf-core --verbose ${{ inputs.type }}s \ --git-remote https://github.com/${{ github.repository }}.git \ --branch ${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} lint ${{ inputs.component }} From 6469917968a366c22bab20107ec9365a86b6169f Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 16:12:20 +0000 Subject: [PATCH 20/24] fix --- .github/workflows/nf-test_module.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nf-test_module.yml b/.github/workflows/nf-test_module.yml index 5faaa3af..7bb7e027 100644 --- a/.github/workflows/nf-test_module.yml +++ b/.github/workflows/nf-test_module.yml @@ -166,7 +166,7 @@ jobs: for t in ${{ env.NXF_WORKDIR }}/.nf-test/tests/* do tag=$(cat $t/meta/mock.nf | grep -E 'include \{.*' | tail -1 | cut -d' ' -f3)_$i - cp $(dirname $t)/report.html tests_reports/${tag}.html + cp $t/report.html tests_reports/${tag}.html i=$((i+1)) done From aa7c870a9b0b6fb8810e935e270408b56634750e Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 16:16:13 +0000 Subject: [PATCH 21/24] move publishing to main workflow entry, since it runs only on main. fix linting --- .github/workflows/checks.yml | 16 ---------------- .github/workflows/lint_module.yml | 2 +- .github/workflows/update_main.yml | 14 ++++++++++++++ 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 911b2843..264a0c6b 100755 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -66,22 +66,6 @@ jobs: - name: Run ECLint check run: npx editorconfig-checker -exclude README.md $(git ls-files | grep -v test) - publish-test-data-treeview-extension: - # Runs only when the event is a push to main - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - uses: ./.github/workflows/publish_extension.yml - with: - name: "test-data-treeview" - secrets: inherit - - publish-extension-package: - # Runs only when the event is a push to main - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - uses: ./.github/workflows/publish_extension.yml - with: - name: "extension-package" - secrets: inherit - nf-test-changes: name: compute - changes runs-on: ubuntu-latest diff --git a/.github/workflows/lint_module.yml b/.github/workflows/lint_module.yml index 5882293b..108b91f4 100755 --- a/.github/workflows/lint_module.yml +++ b/.github/workflows/lint_module.yml @@ -68,5 +68,5 @@ jobs: run: | poetry run nf-core --verbose ${{ inputs.type }}s \ --git-remote https://github.com/${{ github.repository }}.git \ - --branch ${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} + --branch ${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} \ lint ${{ inputs.component }} diff --git a/.github/workflows/update_main.yml b/.github/workflows/update_main.yml index 75a3d937..89b5bb3a 100755 --- a/.github/workflows/update_main.yml +++ b/.github/workflows/update_main.yml @@ -13,3 +13,17 @@ jobs: checks: uses: ./.github/workflows/checks.yml secrets: inherit + + publish-test-data-treeview-extension: + if: github.repository == 'scilus/nf-scil' + uses: ./.github/workflows/publish_extension.yml + with: + name: "test-data-treeview" + secrets: inherit + + publish-extension-package: + if: github.repository == 'scilus/nf-scil' + uses: ./.github/workflows/publish_extension.yml + with: + name: "extension-package" + secrets: inherit From faccae7f3c14c217ca5e452f4a17765d03a3062e Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Wed, 4 Sep 2024 20:12:34 +0000 Subject: [PATCH 22/24] run fastseg on lightweight test data --- .../segmentation/fastseg/tests/main.nf.test | 28 +- .../fastseg/tests/main.nf.test.snap | 262 ++---------------- tests/config/test_data.json | 2 +- 3 files changed, 47 insertions(+), 245 deletions(-) diff --git a/modules/nf-scil/segmentation/fastseg/tests/main.nf.test b/modules/nf-scil/segmentation/fastseg/tests/main.nf.test index a081ce87..9114b5e9 100644 --- a/modules/nf-scil/segmentation/fastseg/tests/main.nf.test +++ b/modules/nf-scil/segmentation/fastseg/tests/main.nf.test @@ -20,7 +20,7 @@ nextflow_process { script "../../../../../subworkflows/nf-scil/load_test_data/main.nf" process { """ - input[0] = Channel.from( [ "heavy.zip" ] ) + input[0] = Channel.from( [ "T1w.zip" ] ) input[1] = "test.load-test-data" """ } @@ -34,7 +34,7 @@ nextflow_process { input[0] = LOAD_DATA.out.test_data_directory.map{ test_data_directory -> [ [ id:'test', single_end:false ], // meta map - file("\${test_data_directory}/anat/anat_image.nii.gz", checkIfExists: true,), + file("\${test_data_directory}/T1w.nii.gz", checkIfExists: true,), [] ] } @@ -45,7 +45,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + niftiMD5SUM(process.out.wm_mask.get(0).get(1)), + niftiMD5SUM(process.out.gm_mask.get(0).get(1)), + niftiMD5SUM(process.out.csf_mask.get(0).get(1)), + niftiMD5SUM(process.out.wm_map.get(0).get(1)), + niftiMD5SUM(process.out.gm_map.get(0).get(1)), + niftiMD5SUM(process.out.csf_map.get(0).get(1)), + process.out.versions + ).match() } ) } } @@ -56,8 +64,8 @@ nextflow_process { input[0] = LOAD_DATA.out.test_data_directory.map{ test_data_directory -> [ [ id:'test', single_end:false ], // meta map - file("\${test_data_directory}/anat/anat_image.nii.gz", checkIfExists: true,), - file("\${test_data_directory}/anat/anat_mask.nii.gz", checkIfExists: true) + file("\${test_data_directory}/T1w.nii.gz", checkIfExists: true,), + file("\${test_data_directory}/T1w_mask.nii.gz", checkIfExists: true) ] } """ @@ -67,7 +75,15 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot( + niftiMD5SUM(process.out.wm_mask.get(0).get(1)), + niftiMD5SUM(process.out.gm_mask.get(0).get(1)), + niftiMD5SUM(process.out.csf_mask.get(0).get(1)), + niftiMD5SUM(process.out.wm_map.get(0).get(1)), + niftiMD5SUM(process.out.gm_map.get(0).get(1)), + niftiMD5SUM(process.out.csf_map.get(0).get(1)), + process.out.versions + ).match() } ) } } diff --git a/modules/nf-scil/segmentation/fastseg/tests/main.nf.test.snap b/modules/nf-scil/segmentation/fastseg/tests/main.nf.test.snap index 7ae441af..7778861a 100644 --- a/modules/nf-scil/segmentation/fastseg/tests/main.nf.test.snap +++ b/modules/nf-scil/segmentation/fastseg/tests/main.nf.test.snap @@ -1,252 +1,38 @@ { "segmentation - fastseg - lesion": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_wm.nii.gz:md5,2b2ced42fcf870d68ff44bf90d2701d4" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_gm.nii.gz:md5,39396421c6d1d32ea7943a5ec7a49dce" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_csf.nii.gz:md5,d0fbc088059f17faff38fbcd33257d27" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_wm.nii.gz:md5,1d5a9655d4e3c832b14c83e9424b00fc" - ] - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_gm.nii.gz:md5,f7e51eb14af645c687db5d2c6a4f5bf4" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_csf.nii.gz:md5,9c14d8f70e69d641d9c214d0d52b3663" - ] - ], - "6": [ - "versions.yml:md5,d42da2620c5aa82292375b0f9d8d7092" - ], - "csf_map": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_csf.nii.gz:md5,9c14d8f70e69d641d9c214d0d52b3663" - ] - ], - "csf_mask": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_csf.nii.gz:md5,d0fbc088059f17faff38fbcd33257d27" - ] - ], - "gm_map": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_gm.nii.gz:md5,f7e51eb14af645c687db5d2c6a4f5bf4" - ] - ], - "gm_mask": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_gm.nii.gz:md5,39396421c6d1d32ea7943a5ec7a49dce" - ] - ], - "versions": [ - "versions.yml:md5,d42da2620c5aa82292375b0f9d8d7092" - ], - "wm_map": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_wm.nii.gz:md5,1d5a9655d4e3c832b14c83e9424b00fc" - ] - ], - "wm_mask": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_wm.nii.gz:md5,2b2ced42fcf870d68ff44bf90d2701d4" - ] - ] - } + "test__mask_wm.nii.gz:md5:header,18e02970ee42367e0ee9f81b36cde160,data,e4d00ba5559d32119050e6afe77b627c", + "test__mask_gm.nii.gz:md5:header,cb2d88714675fc7d8c450de4db5227c6,data,d713974dbe87760182112e10f96a7f82", + "test__mask_csf.nii.gz:md5:header,cb2d88714675fc7d8c450de4db5227c6,data,29599fab55e3ee75318cef36563684a4", + "test__map_wm.nii.gz:md5:header,58dc3623694060dace951ba8073d5e01,data,62a268dbc74814d62ed9f9596b5a72e5", + "test__map_gm.nii.gz:md5:header,58dc3623694060dace951ba8073d5e01,data,420e7664f81a5899f7007f71c08f28d8", + "test__map_csf.nii.gz:md5:header,58dc3623694060dace951ba8073d5e01,data,2bde307c6dae36a5fc00eba7a2ca7933", + [ + "versions.yml:md5,d42da2620c5aa82292375b0f9d8d7092" + ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0-rc1", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-17T13:59:58.264241" + "timestamp": "2024-09-04T20:12:08.928978" }, "segmentation - fastseg": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_wm.nii.gz:md5,f849e268007a747714e342162f13f631" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_gm.nii.gz:md5,39396421c6d1d32ea7943a5ec7a49dce" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_csf.nii.gz:md5,d0fbc088059f17faff38fbcd33257d27" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_wm.nii.gz:md5,1d5a9655d4e3c832b14c83e9424b00fc" - ] - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_gm.nii.gz:md5,f7e51eb14af645c687db5d2c6a4f5bf4" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_csf.nii.gz:md5,9c14d8f70e69d641d9c214d0d52b3663" - ] - ], - "6": [ - "versions.yml:md5,d42da2620c5aa82292375b0f9d8d7092" - ], - "csf_map": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_csf.nii.gz:md5,9c14d8f70e69d641d9c214d0d52b3663" - ] - ], - "csf_mask": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_csf.nii.gz:md5,d0fbc088059f17faff38fbcd33257d27" - ] - ], - "gm_map": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_gm.nii.gz:md5,f7e51eb14af645c687db5d2c6a4f5bf4" - ] - ], - "gm_mask": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_gm.nii.gz:md5,39396421c6d1d32ea7943a5ec7a49dce" - ] - ], - "versions": [ - "versions.yml:md5,d42da2620c5aa82292375b0f9d8d7092" - ], - "wm_map": [ - [ - { - "id": "test", - "single_end": false - }, - "test__map_wm.nii.gz:md5,1d5a9655d4e3c832b14c83e9424b00fc" - ] - ], - "wm_mask": [ - [ - { - "id": "test", - "single_end": false - }, - "test__mask_wm.nii.gz:md5,f849e268007a747714e342162f13f631" - ] - ] - } + "test__mask_wm.nii.gz:md5:header,cb2d88714675fc7d8c450de4db5227c6,data,08b5c8665f0a07c182eb63f045d01855", + "test__mask_gm.nii.gz:md5:header,cb2d88714675fc7d8c450de4db5227c6,data,d713974dbe87760182112e10f96a7f82", + "test__mask_csf.nii.gz:md5:header,cb2d88714675fc7d8c450de4db5227c6,data,29599fab55e3ee75318cef36563684a4", + "test__map_wm.nii.gz:md5:header,58dc3623694060dace951ba8073d5e01,data,62a268dbc74814d62ed9f9596b5a72e5", + "test__map_gm.nii.gz:md5:header,58dc3623694060dace951ba8073d5e01,data,420e7664f81a5899f7007f71c08f28d8", + "test__map_csf.nii.gz:md5:header,58dc3623694060dace951ba8073d5e01,data,2bde307c6dae36a5fc00eba7a2ca7933", + [ + "versions.yml:md5,d42da2620c5aa82292375b0f9d8d7092" + ] ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0-rc1", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-13T19:52:04.291343" + "timestamp": "2024-09-04T20:03:24.730234" } } \ No newline at end of file diff --git a/tests/config/test_data.json b/tests/config/test_data.json index f52c60d8..b5201265 100644 --- a/tests/config/test_data.json +++ b/tests/config/test_data.json @@ -48,7 +48,7 @@ "DWIss300-dir8.zip": "ef1335775c9fbf11452c71e01b097282", "DWIss1000-dir32.zip": "c72fd590a3f400278299a068eeffd1d0", "DWIss2000-dir60.zip": "9ad7ccb4e30b39c47f374018db2e6424", - "T1w.zip": "10e27bb2ddd4d01be968a93b2166096c", + "T1w.zip": "8e9cf2beec4595d407732152a19589f5", "dti.zip": "ba866c59fc4d984f626691a6b941fc32", "responses.zip": "1a5b862b91c72740bcce0431a1f9254a", "segmentation.zip": "ab51be6d142ad1a8e30ffb964447d010" From 0259258f8b86233e994f1b2a36e6cc3fc1011929 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Thu, 5 Sep 2024 03:39:22 +0000 Subject: [PATCH 23/24] same for anatomical_segmentation workflow --- .../tests/main.nf.test | 24 ++++-- .../tests/main.nf.test.snap | 84 ++++++++----------- tests/config/test_data.json | 4 +- 3 files changed, 56 insertions(+), 56 deletions(-) diff --git a/subworkflows/nf-scil/anatomical_segmentation/tests/main.nf.test b/subworkflows/nf-scil/anatomical_segmentation/tests/main.nf.test index 5a27f842..b3836084 100644 --- a/subworkflows/nf-scil/anatomical_segmentation/tests/main.nf.test +++ b/subworkflows/nf-scil/anatomical_segmentation/tests/main.nf.test @@ -20,7 +20,7 @@ nextflow_workflow { script "../../load_test_data/main.nf" process { """ - input[0] = Channel.from( [ "heavy.zip" ] ) + input[0] = Channel.from( [ "T1w.zip", "freesurfer_nifti.zip" ] ) input[1] = "test.load-test-data" """ } @@ -32,10 +32,15 @@ nextflow_workflow { when { workflow { """ - input[0] = LOAD_DATA.out.test_data_directory.map{ + ch_split_test_data = LOAD_DATA.out.test_data_directory + .branch{ + t1w: it.simpleName == "T1w" + freesurfer: it.simpleName == "freesurfer_nifti" + } + input[0] = ch_split_test_data.t1w.map{ test_data_directory -> [ - [ id:'test', single_end:false ], // meta map - file("\${test_data_directory}/anat/anat_image.nii.gz", checkIfExists: true), + [ id:'test' ], + file("\${test_data_directory}/T1w.nii.gz", checkIfExists: true), [] ]} input[1] = [] @@ -56,12 +61,17 @@ nextflow_workflow { when { workflow { """ + ch_split_test_data = LOAD_DATA.out.test_data_directory + .branch{ + t1w: it.simpleName == "T1w" + freesurfer: it.simpleName == "freesurfer_nifti" + } input[0] = [] - input[1] = LOAD_DATA.out.test_data_directory.map{ + input[1] = ch_split_test_data.freesurfer.map{ test_data_directory -> [ [ id:'test', single_end:false ], // meta map - file("\${test_data_directory}/freesurfer/aparc_aseg.nii.gz", checkIfExists: true), - file("\${test_data_directory}/freesurfer/wmparc.nii.gz", checkIfExists: true), + file("\${test_data_directory}/aparc+aseg.nii.gz", checkIfExists: true), + file("\${test_data_directory}/wmparc.nii.gz", checkIfExists: true), [] ]} """ diff --git a/subworkflows/nf-scil/anatomical_segmentation/tests/main.nf.test.snap b/subworkflows/nf-scil/anatomical_segmentation/tests/main.nf.test.snap index 48d447fe..1974a2a4 100644 --- a/subworkflows/nf-scil/anatomical_segmentation/tests/main.nf.test.snap +++ b/subworkflows/nf-scil/anatomical_segmentation/tests/main.nf.test.snap @@ -8,7 +8,7 @@ "id": "test", "single_end": false }, - "test__mask_wm.nii.gz:md5,2dc635526adb6ef185300acc326ead13" + "test__mask_wm.nii.gz:md5,0ed4a06defc512b1b898d6e0c3ef678a" ] ], "1": [ @@ -17,7 +17,7 @@ "id": "test", "single_end": false }, - "test__mask_gm.nii.gz:md5,247106ed727133078fe262b0b8244071" + "test__mask_gm.nii.gz:md5,a363d6207419b08346a7c05c6525430e" ] ], "2": [ @@ -26,7 +26,7 @@ "id": "test", "single_end": false }, - "test__mask_csf.nii.gz:md5,b92db7e454c95afadea320a143912ce8" + "test__mask_csf.nii.gz:md5,3dbcb3eefb507bedab91fb80ed636f36" ] ], "3": [ @@ -50,7 +50,7 @@ "id": "test", "single_end": false }, - "test__mask_csf.nii.gz:md5,b92db7e454c95afadea320a143912ce8" + "test__mask_csf.nii.gz:md5,3dbcb3eefb507bedab91fb80ed636f36" ] ], "gm_map": [ @@ -62,7 +62,7 @@ "id": "test", "single_end": false }, - "test__mask_gm.nii.gz:md5,247106ed727133078fe262b0b8244071" + "test__mask_gm.nii.gz:md5,a363d6207419b08346a7c05c6525430e" ] ], "versions": [ @@ -77,16 +77,16 @@ "id": "test", "single_end": false }, - "test__mask_wm.nii.gz:md5,2dc635526adb6ef185300acc326ead13" + "test__mask_wm.nii.gz:md5,0ed4a06defc512b1b898d6e0c3ef678a" ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0-rc1", + "nextflow": "24.04.4" }, - "timestamp": "2024-05-09T20:53:29.945493" + "timestamp": "2024-09-05T02:45:52.364394" }, "anatomical_segmentation - fslfast": { "content": [ @@ -94,55 +94,49 @@ "0": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__mask_wm.nii.gz:md5,f849e268007a747714e342162f13f631" + "test__mask_wm.nii.gz:md5,98d75f5c0ddd2b7f2bfff8fbf1877e34" ] ], "1": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__mask_gm.nii.gz:md5,39396421c6d1d32ea7943a5ec7a49dce" + "test__mask_gm.nii.gz:md5,a840f08c5b90cb351d3272d8cab6f00c" ] ], "2": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__mask_csf.nii.gz:md5,d0fbc088059f17faff38fbcd33257d27" + "test__mask_csf.nii.gz:md5,f22037987a38e5132ccbb2887ee71842" ] ], "3": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__map_wm.nii.gz:md5,1d5a9655d4e3c832b14c83e9424b00fc" + "test__map_wm.nii.gz:md5,c7d666c66baea2132d70be38017c6901" ] ], "4": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__map_gm.nii.gz:md5,f7e51eb14af645c687db5d2c6a4f5bf4" + "test__map_gm.nii.gz:md5,6dbc993e43f6efcdd6a3a097df2b4574" ] ], "5": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__map_csf.nii.gz:md5,9c14d8f70e69d641d9c214d0d52b3663" + "test__map_csf.nii.gz:md5,dcc224f10f31ee306491ebbdcfbe5bfe" ] ], "6": [ @@ -151,37 +145,33 @@ "csf_map": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__map_csf.nii.gz:md5,9c14d8f70e69d641d9c214d0d52b3663" + "test__map_csf.nii.gz:md5,dcc224f10f31ee306491ebbdcfbe5bfe" ] ], "csf_mask": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__mask_csf.nii.gz:md5,d0fbc088059f17faff38fbcd33257d27" + "test__mask_csf.nii.gz:md5,f22037987a38e5132ccbb2887ee71842" ] ], "gm_map": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__map_gm.nii.gz:md5,f7e51eb14af645c687db5d2c6a4f5bf4" + "test__map_gm.nii.gz:md5,6dbc993e43f6efcdd6a3a097df2b4574" ] ], "gm_mask": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__mask_gm.nii.gz:md5,39396421c6d1d32ea7943a5ec7a49dce" + "test__mask_gm.nii.gz:md5,a840f08c5b90cb351d3272d8cab6f00c" ] ], "versions": [ @@ -190,27 +180,25 @@ "wm_map": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__map_wm.nii.gz:md5,1d5a9655d4e3c832b14c83e9424b00fc" + "test__map_wm.nii.gz:md5,c7d666c66baea2132d70be38017c6901" ] ], "wm_mask": [ [ { - "id": "test", - "single_end": false + "id": "test" }, - "test__mask_wm.nii.gz:md5,f849e268007a747714e342162f13f631" + "test__mask_wm.nii.gz:md5,98d75f5c0ddd2b7f2bfff8fbf1877e34" ] ] } ], "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" + "nf-test": "0.9.0-rc1", + "nextflow": "24.04.4" }, - "timestamp": "2024-06-17T14:24:57.988893" + "timestamp": "2024-09-05T02:38:48.75146" } } \ No newline at end of file diff --git a/tests/config/test_data.json b/tests/config/test_data.json index b5201265..14fa9597 100644 --- a/tests/config/test_data.json +++ b/tests/config/test_data.json @@ -51,5 +51,7 @@ "T1w.zip": "8e9cf2beec4595d407732152a19589f5", "dti.zip": "ba866c59fc4d984f626691a6b941fc32", "responses.zip": "1a5b862b91c72740bcce0431a1f9254a", - "segmentation.zip": "ab51be6d142ad1a8e30ffb964447d010" + "segmentation.zip": "ab51be6d142ad1a8e30ffb964447d010", + "freesurfer_full.zip": "203e482426065326ff5920368d4d7908", + "freesurfer_nifti.zip": "adb5ac4cf5c45040339e04e7c142e8c9" } From 4c6be2beb219e389069d6c70d5f92c11e0e929f1 Mon Sep 17 00:00:00 2001 From: AlexVCaron Date: Thu, 5 Sep 2024 04:09:45 +0000 Subject: [PATCH 24/24] add treeview to package --- .../extension-package/package-lock.json | 4 ++-- .../extension-package/package.json | 5 +++-- nf-scil-extensions/test-data-treeview/icon.avif | Bin 0 -> 6225 bytes 3 files changed, 5 insertions(+), 4 deletions(-) create mode 100755 nf-scil-extensions/test-data-treeview/icon.avif diff --git a/nf-scil-extensions/extension-package/package-lock.json b/nf-scil-extensions/extension-package/package-lock.json index 1836e475..43a1cb55 100644 --- a/nf-scil-extensions/extension-package/package-lock.json +++ b/nf-scil-extensions/extension-package/package-lock.json @@ -1,12 +1,12 @@ { "name": "nf-scil-extensions", - "version": "0.0.2", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nf-scil-extensions", - "version": "0.0.2", + "version": "0.1.0", "engines": { "vscode": "^1.84.0" } diff --git a/nf-scil-extensions/extension-package/package.json b/nf-scil-extensions/extension-package/package.json index c8feff13..2cbf2df8 100755 --- a/nf-scil-extensions/extension-package/package.json +++ b/nf-scil-extensions/extension-package/package.json @@ -7,7 +7,7 @@ "url": "https://github.com/scilus/nf-scil.git" }, "icon": "icon.avif", - "version": "0.0.3", + "version": "0.1.0", "publisher": "AlexVCaron", "engines": { "vscode": "^1.84.0" @@ -54,6 +54,7 @@ "christian-kohler.npm-intellisense", "dbaeumer.vscode-eslint", "connor4312.esbuild-problem-matchers", - "ms-vscode.extension-test-runner" + "ms-vscode.extension-test-runner", + "AlexVCaron.nf-scil-test-data-treeview" ] } diff --git a/nf-scil-extensions/test-data-treeview/icon.avif b/nf-scil-extensions/test-data-treeview/icon.avif new file mode 100755 index 0000000000000000000000000000000000000000..3bf48d77a3a9531e21f74521c76b4f37813a3094 GIT binary patch literal 6225 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 REul#5otYE~1x2FK{{uMg&aD6d literal 0 HcmV?d00001