├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── dependabot.yml └── workflows │ ├── publish.yml │ └── test.yml ├── .gitignore ├── .husky ├── .gitignore ├── commit-msg └── pre-commit ├── .prettierrc ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── action.yml ├── dist ├── index.js ├── index.js.map ├── licenses.txt ├── package.json └── sourcemap-register.cjs ├── eslint.config.js ├── package-lock.json ├── package.json ├── src ├── cloudflare-statuscheck.js ├── cloudflare.js └── index.js └── test ├── cloudflare-statuscheck.test.js ├── cloudflare.test.js └── fixtures ├── check-environments.json ├── empty.json ├── filter-by-commithash.json ├── no-matching-builds.json └── success.json /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Additional context** 24 | Add any other context about the problem here. 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: '/' 5 | schedule: 6 | interval: 'monthly' 7 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | permissions: 4 | contents: write 5 | deployments: write 6 | issues: read 7 | pull-requests: write 8 | 9 | on: 10 | push: 11 | branches: 12 | - 'main' 13 | 14 | jobs: 15 | test: 16 | env: 17 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 18 | runs-on: ubuntu-latest 19 | steps: 20 | - uses: actions/checkout@v4 21 | - uses: actions/setup-node@v4 22 | with: 23 | node-version: 20 24 | - run: npm ci 25 | - run: npm test 26 | - run: npx semantic-release 27 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - '**' 7 | - '!main' 8 | push: 9 | branches: 10 | - '**' 11 | - '!main' 12 | 13 | jobs: 14 | test: 15 | env: 16 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: actions/checkout@v4 20 | with: 21 | fetch-depth: 0 22 | - uses: actions/setup-node@v4 23 | with: 24 | node-version: 20 25 | - run: npm ci 26 | # - name: Lint Code Base 27 | # uses: github/super-linter/slim@v6 28 | - run: npm run lint 29 | - run: npm test 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | # Editors 4 | .vscode/ 5 | .idea/ 6 | *.iml 7 | 8 | # Logs 9 | logs 10 | *.log 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | 15 | # Directory for instrumented libs generated by jscoverage/JSCover 16 | lib-cov 17 | 18 | # Coverage directory used by tools like istanbul 19 | coverage 20 | 21 | # nyc test coverage 22 | .nyc_output 23 | 24 | # Optional npm cache directory 25 | .npm 26 | 27 | # Optional eslint cache 28 | .eslintcache 29 | 30 | # Optional REPL history 31 | .node_repl_history 32 | 33 | # Output of 'npm pack' 34 | *.tgz 35 | 36 | # dotenv environment variables file 37 | .env -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | npx commitlint --edit $1 -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | npx lint-staged -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": false, 4 | "trailingComma": "none", 5 | "proseWrap": "always" 6 | } 7 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute 2 | 3 | We'd love to accept your patches and contributions to this project. There are 4 | just a few small guidelines you need to follow. 5 | 6 | ## Code reviews 7 | 8 | All submissions require review. We use GitHub pull requests for this purpose. 9 | Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for 10 | more information on using pull requests. 11 | 12 | ## Style Guide 13 | 14 | This project provides a prettier configuration. All submitted PRs will be 15 | required to conform to this style guide before being merged. 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Zentered OÜ 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cloudflare Preview URL 2 | 3 | ![Test](https://github.com/zentered/cloudflare-preview-url/workflows/Test/badge.svg) 4 | ![Release](https://github.com/zentered/cloudflare-preview-url/workflows/Publish/badge.svg) 5 | [![semantic-release: conventional](https://img.shields.io/badge/semantic--release-conventional-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release) 6 | [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org) 7 | 8 | Retrieve the preview/deployment URL from the Cloudflare API, filtered by the 9 | repository and branch. The URL can then be used for further end-to-end tests, 10 | link checks and other PR integrations/actions. 11 | 12 | ## Usage 13 | 14 | ### API Token (recommended) 15 | 16 | Navigate to the 17 | [Cloudflare API Tokens](https://dash.cloudflare.com/profile/api-tokens) page and 18 | create a new token with the following permissions: 19 | 20 | - Account - Cloudflare Pages - Read 21 | - Include - [your page] 22 | 23 | Copy the token and add it to your repository secrets as `CLOUDFLARE_API_TOKEN`. 24 | 25 | ### Global API Key 26 | 27 | [Copy your "Global API Key"](https://dash.cloudflare.com/profile/api-tokens) - 28 | this also requires the Account Email to be set. 29 | 30 | ### Workflow template 31 | 32 | ```yaml 33 | on: 34 | push: 35 | branches: 36 | - '**' 37 | - '!main' 38 | # Add a sleep action to wait until the deployment is ready 39 | - run: sleep 30 40 | - name: cloudflare-preview-url 41 | # Use the latest version 42 | uses: zentered/cloudflare-preview-url@v1.4.2 43 | id: cloudflare_preview_url 44 | env: 45 | CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} 46 | CLOUDFLARE_ACCOUNT_EMAIL: ${{ secrets.CLOUDFLARE_ACCOUNT_EMAIL }} 47 | CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} 48 | with: 49 | cloudflare_project_id: 'repo-name' 50 | wait_until_ready: true 51 | - name: Get URL 52 | run: echo "https://${{ steps.cloudflare_preview_url.outputs.preview_url }}" 53 | ``` 54 | 55 | We recommend setting a timeout for this action, if something goes wrong with the 56 | build, the Action should stop after 10 minutes: 57 | 58 | ```yaml 59 | runs-on: ubuntu-latest 60 | timeout-minutes: 10 61 | ``` 62 | 63 | ## Environment Variables / Secrets 64 | 65 | In the repository, go to "Settings", then "Secrets" and add 66 | `CLOUDFLARE_API_TOKEN`, the value you can retrieve on your 67 | [Cloudflare account](https://dash.cloudflare.com/profile/api-tokens). You also 68 | need to add: 69 | 70 | - `CLOUDFLARE_ACCOUNT_ID` (from the URL: 71 | `https://dash.cloudflare.com/123abc....`) 72 | - [optional] `CLOUDFLARE_ACCOUNT_EMAIL` (your login email) 73 | 74 | When providing an account email address, the token will not be used as `Bearer` 75 | token. 76 | 77 | ## Inputs 78 | 79 | | Name | Requirement | Description | 80 | | ----------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------- | 81 | | `cloudflare_project_id` | required | Cloudflare project id/name | 82 | | `wait_until_ready` | optional | Wait until the Cloudflare deployment is ready, defaults to "false" | 83 | | `environment` | optional | Which Cloudflare deployment environments to allow. If set to null, doesn't filter deploys by environment. Defaults to "preview" | 84 | | `commit_hash` | optional | Optional commit hash to filter deployments on. Useful when the same branch can have multiple deploys. | 85 | | `branch` | optional | Optional branch name to filter deployments on. Useful when the branch name is not available in the action context. | 86 | 87 | ## Outputs 88 | 89 | | Name | Description | 90 | | ------------- | ----------------------------------------------------------------------------------------------------------------------- | 91 | | `preview_url` | A string with the unique URL of the deployment. If it hasn't finished uploading (is incomplete), the value will be null | 92 | 93 | ## Contributing 94 | 95 | See [CONTRIBUTING](CONTRIBUTING.md). 96 | 97 | ## License 98 | 99 | See [LICENSE](LICENSE). 100 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | branding: 2 | color: orange 3 | icon: triangle 4 | description: 'Receive the deployment preview URL from Cloudflare' 5 | inputs: 6 | cloudflare_project_id: 7 | description: 'Cloudflare project id / name' 8 | required: true 9 | wait_until_ready: 10 | description: 'Wait for deployment to be ready' 11 | required: false 12 | default: '' 13 | environment: 14 | description: "Which Cloudflare deployment environments to allow. If set to null, doesn't filter deploys by environment. Defaults to 'preview'" 15 | required: false 16 | default: 'preview' 17 | commit_hash: 18 | description: "Optional commit hash to filter deployments on. Useful when the same branch can have multiple deploys." 19 | required: false 20 | branch: 21 | description: "Optional branch name to filter deployments on. Useful when the branch name is not available in the action context." 22 | required: false 23 | name: Cloudflare Preview URL 24 | outputs: 25 | preview_url: 26 | description: "A string with the unique URL of the deployment. If it hasn't finished uploading (is incomplete), the value will be null." 27 | runs: 28 | main: dist/index.js 29 | using: node20 30 | -------------------------------------------------------------------------------- /dist/licenses.txt: -------------------------------------------------------------------------------- 1 | @actions/core 2 | MIT 3 | The MIT License (MIT) 4 | 5 | Copyright 2019 GitHub 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | 13 | @actions/http-client 14 | MIT 15 | Actions Http Client for Node.js 16 | 17 | Copyright (c) GitHub, Inc. 18 | 19 | All rights reserved. 20 | 21 | MIT License 22 | 23 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 24 | associated documentation files (the "Software"), to deal in the Software without restriction, 25 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 26 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 27 | subject to the following conditions: 28 | 29 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 32 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 33 | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 34 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 35 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 36 | 37 | 38 | @fastify/busboy 39 | MIT 40 | Copyright Brian White. All rights reserved. 41 | 42 | Permission is hereby granted, free of charge, to any person obtaining a copy 43 | of this software and associated documentation files (the "Software"), to 44 | deal in the Software without restriction, including without limitation the 45 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 46 | sell copies of the Software, and to permit persons to whom the Software is 47 | furnished to do so, subject to the following conditions: 48 | 49 | The above copyright notice and this permission notice shall be included in 50 | all copies or substantial portions of the Software. 51 | 52 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 53 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 54 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 55 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 56 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 57 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 58 | IN THE SOFTWARE. 59 | 60 | tunnel 61 | MIT 62 | The MIT License (MIT) 63 | 64 | Copyright (c) 2012 Koichi Kobayashi 65 | 66 | Permission is hereby granted, free of charge, to any person obtaining a copy 67 | of this software and associated documentation files (the "Software"), to deal 68 | in the Software without restriction, including without limitation the rights 69 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 70 | copies of the Software, and to permit persons to whom the Software is 71 | furnished to do so, subject to the following conditions: 72 | 73 | The above copyright notice and this permission notice shall be included in 74 | all copies or substantial portions of the Software. 75 | 76 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 77 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 78 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 79 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 80 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 81 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 82 | THE SOFTWARE. 83 | 84 | 85 | undici 86 | MIT 87 | MIT License 88 | 89 | Copyright (c) Matteo Collina and Undici contributors 90 | 91 | Permission is hereby granted, free of charge, to any person obtaining a copy 92 | of this software and associated documentation files (the "Software"), to deal 93 | in the Software without restriction, including without limitation the rights 94 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 95 | copies of the Software, and to permit persons to whom the Software is 96 | furnished to do so, subject to the following conditions: 97 | 98 | The above copyright notice and this permission notice shall be included in all 99 | copies or substantial portions of the Software. 100 | 101 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 102 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 103 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 104 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 105 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 106 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 107 | SOFTWARE. 108 | 109 | 110 | uuid 111 | MIT 112 | The MIT License (MIT) 113 | 114 | Copyright (c) 2010-2020 Robert Kieffer and other contributors 115 | 116 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 117 | 118 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 119 | 120 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 121 | -------------------------------------------------------------------------------- /dist/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } 4 | -------------------------------------------------------------------------------- /dist/sourcemap-register.cjs: -------------------------------------------------------------------------------- 1 | (()=>{var e={650:e=>{var r=Object.prototype.toString;var n=typeof Buffer.alloc==="function"&&typeof Buffer.allocUnsafe==="function"&&typeof Buffer.from==="function";function isArrayBuffer(e){return r.call(e).slice(8,-1)==="ArrayBuffer"}function fromArrayBuffer(e,r,t){r>>>=0;var o=e.byteLength-r;if(o<0){throw new RangeError("'offset' is out of bounds")}if(t===undefined){t=o}else{t>>>=0;if(t>o){throw new RangeError("'length' is out of bounds")}}return n?Buffer.from(e.slice(r,r+t)):new Buffer(new Uint8Array(e.slice(r,r+t)))}function fromString(e,r){if(typeof r!=="string"||r===""){r="utf8"}if(!Buffer.isEncoding(r)){throw new TypeError('"encoding" must be a valid string encoding')}return n?Buffer.from(e,r):new Buffer(e,r)}function bufferFrom(e,r,t){if(typeof e==="number"){throw new TypeError('"value" argument must not be a number')}if(isArrayBuffer(e)){return fromArrayBuffer(e,r,t)}if(typeof e==="string"){return fromString(e,r)}return n?Buffer.from(e):new Buffer(e)}e.exports=bufferFrom},274:(e,r,n)=>{var t=n(339);var o=Object.prototype.hasOwnProperty;var i=typeof Map!=="undefined";function ArraySet(){this._array=[];this._set=i?new Map:Object.create(null)}ArraySet.fromArray=function ArraySet_fromArray(e,r){var n=new ArraySet;for(var t=0,o=e.length;t=0){return r}}else{var n=t.toSetString(e);if(o.call(this._set,n)){return this._set[n]}}throw new Error('"'+e+'" is not in the set.')};ArraySet.prototype.at=function ArraySet_at(e){if(e>=0&&e{var t=n(190);var o=5;var i=1<>1;return r?-n:n}r.encode=function base64VLQ_encode(e){var r="";var n;var i=toVLQSigned(e);do{n=i&a;i>>>=o;if(i>0){n|=u}r+=t.encode(n)}while(i>0);return r};r.decode=function base64VLQ_decode(e,r,n){var i=e.length;var s=0;var l=0;var c,p;do{if(r>=i){throw new Error("Expected more digits in base 64 VLQ value.")}p=t.decode(e.charCodeAt(r++));if(p===-1){throw new Error("Invalid base64 digit: "+e.charAt(r-1))}c=!!(p&u);p&=a;s=s+(p<{var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");r.encode=function(e){if(0<=e&&e{r.GREATEST_LOWER_BOUND=1;r.LEAST_UPPER_BOUND=2;function recursiveSearch(e,n,t,o,i,a){var u=Math.floor((n-e)/2)+e;var s=i(t,o[u],true);if(s===0){return u}else if(s>0){if(n-u>1){return recursiveSearch(u,n,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return n1){return recursiveSearch(e,u,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return u}else{return e<0?-1:e}}}r.search=function search(e,n,t,o){if(n.length===0){return-1}var i=recursiveSearch(-1,n.length,e,n,t,o||r.GREATEST_LOWER_BOUND);if(i<0){return-1}while(i-1>=0){if(t(n[i],n[i-1],true)!==0){break}--i}return i}},680:(e,r,n)=>{var t=n(339);function generatedPositionAfter(e,r){var n=e.generatedLine;var o=r.generatedLine;var i=e.generatedColumn;var a=r.generatedColumn;return o>n||o==n&&a>=i||t.compareByGeneratedPositionsInflated(e,r)<=0}function MappingList(){this._array=[];this._sorted=true;this._last={generatedLine:-1,generatedColumn:0}}MappingList.prototype.unsortedForEach=function MappingList_forEach(e,r){this._array.forEach(e,r)};MappingList.prototype.add=function MappingList_add(e){if(generatedPositionAfter(this._last,e)){this._last=e;this._array.push(e)}else{this._sorted=false;this._array.push(e)}};MappingList.prototype.toArray=function MappingList_toArray(){if(!this._sorted){this._array.sort(t.compareByGeneratedPositionsInflated);this._sorted=true}return this._array};r.H=MappingList},758:(e,r)=>{function swap(e,r,n){var t=e[r];e[r]=e[n];e[n]=t}function randomIntInRange(e,r){return Math.round(e+Math.random()*(r-e))}function doQuickSort(e,r,n,t){if(n{var t;var o=n(339);var i=n(345);var a=n(274).I;var u=n(449);var s=n(758).U;function SourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}return n.sections!=null?new IndexedSourceMapConsumer(n,r):new BasicSourceMapConsumer(n,r)}SourceMapConsumer.fromSourceMap=function(e,r){return BasicSourceMapConsumer.fromSourceMap(e,r)};SourceMapConsumer.prototype._version=3;SourceMapConsumer.prototype.__generatedMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_generatedMappings",{configurable:true,enumerable:true,get:function(){if(!this.__generatedMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__generatedMappings}});SourceMapConsumer.prototype.__originalMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_originalMappings",{configurable:true,enumerable:true,get:function(){if(!this.__originalMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__originalMappings}});SourceMapConsumer.prototype._charIsMappingSeparator=function SourceMapConsumer_charIsMappingSeparator(e,r){var n=e.charAt(r);return n===";"||n===","};SourceMapConsumer.prototype._parseMappings=function SourceMapConsumer_parseMappings(e,r){throw new Error("Subclasses must implement _parseMappings")};SourceMapConsumer.GENERATED_ORDER=1;SourceMapConsumer.ORIGINAL_ORDER=2;SourceMapConsumer.GREATEST_LOWER_BOUND=1;SourceMapConsumer.LEAST_UPPER_BOUND=2;SourceMapConsumer.prototype.eachMapping=function SourceMapConsumer_eachMapping(e,r,n){var t=r||null;var i=n||SourceMapConsumer.GENERATED_ORDER;var a;switch(i){case SourceMapConsumer.GENERATED_ORDER:a=this._generatedMappings;break;case SourceMapConsumer.ORIGINAL_ORDER:a=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;a.map((function(e){var r=e.source===null?null:this._sources.at(e.source);r=o.computeSourceURL(u,r,this._sourceMapURL);return{source:r,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name===null?null:this._names.at(e.name)}}),this).forEach(e,t)};SourceMapConsumer.prototype.allGeneratedPositionsFor=function SourceMapConsumer_allGeneratedPositionsFor(e){var r=o.getArg(e,"line");var n={source:o.getArg(e,"source"),originalLine:r,originalColumn:o.getArg(e,"column",0)};n.source=this._findSourceIndex(n.source);if(n.source<0){return[]}var t=[];var a=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,i.LEAST_UPPER_BOUND);if(a>=0){var u=this._originalMappings[a];if(e.column===undefined){var s=u.originalLine;while(u&&u.originalLine===s){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}else{var l=u.originalColumn;while(u&&u.originalLine===r&&u.originalColumn==l){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}}return t};r.SourceMapConsumer=SourceMapConsumer;function BasicSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sources");var u=o.getArg(n,"names",[]);var s=o.getArg(n,"sourceRoot",null);var l=o.getArg(n,"sourcesContent",null);var c=o.getArg(n,"mappings");var p=o.getArg(n,"file",null);if(t!=this._version){throw new Error("Unsupported version: "+t)}if(s){s=o.normalize(s)}i=i.map(String).map(o.normalize).map((function(e){return s&&o.isAbsolute(s)&&o.isAbsolute(e)?o.relative(s,e):e}));this._names=a.fromArray(u.map(String),true);this._sources=a.fromArray(i,true);this._absoluteSources=this._sources.toArray().map((function(e){return o.computeSourceURL(s,e,r)}));this.sourceRoot=s;this.sourcesContent=l;this._mappings=c;this._sourceMapURL=r;this.file=p}BasicSourceMapConsumer.prototype=Object.create(SourceMapConsumer.prototype);BasicSourceMapConsumer.prototype.consumer=SourceMapConsumer;BasicSourceMapConsumer.prototype._findSourceIndex=function(e){var r=e;if(this.sourceRoot!=null){r=o.relative(this.sourceRoot,r)}if(this._sources.has(r)){return this._sources.indexOf(r)}var n;for(n=0;n1){v.source=l+_[1];l+=_[1];v.originalLine=i+_[2];i=v.originalLine;v.originalLine+=1;v.originalColumn=a+_[3];a=v.originalColumn;if(_.length>4){v.name=c+_[4];c+=_[4]}}m.push(v);if(typeof v.originalLine==="number"){d.push(v)}}}s(m,o.compareByGeneratedPositionsDeflated);this.__generatedMappings=m;s(d,o.compareByOriginalPositions);this.__originalMappings=d};BasicSourceMapConsumer.prototype._findMapping=function SourceMapConsumer_findMapping(e,r,n,t,o,a){if(e[n]<=0){throw new TypeError("Line must be greater than or equal to 1, got "+e[n])}if(e[t]<0){throw new TypeError("Column must be greater than or equal to 0, got "+e[t])}return i.search(e,r,o,a)};BasicSourceMapConsumer.prototype.computeColumnSpans=function SourceMapConsumer_computeColumnSpans(){for(var e=0;e=0){var t=this._generatedMappings[n];if(t.generatedLine===r.generatedLine){var i=o.getArg(t,"source",null);if(i!==null){i=this._sources.at(i);i=o.computeSourceURL(this.sourceRoot,i,this._sourceMapURL)}var a=o.getArg(t,"name",null);if(a!==null){a=this._names.at(a)}return{source:i,line:o.getArg(t,"originalLine",null),column:o.getArg(t,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}};BasicSourceMapConsumer.prototype.hasContentsOfAllSources=function BasicSourceMapConsumer_hasContentsOfAllSources(){if(!this.sourcesContent){return false}return this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some((function(e){return e==null}))};BasicSourceMapConsumer.prototype.sourceContentFor=function SourceMapConsumer_sourceContentFor(e,r){if(!this.sourcesContent){return null}var n=this._findSourceIndex(e);if(n>=0){return this.sourcesContent[n]}var t=e;if(this.sourceRoot!=null){t=o.relative(this.sourceRoot,t)}var i;if(this.sourceRoot!=null&&(i=o.urlParse(this.sourceRoot))){var a=t.replace(/^file:\/\//,"");if(i.scheme=="file"&&this._sources.has(a)){return this.sourcesContent[this._sources.indexOf(a)]}if((!i.path||i.path=="/")&&this._sources.has("/"+t)){return this.sourcesContent[this._sources.indexOf("/"+t)]}}if(r){return null}else{throw new Error('"'+t+'" is not in the SourceMap.')}};BasicSourceMapConsumer.prototype.generatedPositionFor=function SourceMapConsumer_generatedPositionFor(e){var r=o.getArg(e,"source");r=this._findSourceIndex(r);if(r<0){return{line:null,column:null,lastColumn:null}}var n={source:r,originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")};var t=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,o.getArg(e,"bias",SourceMapConsumer.GREATEST_LOWER_BOUND));if(t>=0){var i=this._originalMappings[t];if(i.source===n.source){return{line:o.getArg(i,"generatedLine",null),column:o.getArg(i,"generatedColumn",null),lastColumn:o.getArg(i,"lastGeneratedColumn",null)}}}return{line:null,column:null,lastColumn:null}};t=BasicSourceMapConsumer;function IndexedSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sections");if(t!=this._version){throw new Error("Unsupported version: "+t)}this._sources=new a;this._names=new a;var u={line:-1,column:0};this._sections=i.map((function(e){if(e.url){throw new Error("Support for url field in sections not implemented.")}var n=o.getArg(e,"offset");var t=o.getArg(n,"line");var i=o.getArg(n,"column");if(t{var t=n(449);var o=n(339);var i=n(274).I;var a=n(680).H;function SourceMapGenerator(e){if(!e){e={}}this._file=o.getArg(e,"file",null);this._sourceRoot=o.getArg(e,"sourceRoot",null);this._skipValidation=o.getArg(e,"skipValidation",false);this._sources=new i;this._names=new i;this._mappings=new a;this._sourcesContents=null}SourceMapGenerator.prototype._version=3;SourceMapGenerator.fromSourceMap=function SourceMapGenerator_fromSourceMap(e){var r=e.sourceRoot;var n=new SourceMapGenerator({file:e.file,sourceRoot:r});e.eachMapping((function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};if(e.source!=null){t.source=e.source;if(r!=null){t.source=o.relative(r,t.source)}t.original={line:e.originalLine,column:e.originalColumn};if(e.name!=null){t.name=e.name}}n.addMapping(t)}));e.sources.forEach((function(t){var i=t;if(r!==null){i=o.relative(r,t)}if(!n._sources.has(i)){n._sources.add(i)}var a=e.sourceContentFor(t);if(a!=null){n.setSourceContent(t,a)}}));return n};SourceMapGenerator.prototype.addMapping=function SourceMapGenerator_addMapping(e){var r=o.getArg(e,"generated");var n=o.getArg(e,"original",null);var t=o.getArg(e,"source",null);var i=o.getArg(e,"name",null);if(!this._skipValidation){this._validateMapping(r,n,t,i)}if(t!=null){t=String(t);if(!this._sources.has(t)){this._sources.add(t)}}if(i!=null){i=String(i);if(!this._names.has(i)){this._names.add(i)}}this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:t,name:i})};SourceMapGenerator.prototype.setSourceContent=function SourceMapGenerator_setSourceContent(e,r){var n=e;if(this._sourceRoot!=null){n=o.relative(this._sourceRoot,n)}if(r!=null){if(!this._sourcesContents){this._sourcesContents=Object.create(null)}this._sourcesContents[o.toSetString(n)]=r}else if(this._sourcesContents){delete this._sourcesContents[o.toSetString(n)];if(Object.keys(this._sourcesContents).length===0){this._sourcesContents=null}}};SourceMapGenerator.prototype.applySourceMap=function SourceMapGenerator_applySourceMap(e,r,n){var t=r;if(r==null){if(e.file==null){throw new Error("SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, "+'or the source map\'s "file" property. Both were omitted.')}t=e.file}var a=this._sourceRoot;if(a!=null){t=o.relative(a,t)}var u=new i;var s=new i;this._mappings.unsortedForEach((function(r){if(r.source===t&&r.originalLine!=null){var i=e.originalPositionFor({line:r.originalLine,column:r.originalColumn});if(i.source!=null){r.source=i.source;if(n!=null){r.source=o.join(n,r.source)}if(a!=null){r.source=o.relative(a,r.source)}r.originalLine=i.line;r.originalColumn=i.column;if(i.name!=null){r.name=i.name}}}var l=r.source;if(l!=null&&!u.has(l)){u.add(l)}var c=r.name;if(c!=null&&!s.has(c)){s.add(c)}}),this);this._sources=u;this._names=s;e.sources.forEach((function(r){var t=e.sourceContentFor(r);if(t!=null){if(n!=null){r=o.join(n,r)}if(a!=null){r=o.relative(a,r)}this.setSourceContent(r,t)}}),this)};SourceMapGenerator.prototype._validateMapping=function SourceMapGenerator_validateMapping(e,r,n,t){if(r&&typeof r.line!=="number"&&typeof r.column!=="number"){throw new Error("original.line and original.column are not numbers -- you probably meant to omit "+"the original mapping entirely and only map the generated position. If so, pass "+"null for the original mapping instead of an object with empty or null values.")}if(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!r&&!n&&!t){return}else if(e&&"line"in e&&"column"in e&&r&&"line"in r&&"column"in r&&e.line>0&&e.column>=0&&r.line>0&&r.column>=0&&n){return}else{throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:r,name:t}))}};SourceMapGenerator.prototype._serializeMappings=function SourceMapGenerator_serializeMappings(){var e=0;var r=1;var n=0;var i=0;var a=0;var u=0;var s="";var l;var c;var p;var f;var g=this._mappings.toArray();for(var h=0,d=g.length;h0){if(!o.compareByGeneratedPositionsInflated(c,g[h-1])){continue}l+=","}}l+=t.encode(c.generatedColumn-e);e=c.generatedColumn;if(c.source!=null){f=this._sources.indexOf(c.source);l+=t.encode(f-u);u=f;l+=t.encode(c.originalLine-1-i);i=c.originalLine-1;l+=t.encode(c.originalColumn-n);n=c.originalColumn;if(c.name!=null){p=this._names.indexOf(c.name);l+=t.encode(p-a);a=p}}s+=l}return s};SourceMapGenerator.prototype._generateSourcesContent=function SourceMapGenerator_generateSourcesContent(e,r){return e.map((function(e){if(!this._sourcesContents){return null}if(r!=null){e=o.relative(r,e)}var n=o.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null}),this)};SourceMapGenerator.prototype.toJSON=function SourceMapGenerator_toJSON(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};if(this._file!=null){e.file=this._file}if(this._sourceRoot!=null){e.sourceRoot=this._sourceRoot}if(this._sourcesContents){e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)}return e};SourceMapGenerator.prototype.toString=function SourceMapGenerator_toString(){return JSON.stringify(this.toJSON())};r.h=SourceMapGenerator},351:(e,r,n)=>{var t;var o=n(591).h;var i=n(339);var a=/(\r?\n)/;var u=10;var s="$$$isSourceNode$$$";function SourceNode(e,r,n,t,o){this.children=[];this.sourceContents={};this.line=e==null?null:e;this.column=r==null?null:r;this.source=n==null?null:n;this.name=o==null?null:o;this[s]=true;if(t!=null)this.add(t)}SourceNode.fromStringWithSourceMap=function SourceNode_fromStringWithSourceMap(e,r,n){var t=new SourceNode;var o=e.split(a);var u=0;var shiftNextLine=function(){var e=getNextLine();var r=getNextLine()||"";return e+r;function getNextLine(){return u=0;r--){this.prepend(e[r])}}else if(e[s]||typeof e==="string"){this.children.unshift(e)}else{throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e)}return this};SourceNode.prototype.walk=function SourceNode_walk(e){var r;for(var n=0,t=this.children.length;n0){r=[];for(n=0;n{function getArg(e,r,n){if(r in e){return e[r]}else if(arguments.length===3){return n}else{throw new Error('"'+r+'" is a required argument.')}}r.getArg=getArg;var n=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;var t=/^data:.+\,.+$/;function urlParse(e){var r=e.match(n);if(!r){return null}return{scheme:r[1],auth:r[2],host:r[3],port:r[4],path:r[5]}}r.urlParse=urlParse;function urlGenerate(e){var r="";if(e.scheme){r+=e.scheme+":"}r+="//";if(e.auth){r+=e.auth+"@"}if(e.host){r+=e.host}if(e.port){r+=":"+e.port}if(e.path){r+=e.path}return r}r.urlGenerate=urlGenerate;function normalize(e){var n=e;var t=urlParse(e);if(t){if(!t.path){return e}n=t.path}var o=r.isAbsolute(n);var i=n.split(/\/+/);for(var a,u=0,s=i.length-1;s>=0;s--){a=i[s];if(a==="."){i.splice(s,1)}else if(a===".."){u++}else if(u>0){if(a===""){i.splice(s+1,u);u=0}else{i.splice(s,2);u--}}}n=i.join("/");if(n===""){n=o?"/":"."}if(t){t.path=n;return urlGenerate(t)}return n}r.normalize=normalize;function join(e,r){if(e===""){e="."}if(r===""){r="."}var n=urlParse(r);var o=urlParse(e);if(o){e=o.path||"/"}if(n&&!n.scheme){if(o){n.scheme=o.scheme}return urlGenerate(n)}if(n||r.match(t)){return r}if(o&&!o.host&&!o.path){o.host=r;return urlGenerate(o)}var i=r.charAt(0)==="/"?r:normalize(e.replace(/\/+$/,"")+"/"+r);if(o){o.path=i;return urlGenerate(o)}return i}r.join=join;r.isAbsolute=function(e){return e.charAt(0)==="/"||n.test(e)};function relative(e,r){if(e===""){e="."}e=e.replace(/\/$/,"");var n=0;while(r.indexOf(e+"/")!==0){var t=e.lastIndexOf("/");if(t<0){return r}e=e.slice(0,t);if(e.match(/^([^\/]+:\/)?\/*$/)){return r}++n}return Array(n+1).join("../")+r.substr(e.length+1)}r.relative=relative;var o=function(){var e=Object.create(null);return!("__proto__"in e)}();function identity(e){return e}function toSetString(e){if(isProtoString(e)){return"$"+e}return e}r.toSetString=o?identity:toSetString;function fromSetString(e){if(isProtoString(e)){return e.slice(1)}return e}r.fromSetString=o?identity:fromSetString;function isProtoString(e){if(!e){return false}var r=e.length;if(r<9){return false}if(e.charCodeAt(r-1)!==95||e.charCodeAt(r-2)!==95||e.charCodeAt(r-3)!==111||e.charCodeAt(r-4)!==116||e.charCodeAt(r-5)!==111||e.charCodeAt(r-6)!==114||e.charCodeAt(r-7)!==112||e.charCodeAt(r-8)!==95||e.charCodeAt(r-9)!==95){return false}for(var n=r-10;n>=0;n--){if(e.charCodeAt(n)!==36){return false}}return true}function compareByOriginalPositions(e,r,n){var t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0||n){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0){return t}t=e.generatedLine-r.generatedLine;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByOriginalPositions=compareByOriginalPositions;function compareByGeneratedPositionsDeflated(e,r,n){var t=e.generatedLine-r.generatedLine;if(t!==0){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0||n){return t}t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsDeflated=compareByGeneratedPositionsDeflated;function strcmp(e,r){if(e===r){return 0}if(e===null){return 1}if(r===null){return-1}if(e>r){return 1}return-1}function compareByGeneratedPositionsInflated(e,r){var n=e.generatedLine-r.generatedLine;if(n!==0){return n}n=e.generatedColumn-r.generatedColumn;if(n!==0){return n}n=strcmp(e.source,r.source);if(n!==0){return n}n=e.originalLine-r.originalLine;if(n!==0){return n}n=e.originalColumn-r.originalColumn;if(n!==0){return n}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsInflated=compareByGeneratedPositionsInflated;function parseSourceMapInput(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}r.parseSourceMapInput=parseSourceMapInput;function computeSourceURL(e,r,n){r=r||"";if(e){if(e[e.length-1]!=="/"&&r[0]!=="/"){e+="/"}r=e+r}if(n){var t=urlParse(n);if(!t){throw new Error("sourceMapURL could not be parsed")}if(t.path){var o=t.path.lastIndexOf("/");if(o>=0){t.path=t.path.substring(0,o+1)}}r=join(urlGenerate(t),r)}return normalize(r)}r.computeSourceURL=computeSourceURL},997:(e,r,n)=>{n(591).h;r.SourceMapConsumer=n(952).SourceMapConsumer;n(351)},284:(e,r,n)=>{e=n.nmd(e);var t=n(997).SourceMapConsumer;var o=n(17);var i;try{i=n(147);if(!i.existsSync||!i.readFileSync){i=null}}catch(e){}var a=n(650);function dynamicRequire(e,r){return e.require(r)}var u=false;var s=false;var l=false;var c="auto";var p={};var f={};var g=/^data:application\/json[^,]+base64,/;var h=[];var d=[];function isInBrowser(){if(c==="browser")return true;if(c==="node")return false;return typeof window!=="undefined"&&typeof XMLHttpRequest==="function"&&!(window.require&&window.module&&window.process&&window.process.type==="renderer")}function hasGlobalProcessEventEmitter(){return typeof process==="object"&&process!==null&&typeof process.on==="function"}function globalProcessVersion(){if(typeof process==="object"&&process!==null){return process.version}else{return""}}function globalProcessStderr(){if(typeof process==="object"&&process!==null){return process.stderr}}function globalProcessExit(e){if(typeof process==="object"&&process!==null&&typeof process.exit==="function"){return process.exit(e)}}function handlerExec(e){return function(r){for(var n=0;n"}var n=this.getLineNumber();if(n!=null){r+=":"+n;var t=this.getColumnNumber();if(t){r+=":"+t}}}var o="";var i=this.getFunctionName();var a=true;var u=this.isConstructor();var s=!(this.isToplevel()||u);if(s){var l=this.getTypeName();if(l==="[object Object]"){l="null"}var c=this.getMethodName();if(i){if(l&&i.indexOf(l)!=0){o+=l+"."}o+=i;if(c&&i.indexOf("."+c)!=i.length-c.length-1){o+=" [as "+c+"]"}}else{o+=l+"."+(c||"")}}else if(u){o+="new "+(i||"")}else if(i){o+=i}else{o+=r;a=false}if(a){o+=" ("+r+")"}return o}function cloneCallSite(e){var r={};Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach((function(n){r[n]=/^(?:is|get)/.test(n)?function(){return e[n].call(e)}:e[n]}));r.toString=CallSiteToString;return r}function wrapCallSite(e,r){if(r===undefined){r={nextPosition:null,curPosition:null}}if(e.isNative()){r.curPosition=null;return e}var n=e.getFileName()||e.getScriptNameOrSourceURL();if(n){var t=e.getLineNumber();var o=e.getColumnNumber()-1;var i=/^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/;var a=i.test(globalProcessVersion())?0:62;if(t===1&&o>a&&!isInBrowser()&&!e.isEval()){o-=a}var u=mapSourcePosition({source:n,line:t,column:o});r.curPosition=u;e=cloneCallSite(e);var s=e.getFunctionName;e.getFunctionName=function(){if(r.nextPosition==null){return s()}return r.nextPosition.name||s()};e.getFileName=function(){return u.source};e.getLineNumber=function(){return u.line};e.getColumnNumber=function(){return u.column+1};e.getScriptNameOrSourceURL=function(){return u.source};return e}var l=e.isEval()&&e.getEvalOrigin();if(l){l=mapEvalOrigin(l);e=cloneCallSite(e);e.getEvalOrigin=function(){return l};return e}return e}function prepareStackTrace(e,r){if(l){p={};f={}}var n=e.name||"Error";var t=e.message||"";var o=n+": "+t;var i={nextPosition:null,curPosition:null};var a=[];for(var u=r.length-1;u>=0;u--){a.push("\n at "+wrapCallSite(r[u],i));i.nextPosition=i.curPosition}i.curPosition=i.nextPosition=null;return o+a.reverse().join("")}function getErrorSource(e){var r=/\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(e.stack);if(r){var n=r[1];var t=+r[2];var o=+r[3];var a=p[n];if(!a&&i&&i.existsSync(n)){try{a=i.readFileSync(n,"utf8")}catch(e){a=""}}if(a){var u=a.split(/(?:\r\n|\r|\n)/)[t-1];if(u){return n+":"+t+"\n"+u+"\n"+new Array(o).join(" ")+"^"}}}return null}function printErrorAndExit(e){var r=getErrorSource(e);var n=globalProcessStderr();if(n&&n._handle&&n._handle.setBlocking){n._handle.setBlocking(true)}if(r){console.error();console.error(r)}console.error(e.stack);globalProcessExit(1)}function shimEmitUncaughtException(){var e=process.emit;process.emit=function(r){if(r==="uncaughtException"){var n=arguments[1]&&arguments[1].stack;var t=this.listeners(r).length>0;if(n&&!t){return printErrorAndExit(arguments[1])}}return e.apply(this,arguments)}}var S=h.slice(0);var _=d.slice(0);r.wrapCallSite=wrapCallSite;r.getErrorSource=getErrorSource;r.mapSourcePosition=mapSourcePosition;r.retrieveSourceMap=v;r.install=function(r){r=r||{};if(r.environment){c=r.environment;if(["node","browser","auto"].indexOf(c)===-1){throw new Error("environment "+c+" was unknown. Available options are {auto, browser, node}")}}if(r.retrieveFile){if(r.overrideRetrieveFile){h.length=0}h.unshift(r.retrieveFile)}if(r.retrieveSourceMap){if(r.overrideRetrieveSourceMap){d.length=0}d.unshift(r.retrieveSourceMap)}if(r.hookRequire&&!isInBrowser()){var n=dynamicRequire(e,"module");var t=n.prototype._compile;if(!t.__sourceMapSupport){n.prototype._compile=function(e,r){p[r]=e;f[r]=undefined;return t.call(this,e,r)};n.prototype._compile.__sourceMapSupport=true}}if(!l){l="emptyCacheBetweenOperations"in r?r.emptyCacheBetweenOperations:false}if(!u){u=true;Error.prepareStackTrace=prepareStackTrace}if(!s){var o="handleUncaughtExceptions"in r?r.handleUncaughtExceptions:true;try{var i=dynamicRequire(e,"worker_threads");if(i.isMainThread===false){o=false}}catch(e){}if(o&&hasGlobalProcessEventEmitter()){s=true;shimEmitUncaughtException()}}};r.resetRetrieveHandlers=function(){h.length=0;d.length=0;h=S.slice(0);d=_.slice(0);v=handlerExec(d);m=handlerExec(h)}},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")}};var r={};function __webpack_require__(n){var t=r[n];if(t!==undefined){return t.exports}var o=r[n]={id:n,loaded:false,exports:{}};var i=true;try{e[n](o,o.exports,__webpack_require__);i=false}finally{if(i)delete r[n]}o.loaded=true;return o.exports}(()=>{__webpack_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __webpack_require__!=="undefined")__webpack_require__.ab=__dirname+"/";var n={};(()=>{__webpack_require__(284).install()})();module.exports=n})(); -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import globals from 'globals' 2 | import js from '@eslint/js' 3 | 4 | export default [ 5 | js.configs.recommended, 6 | { 7 | ignores: ['dist/**/*'] 8 | }, 9 | { 10 | languageOptions: { 11 | globals: globals.node 12 | } 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cloudflare-preview-url", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "cloudflare-preview-url", 9 | "version": "1.0.0", 10 | "hasInstallScript": true, 11 | "license": "MIT", 12 | "dependencies": { 13 | "@actions/core": "^1.10.1" 14 | }, 15 | "devDependencies": { 16 | "@commitlint/config-conventional": "^19.2.2", 17 | "@eslint/js": "^9.5.0", 18 | "@vercel/ncc": "^0.38.1", 19 | "commitlint": "^19.3.0", 20 | "eslint": "^9.5.0", 21 | "esmock": "^2.6.6", 22 | "globals": "^15.6.0", 23 | "husky": "^9.0.11", 24 | "pinst": "^3.0.0", 25 | "prettier": "^3.3.2", 26 | "webpack": "^5.92.1" 27 | }, 28 | "engines": { 29 | "node": ">=20" 30 | } 31 | }, 32 | "node_modules/@aashutoshrathi/word-wrap": { 33 | "version": "1.2.6", 34 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 35 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 36 | "dev": true, 37 | "engines": { 38 | "node": ">=0.10.0" 39 | } 40 | }, 41 | "node_modules/@actions/core": { 42 | "version": "1.10.1", 43 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", 44 | "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", 45 | "dependencies": { 46 | "@actions/http-client": "^2.0.1", 47 | "uuid": "^8.3.2" 48 | } 49 | }, 50 | "node_modules/@actions/http-client": { 51 | "version": "2.2.0", 52 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", 53 | "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", 54 | "dependencies": { 55 | "tunnel": "^0.0.6", 56 | "undici": "^5.25.4" 57 | } 58 | }, 59 | "node_modules/@babel/code-frame": { 60 | "version": "7.24.7", 61 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", 62 | "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", 63 | "dev": true, 64 | "dependencies": { 65 | "@babel/highlight": "^7.24.7", 66 | "picocolors": "^1.0.0" 67 | }, 68 | "engines": { 69 | "node": ">=6.9.0" 70 | } 71 | }, 72 | "node_modules/@babel/helper-validator-identifier": { 73 | "version": "7.24.7", 74 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", 75 | "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", 76 | "dev": true, 77 | "engines": { 78 | "node": ">=6.9.0" 79 | } 80 | }, 81 | "node_modules/@babel/highlight": { 82 | "version": "7.24.7", 83 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", 84 | "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", 85 | "dev": true, 86 | "dependencies": { 87 | "@babel/helper-validator-identifier": "^7.24.7", 88 | "chalk": "^2.4.2", 89 | "js-tokens": "^4.0.0", 90 | "picocolors": "^1.0.0" 91 | }, 92 | "engines": { 93 | "node": ">=6.9.0" 94 | } 95 | }, 96 | "node_modules/@babel/highlight/node_modules/ansi-styles": { 97 | "version": "3.2.1", 98 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 99 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 100 | "dev": true, 101 | "dependencies": { 102 | "color-convert": "^1.9.0" 103 | }, 104 | "engines": { 105 | "node": ">=4" 106 | } 107 | }, 108 | "node_modules/@babel/highlight/node_modules/chalk": { 109 | "version": "2.4.2", 110 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 111 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 112 | "dev": true, 113 | "dependencies": { 114 | "ansi-styles": "^3.2.1", 115 | "escape-string-regexp": "^1.0.5", 116 | "supports-color": "^5.3.0" 117 | }, 118 | "engines": { 119 | "node": ">=4" 120 | } 121 | }, 122 | "node_modules/@babel/highlight/node_modules/color-convert": { 123 | "version": "1.9.3", 124 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 125 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 126 | "dev": true, 127 | "dependencies": { 128 | "color-name": "1.1.3" 129 | } 130 | }, 131 | "node_modules/@babel/highlight/node_modules/color-name": { 132 | "version": "1.1.3", 133 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 134 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 135 | "dev": true 136 | }, 137 | "node_modules/@babel/highlight/node_modules/escape-string-regexp": { 138 | "version": "1.0.5", 139 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 140 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 141 | "dev": true, 142 | "engines": { 143 | "node": ">=0.8.0" 144 | } 145 | }, 146 | "node_modules/@babel/highlight/node_modules/has-flag": { 147 | "version": "3.0.0", 148 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 149 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 150 | "dev": true, 151 | "engines": { 152 | "node": ">=4" 153 | } 154 | }, 155 | "node_modules/@babel/highlight/node_modules/supports-color": { 156 | "version": "5.5.0", 157 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 158 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 159 | "dev": true, 160 | "dependencies": { 161 | "has-flag": "^3.0.0" 162 | }, 163 | "engines": { 164 | "node": ">=4" 165 | } 166 | }, 167 | "node_modules/@commitlint/cli": { 168 | "version": "19.3.0", 169 | "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.3.0.tgz", 170 | "integrity": "sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==", 171 | "dev": true, 172 | "dependencies": { 173 | "@commitlint/format": "^19.3.0", 174 | "@commitlint/lint": "^19.2.2", 175 | "@commitlint/load": "^19.2.0", 176 | "@commitlint/read": "^19.2.1", 177 | "@commitlint/types": "^19.0.3", 178 | "execa": "^8.0.1", 179 | "yargs": "^17.0.0" 180 | }, 181 | "bin": { 182 | "commitlint": "cli.js" 183 | }, 184 | "engines": { 185 | "node": ">=v18" 186 | } 187 | }, 188 | "node_modules/@commitlint/config-conventional": { 189 | "version": "19.2.2", 190 | "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz", 191 | "integrity": "sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==", 192 | "dev": true, 193 | "dependencies": { 194 | "@commitlint/types": "^19.0.3", 195 | "conventional-changelog-conventionalcommits": "^7.0.2" 196 | }, 197 | "engines": { 198 | "node": ">=v18" 199 | } 200 | }, 201 | "node_modules/@commitlint/config-validator": { 202 | "version": "19.0.3", 203 | "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.0.3.tgz", 204 | "integrity": "sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==", 205 | "dev": true, 206 | "dependencies": { 207 | "@commitlint/types": "^19.0.3", 208 | "ajv": "^8.11.0" 209 | }, 210 | "engines": { 211 | "node": ">=v18" 212 | } 213 | }, 214 | "node_modules/@commitlint/ensure": { 215 | "version": "19.0.3", 216 | "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.0.3.tgz", 217 | "integrity": "sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==", 218 | "dev": true, 219 | "dependencies": { 220 | "@commitlint/types": "^19.0.3", 221 | "lodash.camelcase": "^4.3.0", 222 | "lodash.kebabcase": "^4.1.1", 223 | "lodash.snakecase": "^4.1.1", 224 | "lodash.startcase": "^4.4.0", 225 | "lodash.upperfirst": "^4.3.1" 226 | }, 227 | "engines": { 228 | "node": ">=v18" 229 | } 230 | }, 231 | "node_modules/@commitlint/execute-rule": { 232 | "version": "19.0.0", 233 | "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.0.0.tgz", 234 | "integrity": "sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==", 235 | "dev": true, 236 | "engines": { 237 | "node": ">=v18" 238 | } 239 | }, 240 | "node_modules/@commitlint/format": { 241 | "version": "19.3.0", 242 | "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.3.0.tgz", 243 | "integrity": "sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==", 244 | "dev": true, 245 | "dependencies": { 246 | "@commitlint/types": "^19.0.3", 247 | "chalk": "^5.3.0" 248 | }, 249 | "engines": { 250 | "node": ">=v18" 251 | } 252 | }, 253 | "node_modules/@commitlint/format/node_modules/chalk": { 254 | "version": "5.3.0", 255 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 256 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 257 | "dev": true, 258 | "engines": { 259 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 260 | }, 261 | "funding": { 262 | "url": "https://github.com/chalk/chalk?sponsor=1" 263 | } 264 | }, 265 | "node_modules/@commitlint/is-ignored": { 266 | "version": "19.2.2", 267 | "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz", 268 | "integrity": "sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==", 269 | "dev": true, 270 | "dependencies": { 271 | "@commitlint/types": "^19.0.3", 272 | "semver": "^7.6.0" 273 | }, 274 | "engines": { 275 | "node": ">=v18" 276 | } 277 | }, 278 | "node_modules/@commitlint/lint": { 279 | "version": "19.2.2", 280 | "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.2.2.tgz", 281 | "integrity": "sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==", 282 | "dev": true, 283 | "dependencies": { 284 | "@commitlint/is-ignored": "^19.2.2", 285 | "@commitlint/parse": "^19.0.3", 286 | "@commitlint/rules": "^19.0.3", 287 | "@commitlint/types": "^19.0.3" 288 | }, 289 | "engines": { 290 | "node": ">=v18" 291 | } 292 | }, 293 | "node_modules/@commitlint/load": { 294 | "version": "19.2.0", 295 | "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.2.0.tgz", 296 | "integrity": "sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==", 297 | "dev": true, 298 | "dependencies": { 299 | "@commitlint/config-validator": "^19.0.3", 300 | "@commitlint/execute-rule": "^19.0.0", 301 | "@commitlint/resolve-extends": "^19.1.0", 302 | "@commitlint/types": "^19.0.3", 303 | "chalk": "^5.3.0", 304 | "cosmiconfig": "^9.0.0", 305 | "cosmiconfig-typescript-loader": "^5.0.0", 306 | "lodash.isplainobject": "^4.0.6", 307 | "lodash.merge": "^4.6.2", 308 | "lodash.uniq": "^4.5.0" 309 | }, 310 | "engines": { 311 | "node": ">=v18" 312 | } 313 | }, 314 | "node_modules/@commitlint/load/node_modules/chalk": { 315 | "version": "5.3.0", 316 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 317 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 318 | "dev": true, 319 | "engines": { 320 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 321 | }, 322 | "funding": { 323 | "url": "https://github.com/chalk/chalk?sponsor=1" 324 | } 325 | }, 326 | "node_modules/@commitlint/message": { 327 | "version": "19.0.0", 328 | "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.0.0.tgz", 329 | "integrity": "sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==", 330 | "dev": true, 331 | "engines": { 332 | "node": ">=v18" 333 | } 334 | }, 335 | "node_modules/@commitlint/parse": { 336 | "version": "19.0.3", 337 | "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.0.3.tgz", 338 | "integrity": "sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==", 339 | "dev": true, 340 | "dependencies": { 341 | "@commitlint/types": "^19.0.3", 342 | "conventional-changelog-angular": "^7.0.0", 343 | "conventional-commits-parser": "^5.0.0" 344 | }, 345 | "engines": { 346 | "node": ">=v18" 347 | } 348 | }, 349 | "node_modules/@commitlint/read": { 350 | "version": "19.2.1", 351 | "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.2.1.tgz", 352 | "integrity": "sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==", 353 | "dev": true, 354 | "dependencies": { 355 | "@commitlint/top-level": "^19.0.0", 356 | "@commitlint/types": "^19.0.3", 357 | "execa": "^8.0.1", 358 | "git-raw-commits": "^4.0.0", 359 | "minimist": "^1.2.8" 360 | }, 361 | "engines": { 362 | "node": ">=v18" 363 | } 364 | }, 365 | "node_modules/@commitlint/resolve-extends": { 366 | "version": "19.1.0", 367 | "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz", 368 | "integrity": "sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==", 369 | "dev": true, 370 | "dependencies": { 371 | "@commitlint/config-validator": "^19.0.3", 372 | "@commitlint/types": "^19.0.3", 373 | "global-directory": "^4.0.1", 374 | "import-meta-resolve": "^4.0.0", 375 | "lodash.mergewith": "^4.6.2", 376 | "resolve-from": "^5.0.0" 377 | }, 378 | "engines": { 379 | "node": ">=v18" 380 | } 381 | }, 382 | "node_modules/@commitlint/rules": { 383 | "version": "19.0.3", 384 | "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.0.3.tgz", 385 | "integrity": "sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==", 386 | "dev": true, 387 | "dependencies": { 388 | "@commitlint/ensure": "^19.0.3", 389 | "@commitlint/message": "^19.0.0", 390 | "@commitlint/to-lines": "^19.0.0", 391 | "@commitlint/types": "^19.0.3", 392 | "execa": "^8.0.1" 393 | }, 394 | "engines": { 395 | "node": ">=v18" 396 | } 397 | }, 398 | "node_modules/@commitlint/to-lines": { 399 | "version": "19.0.0", 400 | "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.0.0.tgz", 401 | "integrity": "sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==", 402 | "dev": true, 403 | "engines": { 404 | "node": ">=v18" 405 | } 406 | }, 407 | "node_modules/@commitlint/top-level": { 408 | "version": "19.0.0", 409 | "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.0.0.tgz", 410 | "integrity": "sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==", 411 | "dev": true, 412 | "dependencies": { 413 | "find-up": "^7.0.0" 414 | }, 415 | "engines": { 416 | "node": ">=v18" 417 | } 418 | }, 419 | "node_modules/@commitlint/top-level/node_modules/find-up": { 420 | "version": "7.0.0", 421 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", 422 | "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", 423 | "dev": true, 424 | "dependencies": { 425 | "locate-path": "^7.2.0", 426 | "path-exists": "^5.0.0", 427 | "unicorn-magic": "^0.1.0" 428 | }, 429 | "engines": { 430 | "node": ">=18" 431 | }, 432 | "funding": { 433 | "url": "https://github.com/sponsors/sindresorhus" 434 | } 435 | }, 436 | "node_modules/@commitlint/top-level/node_modules/locate-path": { 437 | "version": "7.2.0", 438 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", 439 | "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", 440 | "dev": true, 441 | "dependencies": { 442 | "p-locate": "^6.0.0" 443 | }, 444 | "engines": { 445 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 446 | }, 447 | "funding": { 448 | "url": "https://github.com/sponsors/sindresorhus" 449 | } 450 | }, 451 | "node_modules/@commitlint/top-level/node_modules/p-limit": { 452 | "version": "4.0.0", 453 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", 454 | "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", 455 | "dev": true, 456 | "dependencies": { 457 | "yocto-queue": "^1.0.0" 458 | }, 459 | "engines": { 460 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 461 | }, 462 | "funding": { 463 | "url": "https://github.com/sponsors/sindresorhus" 464 | } 465 | }, 466 | "node_modules/@commitlint/top-level/node_modules/p-locate": { 467 | "version": "6.0.0", 468 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", 469 | "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", 470 | "dev": true, 471 | "dependencies": { 472 | "p-limit": "^4.0.0" 473 | }, 474 | "engines": { 475 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 476 | }, 477 | "funding": { 478 | "url": "https://github.com/sponsors/sindresorhus" 479 | } 480 | }, 481 | "node_modules/@commitlint/top-level/node_modules/path-exists": { 482 | "version": "5.0.0", 483 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", 484 | "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", 485 | "dev": true, 486 | "engines": { 487 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 488 | } 489 | }, 490 | "node_modules/@commitlint/top-level/node_modules/yocto-queue": { 491 | "version": "1.0.0", 492 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 493 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 494 | "dev": true, 495 | "engines": { 496 | "node": ">=12.20" 497 | }, 498 | "funding": { 499 | "url": "https://github.com/sponsors/sindresorhus" 500 | } 501 | }, 502 | "node_modules/@commitlint/types": { 503 | "version": "19.0.3", 504 | "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.0.3.tgz", 505 | "integrity": "sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==", 506 | "dev": true, 507 | "dependencies": { 508 | "@types/conventional-commits-parser": "^5.0.0", 509 | "chalk": "^5.3.0" 510 | }, 511 | "engines": { 512 | "node": ">=v18" 513 | } 514 | }, 515 | "node_modules/@commitlint/types/node_modules/chalk": { 516 | "version": "5.3.0", 517 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 518 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 519 | "dev": true, 520 | "engines": { 521 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 522 | }, 523 | "funding": { 524 | "url": "https://github.com/chalk/chalk?sponsor=1" 525 | } 526 | }, 527 | "node_modules/@eslint-community/eslint-utils": { 528 | "version": "4.4.0", 529 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 530 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 531 | "dev": true, 532 | "dependencies": { 533 | "eslint-visitor-keys": "^3.3.0" 534 | }, 535 | "engines": { 536 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 537 | }, 538 | "peerDependencies": { 539 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 540 | } 541 | }, 542 | "node_modules/@eslint-community/regexpp": { 543 | "version": "4.10.0", 544 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", 545 | "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 546 | "dev": true, 547 | "engines": { 548 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 549 | } 550 | }, 551 | "node_modules/@eslint/config-array": { 552 | "version": "0.16.0", 553 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.16.0.tgz", 554 | "integrity": "sha512-/jmuSd74i4Czf1XXn7wGRWZCuyaUZ330NH1Bek0Pplatt4Sy1S5haN21SCLLdbeKslQ+S0wEJ+++v5YibSi+Lg==", 555 | "dev": true, 556 | "dependencies": { 557 | "@eslint/object-schema": "^2.1.4", 558 | "debug": "^4.3.1", 559 | "minimatch": "^3.0.5" 560 | }, 561 | "engines": { 562 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 563 | } 564 | }, 565 | "node_modules/@eslint/eslintrc": { 566 | "version": "3.1.0", 567 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", 568 | "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", 569 | "dev": true, 570 | "dependencies": { 571 | "ajv": "^6.12.4", 572 | "debug": "^4.3.2", 573 | "espree": "^10.0.1", 574 | "globals": "^14.0.0", 575 | "ignore": "^5.2.0", 576 | "import-fresh": "^3.2.1", 577 | "js-yaml": "^4.1.0", 578 | "minimatch": "^3.1.2", 579 | "strip-json-comments": "^3.1.1" 580 | }, 581 | "engines": { 582 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 583 | }, 584 | "funding": { 585 | "url": "https://opencollective.com/eslint" 586 | } 587 | }, 588 | "node_modules/@eslint/eslintrc/node_modules/ajv": { 589 | "version": "6.12.6", 590 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 591 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 592 | "dev": true, 593 | "dependencies": { 594 | "fast-deep-equal": "^3.1.1", 595 | "fast-json-stable-stringify": "^2.0.0", 596 | "json-schema-traverse": "^0.4.1", 597 | "uri-js": "^4.2.2" 598 | }, 599 | "funding": { 600 | "type": "github", 601 | "url": "https://github.com/sponsors/epoberezkin" 602 | } 603 | }, 604 | "node_modules/@eslint/eslintrc/node_modules/globals": { 605 | "version": "14.0.0", 606 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 607 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 608 | "dev": true, 609 | "engines": { 610 | "node": ">=18" 611 | }, 612 | "funding": { 613 | "url": "https://github.com/sponsors/sindresorhus" 614 | } 615 | }, 616 | "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { 617 | "version": "0.4.1", 618 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 619 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 620 | "dev": true 621 | }, 622 | "node_modules/@eslint/js": { 623 | "version": "9.5.0", 624 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.5.0.tgz", 625 | "integrity": "sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==", 626 | "dev": true, 627 | "engines": { 628 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 629 | } 630 | }, 631 | "node_modules/@eslint/object-schema": { 632 | "version": "2.1.4", 633 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", 634 | "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", 635 | "dev": true, 636 | "engines": { 637 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 638 | } 639 | }, 640 | "node_modules/@fastify/busboy": { 641 | "version": "2.1.0", 642 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", 643 | "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", 644 | "engines": { 645 | "node": ">=14" 646 | } 647 | }, 648 | "node_modules/@humanwhocodes/module-importer": { 649 | "version": "1.0.1", 650 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 651 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 652 | "dev": true, 653 | "engines": { 654 | "node": ">=12.22" 655 | }, 656 | "funding": { 657 | "type": "github", 658 | "url": "https://github.com/sponsors/nzakas" 659 | } 660 | }, 661 | "node_modules/@humanwhocodes/retry": { 662 | "version": "0.3.0", 663 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", 664 | "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", 665 | "dev": true, 666 | "engines": { 667 | "node": ">=18.18" 668 | }, 669 | "funding": { 670 | "type": "github", 671 | "url": "https://github.com/sponsors/nzakas" 672 | } 673 | }, 674 | "node_modules/@jridgewell/gen-mapping": { 675 | "version": "0.3.5", 676 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 677 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 678 | "dev": true, 679 | "dependencies": { 680 | "@jridgewell/set-array": "^1.2.1", 681 | "@jridgewell/sourcemap-codec": "^1.4.10", 682 | "@jridgewell/trace-mapping": "^0.3.24" 683 | }, 684 | "engines": { 685 | "node": ">=6.0.0" 686 | } 687 | }, 688 | "node_modules/@jridgewell/resolve-uri": { 689 | "version": "3.1.2", 690 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 691 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 692 | "dev": true, 693 | "engines": { 694 | "node": ">=6.0.0" 695 | } 696 | }, 697 | "node_modules/@jridgewell/set-array": { 698 | "version": "1.2.1", 699 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 700 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 701 | "dev": true, 702 | "engines": { 703 | "node": ">=6.0.0" 704 | } 705 | }, 706 | "node_modules/@jridgewell/source-map": { 707 | "version": "0.3.6", 708 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", 709 | "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", 710 | "dev": true, 711 | "dependencies": { 712 | "@jridgewell/gen-mapping": "^0.3.5", 713 | "@jridgewell/trace-mapping": "^0.3.25" 714 | } 715 | }, 716 | "node_modules/@jridgewell/sourcemap-codec": { 717 | "version": "1.4.15", 718 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 719 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 720 | "dev": true 721 | }, 722 | "node_modules/@jridgewell/trace-mapping": { 723 | "version": "0.3.25", 724 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 725 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 726 | "dev": true, 727 | "dependencies": { 728 | "@jridgewell/resolve-uri": "^3.1.0", 729 | "@jridgewell/sourcemap-codec": "^1.4.14" 730 | } 731 | }, 732 | "node_modules/@nodelib/fs.scandir": { 733 | "version": "2.1.5", 734 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 735 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 736 | "dev": true, 737 | "dependencies": { 738 | "@nodelib/fs.stat": "2.0.5", 739 | "run-parallel": "^1.1.9" 740 | }, 741 | "engines": { 742 | "node": ">= 8" 743 | } 744 | }, 745 | "node_modules/@nodelib/fs.stat": { 746 | "version": "2.0.5", 747 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 748 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 749 | "dev": true, 750 | "engines": { 751 | "node": ">= 8" 752 | } 753 | }, 754 | "node_modules/@nodelib/fs.walk": { 755 | "version": "1.2.8", 756 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 757 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 758 | "dev": true, 759 | "dependencies": { 760 | "@nodelib/fs.scandir": "2.1.5", 761 | "fastq": "^1.6.0" 762 | }, 763 | "engines": { 764 | "node": ">= 8" 765 | } 766 | }, 767 | "node_modules/@types/conventional-commits-parser": { 768 | "version": "5.0.0", 769 | "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", 770 | "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", 771 | "dev": true, 772 | "dependencies": { 773 | "@types/node": "*" 774 | } 775 | }, 776 | "node_modules/@types/eslint": { 777 | "version": "8.56.0", 778 | "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", 779 | "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", 780 | "dev": true, 781 | "dependencies": { 782 | "@types/estree": "*", 783 | "@types/json-schema": "*" 784 | } 785 | }, 786 | "node_modules/@types/eslint-scope": { 787 | "version": "3.7.7", 788 | "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", 789 | "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", 790 | "dev": true, 791 | "dependencies": { 792 | "@types/eslint": "*", 793 | "@types/estree": "*" 794 | } 795 | }, 796 | "node_modules/@types/estree": { 797 | "version": "1.0.5", 798 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 799 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 800 | "dev": true 801 | }, 802 | "node_modules/@types/json-schema": { 803 | "version": "7.0.15", 804 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 805 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 806 | "dev": true 807 | }, 808 | "node_modules/@types/node": { 809 | "version": "20.14.8", 810 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz", 811 | "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==", 812 | "dev": true, 813 | "dependencies": { 814 | "undici-types": "~5.26.4" 815 | } 816 | }, 817 | "node_modules/@vercel/ncc": { 818 | "version": "0.38.1", 819 | "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.1.tgz", 820 | "integrity": "sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==", 821 | "dev": true, 822 | "bin": { 823 | "ncc": "dist/ncc/cli.js" 824 | } 825 | }, 826 | "node_modules/@webassemblyjs/ast": { 827 | "version": "1.12.1", 828 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", 829 | "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", 830 | "dev": true, 831 | "dependencies": { 832 | "@webassemblyjs/helper-numbers": "1.11.6", 833 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6" 834 | } 835 | }, 836 | "node_modules/@webassemblyjs/floating-point-hex-parser": { 837 | "version": "1.11.6", 838 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", 839 | "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", 840 | "dev": true 841 | }, 842 | "node_modules/@webassemblyjs/helper-api-error": { 843 | "version": "1.11.6", 844 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", 845 | "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", 846 | "dev": true 847 | }, 848 | "node_modules/@webassemblyjs/helper-buffer": { 849 | "version": "1.12.1", 850 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", 851 | "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", 852 | "dev": true 853 | }, 854 | "node_modules/@webassemblyjs/helper-numbers": { 855 | "version": "1.11.6", 856 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", 857 | "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", 858 | "dev": true, 859 | "dependencies": { 860 | "@webassemblyjs/floating-point-hex-parser": "1.11.6", 861 | "@webassemblyjs/helper-api-error": "1.11.6", 862 | "@xtuc/long": "4.2.2" 863 | } 864 | }, 865 | "node_modules/@webassemblyjs/helper-wasm-bytecode": { 866 | "version": "1.11.6", 867 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", 868 | "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", 869 | "dev": true 870 | }, 871 | "node_modules/@webassemblyjs/helper-wasm-section": { 872 | "version": "1.12.1", 873 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", 874 | "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", 875 | "dev": true, 876 | "dependencies": { 877 | "@webassemblyjs/ast": "1.12.1", 878 | "@webassemblyjs/helper-buffer": "1.12.1", 879 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 880 | "@webassemblyjs/wasm-gen": "1.12.1" 881 | } 882 | }, 883 | "node_modules/@webassemblyjs/ieee754": { 884 | "version": "1.11.6", 885 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", 886 | "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", 887 | "dev": true, 888 | "dependencies": { 889 | "@xtuc/ieee754": "^1.2.0" 890 | } 891 | }, 892 | "node_modules/@webassemblyjs/leb128": { 893 | "version": "1.11.6", 894 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", 895 | "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", 896 | "dev": true, 897 | "dependencies": { 898 | "@xtuc/long": "4.2.2" 899 | } 900 | }, 901 | "node_modules/@webassemblyjs/utf8": { 902 | "version": "1.11.6", 903 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", 904 | "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", 905 | "dev": true 906 | }, 907 | "node_modules/@webassemblyjs/wasm-edit": { 908 | "version": "1.12.1", 909 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", 910 | "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", 911 | "dev": true, 912 | "dependencies": { 913 | "@webassemblyjs/ast": "1.12.1", 914 | "@webassemblyjs/helper-buffer": "1.12.1", 915 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 916 | "@webassemblyjs/helper-wasm-section": "1.12.1", 917 | "@webassemblyjs/wasm-gen": "1.12.1", 918 | "@webassemblyjs/wasm-opt": "1.12.1", 919 | "@webassemblyjs/wasm-parser": "1.12.1", 920 | "@webassemblyjs/wast-printer": "1.12.1" 921 | } 922 | }, 923 | "node_modules/@webassemblyjs/wasm-gen": { 924 | "version": "1.12.1", 925 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", 926 | "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", 927 | "dev": true, 928 | "dependencies": { 929 | "@webassemblyjs/ast": "1.12.1", 930 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 931 | "@webassemblyjs/ieee754": "1.11.6", 932 | "@webassemblyjs/leb128": "1.11.6", 933 | "@webassemblyjs/utf8": "1.11.6" 934 | } 935 | }, 936 | "node_modules/@webassemblyjs/wasm-opt": { 937 | "version": "1.12.1", 938 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", 939 | "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", 940 | "dev": true, 941 | "dependencies": { 942 | "@webassemblyjs/ast": "1.12.1", 943 | "@webassemblyjs/helper-buffer": "1.12.1", 944 | "@webassemblyjs/wasm-gen": "1.12.1", 945 | "@webassemblyjs/wasm-parser": "1.12.1" 946 | } 947 | }, 948 | "node_modules/@webassemblyjs/wasm-parser": { 949 | "version": "1.12.1", 950 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", 951 | "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", 952 | "dev": true, 953 | "dependencies": { 954 | "@webassemblyjs/ast": "1.12.1", 955 | "@webassemblyjs/helper-api-error": "1.11.6", 956 | "@webassemblyjs/helper-wasm-bytecode": "1.11.6", 957 | "@webassemblyjs/ieee754": "1.11.6", 958 | "@webassemblyjs/leb128": "1.11.6", 959 | "@webassemblyjs/utf8": "1.11.6" 960 | } 961 | }, 962 | "node_modules/@webassemblyjs/wast-printer": { 963 | "version": "1.12.1", 964 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", 965 | "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", 966 | "dev": true, 967 | "dependencies": { 968 | "@webassemblyjs/ast": "1.12.1", 969 | "@xtuc/long": "4.2.2" 970 | } 971 | }, 972 | "node_modules/@xtuc/ieee754": { 973 | "version": "1.2.0", 974 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", 975 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", 976 | "dev": true 977 | }, 978 | "node_modules/@xtuc/long": { 979 | "version": "4.2.2", 980 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", 981 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", 982 | "dev": true 983 | }, 984 | "node_modules/acorn": { 985 | "version": "8.12.0", 986 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", 987 | "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", 988 | "dev": true, 989 | "bin": { 990 | "acorn": "bin/acorn" 991 | }, 992 | "engines": { 993 | "node": ">=0.4.0" 994 | } 995 | }, 996 | "node_modules/acorn-import-attributes": { 997 | "version": "1.9.5", 998 | "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", 999 | "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", 1000 | "dev": true, 1001 | "peerDependencies": { 1002 | "acorn": "^8" 1003 | } 1004 | }, 1005 | "node_modules/acorn-jsx": { 1006 | "version": "5.3.2", 1007 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1008 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1009 | "dev": true, 1010 | "peerDependencies": { 1011 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1012 | } 1013 | }, 1014 | "node_modules/ajv": { 1015 | "version": "8.16.0", 1016 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", 1017 | "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", 1018 | "dev": true, 1019 | "dependencies": { 1020 | "fast-deep-equal": "^3.1.3", 1021 | "json-schema-traverse": "^1.0.0", 1022 | "require-from-string": "^2.0.2", 1023 | "uri-js": "^4.4.1" 1024 | }, 1025 | "funding": { 1026 | "type": "github", 1027 | "url": "https://github.com/sponsors/epoberezkin" 1028 | } 1029 | }, 1030 | "node_modules/ansi-regex": { 1031 | "version": "5.0.1", 1032 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1033 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1034 | "dev": true, 1035 | "engines": { 1036 | "node": ">=8" 1037 | } 1038 | }, 1039 | "node_modules/ansi-styles": { 1040 | "version": "4.3.0", 1041 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1042 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1043 | "dev": true, 1044 | "dependencies": { 1045 | "color-convert": "^2.0.1" 1046 | }, 1047 | "engines": { 1048 | "node": ">=8" 1049 | }, 1050 | "funding": { 1051 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1052 | } 1053 | }, 1054 | "node_modules/argparse": { 1055 | "version": "2.0.1", 1056 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1057 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1058 | "dev": true 1059 | }, 1060 | "node_modules/array-ify": { 1061 | "version": "1.0.0", 1062 | "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", 1063 | "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", 1064 | "dev": true 1065 | }, 1066 | "node_modules/balanced-match": { 1067 | "version": "1.0.2", 1068 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1069 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1070 | "dev": true 1071 | }, 1072 | "node_modules/brace-expansion": { 1073 | "version": "1.1.11", 1074 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1075 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1076 | "dev": true, 1077 | "dependencies": { 1078 | "balanced-match": "^1.0.0", 1079 | "concat-map": "0.0.1" 1080 | } 1081 | }, 1082 | "node_modules/browserslist": { 1083 | "version": "4.22.2", 1084 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", 1085 | "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", 1086 | "dev": true, 1087 | "funding": [ 1088 | { 1089 | "type": "opencollective", 1090 | "url": "https://opencollective.com/browserslist" 1091 | }, 1092 | { 1093 | "type": "tidelift", 1094 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1095 | }, 1096 | { 1097 | "type": "github", 1098 | "url": "https://github.com/sponsors/ai" 1099 | } 1100 | ], 1101 | "dependencies": { 1102 | "caniuse-lite": "^1.0.30001565", 1103 | "electron-to-chromium": "^1.4.601", 1104 | "node-releases": "^2.0.14", 1105 | "update-browserslist-db": "^1.0.13" 1106 | }, 1107 | "bin": { 1108 | "browserslist": "cli.js" 1109 | }, 1110 | "engines": { 1111 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1112 | } 1113 | }, 1114 | "node_modules/buffer-from": { 1115 | "version": "1.1.2", 1116 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1117 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1118 | "dev": true 1119 | }, 1120 | "node_modules/callsites": { 1121 | "version": "3.1.0", 1122 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1123 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1124 | "dev": true, 1125 | "engines": { 1126 | "node": ">=6" 1127 | } 1128 | }, 1129 | "node_modules/caniuse-lite": { 1130 | "version": "1.0.30001571", 1131 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz", 1132 | "integrity": "sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==", 1133 | "dev": true, 1134 | "funding": [ 1135 | { 1136 | "type": "opencollective", 1137 | "url": "https://opencollective.com/browserslist" 1138 | }, 1139 | { 1140 | "type": "tidelift", 1141 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1142 | }, 1143 | { 1144 | "type": "github", 1145 | "url": "https://github.com/sponsors/ai" 1146 | } 1147 | ] 1148 | }, 1149 | "node_modules/chalk": { 1150 | "version": "4.1.2", 1151 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1152 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1153 | "dev": true, 1154 | "dependencies": { 1155 | "ansi-styles": "^4.1.0", 1156 | "supports-color": "^7.1.0" 1157 | }, 1158 | "engines": { 1159 | "node": ">=10" 1160 | }, 1161 | "funding": { 1162 | "url": "https://github.com/chalk/chalk?sponsor=1" 1163 | } 1164 | }, 1165 | "node_modules/chrome-trace-event": { 1166 | "version": "1.0.3", 1167 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", 1168 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", 1169 | "dev": true, 1170 | "engines": { 1171 | "node": ">=6.0" 1172 | } 1173 | }, 1174 | "node_modules/cliui": { 1175 | "version": "8.0.1", 1176 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1177 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1178 | "dev": true, 1179 | "dependencies": { 1180 | "string-width": "^4.2.0", 1181 | "strip-ansi": "^6.0.1", 1182 | "wrap-ansi": "^7.0.0" 1183 | }, 1184 | "engines": { 1185 | "node": ">=12" 1186 | } 1187 | }, 1188 | "node_modules/color-convert": { 1189 | "version": "2.0.1", 1190 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1191 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1192 | "dev": true, 1193 | "dependencies": { 1194 | "color-name": "~1.1.4" 1195 | }, 1196 | "engines": { 1197 | "node": ">=7.0.0" 1198 | } 1199 | }, 1200 | "node_modules/color-name": { 1201 | "version": "1.1.4", 1202 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1203 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1204 | "dev": true 1205 | }, 1206 | "node_modules/commander": { 1207 | "version": "2.20.3", 1208 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1209 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1210 | "dev": true 1211 | }, 1212 | "node_modules/commitlint": { 1213 | "version": "19.3.0", 1214 | "resolved": "https://registry.npmjs.org/commitlint/-/commitlint-19.3.0.tgz", 1215 | "integrity": "sha512-B8eUVQCjz+1ZAjR3LC3+vzKg7c4/qN4QhSxkjp0u0v7Pi79t9CsnGAluvveKmFh56e885zgToPL5ax+l8BHTPg==", 1216 | "dev": true, 1217 | "dependencies": { 1218 | "@commitlint/cli": "^19.3.0", 1219 | "@commitlint/types": "^19.0.3" 1220 | }, 1221 | "bin": { 1222 | "commitlint": "cli.js" 1223 | }, 1224 | "engines": { 1225 | "node": ">=v18" 1226 | } 1227 | }, 1228 | "node_modules/compare-func": { 1229 | "version": "2.0.0", 1230 | "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", 1231 | "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", 1232 | "dev": true, 1233 | "dependencies": { 1234 | "array-ify": "^1.0.0", 1235 | "dot-prop": "^5.1.0" 1236 | } 1237 | }, 1238 | "node_modules/concat-map": { 1239 | "version": "0.0.1", 1240 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1241 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1242 | "dev": true 1243 | }, 1244 | "node_modules/conventional-changelog-angular": { 1245 | "version": "7.0.0", 1246 | "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", 1247 | "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", 1248 | "dev": true, 1249 | "dependencies": { 1250 | "compare-func": "^2.0.0" 1251 | }, 1252 | "engines": { 1253 | "node": ">=16" 1254 | } 1255 | }, 1256 | "node_modules/conventional-changelog-conventionalcommits": { 1257 | "version": "7.0.2", 1258 | "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", 1259 | "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", 1260 | "dev": true, 1261 | "dependencies": { 1262 | "compare-func": "^2.0.0" 1263 | }, 1264 | "engines": { 1265 | "node": ">=16" 1266 | } 1267 | }, 1268 | "node_modules/conventional-commits-parser": { 1269 | "version": "5.0.0", 1270 | "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", 1271 | "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", 1272 | "dev": true, 1273 | "dependencies": { 1274 | "is-text-path": "^2.0.0", 1275 | "JSONStream": "^1.3.5", 1276 | "meow": "^12.0.1", 1277 | "split2": "^4.0.0" 1278 | }, 1279 | "bin": { 1280 | "conventional-commits-parser": "cli.mjs" 1281 | }, 1282 | "engines": { 1283 | "node": ">=16" 1284 | } 1285 | }, 1286 | "node_modules/cosmiconfig": { 1287 | "version": "9.0.0", 1288 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", 1289 | "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", 1290 | "dev": true, 1291 | "dependencies": { 1292 | "env-paths": "^2.2.1", 1293 | "import-fresh": "^3.3.0", 1294 | "js-yaml": "^4.1.0", 1295 | "parse-json": "^5.2.0" 1296 | }, 1297 | "engines": { 1298 | "node": ">=14" 1299 | }, 1300 | "funding": { 1301 | "url": "https://github.com/sponsors/d-fischer" 1302 | }, 1303 | "peerDependencies": { 1304 | "typescript": ">=4.9.5" 1305 | }, 1306 | "peerDependenciesMeta": { 1307 | "typescript": { 1308 | "optional": true 1309 | } 1310 | } 1311 | }, 1312 | "node_modules/cosmiconfig-typescript-loader": { 1313 | "version": "5.0.0", 1314 | "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz", 1315 | "integrity": "sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==", 1316 | "dev": true, 1317 | "dependencies": { 1318 | "jiti": "^1.19.1" 1319 | }, 1320 | "engines": { 1321 | "node": ">=v16" 1322 | }, 1323 | "peerDependencies": { 1324 | "@types/node": "*", 1325 | "cosmiconfig": ">=8.2", 1326 | "typescript": ">=4" 1327 | } 1328 | }, 1329 | "node_modules/cross-spawn": { 1330 | "version": "7.0.3", 1331 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1332 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1333 | "dev": true, 1334 | "dependencies": { 1335 | "path-key": "^3.1.0", 1336 | "shebang-command": "^2.0.0", 1337 | "which": "^2.0.1" 1338 | }, 1339 | "engines": { 1340 | "node": ">= 8" 1341 | } 1342 | }, 1343 | "node_modules/dargs": { 1344 | "version": "8.1.0", 1345 | "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", 1346 | "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", 1347 | "dev": true, 1348 | "engines": { 1349 | "node": ">=12" 1350 | }, 1351 | "funding": { 1352 | "url": "https://github.com/sponsors/sindresorhus" 1353 | } 1354 | }, 1355 | "node_modules/debug": { 1356 | "version": "4.3.5", 1357 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", 1358 | "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", 1359 | "dev": true, 1360 | "dependencies": { 1361 | "ms": "2.1.2" 1362 | }, 1363 | "engines": { 1364 | "node": ">=6.0" 1365 | }, 1366 | "peerDependenciesMeta": { 1367 | "supports-color": { 1368 | "optional": true 1369 | } 1370 | } 1371 | }, 1372 | "node_modules/deep-is": { 1373 | "version": "0.1.4", 1374 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1375 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1376 | "dev": true 1377 | }, 1378 | "node_modules/dot-prop": { 1379 | "version": "5.3.0", 1380 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", 1381 | "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", 1382 | "dev": true, 1383 | "dependencies": { 1384 | "is-obj": "^2.0.0" 1385 | }, 1386 | "engines": { 1387 | "node": ">=8" 1388 | } 1389 | }, 1390 | "node_modules/electron-to-chromium": { 1391 | "version": "1.4.616", 1392 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", 1393 | "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==", 1394 | "dev": true 1395 | }, 1396 | "node_modules/emoji-regex": { 1397 | "version": "8.0.0", 1398 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1399 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1400 | "dev": true 1401 | }, 1402 | "node_modules/enhanced-resolve": { 1403 | "version": "5.17.0", 1404 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", 1405 | "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", 1406 | "dev": true, 1407 | "dependencies": { 1408 | "graceful-fs": "^4.2.4", 1409 | "tapable": "^2.2.0" 1410 | }, 1411 | "engines": { 1412 | "node": ">=10.13.0" 1413 | } 1414 | }, 1415 | "node_modules/env-paths": { 1416 | "version": "2.2.1", 1417 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 1418 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 1419 | "dev": true, 1420 | "engines": { 1421 | "node": ">=6" 1422 | } 1423 | }, 1424 | "node_modules/error-ex": { 1425 | "version": "1.3.2", 1426 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1427 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1428 | "dev": true, 1429 | "dependencies": { 1430 | "is-arrayish": "^0.2.1" 1431 | } 1432 | }, 1433 | "node_modules/es-module-lexer": { 1434 | "version": "1.4.1", 1435 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", 1436 | "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", 1437 | "dev": true 1438 | }, 1439 | "node_modules/escalade": { 1440 | "version": "3.1.1", 1441 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1442 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1443 | "dev": true, 1444 | "engines": { 1445 | "node": ">=6" 1446 | } 1447 | }, 1448 | "node_modules/escape-string-regexp": { 1449 | "version": "4.0.0", 1450 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1451 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1452 | "dev": true, 1453 | "engines": { 1454 | "node": ">=10" 1455 | }, 1456 | "funding": { 1457 | "url": "https://github.com/sponsors/sindresorhus" 1458 | } 1459 | }, 1460 | "node_modules/eslint": { 1461 | "version": "9.5.0", 1462 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.5.0.tgz", 1463 | "integrity": "sha512-+NAOZFrW/jFTS3dASCGBxX1pkFD0/fsO+hfAkJ4TyYKwgsXZbqzrw+seCYFCcPCYXvnD67tAnglU7GQTz6kcVw==", 1464 | "dev": true, 1465 | "dependencies": { 1466 | "@eslint-community/eslint-utils": "^4.2.0", 1467 | "@eslint-community/regexpp": "^4.6.1", 1468 | "@eslint/config-array": "^0.16.0", 1469 | "@eslint/eslintrc": "^3.1.0", 1470 | "@eslint/js": "9.5.0", 1471 | "@humanwhocodes/module-importer": "^1.0.1", 1472 | "@humanwhocodes/retry": "^0.3.0", 1473 | "@nodelib/fs.walk": "^1.2.8", 1474 | "ajv": "^6.12.4", 1475 | "chalk": "^4.0.0", 1476 | "cross-spawn": "^7.0.2", 1477 | "debug": "^4.3.2", 1478 | "escape-string-regexp": "^4.0.0", 1479 | "eslint-scope": "^8.0.1", 1480 | "eslint-visitor-keys": "^4.0.0", 1481 | "espree": "^10.0.1", 1482 | "esquery": "^1.5.0", 1483 | "esutils": "^2.0.2", 1484 | "fast-deep-equal": "^3.1.3", 1485 | "file-entry-cache": "^8.0.0", 1486 | "find-up": "^5.0.0", 1487 | "glob-parent": "^6.0.2", 1488 | "ignore": "^5.2.0", 1489 | "imurmurhash": "^0.1.4", 1490 | "is-glob": "^4.0.0", 1491 | "is-path-inside": "^3.0.3", 1492 | "json-stable-stringify-without-jsonify": "^1.0.1", 1493 | "levn": "^0.4.1", 1494 | "lodash.merge": "^4.6.2", 1495 | "minimatch": "^3.1.2", 1496 | "natural-compare": "^1.4.0", 1497 | "optionator": "^0.9.3", 1498 | "strip-ansi": "^6.0.1", 1499 | "text-table": "^0.2.0" 1500 | }, 1501 | "bin": { 1502 | "eslint": "bin/eslint.js" 1503 | }, 1504 | "engines": { 1505 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1506 | }, 1507 | "funding": { 1508 | "url": "https://eslint.org/donate" 1509 | } 1510 | }, 1511 | "node_modules/eslint-scope": { 1512 | "version": "8.0.1", 1513 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", 1514 | "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", 1515 | "dev": true, 1516 | "dependencies": { 1517 | "esrecurse": "^4.3.0", 1518 | "estraverse": "^5.2.0" 1519 | }, 1520 | "engines": { 1521 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1522 | }, 1523 | "funding": { 1524 | "url": "https://opencollective.com/eslint" 1525 | } 1526 | }, 1527 | "node_modules/eslint-visitor-keys": { 1528 | "version": "3.4.3", 1529 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1530 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1531 | "dev": true, 1532 | "engines": { 1533 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1534 | }, 1535 | "funding": { 1536 | "url": "https://opencollective.com/eslint" 1537 | } 1538 | }, 1539 | "node_modules/eslint/node_modules/ajv": { 1540 | "version": "6.12.6", 1541 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1542 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1543 | "dev": true, 1544 | "dependencies": { 1545 | "fast-deep-equal": "^3.1.1", 1546 | "fast-json-stable-stringify": "^2.0.0", 1547 | "json-schema-traverse": "^0.4.1", 1548 | "uri-js": "^4.2.2" 1549 | }, 1550 | "funding": { 1551 | "type": "github", 1552 | "url": "https://github.com/sponsors/epoberezkin" 1553 | } 1554 | }, 1555 | "node_modules/eslint/node_modules/eslint-visitor-keys": { 1556 | "version": "4.0.0", 1557 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", 1558 | "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", 1559 | "dev": true, 1560 | "engines": { 1561 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1562 | }, 1563 | "funding": { 1564 | "url": "https://opencollective.com/eslint" 1565 | } 1566 | }, 1567 | "node_modules/eslint/node_modules/json-schema-traverse": { 1568 | "version": "0.4.1", 1569 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1570 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1571 | "dev": true 1572 | }, 1573 | "node_modules/esmock": { 1574 | "version": "2.6.6", 1575 | "resolved": "https://registry.npmjs.org/esmock/-/esmock-2.6.6.tgz", 1576 | "integrity": "sha512-Ay1IQ/qbZV1j8IqRY5o4GYNyX8Y6qDJVVYRZtQ0WFOqUPf26++qW/LyNaHrxz79QGB4F1xuDTCPRYA5XRNuqZg==", 1577 | "dev": true, 1578 | "engines": { 1579 | "node": ">=14.16.0" 1580 | } 1581 | }, 1582 | "node_modules/espree": { 1583 | "version": "10.1.0", 1584 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", 1585 | "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", 1586 | "dev": true, 1587 | "dependencies": { 1588 | "acorn": "^8.12.0", 1589 | "acorn-jsx": "^5.3.2", 1590 | "eslint-visitor-keys": "^4.0.0" 1591 | }, 1592 | "engines": { 1593 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1594 | }, 1595 | "funding": { 1596 | "url": "https://opencollective.com/eslint" 1597 | } 1598 | }, 1599 | "node_modules/espree/node_modules/eslint-visitor-keys": { 1600 | "version": "4.0.0", 1601 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", 1602 | "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", 1603 | "dev": true, 1604 | "engines": { 1605 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1606 | }, 1607 | "funding": { 1608 | "url": "https://opencollective.com/eslint" 1609 | } 1610 | }, 1611 | "node_modules/esquery": { 1612 | "version": "1.5.0", 1613 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 1614 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 1615 | "dev": true, 1616 | "dependencies": { 1617 | "estraverse": "^5.1.0" 1618 | }, 1619 | "engines": { 1620 | "node": ">=0.10" 1621 | } 1622 | }, 1623 | "node_modules/esrecurse": { 1624 | "version": "4.3.0", 1625 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1626 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1627 | "dev": true, 1628 | "dependencies": { 1629 | "estraverse": "^5.2.0" 1630 | }, 1631 | "engines": { 1632 | "node": ">=4.0" 1633 | } 1634 | }, 1635 | "node_modules/estraverse": { 1636 | "version": "5.3.0", 1637 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1638 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1639 | "dev": true, 1640 | "engines": { 1641 | "node": ">=4.0" 1642 | } 1643 | }, 1644 | "node_modules/esutils": { 1645 | "version": "2.0.3", 1646 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1647 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1648 | "dev": true, 1649 | "engines": { 1650 | "node": ">=0.10.0" 1651 | } 1652 | }, 1653 | "node_modules/events": { 1654 | "version": "3.3.0", 1655 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 1656 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 1657 | "dev": true, 1658 | "engines": { 1659 | "node": ">=0.8.x" 1660 | } 1661 | }, 1662 | "node_modules/execa": { 1663 | "version": "8.0.1", 1664 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", 1665 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", 1666 | "dev": true, 1667 | "dependencies": { 1668 | "cross-spawn": "^7.0.3", 1669 | "get-stream": "^8.0.1", 1670 | "human-signals": "^5.0.0", 1671 | "is-stream": "^3.0.0", 1672 | "merge-stream": "^2.0.0", 1673 | "npm-run-path": "^5.1.0", 1674 | "onetime": "^6.0.0", 1675 | "signal-exit": "^4.1.0", 1676 | "strip-final-newline": "^3.0.0" 1677 | }, 1678 | "engines": { 1679 | "node": ">=16.17" 1680 | }, 1681 | "funding": { 1682 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1683 | } 1684 | }, 1685 | "node_modules/fast-deep-equal": { 1686 | "version": "3.1.3", 1687 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1688 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1689 | "dev": true 1690 | }, 1691 | "node_modules/fast-json-stable-stringify": { 1692 | "version": "2.1.0", 1693 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1694 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1695 | "dev": true 1696 | }, 1697 | "node_modules/fast-levenshtein": { 1698 | "version": "2.0.6", 1699 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1700 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1701 | "dev": true 1702 | }, 1703 | "node_modules/fastq": { 1704 | "version": "1.16.0", 1705 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", 1706 | "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", 1707 | "dev": true, 1708 | "dependencies": { 1709 | "reusify": "^1.0.4" 1710 | } 1711 | }, 1712 | "node_modules/file-entry-cache": { 1713 | "version": "8.0.0", 1714 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 1715 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 1716 | "dev": true, 1717 | "dependencies": { 1718 | "flat-cache": "^4.0.0" 1719 | }, 1720 | "engines": { 1721 | "node": ">=16.0.0" 1722 | } 1723 | }, 1724 | "node_modules/find-up": { 1725 | "version": "5.0.0", 1726 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1727 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1728 | "dev": true, 1729 | "dependencies": { 1730 | "locate-path": "^6.0.0", 1731 | "path-exists": "^4.0.0" 1732 | }, 1733 | "engines": { 1734 | "node": ">=10" 1735 | }, 1736 | "funding": { 1737 | "url": "https://github.com/sponsors/sindresorhus" 1738 | } 1739 | }, 1740 | "node_modules/flat-cache": { 1741 | "version": "4.0.1", 1742 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 1743 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 1744 | "dev": true, 1745 | "dependencies": { 1746 | "flatted": "^3.2.9", 1747 | "keyv": "^4.5.4" 1748 | }, 1749 | "engines": { 1750 | "node": ">=16" 1751 | } 1752 | }, 1753 | "node_modules/flatted": { 1754 | "version": "3.3.1", 1755 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 1756 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 1757 | "dev": true 1758 | }, 1759 | "node_modules/get-caller-file": { 1760 | "version": "2.0.5", 1761 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1762 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1763 | "dev": true, 1764 | "engines": { 1765 | "node": "6.* || 8.* || >= 10.*" 1766 | } 1767 | }, 1768 | "node_modules/get-stream": { 1769 | "version": "8.0.1", 1770 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", 1771 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", 1772 | "dev": true, 1773 | "engines": { 1774 | "node": ">=16" 1775 | }, 1776 | "funding": { 1777 | "url": "https://github.com/sponsors/sindresorhus" 1778 | } 1779 | }, 1780 | "node_modules/git-raw-commits": { 1781 | "version": "4.0.0", 1782 | "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", 1783 | "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", 1784 | "dev": true, 1785 | "dependencies": { 1786 | "dargs": "^8.0.0", 1787 | "meow": "^12.0.1", 1788 | "split2": "^4.0.0" 1789 | }, 1790 | "bin": { 1791 | "git-raw-commits": "cli.mjs" 1792 | }, 1793 | "engines": { 1794 | "node": ">=16" 1795 | } 1796 | }, 1797 | "node_modules/glob-parent": { 1798 | "version": "6.0.2", 1799 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1800 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1801 | "dev": true, 1802 | "dependencies": { 1803 | "is-glob": "^4.0.3" 1804 | }, 1805 | "engines": { 1806 | "node": ">=10.13.0" 1807 | } 1808 | }, 1809 | "node_modules/glob-to-regexp": { 1810 | "version": "0.4.1", 1811 | "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", 1812 | "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", 1813 | "dev": true 1814 | }, 1815 | "node_modules/global-directory": { 1816 | "version": "4.0.1", 1817 | "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", 1818 | "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", 1819 | "dev": true, 1820 | "dependencies": { 1821 | "ini": "4.1.1" 1822 | }, 1823 | "engines": { 1824 | "node": ">=18" 1825 | }, 1826 | "funding": { 1827 | "url": "https://github.com/sponsors/sindresorhus" 1828 | } 1829 | }, 1830 | "node_modules/globals": { 1831 | "version": "15.6.0", 1832 | "resolved": "https://registry.npmjs.org/globals/-/globals-15.6.0.tgz", 1833 | "integrity": "sha512-UzcJi88Hw//CurUIRa9Jxb0vgOCcuD/MNjwmXp633cyaRKkCWACkoqHCtfZv43b1kqXGg/fpOa8bwgacCeXsVg==", 1834 | "dev": true, 1835 | "engines": { 1836 | "node": ">=18" 1837 | }, 1838 | "funding": { 1839 | "url": "https://github.com/sponsors/sindresorhus" 1840 | } 1841 | }, 1842 | "node_modules/graceful-fs": { 1843 | "version": "4.2.11", 1844 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1845 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1846 | "dev": true 1847 | }, 1848 | "node_modules/has-flag": { 1849 | "version": "4.0.0", 1850 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1851 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1852 | "dev": true, 1853 | "engines": { 1854 | "node": ">=8" 1855 | } 1856 | }, 1857 | "node_modules/human-signals": { 1858 | "version": "5.0.0", 1859 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", 1860 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", 1861 | "dev": true, 1862 | "engines": { 1863 | "node": ">=16.17.0" 1864 | } 1865 | }, 1866 | "node_modules/husky": { 1867 | "version": "9.0.11", 1868 | "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", 1869 | "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", 1870 | "dev": true, 1871 | "bin": { 1872 | "husky": "bin.mjs" 1873 | }, 1874 | "engines": { 1875 | "node": ">=18" 1876 | }, 1877 | "funding": { 1878 | "url": "https://github.com/sponsors/typicode" 1879 | } 1880 | }, 1881 | "node_modules/ignore": { 1882 | "version": "5.3.0", 1883 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", 1884 | "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", 1885 | "dev": true, 1886 | "engines": { 1887 | "node": ">= 4" 1888 | } 1889 | }, 1890 | "node_modules/import-fresh": { 1891 | "version": "3.3.0", 1892 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1893 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1894 | "dev": true, 1895 | "dependencies": { 1896 | "parent-module": "^1.0.0", 1897 | "resolve-from": "^4.0.0" 1898 | }, 1899 | "engines": { 1900 | "node": ">=6" 1901 | }, 1902 | "funding": { 1903 | "url": "https://github.com/sponsors/sindresorhus" 1904 | } 1905 | }, 1906 | "node_modules/import-fresh/node_modules/resolve-from": { 1907 | "version": "4.0.0", 1908 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1909 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1910 | "dev": true, 1911 | "engines": { 1912 | "node": ">=4" 1913 | } 1914 | }, 1915 | "node_modules/import-meta-resolve": { 1916 | "version": "4.1.0", 1917 | "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", 1918 | "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", 1919 | "dev": true, 1920 | "funding": { 1921 | "type": "github", 1922 | "url": "https://github.com/sponsors/wooorm" 1923 | } 1924 | }, 1925 | "node_modules/imurmurhash": { 1926 | "version": "0.1.4", 1927 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1928 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1929 | "dev": true, 1930 | "engines": { 1931 | "node": ">=0.8.19" 1932 | } 1933 | }, 1934 | "node_modules/ini": { 1935 | "version": "4.1.1", 1936 | "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", 1937 | "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", 1938 | "dev": true, 1939 | "engines": { 1940 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 1941 | } 1942 | }, 1943 | "node_modules/is-arrayish": { 1944 | "version": "0.2.1", 1945 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1946 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 1947 | "dev": true 1948 | }, 1949 | "node_modules/is-extglob": { 1950 | "version": "2.1.1", 1951 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1952 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1953 | "dev": true, 1954 | "engines": { 1955 | "node": ">=0.10.0" 1956 | } 1957 | }, 1958 | "node_modules/is-fullwidth-code-point": { 1959 | "version": "3.0.0", 1960 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1961 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1962 | "dev": true, 1963 | "engines": { 1964 | "node": ">=8" 1965 | } 1966 | }, 1967 | "node_modules/is-glob": { 1968 | "version": "4.0.3", 1969 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1970 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1971 | "dev": true, 1972 | "dependencies": { 1973 | "is-extglob": "^2.1.1" 1974 | }, 1975 | "engines": { 1976 | "node": ">=0.10.0" 1977 | } 1978 | }, 1979 | "node_modules/is-obj": { 1980 | "version": "2.0.0", 1981 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 1982 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 1983 | "dev": true, 1984 | "engines": { 1985 | "node": ">=8" 1986 | } 1987 | }, 1988 | "node_modules/is-path-inside": { 1989 | "version": "3.0.3", 1990 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1991 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1992 | "dev": true, 1993 | "engines": { 1994 | "node": ">=8" 1995 | } 1996 | }, 1997 | "node_modules/is-stream": { 1998 | "version": "3.0.0", 1999 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", 2000 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", 2001 | "dev": true, 2002 | "engines": { 2003 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2004 | }, 2005 | "funding": { 2006 | "url": "https://github.com/sponsors/sindresorhus" 2007 | } 2008 | }, 2009 | "node_modules/is-text-path": { 2010 | "version": "2.0.0", 2011 | "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", 2012 | "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", 2013 | "dev": true, 2014 | "dependencies": { 2015 | "text-extensions": "^2.0.0" 2016 | }, 2017 | "engines": { 2018 | "node": ">=8" 2019 | } 2020 | }, 2021 | "node_modules/isexe": { 2022 | "version": "2.0.0", 2023 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2024 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2025 | "dev": true 2026 | }, 2027 | "node_modules/jest-worker": { 2028 | "version": "27.5.1", 2029 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", 2030 | "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", 2031 | "dev": true, 2032 | "dependencies": { 2033 | "@types/node": "*", 2034 | "merge-stream": "^2.0.0", 2035 | "supports-color": "^8.0.0" 2036 | }, 2037 | "engines": { 2038 | "node": ">= 10.13.0" 2039 | } 2040 | }, 2041 | "node_modules/jest-worker/node_modules/supports-color": { 2042 | "version": "8.1.1", 2043 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 2044 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 2045 | "dev": true, 2046 | "dependencies": { 2047 | "has-flag": "^4.0.0" 2048 | }, 2049 | "engines": { 2050 | "node": ">=10" 2051 | }, 2052 | "funding": { 2053 | "url": "https://github.com/chalk/supports-color?sponsor=1" 2054 | } 2055 | }, 2056 | "node_modules/jiti": { 2057 | "version": "1.21.6", 2058 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", 2059 | "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", 2060 | "dev": true, 2061 | "bin": { 2062 | "jiti": "bin/jiti.js" 2063 | } 2064 | }, 2065 | "node_modules/js-tokens": { 2066 | "version": "4.0.0", 2067 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2068 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2069 | "dev": true 2070 | }, 2071 | "node_modules/js-yaml": { 2072 | "version": "4.1.0", 2073 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2074 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2075 | "dev": true, 2076 | "dependencies": { 2077 | "argparse": "^2.0.1" 2078 | }, 2079 | "bin": { 2080 | "js-yaml": "bin/js-yaml.js" 2081 | } 2082 | }, 2083 | "node_modules/json-buffer": { 2084 | "version": "3.0.1", 2085 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2086 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2087 | "dev": true 2088 | }, 2089 | "node_modules/json-parse-even-better-errors": { 2090 | "version": "2.3.1", 2091 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 2092 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 2093 | "dev": true 2094 | }, 2095 | "node_modules/json-schema-traverse": { 2096 | "version": "1.0.0", 2097 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2098 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 2099 | "dev": true 2100 | }, 2101 | "node_modules/json-stable-stringify-without-jsonify": { 2102 | "version": "1.0.1", 2103 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2104 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2105 | "dev": true 2106 | }, 2107 | "node_modules/jsonparse": { 2108 | "version": "1.3.1", 2109 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 2110 | "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", 2111 | "dev": true, 2112 | "engines": [ 2113 | "node >= 0.2.0" 2114 | ] 2115 | }, 2116 | "node_modules/JSONStream": { 2117 | "version": "1.3.5", 2118 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", 2119 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", 2120 | "dev": true, 2121 | "dependencies": { 2122 | "jsonparse": "^1.2.0", 2123 | "through": ">=2.2.7 <3" 2124 | }, 2125 | "bin": { 2126 | "JSONStream": "bin.js" 2127 | }, 2128 | "engines": { 2129 | "node": "*" 2130 | } 2131 | }, 2132 | "node_modules/keyv": { 2133 | "version": "4.5.4", 2134 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2135 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2136 | "dev": true, 2137 | "dependencies": { 2138 | "json-buffer": "3.0.1" 2139 | } 2140 | }, 2141 | "node_modules/levn": { 2142 | "version": "0.4.1", 2143 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2144 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2145 | "dev": true, 2146 | "dependencies": { 2147 | "prelude-ls": "^1.2.1", 2148 | "type-check": "~0.4.0" 2149 | }, 2150 | "engines": { 2151 | "node": ">= 0.8.0" 2152 | } 2153 | }, 2154 | "node_modules/lines-and-columns": { 2155 | "version": "1.2.4", 2156 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2157 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2158 | "dev": true 2159 | }, 2160 | "node_modules/loader-runner": { 2161 | "version": "4.3.0", 2162 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", 2163 | "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", 2164 | "dev": true, 2165 | "engines": { 2166 | "node": ">=6.11.5" 2167 | } 2168 | }, 2169 | "node_modules/locate-path": { 2170 | "version": "6.0.0", 2171 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2172 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2173 | "dev": true, 2174 | "dependencies": { 2175 | "p-locate": "^5.0.0" 2176 | }, 2177 | "engines": { 2178 | "node": ">=10" 2179 | }, 2180 | "funding": { 2181 | "url": "https://github.com/sponsors/sindresorhus" 2182 | } 2183 | }, 2184 | "node_modules/lodash.camelcase": { 2185 | "version": "4.3.0", 2186 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 2187 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", 2188 | "dev": true 2189 | }, 2190 | "node_modules/lodash.isplainobject": { 2191 | "version": "4.0.6", 2192 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 2193 | "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", 2194 | "dev": true 2195 | }, 2196 | "node_modules/lodash.kebabcase": { 2197 | "version": "4.1.1", 2198 | "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", 2199 | "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", 2200 | "dev": true 2201 | }, 2202 | "node_modules/lodash.merge": { 2203 | "version": "4.6.2", 2204 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2205 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2206 | "dev": true 2207 | }, 2208 | "node_modules/lodash.mergewith": { 2209 | "version": "4.6.2", 2210 | "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", 2211 | "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", 2212 | "dev": true 2213 | }, 2214 | "node_modules/lodash.snakecase": { 2215 | "version": "4.1.1", 2216 | "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", 2217 | "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", 2218 | "dev": true 2219 | }, 2220 | "node_modules/lodash.startcase": { 2221 | "version": "4.4.0", 2222 | "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", 2223 | "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", 2224 | "dev": true 2225 | }, 2226 | "node_modules/lodash.uniq": { 2227 | "version": "4.5.0", 2228 | "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", 2229 | "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", 2230 | "dev": true 2231 | }, 2232 | "node_modules/lodash.upperfirst": { 2233 | "version": "4.3.1", 2234 | "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", 2235 | "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", 2236 | "dev": true 2237 | }, 2238 | "node_modules/meow": { 2239 | "version": "12.1.1", 2240 | "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", 2241 | "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", 2242 | "dev": true, 2243 | "engines": { 2244 | "node": ">=16.10" 2245 | }, 2246 | "funding": { 2247 | "url": "https://github.com/sponsors/sindresorhus" 2248 | } 2249 | }, 2250 | "node_modules/merge-stream": { 2251 | "version": "2.0.0", 2252 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2253 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2254 | "dev": true 2255 | }, 2256 | "node_modules/mime-db": { 2257 | "version": "1.52.0", 2258 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2259 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2260 | "dev": true, 2261 | "engines": { 2262 | "node": ">= 0.6" 2263 | } 2264 | }, 2265 | "node_modules/mime-types": { 2266 | "version": "2.1.35", 2267 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2268 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2269 | "dev": true, 2270 | "dependencies": { 2271 | "mime-db": "1.52.0" 2272 | }, 2273 | "engines": { 2274 | "node": ">= 0.6" 2275 | } 2276 | }, 2277 | "node_modules/mimic-fn": { 2278 | "version": "4.0.0", 2279 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 2280 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 2281 | "dev": true, 2282 | "engines": { 2283 | "node": ">=12" 2284 | }, 2285 | "funding": { 2286 | "url": "https://github.com/sponsors/sindresorhus" 2287 | } 2288 | }, 2289 | "node_modules/minimatch": { 2290 | "version": "3.1.2", 2291 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2292 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2293 | "dev": true, 2294 | "dependencies": { 2295 | "brace-expansion": "^1.1.7" 2296 | }, 2297 | "engines": { 2298 | "node": "*" 2299 | } 2300 | }, 2301 | "node_modules/minimist": { 2302 | "version": "1.2.8", 2303 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2304 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2305 | "dev": true, 2306 | "funding": { 2307 | "url": "https://github.com/sponsors/ljharb" 2308 | } 2309 | }, 2310 | "node_modules/ms": { 2311 | "version": "2.1.2", 2312 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2313 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2314 | "dev": true 2315 | }, 2316 | "node_modules/natural-compare": { 2317 | "version": "1.4.0", 2318 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2319 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2320 | "dev": true 2321 | }, 2322 | "node_modules/neo-async": { 2323 | "version": "2.6.2", 2324 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", 2325 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", 2326 | "dev": true 2327 | }, 2328 | "node_modules/node-releases": { 2329 | "version": "2.0.14", 2330 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 2331 | "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 2332 | "dev": true 2333 | }, 2334 | "node_modules/npm-run-path": { 2335 | "version": "5.3.0", 2336 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", 2337 | "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", 2338 | "dev": true, 2339 | "dependencies": { 2340 | "path-key": "^4.0.0" 2341 | }, 2342 | "engines": { 2343 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2344 | }, 2345 | "funding": { 2346 | "url": "https://github.com/sponsors/sindresorhus" 2347 | } 2348 | }, 2349 | "node_modules/npm-run-path/node_modules/path-key": { 2350 | "version": "4.0.0", 2351 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 2352 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 2353 | "dev": true, 2354 | "engines": { 2355 | "node": ">=12" 2356 | }, 2357 | "funding": { 2358 | "url": "https://github.com/sponsors/sindresorhus" 2359 | } 2360 | }, 2361 | "node_modules/onetime": { 2362 | "version": "6.0.0", 2363 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", 2364 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", 2365 | "dev": true, 2366 | "dependencies": { 2367 | "mimic-fn": "^4.0.0" 2368 | }, 2369 | "engines": { 2370 | "node": ">=12" 2371 | }, 2372 | "funding": { 2373 | "url": "https://github.com/sponsors/sindresorhus" 2374 | } 2375 | }, 2376 | "node_modules/optionator": { 2377 | "version": "0.9.3", 2378 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 2379 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 2380 | "dev": true, 2381 | "dependencies": { 2382 | "@aashutoshrathi/word-wrap": "^1.2.3", 2383 | "deep-is": "^0.1.3", 2384 | "fast-levenshtein": "^2.0.6", 2385 | "levn": "^0.4.1", 2386 | "prelude-ls": "^1.2.1", 2387 | "type-check": "^0.4.0" 2388 | }, 2389 | "engines": { 2390 | "node": ">= 0.8.0" 2391 | } 2392 | }, 2393 | "node_modules/p-limit": { 2394 | "version": "3.1.0", 2395 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2396 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2397 | "dev": true, 2398 | "dependencies": { 2399 | "yocto-queue": "^0.1.0" 2400 | }, 2401 | "engines": { 2402 | "node": ">=10" 2403 | }, 2404 | "funding": { 2405 | "url": "https://github.com/sponsors/sindresorhus" 2406 | } 2407 | }, 2408 | "node_modules/p-locate": { 2409 | "version": "5.0.0", 2410 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2411 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2412 | "dev": true, 2413 | "dependencies": { 2414 | "p-limit": "^3.0.2" 2415 | }, 2416 | "engines": { 2417 | "node": ">=10" 2418 | }, 2419 | "funding": { 2420 | "url": "https://github.com/sponsors/sindresorhus" 2421 | } 2422 | }, 2423 | "node_modules/parent-module": { 2424 | "version": "1.0.1", 2425 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2426 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2427 | "dev": true, 2428 | "dependencies": { 2429 | "callsites": "^3.0.0" 2430 | }, 2431 | "engines": { 2432 | "node": ">=6" 2433 | } 2434 | }, 2435 | "node_modules/parse-json": { 2436 | "version": "5.2.0", 2437 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 2438 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 2439 | "dev": true, 2440 | "dependencies": { 2441 | "@babel/code-frame": "^7.0.0", 2442 | "error-ex": "^1.3.1", 2443 | "json-parse-even-better-errors": "^2.3.0", 2444 | "lines-and-columns": "^1.1.6" 2445 | }, 2446 | "engines": { 2447 | "node": ">=8" 2448 | }, 2449 | "funding": { 2450 | "url": "https://github.com/sponsors/sindresorhus" 2451 | } 2452 | }, 2453 | "node_modules/path-exists": { 2454 | "version": "4.0.0", 2455 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2456 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2457 | "dev": true, 2458 | "engines": { 2459 | "node": ">=8" 2460 | } 2461 | }, 2462 | "node_modules/path-key": { 2463 | "version": "3.1.1", 2464 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2465 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2466 | "dev": true, 2467 | "engines": { 2468 | "node": ">=8" 2469 | } 2470 | }, 2471 | "node_modules/picocolors": { 2472 | "version": "1.0.0", 2473 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2474 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2475 | "dev": true 2476 | }, 2477 | "node_modules/pinst": { 2478 | "version": "3.0.0", 2479 | "resolved": "https://registry.npmjs.org/pinst/-/pinst-3.0.0.tgz", 2480 | "integrity": "sha512-cengSmBxtCyaJqtRSvJorIIZXMXg+lJ3sIljGmtBGUVonMnMsVJbnzl6jGN1HkOWwxNuJynCJ2hXxxqCQrFDdw==", 2481 | "dev": true, 2482 | "hasInstallScript": true, 2483 | "bin": { 2484 | "pinst": "bin.js" 2485 | }, 2486 | "engines": { 2487 | "node": ">=12.0.0" 2488 | } 2489 | }, 2490 | "node_modules/prelude-ls": { 2491 | "version": "1.2.1", 2492 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2493 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2494 | "dev": true, 2495 | "engines": { 2496 | "node": ">= 0.8.0" 2497 | } 2498 | }, 2499 | "node_modules/prettier": { 2500 | "version": "3.3.2", 2501 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", 2502 | "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", 2503 | "dev": true, 2504 | "bin": { 2505 | "prettier": "bin/prettier.cjs" 2506 | }, 2507 | "engines": { 2508 | "node": ">=14" 2509 | }, 2510 | "funding": { 2511 | "url": "https://github.com/prettier/prettier?sponsor=1" 2512 | } 2513 | }, 2514 | "node_modules/punycode": { 2515 | "version": "2.3.1", 2516 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2517 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2518 | "dev": true, 2519 | "engines": { 2520 | "node": ">=6" 2521 | } 2522 | }, 2523 | "node_modules/queue-microtask": { 2524 | "version": "1.2.3", 2525 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2526 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2527 | "dev": true, 2528 | "funding": [ 2529 | { 2530 | "type": "github", 2531 | "url": "https://github.com/sponsors/feross" 2532 | }, 2533 | { 2534 | "type": "patreon", 2535 | "url": "https://www.patreon.com/feross" 2536 | }, 2537 | { 2538 | "type": "consulting", 2539 | "url": "https://feross.org/support" 2540 | } 2541 | ] 2542 | }, 2543 | "node_modules/randombytes": { 2544 | "version": "2.1.0", 2545 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2546 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2547 | "dev": true, 2548 | "dependencies": { 2549 | "safe-buffer": "^5.1.0" 2550 | } 2551 | }, 2552 | "node_modules/require-directory": { 2553 | "version": "2.1.1", 2554 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2555 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 2556 | "dev": true, 2557 | "engines": { 2558 | "node": ">=0.10.0" 2559 | } 2560 | }, 2561 | "node_modules/require-from-string": { 2562 | "version": "2.0.2", 2563 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2564 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2565 | "dev": true, 2566 | "engines": { 2567 | "node": ">=0.10.0" 2568 | } 2569 | }, 2570 | "node_modules/resolve-from": { 2571 | "version": "5.0.0", 2572 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2573 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2574 | "dev": true, 2575 | "engines": { 2576 | "node": ">=8" 2577 | } 2578 | }, 2579 | "node_modules/reusify": { 2580 | "version": "1.0.4", 2581 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2582 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2583 | "dev": true, 2584 | "engines": { 2585 | "iojs": ">=1.0.0", 2586 | "node": ">=0.10.0" 2587 | } 2588 | }, 2589 | "node_modules/run-parallel": { 2590 | "version": "1.2.0", 2591 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2592 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2593 | "dev": true, 2594 | "funding": [ 2595 | { 2596 | "type": "github", 2597 | "url": "https://github.com/sponsors/feross" 2598 | }, 2599 | { 2600 | "type": "patreon", 2601 | "url": "https://www.patreon.com/feross" 2602 | }, 2603 | { 2604 | "type": "consulting", 2605 | "url": "https://feross.org/support" 2606 | } 2607 | ], 2608 | "dependencies": { 2609 | "queue-microtask": "^1.2.2" 2610 | } 2611 | }, 2612 | "node_modules/safe-buffer": { 2613 | "version": "5.2.1", 2614 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2615 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2616 | "dev": true, 2617 | "funding": [ 2618 | { 2619 | "type": "github", 2620 | "url": "https://github.com/sponsors/feross" 2621 | }, 2622 | { 2623 | "type": "patreon", 2624 | "url": "https://www.patreon.com/feross" 2625 | }, 2626 | { 2627 | "type": "consulting", 2628 | "url": "https://feross.org/support" 2629 | } 2630 | ] 2631 | }, 2632 | "node_modules/schema-utils": { 2633 | "version": "3.3.0", 2634 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", 2635 | "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", 2636 | "dev": true, 2637 | "dependencies": { 2638 | "@types/json-schema": "^7.0.8", 2639 | "ajv": "^6.12.5", 2640 | "ajv-keywords": "^3.5.2" 2641 | }, 2642 | "engines": { 2643 | "node": ">= 10.13.0" 2644 | }, 2645 | "funding": { 2646 | "type": "opencollective", 2647 | "url": "https://opencollective.com/webpack" 2648 | } 2649 | }, 2650 | "node_modules/schema-utils/node_modules/ajv": { 2651 | "version": "6.12.6", 2652 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 2653 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 2654 | "dev": true, 2655 | "dependencies": { 2656 | "fast-deep-equal": "^3.1.1", 2657 | "fast-json-stable-stringify": "^2.0.0", 2658 | "json-schema-traverse": "^0.4.1", 2659 | "uri-js": "^4.2.2" 2660 | }, 2661 | "funding": { 2662 | "type": "github", 2663 | "url": "https://github.com/sponsors/epoberezkin" 2664 | } 2665 | }, 2666 | "node_modules/schema-utils/node_modules/ajv-keywords": { 2667 | "version": "3.5.2", 2668 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", 2669 | "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", 2670 | "dev": true, 2671 | "peerDependencies": { 2672 | "ajv": "^6.9.1" 2673 | } 2674 | }, 2675 | "node_modules/schema-utils/node_modules/json-schema-traverse": { 2676 | "version": "0.4.1", 2677 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2678 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2679 | "dev": true 2680 | }, 2681 | "node_modules/semver": { 2682 | "version": "7.6.2", 2683 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", 2684 | "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", 2685 | "dev": true, 2686 | "bin": { 2687 | "semver": "bin/semver.js" 2688 | }, 2689 | "engines": { 2690 | "node": ">=10" 2691 | } 2692 | }, 2693 | "node_modules/serialize-javascript": { 2694 | "version": "6.0.2", 2695 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", 2696 | "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", 2697 | "dev": true, 2698 | "dependencies": { 2699 | "randombytes": "^2.1.0" 2700 | } 2701 | }, 2702 | "node_modules/shebang-command": { 2703 | "version": "2.0.0", 2704 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2705 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2706 | "dev": true, 2707 | "dependencies": { 2708 | "shebang-regex": "^3.0.0" 2709 | }, 2710 | "engines": { 2711 | "node": ">=8" 2712 | } 2713 | }, 2714 | "node_modules/shebang-regex": { 2715 | "version": "3.0.0", 2716 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2717 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2718 | "dev": true, 2719 | "engines": { 2720 | "node": ">=8" 2721 | } 2722 | }, 2723 | "node_modules/signal-exit": { 2724 | "version": "4.1.0", 2725 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 2726 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 2727 | "dev": true, 2728 | "engines": { 2729 | "node": ">=14" 2730 | }, 2731 | "funding": { 2732 | "url": "https://github.com/sponsors/isaacs" 2733 | } 2734 | }, 2735 | "node_modules/source-map": { 2736 | "version": "0.6.1", 2737 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2738 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2739 | "dev": true, 2740 | "engines": { 2741 | "node": ">=0.10.0" 2742 | } 2743 | }, 2744 | "node_modules/source-map-support": { 2745 | "version": "0.5.21", 2746 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2747 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2748 | "dev": true, 2749 | "dependencies": { 2750 | "buffer-from": "^1.0.0", 2751 | "source-map": "^0.6.0" 2752 | } 2753 | }, 2754 | "node_modules/split2": { 2755 | "version": "4.2.0", 2756 | "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", 2757 | "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", 2758 | "dev": true, 2759 | "engines": { 2760 | "node": ">= 10.x" 2761 | } 2762 | }, 2763 | "node_modules/string-width": { 2764 | "version": "4.2.3", 2765 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2766 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2767 | "dev": true, 2768 | "dependencies": { 2769 | "emoji-regex": "^8.0.0", 2770 | "is-fullwidth-code-point": "^3.0.0", 2771 | "strip-ansi": "^6.0.1" 2772 | }, 2773 | "engines": { 2774 | "node": ">=8" 2775 | } 2776 | }, 2777 | "node_modules/strip-ansi": { 2778 | "version": "6.0.1", 2779 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2780 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2781 | "dev": true, 2782 | "dependencies": { 2783 | "ansi-regex": "^5.0.1" 2784 | }, 2785 | "engines": { 2786 | "node": ">=8" 2787 | } 2788 | }, 2789 | "node_modules/strip-final-newline": { 2790 | "version": "3.0.0", 2791 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", 2792 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", 2793 | "dev": true, 2794 | "engines": { 2795 | "node": ">=12" 2796 | }, 2797 | "funding": { 2798 | "url": "https://github.com/sponsors/sindresorhus" 2799 | } 2800 | }, 2801 | "node_modules/strip-json-comments": { 2802 | "version": "3.1.1", 2803 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2804 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2805 | "dev": true, 2806 | "engines": { 2807 | "node": ">=8" 2808 | }, 2809 | "funding": { 2810 | "url": "https://github.com/sponsors/sindresorhus" 2811 | } 2812 | }, 2813 | "node_modules/supports-color": { 2814 | "version": "7.2.0", 2815 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2816 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2817 | "dev": true, 2818 | "dependencies": { 2819 | "has-flag": "^4.0.0" 2820 | }, 2821 | "engines": { 2822 | "node": ">=8" 2823 | } 2824 | }, 2825 | "node_modules/tapable": { 2826 | "version": "2.2.1", 2827 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", 2828 | "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", 2829 | "dev": true, 2830 | "engines": { 2831 | "node": ">=6" 2832 | } 2833 | }, 2834 | "node_modules/terser": { 2835 | "version": "5.31.1", 2836 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", 2837 | "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", 2838 | "dev": true, 2839 | "dependencies": { 2840 | "@jridgewell/source-map": "^0.3.3", 2841 | "acorn": "^8.8.2", 2842 | "commander": "^2.20.0", 2843 | "source-map-support": "~0.5.20" 2844 | }, 2845 | "bin": { 2846 | "terser": "bin/terser" 2847 | }, 2848 | "engines": { 2849 | "node": ">=10" 2850 | } 2851 | }, 2852 | "node_modules/terser-webpack-plugin": { 2853 | "version": "5.3.10", 2854 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", 2855 | "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", 2856 | "dev": true, 2857 | "dependencies": { 2858 | "@jridgewell/trace-mapping": "^0.3.20", 2859 | "jest-worker": "^27.4.5", 2860 | "schema-utils": "^3.1.1", 2861 | "serialize-javascript": "^6.0.1", 2862 | "terser": "^5.26.0" 2863 | }, 2864 | "engines": { 2865 | "node": ">= 10.13.0" 2866 | }, 2867 | "funding": { 2868 | "type": "opencollective", 2869 | "url": "https://opencollective.com/webpack" 2870 | }, 2871 | "peerDependencies": { 2872 | "webpack": "^5.1.0" 2873 | }, 2874 | "peerDependenciesMeta": { 2875 | "@swc/core": { 2876 | "optional": true 2877 | }, 2878 | "esbuild": { 2879 | "optional": true 2880 | }, 2881 | "uglify-js": { 2882 | "optional": true 2883 | } 2884 | } 2885 | }, 2886 | "node_modules/text-extensions": { 2887 | "version": "2.4.0", 2888 | "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", 2889 | "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", 2890 | "dev": true, 2891 | "engines": { 2892 | "node": ">=8" 2893 | }, 2894 | "funding": { 2895 | "url": "https://github.com/sponsors/sindresorhus" 2896 | } 2897 | }, 2898 | "node_modules/text-table": { 2899 | "version": "0.2.0", 2900 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2901 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 2902 | "dev": true 2903 | }, 2904 | "node_modules/through": { 2905 | "version": "2.3.8", 2906 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2907 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", 2908 | "dev": true 2909 | }, 2910 | "node_modules/tunnel": { 2911 | "version": "0.0.6", 2912 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 2913 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 2914 | "engines": { 2915 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 2916 | } 2917 | }, 2918 | "node_modules/type-check": { 2919 | "version": "0.4.0", 2920 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2921 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2922 | "dev": true, 2923 | "dependencies": { 2924 | "prelude-ls": "^1.2.1" 2925 | }, 2926 | "engines": { 2927 | "node": ">= 0.8.0" 2928 | } 2929 | }, 2930 | "node_modules/typescript": { 2931 | "version": "5.5.2", 2932 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", 2933 | "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", 2934 | "dev": true, 2935 | "peer": true, 2936 | "bin": { 2937 | "tsc": "bin/tsc", 2938 | "tsserver": "bin/tsserver" 2939 | }, 2940 | "engines": { 2941 | "node": ">=14.17" 2942 | } 2943 | }, 2944 | "node_modules/undici": { 2945 | "version": "5.28.4", 2946 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", 2947 | "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", 2948 | "dependencies": { 2949 | "@fastify/busboy": "^2.0.0" 2950 | }, 2951 | "engines": { 2952 | "node": ">=14.0" 2953 | } 2954 | }, 2955 | "node_modules/undici-types": { 2956 | "version": "5.26.5", 2957 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 2958 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 2959 | "dev": true 2960 | }, 2961 | "node_modules/unicorn-magic": { 2962 | "version": "0.1.0", 2963 | "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", 2964 | "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", 2965 | "dev": true, 2966 | "engines": { 2967 | "node": ">=18" 2968 | }, 2969 | "funding": { 2970 | "url": "https://github.com/sponsors/sindresorhus" 2971 | } 2972 | }, 2973 | "node_modules/update-browserslist-db": { 2974 | "version": "1.0.13", 2975 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 2976 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 2977 | "dev": true, 2978 | "funding": [ 2979 | { 2980 | "type": "opencollective", 2981 | "url": "https://opencollective.com/browserslist" 2982 | }, 2983 | { 2984 | "type": "tidelift", 2985 | "url": "https://tidelift.com/funding/github/npm/browserslist" 2986 | }, 2987 | { 2988 | "type": "github", 2989 | "url": "https://github.com/sponsors/ai" 2990 | } 2991 | ], 2992 | "dependencies": { 2993 | "escalade": "^3.1.1", 2994 | "picocolors": "^1.0.0" 2995 | }, 2996 | "bin": { 2997 | "update-browserslist-db": "cli.js" 2998 | }, 2999 | "peerDependencies": { 3000 | "browserslist": ">= 4.21.0" 3001 | } 3002 | }, 3003 | "node_modules/uri-js": { 3004 | "version": "4.4.1", 3005 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3006 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3007 | "dev": true, 3008 | "dependencies": { 3009 | "punycode": "^2.1.0" 3010 | } 3011 | }, 3012 | "node_modules/uuid": { 3013 | "version": "8.3.2", 3014 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 3015 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 3016 | "bin": { 3017 | "uuid": "dist/bin/uuid" 3018 | } 3019 | }, 3020 | "node_modules/watchpack": { 3021 | "version": "2.4.1", 3022 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", 3023 | "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", 3024 | "dev": true, 3025 | "dependencies": { 3026 | "glob-to-regexp": "^0.4.1", 3027 | "graceful-fs": "^4.1.2" 3028 | }, 3029 | "engines": { 3030 | "node": ">=10.13.0" 3031 | } 3032 | }, 3033 | "node_modules/webpack": { 3034 | "version": "5.92.1", 3035 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", 3036 | "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", 3037 | "dev": true, 3038 | "dependencies": { 3039 | "@types/eslint-scope": "^3.7.3", 3040 | "@types/estree": "^1.0.5", 3041 | "@webassemblyjs/ast": "^1.12.1", 3042 | "@webassemblyjs/wasm-edit": "^1.12.1", 3043 | "@webassemblyjs/wasm-parser": "^1.12.1", 3044 | "acorn": "^8.7.1", 3045 | "acorn-import-attributes": "^1.9.5", 3046 | "browserslist": "^4.21.10", 3047 | "chrome-trace-event": "^1.0.2", 3048 | "enhanced-resolve": "^5.17.0", 3049 | "es-module-lexer": "^1.2.1", 3050 | "eslint-scope": "5.1.1", 3051 | "events": "^3.2.0", 3052 | "glob-to-regexp": "^0.4.1", 3053 | "graceful-fs": "^4.2.11", 3054 | "json-parse-even-better-errors": "^2.3.1", 3055 | "loader-runner": "^4.2.0", 3056 | "mime-types": "^2.1.27", 3057 | "neo-async": "^2.6.2", 3058 | "schema-utils": "^3.2.0", 3059 | "tapable": "^2.1.1", 3060 | "terser-webpack-plugin": "^5.3.10", 3061 | "watchpack": "^2.4.1", 3062 | "webpack-sources": "^3.2.3" 3063 | }, 3064 | "bin": { 3065 | "webpack": "bin/webpack.js" 3066 | }, 3067 | "engines": { 3068 | "node": ">=10.13.0" 3069 | }, 3070 | "funding": { 3071 | "type": "opencollective", 3072 | "url": "https://opencollective.com/webpack" 3073 | }, 3074 | "peerDependenciesMeta": { 3075 | "webpack-cli": { 3076 | "optional": true 3077 | } 3078 | } 3079 | }, 3080 | "node_modules/webpack-sources": { 3081 | "version": "3.2.3", 3082 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", 3083 | "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", 3084 | "dev": true, 3085 | "engines": { 3086 | "node": ">=10.13.0" 3087 | } 3088 | }, 3089 | "node_modules/webpack/node_modules/eslint-scope": { 3090 | "version": "5.1.1", 3091 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", 3092 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", 3093 | "dev": true, 3094 | "dependencies": { 3095 | "esrecurse": "^4.3.0", 3096 | "estraverse": "^4.1.1" 3097 | }, 3098 | "engines": { 3099 | "node": ">=8.0.0" 3100 | } 3101 | }, 3102 | "node_modules/webpack/node_modules/estraverse": { 3103 | "version": "4.3.0", 3104 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 3105 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 3106 | "dev": true, 3107 | "engines": { 3108 | "node": ">=4.0" 3109 | } 3110 | }, 3111 | "node_modules/which": { 3112 | "version": "2.0.2", 3113 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3114 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3115 | "dev": true, 3116 | "dependencies": { 3117 | "isexe": "^2.0.0" 3118 | }, 3119 | "bin": { 3120 | "node-which": "bin/node-which" 3121 | }, 3122 | "engines": { 3123 | "node": ">= 8" 3124 | } 3125 | }, 3126 | "node_modules/wrap-ansi": { 3127 | "version": "7.0.0", 3128 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3129 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3130 | "dev": true, 3131 | "dependencies": { 3132 | "ansi-styles": "^4.0.0", 3133 | "string-width": "^4.1.0", 3134 | "strip-ansi": "^6.0.0" 3135 | }, 3136 | "engines": { 3137 | "node": ">=10" 3138 | }, 3139 | "funding": { 3140 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3141 | } 3142 | }, 3143 | "node_modules/y18n": { 3144 | "version": "5.0.8", 3145 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 3146 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 3147 | "dev": true, 3148 | "engines": { 3149 | "node": ">=10" 3150 | } 3151 | }, 3152 | "node_modules/yargs": { 3153 | "version": "17.7.2", 3154 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 3155 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 3156 | "dev": true, 3157 | "dependencies": { 3158 | "cliui": "^8.0.1", 3159 | "escalade": "^3.1.1", 3160 | "get-caller-file": "^2.0.5", 3161 | "require-directory": "^2.1.1", 3162 | "string-width": "^4.2.3", 3163 | "y18n": "^5.0.5", 3164 | "yargs-parser": "^21.1.1" 3165 | }, 3166 | "engines": { 3167 | "node": ">=12" 3168 | } 3169 | }, 3170 | "node_modules/yargs-parser": { 3171 | "version": "21.1.1", 3172 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 3173 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 3174 | "dev": true, 3175 | "engines": { 3176 | "node": ">=12" 3177 | } 3178 | }, 3179 | "node_modules/yocto-queue": { 3180 | "version": "0.1.0", 3181 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3182 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3183 | "dev": true, 3184 | "engines": { 3185 | "node": ">=10" 3186 | }, 3187 | "funding": { 3188 | "url": "https://github.com/sponsors/sindresorhus" 3189 | } 3190 | } 3191 | } 3192 | } 3193 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cloudflare-preview-url", 3 | "version": "1.0.0", 4 | "private": true, 5 | "type": "module", 6 | "description": "GitHub Action to receive the deployment preview from Cloudflare", 7 | "keywords": [ 8 | "cloudflare", 9 | "deployment", 10 | "github", 11 | "action" 12 | ], 13 | "homepage": "https://github.com/zentered/cloudflare-preview-url#readme", 14 | "bugs": { 15 | "url": "https://github.com/zentered/cloudflare-preview-url/issues" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/zentered/cloudflare-preview-url.git" 20 | }, 21 | "license": "MIT", 22 | "author": "Zentered (https://zentered.co)", 23 | "contributors": [ 24 | "Patrick Heneise (https://github.com/zentered)" 25 | ], 26 | "main": "dist/index.js", 27 | "scripts": { 28 | "build": "npm run lint && npm run test && npm run prepare", 29 | "lint": "eslint .", 30 | "prepare": "ncc build src/index.js -o dist --source-map --license licenses.txt", 31 | "test": "node --test", 32 | "postinstall": "husky install", 33 | "prepublishOnly": "pinst --disable", 34 | "postpublish": "pinst --enable" 35 | }, 36 | "commitlint": { 37 | "extends": [ 38 | "@commitlint/config-conventional" 39 | ] 40 | }, 41 | "lint-staged": { 42 | "*.{js,json,md}": [ 43 | "prettier --write" 44 | ], 45 | "*.js": [ 46 | "eslint --cache --fix" 47 | ] 48 | }, 49 | "dependencies": { 50 | "@actions/core": "^1.10.1" 51 | }, 52 | "devDependencies": { 53 | "@commitlint/config-conventional": "^19.2.2", 54 | "@eslint/js": "^9.5.0", 55 | "@vercel/ncc": "^0.38.1", 56 | "commitlint": "^19.3.0", 57 | "eslint": "^9.5.0", 58 | "esmock": "^2.6.6", 59 | "globals": "^15.6.0", 60 | "husky": "^9.0.11", 61 | "pinst": "^3.0.0", 62 | "prettier": "^3.3.2", 63 | "webpack": "^5.92.1" 64 | }, 65 | "engines": { 66 | "node": ">=20" 67 | }, 68 | "release": { 69 | "branches": [ 70 | "main" 71 | ] 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/cloudflare-statuscheck.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import core from '@actions/core' 4 | 5 | export default async function waitForDeployment( 6 | token, 7 | accountId, 8 | accountEmail, 9 | projectId, 10 | deploymentId 11 | ) { 12 | const apiUrl = `https://api.cloudflare.com/client/v4/accounts/${accountId}/pages/projects/${projectId}/deployments` 13 | 14 | const headers = accountEmail 15 | ? { 16 | 'X-Auth-Key': token, 17 | 'X-Auth-Email': accountEmail 18 | } 19 | : { 20 | Authorization: `Bearer ${token}` 21 | } 22 | 23 | const res = await fetch(apiUrl, { 24 | headers 25 | }) 26 | const { data } = await res.json() 27 | const build = data.result.filter((d) => d.id === deploymentId)[0] 28 | 29 | core.info( 30 | `Deployment status (#${build.short_id}) ${build.latest_stage.name}: ${build.latest_stage.status}` 31 | ) 32 | 33 | if (!build) { 34 | core.error(data) 35 | core.setFailed('no build with this ID found.') 36 | throw new Error('No build id. Abort.') 37 | } 38 | 39 | if (build.latest_stage.status === 'failure') { 40 | core.setFailed(`${build.latest_stage.name}: ${build.latest_stage.status}`) 41 | throw new Error('Build failed. Abort.') 42 | } 43 | 44 | return ( 45 | build.latest_stage.name === 'deploy' && 46 | build.latest_stage.status === 'success' 47 | ) 48 | } 49 | -------------------------------------------------------------------------------- /src/cloudflare.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import core from '@actions/core' 4 | 5 | export default async function getDeploymentUrl( 6 | token, 7 | accountId, 8 | accountEmail, 9 | projectId, 10 | repo, 11 | branch, 12 | environment, 13 | commitHash 14 | ) { 15 | const apiUrl = `https://api.cloudflare.com/client/v4/accounts/${accountId}/pages/projects/${projectId}/deployments` 16 | 17 | if (commitHash) { 18 | core.info(`Fetching ${commitHash} from: ${apiUrl}`) 19 | } else { 20 | core.info(`Fetching from: ${apiUrl}`) 21 | } 22 | 23 | const headers = accountEmail 24 | ? { 25 | 'X-Auth-Key': token, 26 | 'X-Auth-Email': accountEmail 27 | } 28 | : { 29 | Authorization: `Bearer ${token}` 30 | } 31 | 32 | const res = await fetch(apiUrl, { 33 | headers 34 | }) 35 | const { error, result } = await res.json() 36 | 37 | if (error) { 38 | core.error(error) 39 | core.setFailed('error fetching deployments') 40 | throw new Error('error fetching deployments') 41 | } 42 | 43 | if (!result || result.length <= 0) { 44 | core.error(JSON.stringify(result)) 45 | core.setFailed('no deployments found') 46 | throw new Error('no deployments found') 47 | } 48 | 49 | core.info(`Found ${result.length} deployments`) 50 | core.debug(`Looking for matching deployments ${repo}/${branch}`) 51 | 52 | const builds = result 53 | .filter( 54 | (d) => 55 | d && d.source && d.source.config && d.source.config.repo_name === repo 56 | ) 57 | .filter( 58 | (d) => 59 | d && 60 | d.deployment_trigger && 61 | d.deployment_trigger.metadata.branch === branch 62 | ) 63 | .filter((d) => { 64 | if (environment && environment.length > 0) { 65 | return d.environment === environment 66 | } else { 67 | return true 68 | } 69 | }) 70 | .filter( 71 | (d) => 72 | !commitHash || 73 | (d.deployment_trigger.metadata !== null && 74 | d.deployment_trigger.metadata.commit_hash === commitHash) 75 | ) 76 | 77 | core.info(`Found ${builds.length} matching builds`) 78 | if (!builds || builds.length <= 0) { 79 | core.error(JSON.stringify(builds)) 80 | core.info( 81 | 'If you run this as a pull request check, make sure to include the branch in the trigger (see #Usage in README.md)' 82 | ) 83 | core.setFailed('no matching builds found') 84 | throw new Error('no matching builds found') 85 | } 86 | 87 | const build = builds[0] 88 | core.info( 89 | `Preview URL: ${build.url} (${build.latest_stage.name} - ${build.latest_stage.status})` 90 | ) 91 | 92 | return build 93 | } 94 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import core from '@actions/core' 4 | import getDeploymentUrl from './cloudflare.js' 5 | import checkDeploymentStatus from './cloudflare-statuscheck.js' 6 | 7 | async function delay(ms) { 8 | return await new Promise((resolve) => setTimeout(resolve, ms)) 9 | } 10 | 11 | async function run() { 12 | try { 13 | const cloudflareToken = process.env.CLOUDFLARE_API_TOKEN 14 | const githubRef = 15 | core.getInput('branch', { required: false }) || process.env.GITHUB_REF 16 | const githubProject = process.env.GITHUB_REPOSITORY 17 | const githubBranch = githubRef.replace('refs/heads/', '') 18 | const githubRepo = githubProject.split('/')[1] 19 | const accountId = process.env.CLOUDFLARE_ACCOUNT_ID 20 | const accountEmail = process.env.CLOUDFLARE_ACCOUNT_EMAIL 21 | const projectId = core.getInput('cloudflare_project_id') 22 | const waitForDeploymentReady = core.getInput('wait_until_ready') 23 | const environment = core.getInput('environment', { required: false }) 24 | const inputHash = core.getInput('commit_hash', { required: false }) 25 | const commitHash = inputHash === '' || inputHash === null ? null : inputHash 26 | 27 | core.info( 28 | `Retrieving deployment preview for ${githubRepo}/${githubBranch} ...` 29 | ) 30 | 31 | const { id, url } = await getDeploymentUrl( 32 | cloudflareToken, 33 | accountId, 34 | accountEmail, 35 | projectId, 36 | githubRepo, 37 | githubBranch, 38 | environment, 39 | commitHash 40 | ) 41 | 42 | if (waitForDeploymentReady === 'true') { 43 | let deploymentReady = false 44 | 45 | while (!deploymentReady) { 46 | deploymentReady = await checkDeploymentStatus( 47 | cloudflareToken, 48 | accountId, 49 | accountEmail, 50 | projectId, 51 | id 52 | ) 53 | 54 | if (!deploymentReady) { 55 | await delay(2000) 56 | } 57 | } 58 | } 59 | 60 | core.setOutput('preview_url', url) 61 | } catch (error) { 62 | core.setFailed(error.message) 63 | } 64 | } 65 | 66 | run() 67 | -------------------------------------------------------------------------------- /test/cloudflare-statuscheck.test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import assert from 'node:assert' 4 | import { mock, test } from 'node:test' 5 | import esmock from 'esmock' 6 | 7 | const payload = { 8 | data: { 9 | result: [ 10 | { 11 | id: '123abc', 12 | environment: 'preview', 13 | latest_stage: { 14 | name: 'deploy', 15 | status: 'initialized' 16 | } 17 | } 18 | ] 19 | } 20 | } 21 | 22 | test('waitForDeployment() should wait until a deployment is successful - wait', async () => { 23 | const mockFetch = mock.fn(async () => { 24 | return payload 25 | }) 26 | 27 | const checkDeploymentStatus = await esmock( 28 | '../src/cloudflare-statuscheck.js', 29 | { 30 | import: { 31 | fetch: async () => ({ 32 | status: 200, 33 | json: mockFetch 34 | }) 35 | } 36 | } 37 | ) 38 | 39 | const actual = await checkDeploymentStatus( 40 | '123xyz', 41 | 'zentered', 42 | 'user@example.com', 43 | 'cf-project', 44 | '123abc' 45 | ) 46 | 47 | assert.equal(actual, false) 48 | }) 49 | 50 | test('waitForDeployment() should wait until a deployment is successful - done', async () => { 51 | const mockFetch = mock.fn(async () => { 52 | payload.data.result[0].latest_stage.status = 'success' 53 | return payload 54 | }) 55 | 56 | const checkDeploymentStatus = await esmock( 57 | '../src/cloudflare-statuscheck.js', 58 | { 59 | import: { 60 | fetch: async () => ({ 61 | status: 200, 62 | json: mockFetch 63 | }) 64 | } 65 | } 66 | ) 67 | 68 | const actual = await checkDeploymentStatus( 69 | '123xyz', 70 | 'zentered', 71 | 'user@example.com', 72 | 'cf-project', 73 | '123abc' 74 | ) 75 | 76 | assert.equal(actual, true) 77 | }) 78 | 79 | test('waitForDeployment() should abort when a build has failed', async () => { 80 | const mockFetch = mock.fn(async () => { 81 | payload.data.result[0].latest_stage.status = 'failure' 82 | return payload 83 | }) 84 | const mockSetFailed = mock.fn() 85 | 86 | const checkDeploymentStatus = await esmock( 87 | '../src/cloudflare-statuscheck.js', 88 | { 89 | '@actions/core': { 90 | info: mock.fn(), 91 | error: mock.fn(), 92 | setFailed: mockSetFailed 93 | } 94 | }, 95 | { 96 | import: { 97 | fetch: async () => ({ 98 | status: 200, 99 | json: mockFetch 100 | }) 101 | } 102 | } 103 | ) 104 | 105 | const fn = checkDeploymentStatus( 106 | '123xyz', 107 | 'zentered', 108 | 'user@example.com', 109 | 'cf-project', 110 | '123abc' 111 | ) 112 | 113 | await assert.rejects(fn, { 114 | name: 'Error', 115 | message: 'Build failed. Abort.' 116 | }) 117 | 118 | assert.equal(mockSetFailed.mock.calls.length, 1) 119 | }) 120 | -------------------------------------------------------------------------------- /test/cloudflare.test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import assert from 'node:assert' 4 | import { mock, test } from 'node:test' 5 | import esmock from 'esmock' 6 | import { readFileSync } from 'node:fs' 7 | import { join } from 'node:path' 8 | 9 | async function readFixture(name) { 10 | const path = join('test', 'fixtures', `${name}.json`) 11 | const file = readFileSync(path, 'utf8') 12 | const data = JSON.parse(file) 13 | return Promise.resolve(data) 14 | } 15 | 16 | test('getDeploymentUrl() should return a Cloudflare build', async () => { 17 | const mockFetch = mock.fn(async () => readFixture('success')) 18 | const getDeploymentUrl = await esmock('../src/cloudflare.js', { 19 | import: { 20 | fetch: async () => ({ 21 | status: 200, 22 | json: mockFetch 23 | }) 24 | } 25 | }) 26 | 27 | const { url } = await getDeploymentUrl( 28 | '123xyz', 29 | 'zentered', 30 | 'user@example.com', 31 | 'cf-project', 32 | 'website', 33 | 'fix/test-1', 34 | 'preview', 35 | null 36 | ) 37 | 38 | assert.equal(url, 'https://123.cf-project.pages.dev') 39 | }) 40 | 41 | test('getDeploymentUrl() should fail if there are no deployments', async () => { 42 | const mockFetch = mock.fn(async () => readFixture('empty')) 43 | const mockSetFailed = mock.fn() 44 | 45 | const getDeploymentUrl = await esmock( 46 | '../src/cloudflare.js', 47 | { 48 | '@actions/core': { 49 | info: mock.fn(), 50 | error: mock.fn(), 51 | setFailed: mockSetFailed 52 | } 53 | }, 54 | { 55 | import: { 56 | fetch: async () => ({ 57 | status: 200, 58 | json: mockFetch 59 | }) 60 | } 61 | } 62 | ) 63 | 64 | const fn = getDeploymentUrl( 65 | '123xyz', 66 | 'zentered', 67 | 'user@example.com', 68 | 'cf-project', 69 | 'website', 70 | 'fix/test-1', 71 | 'preview', 72 | null 73 | ) 74 | 75 | await assert.rejects(fn, { 76 | name: 'Error', 77 | message: 'no deployments found' 78 | }) 79 | 80 | assert.equal(mockSetFailed.mock.calls.length, 1) 81 | }) 82 | 83 | test('getDeploymentUrl() should check all environments when null', async () => { 84 | const mockFetch = mock.fn(async () => readFixture('check-environments')) 85 | const getDeploymentUrl = await esmock('../src/cloudflare.js', { 86 | import: { 87 | fetch: async () => ({ 88 | status: 200, 89 | json: mockFetch 90 | }) 91 | } 92 | }) 93 | 94 | const { url } = await getDeploymentUrl( 95 | '123xyz', 96 | 'zentered', 97 | 'user@example.com', 98 | 'cf-project', 99 | 'website', 100 | 'main', 101 | null, 102 | null 103 | ) 104 | 105 | assert.equal(url, 'https://main.cf-project.pages.dev') 106 | }) 107 | 108 | test('getDeploymentUrl() should filter by commitHash when provided', async () => { 109 | const mockFetch = mock.fn(async () => readFixture('filter-by-commithash')) 110 | const getDeploymentUrl = await esmock('../src/cloudflare.js', { 111 | import: { 112 | fetch: async () => ({ 113 | status: 200, 114 | json: mockFetch 115 | }) 116 | } 117 | }) 118 | 119 | const { url } = await getDeploymentUrl( 120 | '123xyz', 121 | 'zentered', 122 | 'user@example.com', 123 | 'cf-project', 124 | 'website', 125 | 'main', 126 | null, 127 | '456' 128 | ) 129 | 130 | assert.equal(url, 'https://main-456.cf-project.pages.dev') 131 | }) 132 | 133 | test('getDeploymentUrl() should fail if there are no matching builds', async () => { 134 | const mockFetch = mock.fn(async () => readFixture('filter-by-commithash')) 135 | const mockSetFailed = mock.fn() 136 | const getDeploymentUrl = await esmock( 137 | '../src/cloudflare.js', 138 | { 139 | '@actions/core': { 140 | info: mock.fn(), 141 | error: mock.fn(), 142 | setFailed: mockSetFailed 143 | } 144 | }, 145 | { 146 | import: { 147 | fetch: async () => ({ 148 | status: 200, 149 | json: mockFetch 150 | }) 151 | } 152 | } 153 | ) 154 | 155 | const fn = getDeploymentUrl( 156 | '123xyz', 157 | 'zentered', 158 | 'fix/huge-bug', 159 | 'zentered.co', 160 | 'preview', 161 | null 162 | ) 163 | 164 | await assert.rejects(fn, { 165 | name: 'Error', 166 | message: 'no matching builds found' 167 | }) 168 | 169 | assert.equal(mockSetFailed.mock.calls.length, 1) 170 | }) 171 | -------------------------------------------------------------------------------- /test/fixtures/check-environments.json: -------------------------------------------------------------------------------- 1 | { 2 | "result": [ 3 | { 4 | "environment": "production", 5 | "url": "https://main.cf-project.pages.dev", 6 | "deployment_trigger": { 7 | "type": "github:push", 8 | "metadata": { 9 | "branch": "main" 10 | } 11 | }, 12 | "latest_stage": { 13 | "name": "deploy", 14 | "status": "success" 15 | }, 16 | "source": { 17 | "type": "github", 18 | "config": { 19 | "repo_name": "website", 20 | "production_branch": "main" 21 | } 22 | } 23 | }, 24 | { 25 | "environment": "preview", 26 | "url": "https://123.cf-project.pages.dev", 27 | "deployment_trigger": { 28 | "type": "github:push", 29 | "metadata": { 30 | "branch": "fix/test-1" 31 | } 32 | }, 33 | "latest_stage": { 34 | "name": "deploy", 35 | "status": "success" 36 | }, 37 | "source": { 38 | "type": "github", 39 | "config": { 40 | "repo_name": "website" 41 | } 42 | } 43 | } 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /test/fixtures/empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "result": [] 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/filter-by-commithash.json: -------------------------------------------------------------------------------- 1 | { 2 | "result": [ 3 | { 4 | "environment": "production", 5 | "url": "https://main-123.cf-project.pages.dev", 6 | "deployment_trigger": { 7 | "type": "github:push", 8 | "metadata": { 9 | "branch": "main", 10 | "commit_hash": "123" 11 | } 12 | }, 13 | "latest_stage": { 14 | "name": "deploy", 15 | "status": "success" 16 | }, 17 | "source": { 18 | "type": "github", 19 | "config": { 20 | "repo_name": "website", 21 | "production_branch": "main" 22 | } 23 | } 24 | }, 25 | { 26 | "environment": "production", 27 | "url": "https://main-456.cf-project.pages.dev", 28 | "deployment_trigger": { 29 | "type": "github:push", 30 | "metadata": { 31 | "branch": "main", 32 | "commit_hash": "456" 33 | } 34 | }, 35 | "latest_stage": { 36 | "name": "deploy", 37 | "status": "success" 38 | }, 39 | "source": { 40 | "type": "github", 41 | "config": { 42 | "repo_name": "website", 43 | "production_branch": "main" 44 | } 45 | } 46 | }, 47 | { 48 | "environment": "preview", 49 | "url": "https://789.cf-project.pages.dev", 50 | "deployment_trigger": { 51 | "type": "github:push", 52 | "metadata": { 53 | "branch": "fix/test-1", 54 | "commit_hash": "789" 55 | } 56 | }, 57 | "latest_stage": { 58 | "name": "deploy", 59 | "status": "success" 60 | }, 61 | "source": { 62 | "type": "github", 63 | "config": { 64 | "repo_name": "website" 65 | } 66 | } 67 | } 68 | ] 69 | } 70 | -------------------------------------------------------------------------------- /test/fixtures/no-matching-builds.json: -------------------------------------------------------------------------------- 1 | { 2 | "result": [ 3 | { 4 | "name": "zentered-co", 5 | "url": "test-123.cloudflare.app", 6 | "deployment_trigger": { 7 | "type": "github:push", 8 | "metadata": { 9 | "branch": "test-123", 10 | "commit_hash": "456" 11 | } 12 | }, 13 | "meta": { 14 | "githubCommitRef": "does-not-exist", 15 | "githubCommitRepo": "zentered" 16 | }, 17 | "source": { 18 | "type": "github", 19 | "config": { 20 | "repo_name": "website" 21 | } 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /test/fixtures/success.json: -------------------------------------------------------------------------------- 1 | { 2 | "result": [ 3 | { 4 | "environment": "production", 5 | "url": "https://main.cf-project.pages.dev", 6 | "deployment_trigger": { 7 | "type": "github:push", 8 | "metadata": { 9 | "branch": "main" 10 | } 11 | }, 12 | "latest_stage": { 13 | "name": "deploy", 14 | "status": "success" 15 | }, 16 | "source": { 17 | "type": "github", 18 | "config": { 19 | "repo_name": "website", 20 | "production_branch": "main" 21 | } 22 | } 23 | }, 24 | { 25 | "environment": "preview", 26 | "url": "https://123.cf-project.pages.dev", 27 | "deployment_trigger": { 28 | "type": "github:push", 29 | "metadata": { 30 | "branch": "fix/test-1" 31 | } 32 | }, 33 | "latest_stage": { 34 | "name": "deploy", 35 | "status": "success" 36 | }, 37 | "source": { 38 | "type": "github", 39 | "config": { 40 | "repo_name": "website" 41 | } 42 | } 43 | } 44 | ] 45 | } 46 | --------------------------------------------------------------------------------