├── .gitattributes ├── .github ├── dependabot.yml └── workflows │ ├── check-dist.yml │ └── test.yml ├── .gitignore ├── .idea ├── .gitignore ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── github_action_appetize.iml ├── inspectionProfiles │ └── Project_Default.xml ├── misc.xml ├── modules.xml └── vcs.xml ├── .prettierignore ├── .prettierrc.json ├── CODEOWNERS ├── LICENSE ├── README.md ├── __tests__ └── main.test.ts ├── action.yml ├── dist ├── index.js ├── index.js.map ├── licenses.txt └── sourcemap-register.js ├── eslint.config.mjs ├── jest.config.js ├── package-lock.json ├── package.json ├── src ├── appetize.ts ├── main.ts └── optionalformdata.ts ├── test ├── app.apk └── app.zip ├── tsconfig.base.json ├── tsconfig.eslint.json └── tsconfig.json /.gitattributes: -------------------------------------------------------------------------------- 1 | dist/** -diff linguist-generated=true -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: / 5 | schedule: 6 | interval: daily 7 | 8 | - package-ecosystem: npm 9 | directory: / 10 | schedule: 11 | interval: daily 12 | -------------------------------------------------------------------------------- /.github/workflows/check-dist.yml: -------------------------------------------------------------------------------- 1 | # `dist/index.js` is a special file in Actions. 2 | # When you reference an action with `uses:` in a workflow, 3 | # `index.js` is the code that will run. 4 | # For our project, we generate this file through a build process from other source files. 5 | # We need to make sure the checked-in `index.js` actually matches what we expect it to be. 6 | name: Check dist/ 7 | 8 | on: 9 | push: 10 | branches: 11 | - main 12 | paths-ignore: 13 | - '**.md' 14 | pull_request: 15 | paths-ignore: 16 | - '**.md' 17 | workflow_dispatch: 18 | 19 | jobs: 20 | check-dist: 21 | runs-on: ubuntu-latest 22 | 23 | steps: 24 | - uses: actions/checkout@v4 25 | 26 | - name: Set Node.js 16.x 27 | uses: actions/setup-node@v4.3.0 28 | with: 29 | node-version: 16.x 30 | 31 | - name: Install dependencies 32 | run: npm ci 33 | 34 | - name: Rebuild the dist/ directory 35 | run: | 36 | npm run build 37 | npm run package 38 | 39 | - name: Compare the expected and actual dist/ directories 40 | run: | 41 | if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then 42 | echo "Detected uncommitted changes after build. See status below:" 43 | git diff 44 | exit 1 45 | fi 46 | id: diff 47 | 48 | # If index.js was different from expected, upload the expected version as an artifact 49 | - uses: actions/upload-artifact@v4 50 | if: ${{ failure() && steps.diff.conclusion == 'failure' }} 51 | with: 52 | name: dist 53 | path: dist/ 54 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: 'build-test' 2 | on: # rebuild any PRs and main branch changes 3 | pull_request: 4 | push: 5 | branches: 6 | - main 7 | - 'releases/*' 8 | workflow_dispatch: 9 | 10 | jobs: 11 | build: # make sure build/ci work properly 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - run: | 16 | npm install 17 | - run: | 18 | npm run all 19 | test: # make sure the action works 20 | runs-on: ubuntu-latest 21 | steps: 22 | - uses: actions/checkout@v4 23 | 24 | - name: Upload with File 25 | uses: ./ 26 | with: 27 | apiHost: 'https://test-api.appetize.io' 28 | apiToken: ${{ secrets.APPETIZE_API_TOKEN }} 29 | publicKey: ${{ secrets.APPETIZE_PUBLIC_KEY }} 30 | appFile: test/app.apk 31 | platform: 'android' 32 | note: 'For Appetize Github Action Testing' 33 | fileType: 'apk' 34 | timeout: 120 35 | disabled: false 36 | disableHome: true 37 | useLastFrame: true 38 | buttonText: "Github Action App Start" 39 | postSessionButtonText: "Restart Github Action App" 40 | launchUrl: "https://appetize.io" 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependency directory 2 | node_modules 3 | 4 | # Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | 13 | # Diagnostic reports (https://nodejs.org/api/report.html) 14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 15 | 16 | # Runtime data 17 | pids 18 | *.pid 19 | *.seed 20 | *.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | lib-cov 24 | 25 | # Coverage directory used by tools like istanbul 26 | coverage 27 | *.lcov 28 | 29 | # nyc test coverage 30 | .nyc_output 31 | 32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 33 | .grunt 34 | 35 | # Bower dependency directory (https://bower.io/) 36 | bower_components 37 | 38 | # node-waf configuration 39 | .lock-wscript 40 | 41 | # Compiled binary addons (https://nodejs.org/api/addons.html) 42 | build/Release 43 | 44 | # Dependency directories 45 | jspm_packages/ 46 | 47 | # TypeScript v1 declaration files 48 | typings/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Optional REPL history 60 | .node_repl_history 61 | 62 | # Output of 'npm pack' 63 | *.tgz 64 | 65 | # Yarn Integrity file 66 | .yarn-integrity 67 | 68 | # dotenv environment variables file 69 | .env 70 | .env.test 71 | 72 | # parcel-bundler cache (https://parceljs.org/) 73 | .cache 74 | 75 | # next.js build output 76 | .next 77 | 78 | # nuxt.js build output 79 | .nuxt 80 | 81 | # vuepress build output 82 | .vuepress/dist 83 | 84 | # Serverless directories 85 | .serverless/ 86 | 87 | # FuseBox cache 88 | .fusebox/ 89 | 90 | # DynamoDB Local files 91 | .dynamodb/ 92 | 93 | # OS metadata 94 | .DS_Store 95 | Thumbs.db 96 | 97 | # Ignore built ts files 98 | __tests__/runner/* 99 | lib/**/* -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 16 | 17 | 25 | 26 | 29 | 30 | 37 | 38 | 45 | 46 | 53 | 54 | 59 | 60 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/github_action_appetize.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | lib/ 3 | node_modules/ -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": false, 6 | "singleQuote": true, 7 | "trailingComma": "none", 8 | "bracketSpacing": false, 9 | "arrowParens": "avoid" 10 | } 11 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @actions/actions-runtime 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2018 GitHub, Inc. and contributors 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Appetize Github Action 2 | 3 | [![Build Test](https://github.com/appetizeio/github-action-appetize/actions/workflows/test.yml/badge.svg)](https://github.com/appetizeio/github-action-appetize/actions/workflows/test.yml) 4 | [![Check Distribution](https://github.com/appetizeio/github-action-appetize/actions/workflows/check-dist.yml/badge.svg)](https://github.com/appetizeio/github-action-appetize/actions/workflows/check-dist.yml) 5 | 6 | ## 📄 Description 7 | 8 | GitHub Action to facilitate interaction with Appetize's API. This action can be used to upload an Android .apk or iOS .app to Appetize. 9 | 10 | ## :arrow_right: Inputs 11 | 12 | | Name | Description | Required | Default | 13 | |-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------|-------------------------------------| 14 | | apiHost | Alternative Appetize API host | :white_check_mark: | https://api.appetize.io | 15 | | apiToken | Appetize API token for your account | :white_check_mark: | | 16 | | publicKey | The publicKey of the app to be updated; If no value is provided a new app will be created | | | 17 | | platform | The platform targeted by the build, either `android` or `ios` | :white_check_mark: | | 18 | | appFile | The local path to the app file to upload, either this or `appURL` must be provided | | | 19 | | appUrl | The URL to the app file to upload, either this or `appFile` must be provided | | | 20 | | fileType | The file type of the app file that will be uploaded; Must be `zip`, `tar.gz` or `apk` | | `zip` for iOS and `apk` for Android | 21 | | note | A note for your own purposes that will appear on the management dashboard. | | | 22 | | timeout | The number of seconds to wait until automatically ending the session due to user inactivity. Must be `30`, `60`, `120`, `180`, `300`, `600`, `1800`, `3600`, or `7200` | | `120` | 23 | | disabled | Whether or not streaming is disabled for this app. | | | 24 | | disableHome | Whether or not the home button is disabled for this app. | | | 25 | | useLastFrame | Whether or not the last image on the screen is shown after the session for the app ends. | | | 26 | | buttonText | Customize the message prompting the user to start the session | | `Tap to Play` | 27 | | postSessionButtonText | Customize the message prompting the user to restart the session | | `Tap to Play` | 28 | | launchUrl | Specify a deeplink to bring your users to a specific location when your app is launched. | | | 29 | 30 | ## :arrow_left: Outputs 31 | | Name | Description | 32 | |-----------|--------------------------------------------| 33 | | publicKey | The publicKey of the app that was uploaded | 34 | 35 | ## :tractor: Example Usage 36 | 37 | ### Upload a new iOS app 38 | 39 | ```yaml 40 | - name: Upload to Appetize 41 | uses: appetizeio/github-action-appetize@v1.0.5 42 | with: 43 | apiToken: ${{ secrets.APPETIZE_API_TOKEN }} 44 | appFile: test/app.zip 45 | platform: 'ios' 46 | ``` 47 | 48 | ### Upload an existing Android app 49 | 50 | ```yaml 51 | - name: Upload to Appetize 52 | uses: appetizeio/github-action-appetize@v1.0.5 53 | with: 54 | apiToken: ${{ secrets.APPETIZE_API_TOKEN }} 55 | publicKey: ${{ secrets.APPETIZE_PUBLIC_KEY }} 56 | appFile: test/app.apk 57 | platform: 'android' 58 | ``` 59 | 60 | ## 🛠 Developer Setup 61 | 62 | ### Install the dependencies 63 | 64 | ```bash 65 | npm install 66 | ``` 67 | 68 | ### Build the typescript and package it for distribution 69 | 70 | ```bash 71 | npm run build && npm run package 72 | ``` 73 | 74 | ### Publish to a distribution branch 75 | 76 | Actions are run from GitHub repos, so we will check in the packed dist folder. 77 | 78 | Then run `package` (this uses [ncc](https://github.com/vercel/ncc) under the hood): 79 | ```bash 80 | npm run package 81 | ``` 82 | and push the results: 83 | ```bash 84 | git add dist 85 | git commit -a -m "prod dependencies" 86 | git push origin releases/{version} 87 | ``` 88 | 89 | The action is now published! 🎉 90 | -------------------------------------------------------------------------------- /__tests__/main.test.ts: -------------------------------------------------------------------------------- 1 | import {expect, test, beforeAll, describe} from '@jest/globals' 2 | import {getInputs} from '../src/appetize' 3 | 4 | const inputData = { 5 | apiHost: 'apiHost', 6 | apiToken: 'apiToken', 7 | publicKey: 'publicKey', 8 | platform: 'android', 9 | appFile: 'fileLocation', 10 | appUrl: 'urlLocation', 11 | fileType: 'apk', 12 | note: 'note', 13 | timeout: '120', 14 | disabled: 'false', 15 | disableHome: 'true', 16 | useLastFrame: 'false', 17 | buttonText: 'string', 18 | postSessionButtonText: 'string', 19 | launchUrl: 'string' 20 | } 21 | 22 | describe('Validate inputs', () => { 23 | beforeAll(() => { 24 | for (const [key, value] of Object.entries(inputData)) { 25 | setInput(key, value) 26 | } 27 | }) 28 | 29 | test('apiHost', () => { 30 | expect(getInputs().apiHost).toBe(inputData.apiHost) 31 | }) 32 | 33 | test('apiKey', () => { 34 | expect(getInputs().apiToken).toBe(inputData.apiToken) 35 | }) 36 | 37 | test('publicKey', () => { 38 | expect(getInputs().publicKey).toBe(inputData.publicKey) 39 | }) 40 | 41 | test('platform', () => { 42 | expect(getInputs().platform).toBe(inputData.platform) 43 | }) 44 | 45 | test('appFile', () => { 46 | expect(getInputs().appFile).toBe(inputData.appFile) 47 | }) 48 | 49 | test('appUrl', () => { 50 | expect(getInputs().appUrl).toBe(inputData.appUrl) 51 | }) 52 | 53 | test('fileType', () => { 54 | expect(getInputs().fileType).toBe(inputData.fileType) 55 | }) 56 | 57 | test('note', () => { 58 | expect(getInputs().note).toBe(inputData.note) 59 | }) 60 | 61 | test('timeout', () => { 62 | expect(getInputs().timeout).toBe(Number(inputData.timeout)) 63 | }) 64 | 65 | test('disabled', () => { 66 | expect(getInputs().disabled).toBe(Boolean(inputData.disabled)) 67 | }) 68 | 69 | test('disableHome', () => { 70 | expect(getInputs().disableHome).toBe(Boolean(inputData.disableHome)) 71 | }) 72 | 73 | test('useLastFrame', () => { 74 | expect(getInputs().useLastFrame).toBe(Boolean(inputData.useLastFrame)) 75 | }) 76 | 77 | test('buttonText', () => { 78 | expect(getInputs().buttonText).toBe(inputData.buttonText) 79 | }) 80 | 81 | test('postSessionButtonText', () => { 82 | expect(getInputs().postSessionButtonText).toBe( 83 | inputData.postSessionButtonText 84 | ) 85 | }) 86 | 87 | test('launchUrl', () => { 88 | expect(getInputs().launchUrl).toBe(inputData.launchUrl) 89 | }) 90 | }) 91 | 92 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 93 | const setInput = (name: string, value: any) => { 94 | process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] = value 95 | } 96 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'Appetize Github Action' 2 | description: 'Github Action to facilitate interaction with the Appetize API' 3 | author: 'Appetize' 4 | branding: 5 | icon: 'chevron-up' 6 | color: 'gray-dark' 7 | inputs: 8 | apiHost: 9 | description: 'Alternative Appetize API host' 10 | required: false 11 | default: 'https://api.appetize.io' 12 | apiToken: 13 | description: 'Appetize API token' 14 | required: true 15 | publicKey: 16 | description: 'The publicKey of the app to be updated; If no value is provided a new app will be created' 17 | required: false 18 | platform: 19 | description: 'The platform targeted by the build, either ios or android' 20 | required: true 21 | appFile: 22 | description: 'The local path to the app file to upload; either this or appUrl must be provided' 23 | required: false 24 | appUrl: 25 | description: 'The URL to the app file to upload; either this or appFile must be provided' 26 | required: false 27 | fileType: 28 | description: 'The file type of the app file that will be uploaded; Must be zip, tar.gz or apk. Default is zip for iOS and apk for Android' 29 | required: false 30 | note: 31 | description: 'A note for your own purposes that will appear on the management dashboard.' 32 | required: false 33 | timeout: 34 | description: 'The number of seconds to wait until automatically ending the session due to user inactivity. Must be 30, 60, 120, 180, 300, 600, 1800, 3600, or 7200' 35 | required: false 36 | default: '120' 37 | disabled: 38 | description: 'Whether or not streaming is disabled for this app.' 39 | required: false 40 | disableHome: 41 | description: 'Whether or not the home button is disabled for this app.' 42 | required: false 43 | useLastFrame: 44 | description: 'Whether or not the last image on the screen is shown after the session for the app ends.' 45 | required: false 46 | buttonText: 47 | description: 'Customize the message prompting the user to start the session, default is "Tap to play"' 48 | required: false 49 | postSessionButtonText: 50 | description: 'Customize the message prompting the user to restart the session, default is "Tap to play"' 51 | required: false 52 | launchUrl: 53 | description: 'Specify a deeplink to bring your users to a specific location when your app is launched.' 54 | required: false 55 | outputs: 56 | publicKey: 57 | description: 'The public key of the app that was created or updated' 58 | runs: 59 | using: 'node16' 60 | main: 'dist/index.js' 61 | -------------------------------------------------------------------------------- /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/exec 14 | MIT 15 | The MIT License (MIT) 16 | 17 | Copyright 2019 GitHub 18 | 19 | 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: 20 | 21 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 22 | 23 | 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. 24 | 25 | @actions/http-client 26 | MIT 27 | Actions Http Client for Node.js 28 | 29 | Copyright (c) GitHub, Inc. 30 | 31 | All rights reserved. 32 | 33 | MIT License 34 | 35 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 36 | associated documentation files (the "Software"), to deal in the Software without restriction, 37 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 38 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 39 | subject to the following conditions: 40 | 41 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 42 | 43 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 44 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 45 | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 46 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 47 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 48 | 49 | 50 | @actions/io 51 | MIT 52 | The MIT License (MIT) 53 | 54 | Copyright 2019 GitHub 55 | 56 | 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: 57 | 58 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 59 | 60 | 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. 61 | 62 | @fastify/busboy 63 | MIT 64 | Copyright Brian White. All rights reserved. 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 68 | deal in the Software without restriction, including without limitation the 69 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 70 | sell 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 81 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 82 | IN THE SOFTWARE. 83 | 84 | asynckit 85 | MIT 86 | The MIT License (MIT) 87 | 88 | Copyright (c) 2016 Alex Indigo 89 | 90 | Permission is hereby granted, free of charge, to any person obtaining a copy 91 | of this software and associated documentation files (the "Software"), to deal 92 | in the Software without restriction, including without limitation the rights 93 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 94 | copies of the Software, and to permit persons to whom the Software is 95 | furnished to do so, subject to the following conditions: 96 | 97 | The above copyright notice and this permission notice shall be included in all 98 | copies or substantial portions of the Software. 99 | 100 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 101 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 102 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 103 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 104 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 105 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 106 | SOFTWARE. 107 | 108 | 109 | axios 110 | MIT 111 | # Copyright (c) 2014-present Matt Zabriskie & Collaborators 112 | 113 | 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: 114 | 115 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 116 | 117 | 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. 118 | 119 | 120 | call-bind-apply-helpers 121 | MIT 122 | MIT License 123 | 124 | Copyright (c) 2024 Jordan Harband 125 | 126 | Permission is hereby granted, free of charge, to any person obtaining a copy 127 | of this software and associated documentation files (the "Software"), to deal 128 | in the Software without restriction, including without limitation the rights 129 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 130 | copies of the Software, and to permit persons to whom the Software is 131 | furnished to do so, subject to the following conditions: 132 | 133 | The above copyright notice and this permission notice shall be included in all 134 | copies or substantial portions of the Software. 135 | 136 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 137 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 138 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 139 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 140 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 141 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 142 | SOFTWARE. 143 | 144 | 145 | combined-stream 146 | MIT 147 | Copyright (c) 2011 Debuggable Limited 148 | 149 | Permission is hereby granted, free of charge, to any person obtaining a copy 150 | of this software and associated documentation files (the "Software"), to deal 151 | in the Software without restriction, including without limitation the rights 152 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 153 | copies of the Software, and to permit persons to whom the Software is 154 | furnished to do so, subject to the following conditions: 155 | 156 | The above copyright notice and this permission notice shall be included in 157 | all copies or substantial portions of the Software. 158 | 159 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 160 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 161 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 162 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 163 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 164 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 165 | THE SOFTWARE. 166 | 167 | 168 | debug 169 | MIT 170 | (The MIT License) 171 | 172 | Copyright (c) 2014-2017 TJ Holowaychuk 173 | Copyright (c) 2018-2021 Josh Junon 174 | 175 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software 176 | and associated documentation files (the 'Software'), to deal in the Software without restriction, 177 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 178 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 179 | subject to the following conditions: 180 | 181 | The above copyright notice and this permission notice shall be included in all copies or substantial 182 | portions of the Software. 183 | 184 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 185 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 186 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 187 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 188 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 189 | 190 | 191 | 192 | delayed-stream 193 | MIT 194 | Copyright (c) 2011 Debuggable Limited 195 | 196 | Permission is hereby granted, free of charge, to any person obtaining a copy 197 | of this software and associated documentation files (the "Software"), to deal 198 | in the Software without restriction, including without limitation the rights 199 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 200 | copies of the Software, and to permit persons to whom the Software is 201 | furnished to do so, subject to the following conditions: 202 | 203 | The above copyright notice and this permission notice shall be included in 204 | all copies or substantial portions of the Software. 205 | 206 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 207 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 208 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 209 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 210 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 211 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 212 | THE SOFTWARE. 213 | 214 | 215 | dunder-proto 216 | MIT 217 | MIT License 218 | 219 | Copyright (c) 2024 ECMAScript Shims 220 | 221 | Permission is hereby granted, free of charge, to any person obtaining a copy 222 | of this software and associated documentation files (the "Software"), to deal 223 | in the Software without restriction, including without limitation the rights 224 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 225 | copies of the Software, and to permit persons to whom the Software is 226 | furnished to do so, subject to the following conditions: 227 | 228 | The above copyright notice and this permission notice shall be included in all 229 | copies or substantial portions of the Software. 230 | 231 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 232 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 233 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 234 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 235 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 236 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 237 | SOFTWARE. 238 | 239 | 240 | es-define-property 241 | MIT 242 | MIT License 243 | 244 | Copyright (c) 2024 Jordan Harband 245 | 246 | Permission is hereby granted, free of charge, to any person obtaining a copy 247 | of this software and associated documentation files (the "Software"), to deal 248 | in the Software without restriction, including without limitation the rights 249 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 250 | copies of the Software, and to permit persons to whom the Software is 251 | furnished to do so, subject to the following conditions: 252 | 253 | The above copyright notice and this permission notice shall be included in all 254 | copies or substantial portions of the Software. 255 | 256 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 257 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 258 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 259 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 260 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 261 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 262 | SOFTWARE. 263 | 264 | 265 | es-errors 266 | MIT 267 | MIT License 268 | 269 | Copyright (c) 2024 Jordan Harband 270 | 271 | Permission is hereby granted, free of charge, to any person obtaining a copy 272 | of this software and associated documentation files (the "Software"), to deal 273 | in the Software without restriction, including without limitation the rights 274 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 275 | copies of the Software, and to permit persons to whom the Software is 276 | furnished to do so, subject to the following conditions: 277 | 278 | The above copyright notice and this permission notice shall be included in all 279 | copies or substantial portions of the Software. 280 | 281 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 282 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 283 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 284 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 285 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 286 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 287 | SOFTWARE. 288 | 289 | 290 | es-object-atoms 291 | MIT 292 | MIT License 293 | 294 | Copyright (c) 2024 Jordan Harband 295 | 296 | Permission is hereby granted, free of charge, to any person obtaining a copy 297 | of this software and associated documentation files (the "Software"), to deal 298 | in the Software without restriction, including without limitation the rights 299 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 300 | copies of the Software, and to permit persons to whom the Software is 301 | furnished to do so, subject to the following conditions: 302 | 303 | The above copyright notice and this permission notice shall be included in all 304 | copies or substantial portions of the Software. 305 | 306 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 307 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 308 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 309 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 310 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 311 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 312 | SOFTWARE. 313 | 314 | 315 | es-set-tostringtag 316 | MIT 317 | MIT License 318 | 319 | Copyright (c) 2022 ECMAScript Shims 320 | 321 | Permission is hereby granted, free of charge, to any person obtaining a copy 322 | of this software and associated documentation files (the "Software"), to deal 323 | in the Software without restriction, including without limitation the rights 324 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 325 | copies of the Software, and to permit persons to whom the Software is 326 | furnished to do so, subject to the following conditions: 327 | 328 | The above copyright notice and this permission notice shall be included in all 329 | copies or substantial portions of the Software. 330 | 331 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 332 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 333 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 334 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 335 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 336 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 337 | SOFTWARE. 338 | 339 | 340 | follow-redirects 341 | MIT 342 | Copyright 2014–present Olivier Lalonde , James Talmage , Ruben Verborgh 343 | 344 | Permission is hereby granted, free of charge, to any person obtaining a copy of 345 | this software and associated documentation files (the "Software"), to deal in 346 | the Software without restriction, including without limitation the rights to 347 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 348 | of the Software, and to permit persons to whom the Software is furnished to do 349 | so, subject to the following conditions: 350 | 351 | The above copyright notice and this permission notice shall be included in all 352 | copies or substantial portions of the Software. 353 | 354 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 355 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 356 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 357 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 358 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 359 | IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 360 | 361 | 362 | form-data 363 | MIT 364 | Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors 365 | 366 | Permission is hereby granted, free of charge, to any person obtaining a copy 367 | of this software and associated documentation files (the "Software"), to deal 368 | in the Software without restriction, including without limitation the rights 369 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 370 | copies of the Software, and to permit persons to whom the Software is 371 | furnished to do so, subject to the following conditions: 372 | 373 | The above copyright notice and this permission notice shall be included in 374 | all copies or substantial portions of the Software. 375 | 376 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 377 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 378 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 379 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 380 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 381 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 382 | THE SOFTWARE. 383 | 384 | 385 | function-bind 386 | MIT 387 | Copyright (c) 2013 Raynos. 388 | 389 | Permission is hereby granted, free of charge, to any person obtaining a copy 390 | of this software and associated documentation files (the "Software"), to deal 391 | in the Software without restriction, including without limitation the rights 392 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 393 | copies of the Software, and to permit persons to whom the Software is 394 | furnished to do so, subject to the following conditions: 395 | 396 | The above copyright notice and this permission notice shall be included in 397 | all copies or substantial portions of the Software. 398 | 399 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 400 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 401 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 402 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 403 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 404 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 405 | THE SOFTWARE. 406 | 407 | 408 | 409 | get-intrinsic 410 | MIT 411 | MIT License 412 | 413 | Copyright (c) 2020 Jordan Harband 414 | 415 | Permission is hereby granted, free of charge, to any person obtaining a copy 416 | of this software and associated documentation files (the "Software"), to deal 417 | in the Software without restriction, including without limitation the rights 418 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 419 | copies of the Software, and to permit persons to whom the Software is 420 | furnished to do so, subject to the following conditions: 421 | 422 | The above copyright notice and this permission notice shall be included in all 423 | copies or substantial portions of the Software. 424 | 425 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 426 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 427 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 428 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 429 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 430 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 431 | SOFTWARE. 432 | 433 | 434 | get-proto 435 | MIT 436 | MIT License 437 | 438 | Copyright (c) 2025 Jordan Harband 439 | 440 | Permission is hereby granted, free of charge, to any person obtaining a copy 441 | of this software and associated documentation files (the "Software"), to deal 442 | in the Software without restriction, including without limitation the rights 443 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 444 | copies of the Software, and to permit persons to whom the Software is 445 | furnished to do so, subject to the following conditions: 446 | 447 | The above copyright notice and this permission notice shall be included in all 448 | copies or substantial portions of the Software. 449 | 450 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 451 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 452 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 453 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 454 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 455 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 456 | SOFTWARE. 457 | 458 | 459 | gopd 460 | MIT 461 | MIT License 462 | 463 | Copyright (c) 2022 Jordan Harband 464 | 465 | Permission is hereby granted, free of charge, to any person obtaining a copy 466 | of this software and associated documentation files (the "Software"), to deal 467 | in the Software without restriction, including without limitation the rights 468 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 469 | copies of the Software, and to permit persons to whom the Software is 470 | furnished to do so, subject to the following conditions: 471 | 472 | The above copyright notice and this permission notice shall be included in all 473 | copies or substantial portions of the Software. 474 | 475 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 476 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 477 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 478 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 479 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 480 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 481 | SOFTWARE. 482 | 483 | 484 | has-flag 485 | MIT 486 | MIT License 487 | 488 | Copyright (c) Sindre Sorhus (sindresorhus.com) 489 | 490 | 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: 491 | 492 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 493 | 494 | 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. 495 | 496 | 497 | has-symbols 498 | MIT 499 | MIT License 500 | 501 | Copyright (c) 2016 Jordan Harband 502 | 503 | Permission is hereby granted, free of charge, to any person obtaining a copy 504 | of this software and associated documentation files (the "Software"), to deal 505 | in the Software without restriction, including without limitation the rights 506 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 507 | copies of the Software, and to permit persons to whom the Software is 508 | furnished to do so, subject to the following conditions: 509 | 510 | The above copyright notice and this permission notice shall be included in all 511 | copies or substantial portions of the Software. 512 | 513 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 514 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 515 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 516 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 517 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 518 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 519 | SOFTWARE. 520 | 521 | 522 | has-tostringtag 523 | MIT 524 | MIT License 525 | 526 | Copyright (c) 2021 Inspect JS 527 | 528 | Permission is hereby granted, free of charge, to any person obtaining a copy 529 | of this software and associated documentation files (the "Software"), to deal 530 | in the Software without restriction, including without limitation the rights 531 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 532 | copies of the Software, and to permit persons to whom the Software is 533 | furnished to do so, subject to the following conditions: 534 | 535 | The above copyright notice and this permission notice shall be included in all 536 | copies or substantial portions of the Software. 537 | 538 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 539 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 540 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 541 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 542 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 543 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 544 | SOFTWARE. 545 | 546 | 547 | hasown 548 | MIT 549 | MIT License 550 | 551 | Copyright (c) Jordan Harband and contributors 552 | 553 | Permission is hereby granted, free of charge, to any person obtaining a copy 554 | of this software and associated documentation files (the "Software"), to deal 555 | in the Software without restriction, including without limitation the rights 556 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 557 | copies of the Software, and to permit persons to whom the Software is 558 | furnished to do so, subject to the following conditions: 559 | 560 | The above copyright notice and this permission notice shall be included in all 561 | copies or substantial portions of the Software. 562 | 563 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 564 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 565 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 566 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 567 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 568 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 569 | SOFTWARE. 570 | 571 | 572 | math-intrinsics 573 | MIT 574 | MIT License 575 | 576 | Copyright (c) 2024 ECMAScript Shims 577 | 578 | Permission is hereby granted, free of charge, to any person obtaining a copy 579 | of this software and associated documentation files (the "Software"), to deal 580 | in the Software without restriction, including without limitation the rights 581 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 582 | copies of the Software, and to permit persons to whom the Software is 583 | furnished to do so, subject to the following conditions: 584 | 585 | The above copyright notice and this permission notice shall be included in all 586 | copies or substantial portions of the Software. 587 | 588 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 589 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 590 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 591 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 592 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 593 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 594 | SOFTWARE. 595 | 596 | 597 | mime-db 598 | MIT 599 | (The MIT License) 600 | 601 | Copyright (c) 2014 Jonathan Ong 602 | Copyright (c) 2015-2022 Douglas Christopher Wilson 603 | 604 | Permission is hereby granted, free of charge, to any person obtaining 605 | a copy of this software and associated documentation files (the 606 | 'Software'), to deal in the Software without restriction, including 607 | without limitation the rights to use, copy, modify, merge, publish, 608 | distribute, sublicense, and/or sell copies of the Software, and to 609 | permit persons to whom the Software is furnished to do so, subject to 610 | the following conditions: 611 | 612 | The above copyright notice and this permission notice shall be 613 | included in all copies or substantial portions of the Software. 614 | 615 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 616 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 617 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 618 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 619 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 620 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 621 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 622 | 623 | 624 | mime-types 625 | MIT 626 | (The MIT License) 627 | 628 | Copyright (c) 2014 Jonathan Ong 629 | Copyright (c) 2015 Douglas Christopher Wilson 630 | 631 | Permission is hereby granted, free of charge, to any person obtaining 632 | a copy of this software and associated documentation files (the 633 | 'Software'), to deal in the Software without restriction, including 634 | without limitation the rights to use, copy, modify, merge, publish, 635 | distribute, sublicense, and/or sell copies of the Software, and to 636 | permit persons to whom the Software is furnished to do so, subject to 637 | the following conditions: 638 | 639 | The above copyright notice and this permission notice shall be 640 | included in all copies or substantial portions of the Software. 641 | 642 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 643 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 644 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 645 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 646 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 647 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 648 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 649 | 650 | 651 | ms 652 | MIT 653 | The MIT License (MIT) 654 | 655 | Copyright (c) 2020 Vercel, Inc. 656 | 657 | Permission is hereby granted, free of charge, to any person obtaining a copy 658 | of this software and associated documentation files (the "Software"), to deal 659 | in the Software without restriction, including without limitation the rights 660 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 661 | copies of the Software, and to permit persons to whom the Software is 662 | furnished to do so, subject to the following conditions: 663 | 664 | The above copyright notice and this permission notice shall be included in all 665 | copies or substantial portions of the Software. 666 | 667 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 668 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 669 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 670 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 671 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 672 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 673 | SOFTWARE. 674 | 675 | 676 | proxy-from-env 677 | MIT 678 | The MIT License 679 | 680 | Copyright (C) 2016-2018 Rob Wu 681 | 682 | Permission is hereby granted, free of charge, to any person obtaining a copy of 683 | this software and associated documentation files (the "Software"), to deal in 684 | the Software without restriction, including without limitation the rights to 685 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 686 | of the Software, and to permit persons to whom the Software is furnished to do 687 | so, subject to the following conditions: 688 | 689 | The above copyright notice and this permission notice shall be included in all 690 | copies or substantial portions of the Software. 691 | 692 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 693 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 694 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 695 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 696 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 697 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 698 | 699 | 700 | supports-color 701 | MIT 702 | MIT License 703 | 704 | Copyright (c) Sindre Sorhus (sindresorhus.com) 705 | 706 | 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: 707 | 708 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 709 | 710 | 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. 711 | 712 | 713 | tunnel 714 | MIT 715 | The MIT License (MIT) 716 | 717 | Copyright (c) 2012 Koichi Kobayashi 718 | 719 | Permission is hereby granted, free of charge, to any person obtaining a copy 720 | of this software and associated documentation files (the "Software"), to deal 721 | in the Software without restriction, including without limitation the rights 722 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 723 | copies of the Software, and to permit persons to whom the Software is 724 | furnished to do so, subject to the following conditions: 725 | 726 | The above copyright notice and this permission notice shall be included in 727 | all copies or substantial portions of the Software. 728 | 729 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 730 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 731 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 732 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 733 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 734 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 735 | THE SOFTWARE. 736 | 737 | 738 | undici 739 | MIT 740 | MIT License 741 | 742 | Copyright (c) Matteo Collina and Undici contributors 743 | 744 | Permission is hereby granted, free of charge, to any person obtaining a copy 745 | of this software and associated documentation files (the "Software"), to deal 746 | in the Software without restriction, including without limitation the rights 747 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 748 | copies of the Software, and to permit persons to whom the Software is 749 | furnished to do so, subject to the following conditions: 750 | 751 | The above copyright notice and this permission notice shall be included in all 752 | copies or substantial portions of the Software. 753 | 754 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 755 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 756 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 757 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 758 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 759 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 760 | SOFTWARE. 761 | -------------------------------------------------------------------------------- /dist/sourcemap-register.js: -------------------------------------------------------------------------------- 1 | (()=>{var e={296:e=>{var r=Object.prototype.toString;var n=typeof Buffer!=="undefined"&&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},599:(e,r,n)=>{e=n.nmd(e);var t=n(927).SourceMapConsumer;var o=n(928);var i;try{i=n(896);if(!i.existsSync||!i.readFileSync){i=null}}catch(e){}var a=n(296);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 d=[];var h=[];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=d.slice(0);var _=h.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){d.length=0}d.unshift(r.retrieveFile)}if(r.retrieveSourceMap){if(r.overrideRetrieveSourceMap){h.length=0}h.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(){d.length=0;h.length=0;d=S.slice(0);h=_.slice(0);v=handlerExec(h);m=handlerExec(d)}},517:(e,r,n)=>{var t=n(297);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(158);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}},24:(e,r,n)=>{var t=n(297);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.P=MappingList},299:(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(297);var i=n(197);var a=n(517).C;var u=n(818);var s=n(299).g;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"){h.push(v)}}}s(m,o.compareByGeneratedPositionsDeflated);this.__generatedMappings=m;s(h,o.compareByOriginalPositions);this.__originalMappings=h};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(818);var o=n(297);var i=n(517).C;var a=n(24).P;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 d=0,h=g.length;d0){if(!o.compareByGeneratedPositionsInflated(c,g[d-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.x=SourceMapGenerator},565:(e,r,n)=>{var t;var o=n(163).x;var i=n(297);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},927:(e,r,n)=>{n(163).x;r.SourceMapConsumer=n(684).SourceMapConsumer;n(565)},896:e=>{"use strict";e.exports=require("fs")},928: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__(599).install();module.exports=n})(); -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import {fixupPluginRules} from '@eslint/compat' 2 | import {FlatCompat} from '@eslint/eslintrc' 3 | import js from '@eslint/js' 4 | import typescriptEslint from '@typescript-eslint/eslint-plugin' 5 | import tsParser from '@typescript-eslint/parser' 6 | import _import from 'eslint-plugin-import' 7 | import jest from 'eslint-plugin-jest' 8 | import prettier from 'eslint-plugin-prettier' 9 | import globals from 'globals' 10 | import path from 'node:path' 11 | import {fileURLToPath} from 'node:url' 12 | 13 | const __filename = fileURLToPath(import.meta.url) 14 | const __dirname = path.dirname(__filename) 15 | const compat = new FlatCompat({ 16 | baseDirectory: __dirname, 17 | recommendedConfig: js.configs.recommended, 18 | allConfig: js.configs.all 19 | }) 20 | 21 | export default [ 22 | { 23 | ignores: ['**/dist', '**/lib', '**/node_modules', 'jest.config.js'] 24 | }, 25 | ...compat.extends( 26 | 'eslint:recommended', 27 | 'plugin:@typescript-eslint/eslint-recommended', 28 | 'plugin:@typescript-eslint/recommended', 29 | 'plugin:jest/recommended', 30 | 'plugin:prettier/recommended' 31 | ), 32 | { 33 | plugins: { 34 | import: fixupPluginRules(_import), 35 | jest, 36 | prettier, 37 | '@typescript-eslint': typescriptEslint 38 | }, 39 | 40 | languageOptions: { 41 | globals: { 42 | ...globals.node, 43 | ...globals.jest, 44 | Atomics: 'readonly', 45 | SharedArrayBuffer: 'readonly' 46 | }, 47 | 48 | parser: tsParser, 49 | ecmaVersion: 2023, 50 | sourceType: 'module', 51 | 52 | parserOptions: { 53 | project: ['tsconfig.eslint.json'], 54 | tsconfigRootDir: '.' 55 | } 56 | }, 57 | 58 | settings: { 59 | 'import/resolver': { 60 | typescript: { 61 | alwaysTryTypes: true, 62 | project: 'tsconfig.eslint.json' 63 | } 64 | } 65 | }, 66 | 67 | rules: { 68 | camelcase: 'off', 69 | 'eslint-comments/no-use': 'off', 70 | 'eslint-comments/no-unused-disable': 'off', 71 | 'i18n-text/no-en': 'off', 72 | 'import/no-namespace': 'off', 73 | 'no-console': 'off', 74 | 'no-shadow': 'off', 75 | 'no-unused-vars': 'off', 76 | 'prettier/prettier': 'error' 77 | } 78 | } 79 | ] 80 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | clearMocks: true, 3 | moduleFileExtensions: ['js', 'ts'], 4 | testMatch: ['**/*.test.ts'], 5 | transform: { 6 | '^.+\\.ts$': 'ts-jest' 7 | }, 8 | verbose: true 9 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "appetize-github-action", 3 | "version": "1.0.0", 4 | "private": true, 5 | "description": "Github Action to facilitate interaction with the Appetize API", 6 | "main": "lib/main.js", 7 | "scripts": { 8 | "build": "tsc", 9 | "format": "prettier --write '**/*.ts'", 10 | "format-check": "prettier --check '**/*.ts'", 11 | "lint": "npx eslint .", 12 | "package": "ncc build --source-map --license licenses.txt", 13 | "test": "jest", 14 | "all": "npm run build && npm run format && npm run lint && npm run package && npm test" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/appetizeio/github-action-appetize.git" 19 | }, 20 | "keywords": [ 21 | "actions", 22 | "node", 23 | "setup", 24 | "appetize" 25 | ], 26 | "author": "Appetize", 27 | "license": "MIT", 28 | "dependencies": { 29 | "@actions/core": "^1.10.1", 30 | "axios": "^1.7.7" 31 | }, 32 | "devDependencies": { 33 | "@eslint/compat": "^1.2.7", 34 | "@types/node": "^22.9.0", 35 | "@typescript-eslint/eslint-plugin": "^8.28.0", 36 | "@typescript-eslint/parser": "^8.28.0", 37 | "@vercel/ncc": "^0.38.3", 38 | "eslint": "^9.23.0", 39 | "eslint-config-prettier": "^10.0.2", 40 | "eslint-import-resolver-typescript": "^4.3.1", 41 | "eslint-plugin-import": "^2.31.0", 42 | "eslint-plugin-jest": "^28.11.0", 43 | "eslint-plugin-prettier": "^5.2.5", 44 | "jest": "^29.7.0", 45 | "js-yaml": "^4.1.0", 46 | "prettier": "^3.5.3", 47 | "prettier-eslint": "^16.3.0", 48 | "ts-jest": "^29.2.5", 49 | "typescript": "^5.8.2" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/appetize.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core' 2 | import FormData from 'form-data' 3 | import {createReadStream} from 'fs' 4 | import axios from 'axios' 5 | import {OptionalFormData} from './optionalformdata' 6 | 7 | const apiVersion = 'v1' 8 | 9 | const inputs: InputData = getInputs() 10 | 11 | /** 12 | * The data that is passed to the action. Exported to allow for easy testing. 13 | */ 14 | export function getInputs(): InputData { 15 | return { 16 | apiHost: core.getInput('apiHost'), 17 | apiToken: core.getInput('apiToken'), 18 | publicKey: core.getInput('publicKey'), 19 | platform: core.getInput('platform'), 20 | appFile: core.getInput('appFile'), 21 | appUrl: core.getInput('appUrl'), 22 | fileType: core.getInput('fileType'), 23 | note: core.getInput('note'), 24 | timeout: Number(core.getInput('timeout')), 25 | disabled: Boolean(core.getInput('disabled')), 26 | disableHome: Boolean(core.getInput('disableHome')), 27 | useLastFrame: Boolean(core.getInput('useLastFrame')), 28 | buttonText: core.getInput('buttonText'), 29 | postSessionButtonText: core.getInput('postSessionButtonText'), 30 | launchUrl: core.getInput('launchUrl') 31 | } 32 | } 33 | 34 | /** 35 | * Uploads a build to Appetize. 36 | * If a [publicKey] is specified, an existing app will be updated, otherwise a new app will be created. 37 | * @returns The public key of the uploaded build. 38 | * @throws An error if neither [appFile] nor [appUrl] are specified. 39 | */ 40 | export const uploadBuild = async (): Promise => { 41 | validateInputData(inputs) 42 | const [data, headers] = dataAndHeaders() 43 | core.info(`Uploading build to ${url()}`) 44 | core.info('Attached build info:') 45 | core.info(`${JSON.stringify(inputs)}`) 46 | const response = await axios.post(url(), data, { 47 | auth: { 48 | username: inputs.apiToken, 49 | password: '' 50 | }, 51 | headers, 52 | maxContentLength: Infinity, 53 | maxBodyLength: Infinity 54 | }) 55 | return response.data 56 | } 57 | 58 | /** 59 | * Retrieves the data and headers for the given inputs. 60 | * @returns The data and headers for the request. 61 | * @throws An error if neither [appFile] nor [appUrl] are specified. 62 | */ 63 | const dataAndHeaders = (): [ 64 | data: FormData | UrlData, 65 | headers: FormData.Headers | undefined 66 | ] => { 67 | if (inputs.appFile) { 68 | const data = fileData() 69 | return [data, data.getHeaders()] 70 | } else if (inputs.appUrl) { 71 | return [urlData(), undefined] 72 | } else { 73 | throw new Error('Either appFile or appUrl must be specified') 74 | } 75 | } 76 | 77 | /** 78 | * Validates that all inputs are valid. 79 | * @throws An error if any input is invalid with the reason. 80 | */ 81 | const validateInputData = (input: InputData): void => { 82 | //Platform valid types 83 | if (input.platform !== 'ios' && input.platform !== 'android') { 84 | throw new Error('Platform must be either ios or android') 85 | } 86 | //AppFile or AppUrl required 87 | if (!input.appFile && !input.appUrl) { 88 | throw new Error('Either appFile or appUrl must be specified') 89 | } 90 | //FileType valid types 91 | if ( 92 | input.fileType && 93 | input.fileType !== 'apk' && 94 | input.fileType !== 'zip' && 95 | input.fileType !== 'tar.gz' 96 | ) { 97 | throw new Error('FileType must be either apk, zip, or tar.gz') 98 | } 99 | //Timeout must be a valid number 100 | if ( 101 | input.timeout && 102 | input.timeout !== 30 && 103 | input.timeout !== 60 && 104 | input.timeout !== 120 && 105 | input.timeout !== 180 && 106 | input.timeout !== 300 && 107 | input.timeout !== 600 && 108 | input.timeout !== 1800 && 109 | input.timeout !== 3600 && 110 | input.timeout !== 7200 111 | ) { 112 | throw new Error( 113 | 'Timeout must be either 30, 60, 120, 180, 300, 600, 1800, 3600, or 7200' 114 | ) 115 | } 116 | } 117 | 118 | /** 119 | * Creates the URL for the request. 120 | */ 121 | const url = (): string => { 122 | const baseUrl = `${inputs.apiHost}/${apiVersion}/apps/` 123 | if (inputs.publicKey) { 124 | return baseUrl + inputs.publicKey 125 | } 126 | return baseUrl 127 | } 128 | 129 | /** 130 | * Creates a FormData object for uploading a local file. 131 | */ 132 | const fileData = (): FormData => { 133 | const form = new OptionalFormData() 134 | form.append('file', createReadStream(inputs.appFile)) 135 | form.append('platform', inputs.platform) 136 | form.appendOptional('fileType', inputs.fileType) 137 | form.appendOptional('note', inputs.note) 138 | form.appendOptional('timeout', String(inputs.timeout)) 139 | form.appendOptional('disabled', String(inputs.disabled)) 140 | form.appendOptional('disableHome', String(inputs.disableHome)) 141 | form.appendOptional('useLastFrame', String(inputs.useLastFrame)) 142 | form.appendOptional('buttonText', inputs.buttonText) 143 | form.appendOptional('postSessionButtonText', inputs.postSessionButtonText) 144 | form.appendOptional('launchUrl', inputs.launchUrl) 145 | return form 146 | } 147 | 148 | /** 149 | * Creates a UrlData object for uploading a remote file. 150 | */ 151 | const urlData = (): UrlData => { 152 | return { 153 | url: inputs.appUrl, 154 | platform: inputs.platform, 155 | fileType: inputs.fileType, 156 | note: inputs.note, 157 | timeout: inputs.timeout, 158 | disabled: inputs.disabled, 159 | disableHome: inputs.disableHome, 160 | useLastFrame: inputs.useLastFrame, 161 | buttonText: inputs.buttonText, 162 | postSessionButtonText: inputs.postSessionButtonText, 163 | launchUrl: inputs.launchUrl 164 | } 165 | } 166 | 167 | interface UrlData { 168 | url: string 169 | platform: string 170 | fileType: string 171 | note: string 172 | timeout: number 173 | disabled: boolean 174 | disableHome: boolean 175 | useLastFrame: boolean 176 | buttonText: string 177 | postSessionButtonText: string 178 | launchUrl: string 179 | } 180 | 181 | interface InputData { 182 | apiHost: string 183 | apiToken: string 184 | publicKey: string 185 | platform: string 186 | appFile: string 187 | appUrl: string 188 | fileType: string 189 | note: string 190 | timeout: number 191 | disabled: boolean 192 | disableHome: boolean 193 | useLastFrame: boolean 194 | buttonText: string 195 | postSessionButtonText: string 196 | launchUrl: string 197 | } 198 | 199 | interface OutputData { 200 | publicKey: string 201 | } 202 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core' 2 | import {uploadBuild} from './appetize' 3 | 4 | async function run(): Promise { 5 | try { 6 | const result = await uploadBuild() 7 | core.setOutput('publicKey', result.publicKey) 8 | } catch (error) { 9 | if (error instanceof Error) core.setFailed(error.message) 10 | } 11 | } 12 | 13 | run() 14 | -------------------------------------------------------------------------------- /src/optionalformdata.ts: -------------------------------------------------------------------------------- 1 | import FormData from 'form-data' 2 | 3 | export class OptionalFormData extends FormData { 4 | appendOptional(key: string, value: unknown): void { 5 | if (value) { 6 | this.append(key, value) 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/app.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizeio/github-action-appetize/ad90cd939d77bd5234ee5354ef7780e0bf4b7eaa/test/app.apk -------------------------------------------------------------------------------- /test/app.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appetizeio/github-action-appetize/ad90cd939d77bd5234ee5354ef7780e0bf4b7eaa/test/app.zip -------------------------------------------------------------------------------- /tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "compilerOptions": { 4 | "allowSyntheticDefaultImports": true, // Allow import React from 'react' instead of import * as React from 'react' 5 | "declaration": false, 6 | "declarationMap": false, 7 | "forceConsistentCasingInFileNames": true, 8 | "lib": ["ES2022"], 9 | "target": "ES2022", 10 | "module": "NodeNext", 11 | "moduleResolution": "NodeNext", 12 | "noImplicitAny": true, 13 | "noUnusedLocals": true, 14 | "noUnusedParameters": false, 15 | "esModuleInterop": true, 16 | "pretty": true, 17 | "resolveJsonModule": true, 18 | "strict": true, 19 | "strictNullChecks": true, 20 | } 21 | } -------------------------------------------------------------------------------- /tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "./tsconfig.base.json", 4 | "compilerOptions": { 5 | "allowJs": true, 6 | "noEmit": true 7 | }, 8 | "exclude": ["lib", "node_modules", "dist"], 9 | "include": [ 10 | "__tests__", 11 | "src", 12 | "eslint.config.mjs", 13 | "jest.config.js", 14 | ] 15 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "extends": "./tsconfig.base.json", 4 | "compilerOptions": { 5 | "module": "NodeNext", 6 | "moduleResolution": "NodeNext", 7 | "outDir": "./lib", /* Redirect output structure to the directory. */ 8 | "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 9 | }, 10 | "exclude": [ 11 | "node_modules", 12 | "__tests__", 13 | "lib", 14 | "dist" 15 | ], 16 | "include": [ 17 | "src", 18 | ] 19 | } --------------------------------------------------------------------------------