├── .dockerignore ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .gitattributes ├── .github ├── CODEOWNERS ├── CONTRIBUTING.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ └── bug_report.md ├── SUPPORT.md ├── containerd-releases.json ├── dependabot.yml ├── labels.yml └── workflows │ ├── ci.yml │ ├── containerd-releases-json.yml │ ├── labels.yml │ ├── test.yml │ └── validate.yml ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── .yarn └── plugins │ └── @yarnpkg │ └── plugin-interactive-tools.cjs ├── .yarnrc.yml ├── LICENSE ├── README.md ├── __tests__ └── containerd.test.ts ├── action.yml ├── codecov.yml ├── dev.Dockerfile ├── dist ├── index.js ├── index.js.map ├── licenses.txt └── sourcemap-register.js ├── docker-bake.hcl ├── jest.config.ts ├── package.json ├── src ├── containerd.ts ├── context.ts ├── main.ts └── state-helper.ts ├── test └── Dockerfile ├── tsconfig.json └── yarn.lock /.dockerignore: -------------------------------------------------------------------------------- 1 | /coverage 2 | 3 | # Dependency directories 4 | node_modules/ 5 | jspm_packages/ 6 | 7 | # yarn v2 8 | .yarn/cache 9 | .yarn/unplugged 10 | .yarn/build-state.yml 11 | .yarn/install-state.gz 12 | .pnp.* 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs. 2 | # More information at http://editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | 14 | [*.md] 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /dist/** 2 | /coverage/** 3 | /node_modules/** 4 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true, 4 | "es2021": true, 5 | "jest/globals": true 6 | }, 7 | "extends": [ 8 | "eslint:recommended", 9 | "plugin:@typescript-eslint/recommended", 10 | "plugin:jest/recommended", 11 | "plugin:prettier/recommended" 12 | ], 13 | "parser": "@typescript-eslint/parser", 14 | "parserOptions": { 15 | "ecmaVersion": "latest", 16 | "sourceType": "module" 17 | }, 18 | "plugins": [ 19 | "@typescript-eslint", 20 | "jest", 21 | "prettier" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | /.yarn/releases/** binary 2 | /.yarn/plugins/** binary 3 | /dist/** linguist-generated=true 4 | /lib/** linguist-generated=true 5 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @crazy-max 2 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Contributing 2 | 3 | Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. 4 | 5 | Contributions to this project are [released](https://docs.github.com/en/github/site-policy/github-terms-of-service#6-contributions-under-repository-license) 6 | to the public under the [project's open source license](LICENSE). 7 | 8 | ## Submitting a pull request 9 | 10 | 1. [Fork](https://github.com/crazy-max/ghaction-setup-containerd/fork) and clone the repository 11 | 2. Configure and install the dependencies: `yarn install` 12 | 3. Create a new branch: `git checkout -b my-branch-name` 13 | 4. Make your changes 14 | 5. Make sure the tests pass: `docker buildx bake test` 15 | 6. Format code and build javascript artifacts: `docker buildx bake pre-checkin` 16 | 7. Validate all code has correctly formatted and built: `docker buildx bake validate` 17 | 8. Push to your fork and [submit a pull request](https://github.com/crazy-max/ghaction-setup-containerd/compare) 18 | 9. Pat your self on the back and wait for your pull request to be reviewed and merged. 19 | 20 | Here are a few things you can do that will increase the likelihood of your pull request being accepted: 21 | 22 | - Write tests. 23 | - Make sure the `README.md` and any other relevant **documentation are kept up-to-date**. 24 | - We try to follow [SemVer v2.0.0](https://semver.org/). Randomly breaking public APIs is not an option. 25 | - Keep your change as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as **separate pull requests**. 26 | - Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). 27 | 28 | ## Resources 29 | 30 | - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) 31 | - [Using Pull Requests](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) 32 | - [GitHub Help](https://docs.github.com/en) 33 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: crazy-max 2 | custom: https://www.paypal.me/crazyws 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | --- 5 | 6 | ### Behaviour 7 | 8 | #### Steps to reproduce this issue 9 | 10 | 1. 11 | 2. 12 | 3. 13 | 14 | #### Expected behaviour 15 | 16 | > Tell me what should happen 17 | 18 | #### Actual behaviour 19 | 20 | > Tell me what happens instead 21 | 22 | ### Configuration 23 | 24 | * Repository URL (if public): 25 | * Build URL (if public): 26 | 27 | ```yml 28 | # paste your YAML workflow file here and remove sensitive data 29 | ``` 30 | 31 | ### Logs 32 | 33 | > Download the [log file of your build](https://docs.github.com/en/actions/managing-workflow-runs/using-workflow-run-logs#downloading-logs) 34 | > and [attach it](https://docs.github.com/en/github/managing-your-work-on-github/file-attachments-on-issues-and-pull-requests) to this issue. 35 | -------------------------------------------------------------------------------- /.github/SUPPORT.md: -------------------------------------------------------------------------------- 1 | # Support [![](https://isitmaintained.com/badge/resolution/crazy-max/ghaction-setup-containerd.svg)](https://isitmaintained.com/project/crazy-max/ghaction-setup-containerd) 2 | 3 | ## Reporting an issue 4 | 5 | Please do a search in [open issues](https://github.com/crazy-max/ghaction-setup-containerd/issues?utf8=%E2%9C%93&q=) to see if the issue or feature request has already been filed. 6 | 7 | If you find your issue already exists, make relevant comments and add your [reaction](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments). Use a reaction in place of a "+1" comment. 8 | 9 | :+1: - upvote 10 | 11 | :-1: - downvote 12 | 13 | If you cannot find an existing issue that describes your bug or feature, submit an issue using the guidelines below. 14 | 15 | ## Writing good bug reports and feature requests 16 | 17 | File a single issue per problem and feature request. 18 | 19 | * Do not enumerate multiple bugs or feature requests in the same issue. 20 | * Do not add your issue as a comment to an existing issue unless it's for the identical input. Many issues look similar, but have different causes. 21 | 22 | The more information you can provide, the more likely someone will be successful reproducing the issue and finding a fix. 23 | 24 | You are now ready to [create a new issue](https://github.com/crazy-max/ghaction-setup-containerd/issues/new/choose)! 25 | 26 | ## Closure policy 27 | 28 | * Issues that don't have the information requested above (when applicable) will be closed immediately and the poster directed to the support guidelines. 29 | * Issues that go a week without a response from original poster are subject to closure at my discretion. 30 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | labels: 8 | - "kind/dependencies" 9 | - "bot" 10 | - package-ecosystem: "npm" 11 | directory: "/" 12 | schedule: 13 | interval: "daily" 14 | versioning-strategy: "increase" 15 | allow: 16 | - dependency-type: "production" 17 | labels: 18 | - "kind/dependencies" 19 | - "bot" 20 | -------------------------------------------------------------------------------- /.github/labels.yml: -------------------------------------------------------------------------------- 1 | ## more info https://github.com/crazy-max/ghaction-github-labeler 2 | - 3 | name: "bot" 4 | color: "69cde9" 5 | description: "" 6 | - 7 | name: "good first issue" 8 | color: "7057ff" 9 | description: "" 10 | - 11 | name: "help wanted" 12 | color: "4caf50" 13 | description: "" 14 | - 15 | name: "area/ci" 16 | color: "ed9ca9" 17 | description: "" 18 | - 19 | name: "kind/bug" 20 | color: "b60205" 21 | description: "" 22 | - 23 | name: "kind/dependencies" 24 | color: "0366d6" 25 | description: "" 26 | - 27 | name: "kind/docs" 28 | color: "c5def5" 29 | description: "" 30 | - 31 | name: "kind/duplicate" 32 | color: "cccccc" 33 | description: "" 34 | - 35 | name: "kind/enhancement" 36 | color: "0054ca" 37 | description: "" 38 | - 39 | name: "kind/invalid" 40 | color: "e6e6e6" 41 | description: "" 42 | - 43 | name: "kind/upstream" 44 | color: "fbca04" 45 | description: "" 46 | - 47 | name: "kind/wontfix" 48 | color: "ffffff" 49 | description: "" 50 | - 51 | name: "status/automerge" 52 | color: "8f4fbc" 53 | description: "" 54 | - 55 | name: "status/needs-investigation" 56 | color: "e6625b" 57 | description: "" 58 | - 59 | name: "status/needs-more-info" 60 | color: "795548" 61 | description: "" 62 | - 63 | name: "status/stale" 64 | color: "237da0" 65 | description: "" 66 | - 67 | name: "status/triage" 68 | color: "dde4b7" 69 | description: "" 70 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions 8 | permissions: 9 | contents: read 10 | 11 | on: 12 | schedule: 13 | - cron: '0 10 * * *' 14 | push: 15 | branches: 16 | - 'master' 17 | - 'releases/v*' 18 | tags: 19 | - 'v*' 20 | pull_request: 21 | paths-ignore: 22 | - '.github/containerd-releases.json' 23 | 24 | jobs: 25 | setup: 26 | runs-on: ubuntu-latest 27 | strategy: 28 | fail-fast: false 29 | matrix: 30 | containerd-version: 31 | - latest 32 | - v1.4.1 33 | steps: 34 | - 35 | name: Checkout 36 | uses: actions/checkout@v4 37 | - 38 | name: Set up containerd 39 | uses: ./ 40 | with: 41 | containerd-version: ${{ matrix.containerd-version }} 42 | 43 | pull: 44 | runs-on: ubuntu-latest 45 | steps: 46 | - 47 | name: Checkout 48 | uses: actions/checkout@v4 49 | - 50 | name: Set up containerd 51 | uses: ./ 52 | - 53 | name: Pull image 54 | run: | 55 | sudo ctr i pull --all-platforms --all-metadata docker.io/library/alpine:latest 56 | 57 | build-push: 58 | runs-on: ubuntu-latest 59 | services: 60 | registry: 61 | image: registry:2 62 | ports: 63 | - 5000:5000 64 | steps: 65 | - 66 | name: Checkout 67 | uses: actions/checkout@v4 68 | - 69 | name: Set up QEMU 70 | uses: docker/setup-qemu-action@v3 71 | - 72 | name: Set up Docker Buildx 73 | uses: docker/setup-buildx-action@v3 74 | - 75 | name: Set up containerd 76 | uses: ./ 77 | - 78 | name: List containerd plugins 79 | run: | 80 | sudo ctr plugins list --detailed 81 | - 82 | name: Build Docker image 83 | uses: docker/build-push-action@v6 84 | with: 85 | context: ./test 86 | file: ./test/Dockerfile 87 | platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x 88 | tags: localhost:5000/name/app:latest 89 | outputs: type=oci,dest=/tmp/image.tar 90 | - 91 | name: Import image in containerd 92 | run: | 93 | sudo ctr --debug i import --base-name localhost:5000/name/app --digests --all-platforms /tmp/image.tar 94 | - 95 | name: List containerd images 96 | run: | 97 | sudo ctr image ls 98 | - 99 | name: Push image with containerd 100 | run: | 101 | sudo ctr --debug i push --skip-verify --plain-http localhost:5000/name/app:latest 102 | 103 | config: 104 | runs-on: ubuntu-latest 105 | steps: 106 | - 107 | name: Checkout 108 | uses: actions/checkout@v4 109 | - 110 | name: Create config 111 | run: | 112 | cat > /tmp/containerd.toml < `config` and `config-inline` are mutually exclusive. 125 | 126 | ## Limitation 127 | 128 | This action is only available for Linux [virtual environments](https://help.github.com/en/articles/virtual-environments-for-github-actions#supported-virtual-environments-and-hardware-resources). 129 | 130 | ## Contributing 131 | 132 | Want to contribute? Awesome! The most basic way to show your support is to star 133 | the project, or to raise issues. You can also support this project by [**becoming a sponsor on GitHub**](https://github.com/sponsors/crazy-max) 134 | or by making a [PayPal donation](https://www.paypal.me/crazyws) to ensure this 135 | journey continues indefinitely! 136 | 137 | Thanks again for your support, it is much appreciated! :pray: 138 | 139 | ## License 140 | 141 | MIT. See `LICENSE` for more details. 142 | -------------------------------------------------------------------------------- /__tests__/containerd.test.ts: -------------------------------------------------------------------------------- 1 | import {describe, expect, it} from '@jest/globals'; 2 | import * as fs from 'fs'; 3 | import * as containerd from '../src/containerd'; 4 | 5 | describe('getRelease', () => { 6 | it('returns latest containerd GitHub release', async () => { 7 | const release = await containerd.getRelease('latest'); 8 | expect(release).not.toBeNull(); 9 | expect(release?.tag_name).not.toEqual(''); 10 | }); 11 | 12 | it('returns v1.4.1 containerd GitHub release', async () => { 13 | const release = await containerd.getRelease('v1.4.1'); 14 | expect(release).not.toBeNull(); 15 | expect(release?.id).toEqual(31366723); 16 | expect(release?.tag_name).toEqual('v1.4.1'); 17 | expect(release?.html_url).toEqual('https://github.com/containerd/containerd/releases/tag/v1.4.1'); 18 | }); 19 | 20 | it('unknown release', async () => { 21 | await expect(containerd.getRelease('foo')).rejects.toThrow( 22 | new Error( 23 | 'Cannot find containerd release foo in https://raw.githubusercontent.com/crazy-max/ghaction-setup-containerd/master/.github/containerd-releases.json' 24 | ) 25 | ); 26 | }); 27 | }); 28 | 29 | describe('installer', () => { 30 | it('acquires v1.4.1 version of containerd', async () => { 31 | const install = await containerd.install('v1.4.1'); 32 | expect(fs.existsSync(install.cachePath)).toBe(true); 33 | }, 100000); 34 | 35 | it('acquires latest version of containerd', async () => { 36 | const install = await containerd.install('latest'); 37 | expect(fs.existsSync(install.cachePath)).toBe(true); 38 | }, 100000); 39 | }); 40 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | # https://help.github.com/en/articles/metadata-syntax-for-github-actions 2 | name: 'Setup containerd' 3 | description: 'GitHub Action to set up containerd' 4 | author: 'crazy-max' 5 | branding: 6 | color: 'gray-dark' 7 | icon: 'box' 8 | 9 | inputs: 10 | containerd-version: 11 | description: 'containerd version (e.g., v1.4.1)' 12 | default: 'latest' 13 | required: false 14 | config: 15 | description: 'Containerd config file' 16 | required: false 17 | config-inline: 18 | description: 'Inline Containerd config' 19 | required: false 20 | 21 | runs: 22 | using: 'node20' 23 | main: 'dist/index.js' 24 | post: 'dist/index.js' 25 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | comment: false 2 | 3 | coverage: 4 | status: 5 | project: # settings affecting project coverage 6 | default: 7 | target: auto # auto % coverage target 8 | threshold: 5% # allow for 5% reduction of coverage without failing 9 | patch: off 10 | 11 | github_checks: 12 | annotations: false 13 | -------------------------------------------------------------------------------- /dev.Dockerfile: -------------------------------------------------------------------------------- 1 | # syntax=docker/dockerfile:1 2 | 3 | ARG NODE_VERSION=20 4 | 5 | FROM node:${NODE_VERSION}-alpine AS base 6 | RUN apk add --no-cache cpio findutils git 7 | WORKDIR /src 8 | RUN --mount=type=bind,target=.,rw \ 9 | --mount=type=cache,target=/src/.yarn/cache <&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor"' 31 | git status --porcelain -- yarn.lock 32 | exit 1 33 | fi 34 | EOT 35 | 36 | FROM deps AS build 37 | RUN --mount=type=bind,target=.,rw \ 38 | --mount=type=cache,target=/src/.yarn/cache \ 39 | --mount=type=cache,target=/src/node_modules \ 40 | yarn run build && mkdir /out && cp -Rf dist /out/ 41 | 42 | FROM scratch AS build-update 43 | COPY --from=build /out / 44 | 45 | FROM build AS build-validate 46 | RUN --mount=type=bind,target=.,rw <&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"' 52 | git status --porcelain -- dist 53 | exit 1 54 | fi 55 | EOT 56 | 57 | FROM deps AS format 58 | RUN --mount=type=bind,target=.,rw \ 59 | --mount=type=cache,target=/src/.yarn/cache \ 60 | --mount=type=cache,target=/src/node_modules \ 61 | yarn run format \ 62 | && mkdir /out && find . -name '*.ts' -not -path './node_modules/*' -not -path './.yarn/*' | cpio -pdm /out 63 | 64 | FROM scratch AS format-update 65 | COPY --from=format /out / 66 | 67 | FROM deps AS lint 68 | RUN --mount=type=bind,target=.,rw \ 69 | --mount=type=cache,target=/src/.yarn/cache \ 70 | --mount=type=cache,target=/src/node_modules \ 71 | yarn run lint 72 | 73 | FROM deps AS test 74 | ENV RUNNER_TEMP=/tmp/github_runner 75 | ENV RUNNER_TOOL_CACHE=/tmp/github_tool_cache 76 | RUN --mount=type=bind,target=.,rw \ 77 | --mount=type=cache,target=/src/.yarn/cache \ 78 | --mount=type=cache,target=/src/node_modules \ 79 | yarn run test --coverage --coverageDirectory=/tmp/coverage 80 | 81 | FROM scratch AS test-coverage 82 | COPY --from=test /tmp/coverage / 83 | -------------------------------------------------------------------------------- /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 | @actions/tool-cache 63 | MIT 64 | The MIT License (MIT) 65 | 66 | Copyright 2019 GitHub 67 | 68 | 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: 69 | 70 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 71 | 72 | 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. 73 | 74 | @fastify/busboy 75 | MIT 76 | Copyright Brian White. All rights reserved. 77 | 78 | Permission is hereby granted, free of charge, to any person obtaining a copy 79 | of this software and associated documentation files (the "Software"), to 80 | deal in the Software without restriction, including without limitation the 81 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 82 | sell copies of the Software, and to permit persons to whom the Software is 83 | furnished to do so, subject to the following conditions: 84 | 85 | The above copyright notice and this permission notice shall be included in 86 | all copies or substantial portions of the Software. 87 | 88 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 89 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 90 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 91 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 92 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 93 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 94 | IN THE SOFTWARE. 95 | 96 | async-retry 97 | MIT 98 | The MIT License (MIT) 99 | 100 | Copyright (c) 2021 Vercel, Inc. 101 | 102 | Permission is hereby granted, free of charge, to any person obtaining a copy 103 | of this software and associated documentation files (the "Software"), to deal 104 | in the Software without restriction, including without limitation the rights 105 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 106 | copies of the Software, and to permit persons to whom the Software is 107 | furnished to do so, subject to the following conditions: 108 | 109 | The above copyright notice and this permission notice shall be included in all 110 | copies or substantial portions of the Software. 111 | 112 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 113 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 114 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 115 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 116 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 117 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 118 | SOFTWARE. 119 | 120 | 121 | cross-spawn 122 | MIT 123 | The MIT License (MIT) 124 | 125 | Copyright (c) 2018 Made With MOXY Lda 126 | 127 | Permission is hereby granted, free of charge, to any person obtaining a copy 128 | of this software and associated documentation files (the "Software"), to deal 129 | in the Software without restriction, including without limitation the rights 130 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 131 | copies of the Software, and to permit persons to whom the Software is 132 | furnished to do so, subject to the following conditions: 133 | 134 | The above copyright notice and this permission notice shall be included in 135 | all copies or substantial portions of the Software. 136 | 137 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 138 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 139 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 140 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 141 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 142 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 143 | THE SOFTWARE. 144 | 145 | 146 | execa 147 | MIT 148 | MIT License 149 | 150 | Copyright (c) Sindre Sorhus (https://sindresorhus.com) 151 | 152 | 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: 153 | 154 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 155 | 156 | 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. 157 | 158 | 159 | get-stream 160 | MIT 161 | MIT License 162 | 163 | Copyright (c) Sindre Sorhus (https://sindresorhus.com) 164 | 165 | 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: 166 | 167 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 168 | 169 | 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. 170 | 171 | 172 | human-signals 173 | Apache-2.0 174 | Apache License 175 | Version 2.0, January 2004 176 | http://www.apache.org/licenses/ 177 | 178 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 179 | 180 | 1. Definitions. 181 | 182 | "License" shall mean the terms and conditions for use, reproduction, 183 | and distribution as defined by Sections 1 through 9 of this document. 184 | 185 | "Licensor" shall mean the copyright owner or entity authorized by 186 | the copyright owner that is granting the License. 187 | 188 | "Legal Entity" shall mean the union of the acting entity and all 189 | other entities that control, are controlled by, or are under common 190 | control with that entity. For the purposes of this definition, 191 | "control" means (i) the power, direct or indirect, to cause the 192 | direction or management of such entity, whether by contract or 193 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 194 | outstanding shares, or (iii) beneficial ownership of such entity. 195 | 196 | "You" (or "Your") shall mean an individual or Legal Entity 197 | exercising permissions granted by this License. 198 | 199 | "Source" form shall mean the preferred form for making modifications, 200 | including but not limited to software source code, documentation 201 | source, and configuration files. 202 | 203 | "Object" form shall mean any form resulting from mechanical 204 | transformation or translation of a Source form, including but 205 | not limited to compiled object code, generated documentation, 206 | and conversions to other media types. 207 | 208 | "Work" shall mean the work of authorship, whether in Source or 209 | Object form, made available under the License, as indicated by a 210 | copyright notice that is included in or attached to the work 211 | (an example is provided in the Appendix below). 212 | 213 | "Derivative Works" shall mean any work, whether in Source or Object 214 | form, that is based on (or derived from) the Work and for which the 215 | editorial revisions, annotations, elaborations, or other modifications 216 | represent, as a whole, an original work of authorship. For the purposes 217 | of this License, Derivative Works shall not include works that remain 218 | separable from, or merely link (or bind by name) to the interfaces of, 219 | the Work and Derivative Works thereof. 220 | 221 | "Contribution" shall mean any work of authorship, including 222 | the original version of the Work and any modifications or additions 223 | to that Work or Derivative Works thereof, that is intentionally 224 | submitted to Licensor for inclusion in the Work by the copyright owner 225 | or by an individual or Legal Entity authorized to submit on behalf of 226 | the copyright owner. For the purposes of this definition, "submitted" 227 | means any form of electronic, verbal, or written communication sent 228 | to the Licensor or its representatives, including but not limited to 229 | communication on electronic mailing lists, source code control systems, 230 | and issue tracking systems that are managed by, or on behalf of, the 231 | Licensor for the purpose of discussing and improving the Work, but 232 | excluding communication that is conspicuously marked or otherwise 233 | designated in writing by the copyright owner as "Not a Contribution." 234 | 235 | "Contributor" shall mean Licensor and any individual or Legal Entity 236 | on behalf of whom a Contribution has been received by Licensor and 237 | subsequently incorporated within the Work. 238 | 239 | 2. Grant of Copyright License. Subject to the terms and conditions of 240 | this License, each Contributor hereby grants to You a perpetual, 241 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 242 | copyright license to reproduce, prepare Derivative Works of, 243 | publicly display, publicly perform, sublicense, and distribute the 244 | Work and such Derivative Works in Source or Object form. 245 | 246 | 3. Grant of Patent License. Subject to the terms and conditions of 247 | this License, each Contributor hereby grants to You a perpetual, 248 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 249 | (except as stated in this section) patent license to make, have made, 250 | use, offer to sell, sell, import, and otherwise transfer the Work, 251 | where such license applies only to those patent claims licensable 252 | by such Contributor that are necessarily infringed by their 253 | Contribution(s) alone or by combination of their Contribution(s) 254 | with the Work to which such Contribution(s) was submitted. If You 255 | institute patent litigation against any entity (including a 256 | cross-claim or counterclaim in a lawsuit) alleging that the Work 257 | or a Contribution incorporated within the Work constitutes direct 258 | or contributory patent infringement, then any patent licenses 259 | granted to You under this License for that Work shall terminate 260 | as of the date such litigation is filed. 261 | 262 | 4. Redistribution. You may reproduce and distribute copies of the 263 | Work or Derivative Works thereof in any medium, with or without 264 | modifications, and in Source or Object form, provided that You 265 | meet the following conditions: 266 | 267 | (a) You must give any other recipients of the Work or 268 | Derivative Works a copy of this License; and 269 | 270 | (b) You must cause any modified files to carry prominent notices 271 | stating that You changed the files; and 272 | 273 | (c) You must retain, in the Source form of any Derivative Works 274 | that You distribute, all copyright, patent, trademark, and 275 | attribution notices from the Source form of the Work, 276 | excluding those notices that do not pertain to any part of 277 | the Derivative Works; and 278 | 279 | (d) If the Work includes a "NOTICE" text file as part of its 280 | distribution, then any Derivative Works that You distribute must 281 | include a readable copy of the attribution notices contained 282 | within such NOTICE file, excluding those notices that do not 283 | pertain to any part of the Derivative Works, in at least one 284 | of the following places: within a NOTICE text file distributed 285 | as part of the Derivative Works; within the Source form or 286 | documentation, if provided along with the Derivative Works; or, 287 | within a display generated by the Derivative Works, if and 288 | wherever such third-party notices normally appear. The contents 289 | of the NOTICE file are for informational purposes only and 290 | do not modify the License. You may add Your own attribution 291 | notices within Derivative Works that You distribute, alongside 292 | or as an addendum to the NOTICE text from the Work, provided 293 | that such additional attribution notices cannot be construed 294 | as modifying the License. 295 | 296 | You may add Your own copyright statement to Your modifications and 297 | may provide additional or different license terms and conditions 298 | for use, reproduction, or distribution of Your modifications, or 299 | for any such Derivative Works as a whole, provided Your use, 300 | reproduction, and distribution of the Work otherwise complies with 301 | the conditions stated in this License. 302 | 303 | 5. Submission of Contributions. Unless You explicitly state otherwise, 304 | any Contribution intentionally submitted for inclusion in the Work 305 | by You to the Licensor shall be under the terms and conditions of 306 | this License, without any additional terms or conditions. 307 | Notwithstanding the above, nothing herein shall supersede or modify 308 | the terms of any separate license agreement you may have executed 309 | with Licensor regarding such Contributions. 310 | 311 | 6. Trademarks. This License does not grant permission to use the trade 312 | names, trademarks, service marks, or product names of the Licensor, 313 | except as required for reasonable and customary use in describing the 314 | origin of the Work and reproducing the content of the NOTICE file. 315 | 316 | 7. Disclaimer of Warranty. Unless required by applicable law or 317 | agreed to in writing, Licensor provides the Work (and each 318 | Contributor provides its Contributions) on an "AS IS" BASIS, 319 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 320 | implied, including, without limitation, any warranties or conditions 321 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 322 | PARTICULAR PURPOSE. You are solely responsible for determining the 323 | appropriateness of using or redistributing the Work and assume any 324 | risks associated with Your exercise of permissions under this License. 325 | 326 | 8. Limitation of Liability. In no event and under no legal theory, 327 | whether in tort (including negligence), contract, or otherwise, 328 | unless required by applicable law (such as deliberate and grossly 329 | negligent acts) or agreed to in writing, shall any Contributor be 330 | liable to You for damages, including any direct, indirect, special, 331 | incidental, or consequential damages of any character arising as a 332 | result of this License or out of the use or inability to use the 333 | Work (including but not limited to damages for loss of goodwill, 334 | work stoppage, computer failure or malfunction, or any and all 335 | other commercial damages or losses), even if such Contributor 336 | has been advised of the possibility of such damages. 337 | 338 | 9. Accepting Warranty or Additional Liability. While redistributing 339 | the Work or Derivative Works thereof, You may choose to offer, 340 | and charge a fee for, acceptance of support, warranty, indemnity, 341 | or other liability obligations and/or rights consistent with this 342 | License. However, in accepting such obligations, You may act only 343 | on Your own behalf and on Your sole responsibility, not on behalf 344 | of any other Contributor, and only if You agree to indemnify, 345 | defend, and hold each Contributor harmless for any liability 346 | incurred by, or claims asserted against, such Contributor by reason 347 | of your accepting any such warranty or additional liability. 348 | 349 | END OF TERMS AND CONDITIONS 350 | 351 | APPENDIX: How to apply the Apache License to your work. 352 | 353 | To apply the Apache License to your work, attach the following 354 | boilerplate notice, with the fields enclosed by brackets "[]" 355 | replaced with your own identifying information. (Don't include 356 | the brackets!) The text should be enclosed in the appropriate 357 | comment syntax for the file format. We also recommend that a 358 | file or class name and description of purpose be included on the 359 | same "printed page" as the copyright notice for easier 360 | identification within third-party archives. 361 | 362 | Copyright 2022 ehmicky 363 | 364 | Licensed under the Apache License, Version 2.0 (the "License"); 365 | you may not use this file except in compliance with the License. 366 | You may obtain a copy of the License at 367 | 368 | http://www.apache.org/licenses/LICENSE-2.0 369 | 370 | Unless required by applicable law or agreed to in writing, software 371 | distributed under the License is distributed on an "AS IS" BASIS, 372 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 373 | See the License for the specific language governing permissions and 374 | limitations under the License. 375 | 376 | 377 | is-stream 378 | MIT 379 | MIT License 380 | 381 | Copyright (c) Sindre Sorhus (https://sindresorhus.com) 382 | 383 | 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: 384 | 385 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 386 | 387 | 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. 388 | 389 | 390 | isexe 391 | ISC 392 | The ISC License 393 | 394 | Copyright (c) Isaac Z. Schlueter and Contributors 395 | 396 | Permission to use, copy, modify, and/or distribute this software for any 397 | purpose with or without fee is hereby granted, provided that the above 398 | copyright notice and this permission notice appear in all copies. 399 | 400 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 401 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 402 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 403 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 404 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 405 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 406 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 407 | 408 | 409 | merge-stream 410 | MIT 411 | The MIT License (MIT) 412 | 413 | Copyright (c) Stephen Sugden (stephensugden.com) 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 423 | all 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 431 | THE SOFTWARE. 432 | 433 | 434 | mimic-fn 435 | MIT 436 | MIT License 437 | 438 | Copyright (c) Sindre Sorhus (https://sindresorhus.com) 439 | 440 | 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: 441 | 442 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 443 | 444 | 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. 445 | 446 | 447 | npm-run-path 448 | MIT 449 | MIT License 450 | 451 | Copyright (c) Sindre Sorhus (https://sindresorhus.com) 452 | 453 | 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: 454 | 455 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 456 | 457 | 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. 458 | 459 | 460 | onetime 461 | MIT 462 | MIT License 463 | 464 | Copyright (c) Sindre Sorhus (https://sindresorhus.com) 465 | 466 | 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: 467 | 468 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 469 | 470 | 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. 471 | 472 | 473 | path-key 474 | MIT 475 | MIT License 476 | 477 | Copyright (c) Sindre Sorhus (sindresorhus.com) 478 | 479 | 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: 480 | 481 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 482 | 483 | 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. 484 | 485 | 486 | retry 487 | MIT 488 | Copyright (c) 2011: 489 | Tim Koschützki (tim@debuggable.com) 490 | Felix Geisendörfer (felix@debuggable.com) 491 | 492 | Permission is hereby granted, free of charge, to any person obtaining a copy 493 | of this software and associated documentation files (the "Software"), to deal 494 | in the Software without restriction, including without limitation the rights 495 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 496 | copies of the Software, and to permit persons to whom the Software is 497 | furnished to do so, subject to the following conditions: 498 | 499 | The above copyright notice and this permission notice shall be included in 500 | all copies or substantial portions of the Software. 501 | 502 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 503 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 504 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 505 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 506 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 507 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 508 | THE SOFTWARE. 509 | 510 | 511 | semver 512 | ISC 513 | The ISC License 514 | 515 | Copyright (c) Isaac Z. Schlueter and Contributors 516 | 517 | Permission to use, copy, modify, and/or distribute this software for any 518 | purpose with or without fee is hereby granted, provided that the above 519 | copyright notice and this permission notice appear in all copies. 520 | 521 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 522 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 523 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 524 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 525 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 526 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 527 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 528 | 529 | 530 | shebang-command 531 | MIT 532 | MIT License 533 | 534 | Copyright (c) Kevin Mårtensson (github.com/kevva) 535 | 536 | 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: 537 | 538 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 539 | 540 | 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. 541 | 542 | 543 | shebang-regex 544 | MIT 545 | MIT License 546 | 547 | Copyright (c) Sindre Sorhus (sindresorhus.com) 548 | 549 | 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: 550 | 551 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 552 | 553 | 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. 554 | 555 | 556 | signal-exit 557 | ISC 558 | The ISC License 559 | 560 | Copyright (c) 2015-2023 Benjamin Coe, Isaac Z. Schlueter, and Contributors 561 | 562 | Permission to use, copy, modify, and/or distribute this software 563 | for any purpose with or without fee is hereby granted, provided 564 | that the above copyright notice and this permission notice 565 | appear in all copies. 566 | 567 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 568 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 569 | OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE 570 | LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES 571 | OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 572 | WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 573 | ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 574 | 575 | 576 | strip-final-newline 577 | MIT 578 | MIT License 579 | 580 | Copyright (c) Sindre Sorhus (https://sindresorhus.com) 581 | 582 | 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: 583 | 584 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 585 | 586 | 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. 587 | 588 | 589 | tunnel 590 | MIT 591 | The MIT License (MIT) 592 | 593 | Copyright (c) 2012 Koichi Kobayashi 594 | 595 | Permission is hereby granted, free of charge, to any person obtaining a copy 596 | of this software and associated documentation files (the "Software"), to deal 597 | in the Software without restriction, including without limitation the rights 598 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 599 | copies of the Software, and to permit persons to whom the Software is 600 | furnished to do so, subject to the following conditions: 601 | 602 | The above copyright notice and this permission notice shall be included in 603 | all copies or substantial portions of the Software. 604 | 605 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 606 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 607 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 608 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 609 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 610 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 611 | THE SOFTWARE. 612 | 613 | 614 | undici 615 | MIT 616 | MIT License 617 | 618 | Copyright (c) Matteo Collina and Undici contributors 619 | 620 | Permission is hereby granted, free of charge, to any person obtaining a copy 621 | of this software and associated documentation files (the "Software"), to deal 622 | in the Software without restriction, including without limitation the rights 623 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 624 | copies of the Software, and to permit persons to whom the Software is 625 | furnished to do so, subject to the following conditions: 626 | 627 | The above copyright notice and this permission notice shall be included in all 628 | copies or substantial portions of the Software. 629 | 630 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 631 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 632 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 633 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 634 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 635 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 636 | SOFTWARE. 637 | 638 | 639 | which 640 | ISC 641 | The ISC License 642 | 643 | Copyright (c) Isaac Z. Schlueter and Contributors 644 | 645 | Permission to use, copy, modify, and/or distribute this software for any 646 | purpose with or without fee is hereby granted, provided that the above 647 | copyright notice and this permission notice appear in all copies. 648 | 649 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 650 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 651 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 652 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 653 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 654 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 655 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 656 | -------------------------------------------------------------------------------- /dist/sourcemap-register.js: -------------------------------------------------------------------------------- 1 | (()=>{var e={650:e=>{var r=Object.prototype.toString;var n=typeof Buffer.alloc==="function"&&typeof Buffer.allocUnsafe==="function"&&typeof Buffer.from==="function";function isArrayBuffer(e){return r.call(e).slice(8,-1)==="ArrayBuffer"}function fromArrayBuffer(e,r,t){r>>>=0;var o=e.byteLength-r;if(o<0){throw new RangeError("'offset' is out of bounds")}if(t===undefined){t=o}else{t>>>=0;if(t>o){throw new RangeError("'length' is out of bounds")}}return n?Buffer.from(e.slice(r,r+t)):new Buffer(new Uint8Array(e.slice(r,r+t)))}function fromString(e,r){if(typeof r!=="string"||r===""){r="utf8"}if(!Buffer.isEncoding(r)){throw new TypeError('"encoding" must be a valid string encoding')}return n?Buffer.from(e,r):new Buffer(e,r)}function bufferFrom(e,r,t){if(typeof e==="number"){throw new TypeError('"value" argument must not be a number')}if(isArrayBuffer(e)){return fromArrayBuffer(e,r,t)}if(typeof e==="string"){return fromString(e,r)}return n?Buffer.from(e):new Buffer(e)}e.exports=bufferFrom},274:(e,r,n)=>{var t=n(339);var o=Object.prototype.hasOwnProperty;var i=typeof Map!=="undefined";function ArraySet(){this._array=[];this._set=i?new Map:Object.create(null)}ArraySet.fromArray=function ArraySet_fromArray(e,r){var n=new ArraySet;for(var t=0,o=e.length;t=0){return r}}else{var n=t.toSetString(e);if(o.call(this._set,n)){return this._set[n]}}throw new Error('"'+e+'" is not in the set.')};ArraySet.prototype.at=function ArraySet_at(e){if(e>=0&&e{var t=n(190);var o=5;var i=1<>1;return r?-n:n}r.encode=function base64VLQ_encode(e){var r="";var n;var i=toVLQSigned(e);do{n=i&a;i>>>=o;if(i>0){n|=u}r+=t.encode(n)}while(i>0);return r};r.decode=function base64VLQ_decode(e,r,n){var i=e.length;var s=0;var l=0;var c,p;do{if(r>=i){throw new Error("Expected more digits in base 64 VLQ value.")}p=t.decode(e.charCodeAt(r++));if(p===-1){throw new Error("Invalid base64 digit: "+e.charAt(r-1))}c=!!(p&u);p&=a;s=s+(p<{var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");r.encode=function(e){if(0<=e&&e{r.GREATEST_LOWER_BOUND=1;r.LEAST_UPPER_BOUND=2;function recursiveSearch(e,n,t,o,i,a){var u=Math.floor((n-e)/2)+e;var s=i(t,o[u],true);if(s===0){return u}else if(s>0){if(n-u>1){return recursiveSearch(u,n,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return n1){return recursiveSearch(e,u,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return u}else{return e<0?-1:e}}}r.search=function search(e,n,t,o){if(n.length===0){return-1}var i=recursiveSearch(-1,n.length,e,n,t,o||r.GREATEST_LOWER_BOUND);if(i<0){return-1}while(i-1>=0){if(t(n[i],n[i-1],true)!==0){break}--i}return i}},680:(e,r,n)=>{var t=n(339);function generatedPositionAfter(e,r){var n=e.generatedLine;var o=r.generatedLine;var i=e.generatedColumn;var a=r.generatedColumn;return o>n||o==n&&a>=i||t.compareByGeneratedPositionsInflated(e,r)<=0}function MappingList(){this._array=[];this._sorted=true;this._last={generatedLine:-1,generatedColumn:0}}MappingList.prototype.unsortedForEach=function MappingList_forEach(e,r){this._array.forEach(e,r)};MappingList.prototype.add=function MappingList_add(e){if(generatedPositionAfter(this._last,e)){this._last=e;this._array.push(e)}else{this._sorted=false;this._array.push(e)}};MappingList.prototype.toArray=function MappingList_toArray(){if(!this._sorted){this._array.sort(t.compareByGeneratedPositionsInflated);this._sorted=true}return this._array};r.H=MappingList},758:(e,r)=>{function swap(e,r,n){var t=e[r];e[r]=e[n];e[n]=t}function randomIntInRange(e,r){return Math.round(e+Math.random()*(r-e))}function doQuickSort(e,r,n,t){if(n{var t;var o=n(339);var i=n(345);var a=n(274).I;var u=n(449);var s=n(758).U;function SourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}return n.sections!=null?new IndexedSourceMapConsumer(n,r):new BasicSourceMapConsumer(n,r)}SourceMapConsumer.fromSourceMap=function(e,r){return BasicSourceMapConsumer.fromSourceMap(e,r)};SourceMapConsumer.prototype._version=3;SourceMapConsumer.prototype.__generatedMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_generatedMappings",{configurable:true,enumerable:true,get:function(){if(!this.__generatedMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__generatedMappings}});SourceMapConsumer.prototype.__originalMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_originalMappings",{configurable:true,enumerable:true,get:function(){if(!this.__originalMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__originalMappings}});SourceMapConsumer.prototype._charIsMappingSeparator=function SourceMapConsumer_charIsMappingSeparator(e,r){var n=e.charAt(r);return n===";"||n===","};SourceMapConsumer.prototype._parseMappings=function SourceMapConsumer_parseMappings(e,r){throw new Error("Subclasses must implement _parseMappings")};SourceMapConsumer.GENERATED_ORDER=1;SourceMapConsumer.ORIGINAL_ORDER=2;SourceMapConsumer.GREATEST_LOWER_BOUND=1;SourceMapConsumer.LEAST_UPPER_BOUND=2;SourceMapConsumer.prototype.eachMapping=function SourceMapConsumer_eachMapping(e,r,n){var t=r||null;var i=n||SourceMapConsumer.GENERATED_ORDER;var a;switch(i){case SourceMapConsumer.GENERATED_ORDER:a=this._generatedMappings;break;case SourceMapConsumer.ORIGINAL_ORDER:a=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;a.map((function(e){var r=e.source===null?null:this._sources.at(e.source);r=o.computeSourceURL(u,r,this._sourceMapURL);return{source:r,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name===null?null:this._names.at(e.name)}}),this).forEach(e,t)};SourceMapConsumer.prototype.allGeneratedPositionsFor=function SourceMapConsumer_allGeneratedPositionsFor(e){var r=o.getArg(e,"line");var n={source:o.getArg(e,"source"),originalLine:r,originalColumn:o.getArg(e,"column",0)};n.source=this._findSourceIndex(n.source);if(n.source<0){return[]}var t=[];var a=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,i.LEAST_UPPER_BOUND);if(a>=0){var u=this._originalMappings[a];if(e.column===undefined){var s=u.originalLine;while(u&&u.originalLine===s){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}else{var l=u.originalColumn;while(u&&u.originalLine===r&&u.originalColumn==l){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}}return t};r.SourceMapConsumer=SourceMapConsumer;function BasicSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sources");var u=o.getArg(n,"names",[]);var s=o.getArg(n,"sourceRoot",null);var l=o.getArg(n,"sourcesContent",null);var c=o.getArg(n,"mappings");var p=o.getArg(n,"file",null);if(t!=this._version){throw new Error("Unsupported version: "+t)}if(s){s=o.normalize(s)}i=i.map(String).map(o.normalize).map((function(e){return s&&o.isAbsolute(s)&&o.isAbsolute(e)?o.relative(s,e):e}));this._names=a.fromArray(u.map(String),true);this._sources=a.fromArray(i,true);this._absoluteSources=this._sources.toArray().map((function(e){return o.computeSourceURL(s,e,r)}));this.sourceRoot=s;this.sourcesContent=l;this._mappings=c;this._sourceMapURL=r;this.file=p}BasicSourceMapConsumer.prototype=Object.create(SourceMapConsumer.prototype);BasicSourceMapConsumer.prototype.consumer=SourceMapConsumer;BasicSourceMapConsumer.prototype._findSourceIndex=function(e){var r=e;if(this.sourceRoot!=null){r=o.relative(this.sourceRoot,r)}if(this._sources.has(r)){return this._sources.indexOf(r)}var n;for(n=0;n1){v.source=l+_[1];l+=_[1];v.originalLine=i+_[2];i=v.originalLine;v.originalLine+=1;v.originalColumn=a+_[3];a=v.originalColumn;if(_.length>4){v.name=c+_[4];c+=_[4]}}m.push(v);if(typeof v.originalLine==="number"){d.push(v)}}}s(m,o.compareByGeneratedPositionsDeflated);this.__generatedMappings=m;s(d,o.compareByOriginalPositions);this.__originalMappings=d};BasicSourceMapConsumer.prototype._findMapping=function SourceMapConsumer_findMapping(e,r,n,t,o,a){if(e[n]<=0){throw new TypeError("Line must be greater than or equal to 1, got "+e[n])}if(e[t]<0){throw new TypeError("Column must be greater than or equal to 0, got "+e[t])}return i.search(e,r,o,a)};BasicSourceMapConsumer.prototype.computeColumnSpans=function SourceMapConsumer_computeColumnSpans(){for(var e=0;e=0){var t=this._generatedMappings[n];if(t.generatedLine===r.generatedLine){var i=o.getArg(t,"source",null);if(i!==null){i=this._sources.at(i);i=o.computeSourceURL(this.sourceRoot,i,this._sourceMapURL)}var a=o.getArg(t,"name",null);if(a!==null){a=this._names.at(a)}return{source:i,line:o.getArg(t,"originalLine",null),column:o.getArg(t,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}};BasicSourceMapConsumer.prototype.hasContentsOfAllSources=function BasicSourceMapConsumer_hasContentsOfAllSources(){if(!this.sourcesContent){return false}return this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some((function(e){return e==null}))};BasicSourceMapConsumer.prototype.sourceContentFor=function SourceMapConsumer_sourceContentFor(e,r){if(!this.sourcesContent){return null}var n=this._findSourceIndex(e);if(n>=0){return this.sourcesContent[n]}var t=e;if(this.sourceRoot!=null){t=o.relative(this.sourceRoot,t)}var i;if(this.sourceRoot!=null&&(i=o.urlParse(this.sourceRoot))){var a=t.replace(/^file:\/\//,"");if(i.scheme=="file"&&this._sources.has(a)){return this.sourcesContent[this._sources.indexOf(a)]}if((!i.path||i.path=="/")&&this._sources.has("/"+t)){return this.sourcesContent[this._sources.indexOf("/"+t)]}}if(r){return null}else{throw new Error('"'+t+'" is not in the SourceMap.')}};BasicSourceMapConsumer.prototype.generatedPositionFor=function SourceMapConsumer_generatedPositionFor(e){var r=o.getArg(e,"source");r=this._findSourceIndex(r);if(r<0){return{line:null,column:null,lastColumn:null}}var n={source:r,originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")};var t=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,o.getArg(e,"bias",SourceMapConsumer.GREATEST_LOWER_BOUND));if(t>=0){var i=this._originalMappings[t];if(i.source===n.source){return{line:o.getArg(i,"generatedLine",null),column:o.getArg(i,"generatedColumn",null),lastColumn:o.getArg(i,"lastGeneratedColumn",null)}}}return{line:null,column:null,lastColumn:null}};t=BasicSourceMapConsumer;function IndexedSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sections");if(t!=this._version){throw new Error("Unsupported version: "+t)}this._sources=new a;this._names=new a;var u={line:-1,column:0};this._sections=i.map((function(e){if(e.url){throw new Error("Support for url field in sections not implemented.")}var n=o.getArg(e,"offset");var t=o.getArg(n,"line");var i=o.getArg(n,"column");if(t{var t=n(449);var o=n(339);var i=n(274).I;var a=n(680).H;function SourceMapGenerator(e){if(!e){e={}}this._file=o.getArg(e,"file",null);this._sourceRoot=o.getArg(e,"sourceRoot",null);this._skipValidation=o.getArg(e,"skipValidation",false);this._sources=new i;this._names=new i;this._mappings=new a;this._sourcesContents=null}SourceMapGenerator.prototype._version=3;SourceMapGenerator.fromSourceMap=function SourceMapGenerator_fromSourceMap(e){var r=e.sourceRoot;var n=new SourceMapGenerator({file:e.file,sourceRoot:r});e.eachMapping((function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};if(e.source!=null){t.source=e.source;if(r!=null){t.source=o.relative(r,t.source)}t.original={line:e.originalLine,column:e.originalColumn};if(e.name!=null){t.name=e.name}}n.addMapping(t)}));e.sources.forEach((function(t){var i=t;if(r!==null){i=o.relative(r,t)}if(!n._sources.has(i)){n._sources.add(i)}var a=e.sourceContentFor(t);if(a!=null){n.setSourceContent(t,a)}}));return n};SourceMapGenerator.prototype.addMapping=function SourceMapGenerator_addMapping(e){var r=o.getArg(e,"generated");var n=o.getArg(e,"original",null);var t=o.getArg(e,"source",null);var i=o.getArg(e,"name",null);if(!this._skipValidation){this._validateMapping(r,n,t,i)}if(t!=null){t=String(t);if(!this._sources.has(t)){this._sources.add(t)}}if(i!=null){i=String(i);if(!this._names.has(i)){this._names.add(i)}}this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:t,name:i})};SourceMapGenerator.prototype.setSourceContent=function SourceMapGenerator_setSourceContent(e,r){var n=e;if(this._sourceRoot!=null){n=o.relative(this._sourceRoot,n)}if(r!=null){if(!this._sourcesContents){this._sourcesContents=Object.create(null)}this._sourcesContents[o.toSetString(n)]=r}else if(this._sourcesContents){delete this._sourcesContents[o.toSetString(n)];if(Object.keys(this._sourcesContents).length===0){this._sourcesContents=null}}};SourceMapGenerator.prototype.applySourceMap=function SourceMapGenerator_applySourceMap(e,r,n){var t=r;if(r==null){if(e.file==null){throw new Error("SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, "+'or the source map\'s "file" property. Both were omitted.')}t=e.file}var a=this._sourceRoot;if(a!=null){t=o.relative(a,t)}var u=new i;var s=new i;this._mappings.unsortedForEach((function(r){if(r.source===t&&r.originalLine!=null){var i=e.originalPositionFor({line:r.originalLine,column:r.originalColumn});if(i.source!=null){r.source=i.source;if(n!=null){r.source=o.join(n,r.source)}if(a!=null){r.source=o.relative(a,r.source)}r.originalLine=i.line;r.originalColumn=i.column;if(i.name!=null){r.name=i.name}}}var l=r.source;if(l!=null&&!u.has(l)){u.add(l)}var c=r.name;if(c!=null&&!s.has(c)){s.add(c)}}),this);this._sources=u;this._names=s;e.sources.forEach((function(r){var t=e.sourceContentFor(r);if(t!=null){if(n!=null){r=o.join(n,r)}if(a!=null){r=o.relative(a,r)}this.setSourceContent(r,t)}}),this)};SourceMapGenerator.prototype._validateMapping=function SourceMapGenerator_validateMapping(e,r,n,t){if(r&&typeof r.line!=="number"&&typeof r.column!=="number"){throw new Error("original.line and original.column are not numbers -- you probably meant to omit "+"the original mapping entirely and only map the generated position. If so, pass "+"null for the original mapping instead of an object with empty or null values.")}if(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!r&&!n&&!t){return}else if(e&&"line"in e&&"column"in e&&r&&"line"in r&&"column"in r&&e.line>0&&e.column>=0&&r.line>0&&r.column>=0&&n){return}else{throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:r,name:t}))}};SourceMapGenerator.prototype._serializeMappings=function SourceMapGenerator_serializeMappings(){var e=0;var r=1;var n=0;var i=0;var a=0;var u=0;var s="";var l;var c;var p;var f;var g=this._mappings.toArray();for(var h=0,d=g.length;h0){if(!o.compareByGeneratedPositionsInflated(c,g[h-1])){continue}l+=","}}l+=t.encode(c.generatedColumn-e);e=c.generatedColumn;if(c.source!=null){f=this._sources.indexOf(c.source);l+=t.encode(f-u);u=f;l+=t.encode(c.originalLine-1-i);i=c.originalLine-1;l+=t.encode(c.originalColumn-n);n=c.originalColumn;if(c.name!=null){p=this._names.indexOf(c.name);l+=t.encode(p-a);a=p}}s+=l}return s};SourceMapGenerator.prototype._generateSourcesContent=function SourceMapGenerator_generateSourcesContent(e,r){return e.map((function(e){if(!this._sourcesContents){return null}if(r!=null){e=o.relative(r,e)}var n=o.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null}),this)};SourceMapGenerator.prototype.toJSON=function SourceMapGenerator_toJSON(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};if(this._file!=null){e.file=this._file}if(this._sourceRoot!=null){e.sourceRoot=this._sourceRoot}if(this._sourcesContents){e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)}return e};SourceMapGenerator.prototype.toString=function SourceMapGenerator_toString(){return JSON.stringify(this.toJSON())};r.h=SourceMapGenerator},351:(e,r,n)=>{var t;var o=n(591).h;var i=n(339);var a=/(\r?\n)/;var u=10;var s="$$$isSourceNode$$$";function SourceNode(e,r,n,t,o){this.children=[];this.sourceContents={};this.line=e==null?null:e;this.column=r==null?null:r;this.source=n==null?null:n;this.name=o==null?null:o;this[s]=true;if(t!=null)this.add(t)}SourceNode.fromStringWithSourceMap=function SourceNode_fromStringWithSourceMap(e,r,n){var t=new SourceNode;var o=e.split(a);var u=0;var shiftNextLine=function(){var e=getNextLine();var r=getNextLine()||"";return e+r;function getNextLine(){return u=0;r--){this.prepend(e[r])}}else if(e[s]||typeof e==="string"){this.children.unshift(e)}else{throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e)}return this};SourceNode.prototype.walk=function SourceNode_walk(e){var r;for(var n=0,t=this.children.length;n0){r=[];for(n=0;n{function getArg(e,r,n){if(r in e){return e[r]}else if(arguments.length===3){return n}else{throw new Error('"'+r+'" is a required argument.')}}r.getArg=getArg;var n=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;var t=/^data:.+\,.+$/;function urlParse(e){var r=e.match(n);if(!r){return null}return{scheme:r[1],auth:r[2],host:r[3],port:r[4],path:r[5]}}r.urlParse=urlParse;function urlGenerate(e){var r="";if(e.scheme){r+=e.scheme+":"}r+="//";if(e.auth){r+=e.auth+"@"}if(e.host){r+=e.host}if(e.port){r+=":"+e.port}if(e.path){r+=e.path}return r}r.urlGenerate=urlGenerate;function normalize(e){var n=e;var t=urlParse(e);if(t){if(!t.path){return e}n=t.path}var o=r.isAbsolute(n);var i=n.split(/\/+/);for(var a,u=0,s=i.length-1;s>=0;s--){a=i[s];if(a==="."){i.splice(s,1)}else if(a===".."){u++}else if(u>0){if(a===""){i.splice(s+1,u);u=0}else{i.splice(s,2);u--}}}n=i.join("/");if(n===""){n=o?"/":"."}if(t){t.path=n;return urlGenerate(t)}return n}r.normalize=normalize;function join(e,r){if(e===""){e="."}if(r===""){r="."}var n=urlParse(r);var o=urlParse(e);if(o){e=o.path||"/"}if(n&&!n.scheme){if(o){n.scheme=o.scheme}return urlGenerate(n)}if(n||r.match(t)){return r}if(o&&!o.host&&!o.path){o.host=r;return urlGenerate(o)}var i=r.charAt(0)==="/"?r:normalize(e.replace(/\/+$/,"")+"/"+r);if(o){o.path=i;return urlGenerate(o)}return i}r.join=join;r.isAbsolute=function(e){return e.charAt(0)==="/"||n.test(e)};function relative(e,r){if(e===""){e="."}e=e.replace(/\/$/,"");var n=0;while(r.indexOf(e+"/")!==0){var t=e.lastIndexOf("/");if(t<0){return r}e=e.slice(0,t);if(e.match(/^([^\/]+:\/)?\/*$/)){return r}++n}return Array(n+1).join("../")+r.substr(e.length+1)}r.relative=relative;var o=function(){var e=Object.create(null);return!("__proto__"in e)}();function identity(e){return e}function toSetString(e){if(isProtoString(e)){return"$"+e}return e}r.toSetString=o?identity:toSetString;function fromSetString(e){if(isProtoString(e)){return e.slice(1)}return e}r.fromSetString=o?identity:fromSetString;function isProtoString(e){if(!e){return false}var r=e.length;if(r<9){return false}if(e.charCodeAt(r-1)!==95||e.charCodeAt(r-2)!==95||e.charCodeAt(r-3)!==111||e.charCodeAt(r-4)!==116||e.charCodeAt(r-5)!==111||e.charCodeAt(r-6)!==114||e.charCodeAt(r-7)!==112||e.charCodeAt(r-8)!==95||e.charCodeAt(r-9)!==95){return false}for(var n=r-10;n>=0;n--){if(e.charCodeAt(n)!==36){return false}}return true}function compareByOriginalPositions(e,r,n){var t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0||n){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0){return t}t=e.generatedLine-r.generatedLine;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByOriginalPositions=compareByOriginalPositions;function compareByGeneratedPositionsDeflated(e,r,n){var t=e.generatedLine-r.generatedLine;if(t!==0){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0||n){return t}t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsDeflated=compareByGeneratedPositionsDeflated;function strcmp(e,r){if(e===r){return 0}if(e===null){return 1}if(r===null){return-1}if(e>r){return 1}return-1}function compareByGeneratedPositionsInflated(e,r){var n=e.generatedLine-r.generatedLine;if(n!==0){return n}n=e.generatedColumn-r.generatedColumn;if(n!==0){return n}n=strcmp(e.source,r.source);if(n!==0){return n}n=e.originalLine-r.originalLine;if(n!==0){return n}n=e.originalColumn-r.originalColumn;if(n!==0){return n}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsInflated=compareByGeneratedPositionsInflated;function parseSourceMapInput(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}r.parseSourceMapInput=parseSourceMapInput;function computeSourceURL(e,r,n){r=r||"";if(e){if(e[e.length-1]!=="/"&&r[0]!=="/"){e+="/"}r=e+r}if(n){var t=urlParse(n);if(!t){throw new Error("sourceMapURL could not be parsed")}if(t.path){var o=t.path.lastIndexOf("/");if(o>=0){t.path=t.path.substring(0,o+1)}}r=join(urlGenerate(t),r)}return normalize(r)}r.computeSourceURL=computeSourceURL},997:(e,r,n)=>{n(591).h;r.SourceMapConsumer=n(952).SourceMapConsumer;n(351)},284:(e,r,n)=>{e=n.nmd(e);var t=n(997).SourceMapConsumer;var o=n(17);var i;try{i=n(147);if(!i.existsSync||!i.readFileSync){i=null}}catch(e){}var a=n(650);function dynamicRequire(e,r){return e.require(r)}var u=false;var s=false;var l=false;var c="auto";var p={};var f={};var g=/^data:application\/json[^,]+base64,/;var h=[];var d=[];function isInBrowser(){if(c==="browser")return true;if(c==="node")return false;return typeof window!=="undefined"&&typeof XMLHttpRequest==="function"&&!(window.require&&window.module&&window.process&&window.process.type==="renderer")}function hasGlobalProcessEventEmitter(){return typeof process==="object"&&process!==null&&typeof process.on==="function"}function globalProcessVersion(){if(typeof process==="object"&&process!==null){return process.version}else{return""}}function globalProcessStderr(){if(typeof process==="object"&&process!==null){return process.stderr}}function globalProcessExit(e){if(typeof process==="object"&&process!==null&&typeof process.exit==="function"){return process.exit(e)}}function handlerExec(e){return function(r){for(var n=0;n"}var n=this.getLineNumber();if(n!=null){r+=":"+n;var t=this.getColumnNumber();if(t){r+=":"+t}}}var o="";var i=this.getFunctionName();var a=true;var u=this.isConstructor();var s=!(this.isToplevel()||u);if(s){var l=this.getTypeName();if(l==="[object Object]"){l="null"}var c=this.getMethodName();if(i){if(l&&i.indexOf(l)!=0){o+=l+"."}o+=i;if(c&&i.indexOf("."+c)!=i.length-c.length-1){o+=" [as "+c+"]"}}else{o+=l+"."+(c||"")}}else if(u){o+="new "+(i||"")}else if(i){o+=i}else{o+=r;a=false}if(a){o+=" ("+r+")"}return o}function cloneCallSite(e){var r={};Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach((function(n){r[n]=/^(?:is|get)/.test(n)?function(){return e[n].call(e)}:e[n]}));r.toString=CallSiteToString;return r}function wrapCallSite(e,r){if(r===undefined){r={nextPosition:null,curPosition:null}}if(e.isNative()){r.curPosition=null;return e}var n=e.getFileName()||e.getScriptNameOrSourceURL();if(n){var t=e.getLineNumber();var o=e.getColumnNumber()-1;var i=/^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/;var a=i.test(globalProcessVersion())?0:62;if(t===1&&o>a&&!isInBrowser()&&!e.isEval()){o-=a}var u=mapSourcePosition({source:n,line:t,column:o});r.curPosition=u;e=cloneCallSite(e);var s=e.getFunctionName;e.getFunctionName=function(){if(r.nextPosition==null){return s()}return r.nextPosition.name||s()};e.getFileName=function(){return u.source};e.getLineNumber=function(){return u.line};e.getColumnNumber=function(){return u.column+1};e.getScriptNameOrSourceURL=function(){return u.source};return e}var l=e.isEval()&&e.getEvalOrigin();if(l){l=mapEvalOrigin(l);e=cloneCallSite(e);e.getEvalOrigin=function(){return l};return e}return e}function prepareStackTrace(e,r){if(l){p={};f={}}var n=e.name||"Error";var t=e.message||"";var o=n+": "+t;var i={nextPosition:null,curPosition:null};var a=[];for(var u=r.length-1;u>=0;u--){a.push("\n at "+wrapCallSite(r[u],i));i.nextPosition=i.curPosition}i.curPosition=i.nextPosition=null;return o+a.reverse().join("")}function getErrorSource(e){var r=/\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(e.stack);if(r){var n=r[1];var t=+r[2];var o=+r[3];var a=p[n];if(!a&&i&&i.existsSync(n)){try{a=i.readFileSync(n,"utf8")}catch(e){a=""}}if(a){var u=a.split(/(?:\r\n|\r|\n)/)[t-1];if(u){return n+":"+t+"\n"+u+"\n"+new Array(o).join(" ")+"^"}}}return null}function printErrorAndExit(e){var r=getErrorSource(e);var n=globalProcessStderr();if(n&&n._handle&&n._handle.setBlocking){n._handle.setBlocking(true)}if(r){console.error();console.error(r)}console.error(e.stack);globalProcessExit(1)}function shimEmitUncaughtException(){var e=process.emit;process.emit=function(r){if(r==="uncaughtException"){var n=arguments[1]&&arguments[1].stack;var t=this.listeners(r).length>0;if(n&&!t){return printErrorAndExit(arguments[1])}}return e.apply(this,arguments)}}var S=h.slice(0);var _=d.slice(0);r.wrapCallSite=wrapCallSite;r.getErrorSource=getErrorSource;r.mapSourcePosition=mapSourcePosition;r.retrieveSourceMap=v;r.install=function(r){r=r||{};if(r.environment){c=r.environment;if(["node","browser","auto"].indexOf(c)===-1){throw new Error("environment "+c+" was unknown. Available options are {auto, browser, node}")}}if(r.retrieveFile){if(r.overrideRetrieveFile){h.length=0}h.unshift(r.retrieveFile)}if(r.retrieveSourceMap){if(r.overrideRetrieveSourceMap){d.length=0}d.unshift(r.retrieveSourceMap)}if(r.hookRequire&&!isInBrowser()){var n=dynamicRequire(e,"module");var t=n.prototype._compile;if(!t.__sourceMapSupport){n.prototype._compile=function(e,r){p[r]=e;f[r]=undefined;return t.call(this,e,r)};n.prototype._compile.__sourceMapSupport=true}}if(!l){l="emptyCacheBetweenOperations"in r?r.emptyCacheBetweenOperations:false}if(!u){u=true;Error.prepareStackTrace=prepareStackTrace}if(!s){var o="handleUncaughtExceptions"in r?r.handleUncaughtExceptions:true;try{var i=dynamicRequire(e,"worker_threads");if(i.isMainThread===false){o=false}}catch(e){}if(o&&hasGlobalProcessEventEmitter()){s=true;shimEmitUncaughtException()}}};r.resetRetrieveHandlers=function(){h.length=0;d.length=0;h=S.slice(0);d=_.slice(0);v=handlerExec(d);m=handlerExec(h)}},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")}};var r={};function __webpack_require__(n){var t=r[n];if(t!==undefined){return t.exports}var o=r[n]={id:n,loaded:false,exports:{}};var i=true;try{e[n](o,o.exports,__webpack_require__);i=false}finally{if(i)delete r[n]}o.loaded=true;return o.exports}(()=>{__webpack_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __webpack_require__!=="undefined")__webpack_require__.ab=__dirname+"/";var n={};(()=>{__webpack_require__(284).install()})();module.exports=n})(); -------------------------------------------------------------------------------- /docker-bake.hcl: -------------------------------------------------------------------------------- 1 | target "_common" { 2 | args = { 3 | BUILDKIT_CONTEXT_KEEP_GIT_DIR = 1 4 | } 5 | } 6 | 7 | group "default" { 8 | targets = ["build"] 9 | } 10 | 11 | group "pre-checkin" { 12 | targets = ["vendor", "format", "build"] 13 | } 14 | 15 | group "validate" { 16 | targets = ["lint", "build-validate", "vendor-validate"] 17 | } 18 | 19 | target "build" { 20 | dockerfile = "dev.Dockerfile" 21 | target = "build-update" 22 | output = ["."] 23 | } 24 | 25 | target "build-validate" { 26 | inherits = ["_common"] 27 | dockerfile = "dev.Dockerfile" 28 | target = "build-validate" 29 | output = ["type=cacheonly"] 30 | } 31 | 32 | target "format" { 33 | dockerfile = "dev.Dockerfile" 34 | target = "format-update" 35 | output = ["."] 36 | } 37 | 38 | target "lint" { 39 | dockerfile = "dev.Dockerfile" 40 | target = "lint" 41 | output = ["type=cacheonly"] 42 | } 43 | 44 | target "vendor" { 45 | dockerfile = "dev.Dockerfile" 46 | target = "vendor-update" 47 | output = ["."] 48 | } 49 | 50 | target "vendor-validate" { 51 | inherits = ["_common"] 52 | dockerfile = "dev.Dockerfile" 53 | target = "vendor-validate" 54 | output = ["type=cacheonly"] 55 | } 56 | 57 | target "test" { 58 | dockerfile = "dev.Dockerfile" 59 | target = "test-coverage" 60 | output = ["./coverage"] 61 | } 62 | -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | clearMocks: true, 3 | testEnvironment: 'node', 4 | moduleFileExtensions: ['js', 'ts'], 5 | setupFiles: ['dotenv/config'], 6 | testMatch: ['**/*.test.ts'], 7 | transform: { 8 | '^.+\\.ts$': 'ts-jest' 9 | }, 10 | collectCoverageFrom: ['src/**/{!(main.ts),}.ts'], 11 | coveragePathIgnorePatterns: ['dist/', 'node_modules/', '__tests__/'], 12 | verbose: true 13 | }; 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "setup-containerd", 3 | "description": "GitHub Action to set up containerd", 4 | "main": "src/main.ts", 5 | "scripts": { 6 | "build": "ncc build src/main.ts --source-map --minify --license licenses.txt", 7 | "lint": "yarn run prettier && yarn run eslint", 8 | "format": "yarn run prettier:fix && yarn run eslint:fix", 9 | "eslint": "eslint --max-warnings=0 .", 10 | "eslint:fix": "eslint --fix .", 11 | "prettier": "prettier --check \"./**/*.ts\"", 12 | "prettier:fix": "prettier --write \"./**/*.ts\"", 13 | "test": "jest", 14 | "all": "yarn run build && yarn run format && yarn test" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/crazy-max/ghaction-setup-containerd.git" 19 | }, 20 | "keywords": [ 21 | "actions", 22 | "containerd" 23 | ], 24 | "author": "CrazyMax", 25 | "license": "MIT", 26 | "packageManager": "yarn@3.6.3", 27 | "dependencies": { 28 | "@actions/core": "1.11.1", 29 | "@actions/exec": "1.1.1", 30 | "@actions/http-client": "2.2.3", 31 | "@actions/tool-cache": "2.0.2", 32 | "async-retry": "^1.3.3", 33 | "execa": "8.0.1", 34 | "semver": "7.6.3" 35 | }, 36 | "devDependencies": { 37 | "@types/node": "^20.6.0", 38 | "@types/semver": "^7.5.8", 39 | "@typescript-eslint/eslint-plugin": "^6.6.0", 40 | "@typescript-eslint/parser": "^6.6.0", 41 | "@vercel/ncc": "^0.38.0", 42 | "dotenv": "^16.3.1", 43 | "eslint": "^8.49.0", 44 | "eslint-config-prettier": "^9.0.0", 45 | "eslint-plugin-jest": "^27.2.3", 46 | "eslint-plugin-prettier": "^5.0.0", 47 | "jest": "^29.6.4", 48 | "prettier": "^3.0.3", 49 | "ts-jest": "^29.1.1", 50 | "ts-node": "^10.9.1", 51 | "typescript": "^5.2.2" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/containerd.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as os from 'os'; 3 | import * as path from 'path'; 4 | import * as semver from 'semver'; 5 | import * as util from 'util'; 6 | import * as context from './context'; 7 | import * as core from '@actions/core'; 8 | import * as exec from '@actions/exec'; 9 | import * as httpm from '@actions/http-client'; 10 | import * as tc from '@actions/tool-cache'; 11 | 12 | const osPlat: string = os.platform(); 13 | const osArch: string = os.arch(); 14 | 15 | export interface InstallResult { 16 | version: string; 17 | cachePath: string; 18 | } 19 | 20 | export interface GitHubRelease { 21 | id: number; 22 | tag_name: string; 23 | html_url: string; 24 | assets: Array; 25 | } 26 | 27 | export const getRelease = async (version: string): Promise => { 28 | const url = `https://raw.githubusercontent.com/crazy-max/ghaction-setup-containerd/master/.github/containerd-releases.json`; 29 | const http: httpm.HttpClient = new httpm.HttpClient('ghaction-setup-containerd'); 30 | const resp: httpm.HttpClientResponse = await http.get(url); 31 | const body = await resp.readBody(); 32 | const statusCode = resp.message.statusCode || 500; 33 | if (statusCode >= 400) { 34 | throw new Error(`Failed to get containerd release ${version} from ${url} with status code ${statusCode}: ${body}`); 35 | } 36 | const releases = >JSON.parse(body); 37 | if (!releases[version]) { 38 | throw new Error(`Cannot find containerd release ${version} in ${url}`); 39 | } 40 | return releases[version]; 41 | }; 42 | 43 | export async function install(inputVersion: string): Promise { 44 | const release: GitHubRelease = await getRelease(inputVersion); 45 | core.debug(`Release found: ${release.tag_name}`); 46 | 47 | const version = release.tag_name.replace(/^v+|v+$/g, ''); 48 | const filename = getFilename(version); 49 | const downloadUrl = util.format( 50 | 'https://github.com/containerd/containerd/releases/download/%s/%s', 51 | release.tag_name, 52 | filename 53 | ); 54 | 55 | core.info(`Downloading ${downloadUrl}`); 56 | const downloadPath: string = await tc.downloadTool(downloadUrl); 57 | core.debug(`Downloaded to ${downloadPath}`); 58 | 59 | const extPath: string = await tc.extractTar(downloadPath); 60 | core.debug(`Extracted to ${extPath}`); 61 | 62 | const cachePath: string = await tc.cacheDir(extPath, 'ghaction-setup-containerd', version); 63 | core.debug(`Cached to ${cachePath}`); 64 | 65 | core.addPath(path.join(cachePath, 'bin')); 66 | core.info(`${path.join(cachePath, 'bin')} added to the PATH`); 67 | 68 | core.info('Fixing perms'); 69 | fs.readdir(path.join(cachePath, 'bin'), function (err, files) { 70 | if (err) { 71 | throw err; 72 | } 73 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 74 | files.forEach(function (file, index) { 75 | fs.chmodSync(path.join(cachePath, 'bin', file), '0755'); 76 | }); 77 | }); 78 | 79 | return { 80 | cachePath: cachePath, 81 | version: version 82 | }; 83 | } 84 | 85 | export async function getConfigInline(s: string): Promise<[string, string]> { 86 | return getConfig(s, false); 87 | } 88 | 89 | export async function getConfigFile(s: string): Promise<[string, string]> { 90 | return getConfig(s, true); 91 | } 92 | 93 | export async function getConfigDefault(): Promise<[string, string]> { 94 | return getConfig(await generateConfig(), false); 95 | } 96 | 97 | async function getConfig(s: string, file: boolean): Promise<[string, string]> { 98 | if (file) { 99 | if (!fs.existsSync(s)) { 100 | throw new Error(`config file ${s} not found`); 101 | } 102 | s = fs.readFileSync(s, {encoding: 'utf-8'}); 103 | } 104 | 105 | const configDir: string = path.join(context.tmpDir(), 'containerd'); 106 | if (!fs.existsSync(configDir)) { 107 | fs.mkdirSync(configDir, {recursive: true}); 108 | } 109 | 110 | const configFile: string = path.join(configDir, 'config.toml'); 111 | fs.writeFileSync(configFile, s); 112 | return [configFile, s]; 113 | } 114 | 115 | async function generateConfig(): Promise { 116 | return await exec 117 | .getExecOutput('containerd', ['config', 'default'], { 118 | ignoreReturnCode: true, 119 | silent: true 120 | }) 121 | .then(res => { 122 | if (res.stderr.length > 0 && res.exitCode != 0) { 123 | throw new Error(res.stderr.trim()); 124 | } 125 | return res.stdout.trim(); 126 | }); 127 | } 128 | 129 | const getFilename = (version: string): string => { 130 | const platform: string = osPlat == 'win32' ? 'windows' : 'linux'; 131 | const arch: string = osArch == 'x64' ? 'amd64' : 'i386'; 132 | if (semver.satisfies(version, '<=1.3.4')) { 133 | return util.format('containerd-%s.%s-%s.tar.gz', version, platform, arch); 134 | } 135 | return util.format('containerd-%s-%s-%s.tar.gz', version, platform, arch); 136 | }; 137 | -------------------------------------------------------------------------------- /src/context.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import * as os from 'os'; 3 | import path from 'path'; 4 | import * as core from '@actions/core'; 5 | 6 | let _tmpDir: string; 7 | 8 | export function tmpDir(): string { 9 | if (!_tmpDir) { 10 | _tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'setup-containerd-')).split(path.sep).join(path.posix.sep); 11 | } 12 | return _tmpDir; 13 | } 14 | 15 | export interface Inputs { 16 | version: string; 17 | config: string; 18 | configInline: string; 19 | } 20 | 21 | export async function getInputs(): Promise { 22 | return { 23 | version: core.getInput('containerd-version') || 'latest', 24 | config: core.getInput('config'), 25 | configInline: core.getInput('config-inline') 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import retry from 'async-retry'; 2 | import {execa} from 'execa'; 3 | import fs from 'fs'; 4 | import * as os from 'os'; 5 | import path from 'path'; 6 | import * as context from './context'; 7 | import * as containerd from './containerd'; 8 | import * as stateHelper from './state-helper'; 9 | import * as core from '@actions/core'; 10 | import * as exec from '@actions/exec'; 11 | 12 | async function run(): Promise { 13 | try { 14 | if (os.platform() !== 'linux') { 15 | core.setFailed('Only supported on linux platform'); 16 | return; 17 | } 18 | 19 | const inputs: context.Inputs = await context.getInputs(); 20 | core.startGroup(`Download and install containerd`); 21 | const install = await containerd.install(inputs.version); 22 | core.endGroup(); 23 | 24 | let configFile, configContent; 25 | if (inputs.config) { 26 | [configFile, configContent] = await containerd.getConfigFile(inputs.config); 27 | } else if (inputs.configInline) { 28 | [configFile, configContent] = await containerd.getConfigInline(inputs.configInline); 29 | } else { 30 | [configFile, configContent] = await containerd.getConfigDefault(); 31 | } 32 | 33 | core.startGroup(`Configuration`); 34 | core.info(configContent); 35 | core.endGroup(); 36 | 37 | core.startGroup(`Starting containerd ${install.version}`); 38 | const logfile = path.join(context.tmpDir(), 'containerd.log'); 39 | const out = fs.openSync(logfile, 'w'); 40 | stateHelper.setLogfile(logfile); 41 | await execa(`sudo containerd --config ${configFile} &> ${logfile}`, { 42 | detached: true, 43 | shell: true, 44 | cleanup: false, 45 | stdio: ['ignore', out, out] 46 | }); 47 | await retry( 48 | async bail => { 49 | await exec 50 | .getExecOutput('sudo ctr --connect-timeout 1s version', undefined, { 51 | ignoreReturnCode: true, 52 | silent: true 53 | }) 54 | .then(res => { 55 | if (res.stderr.length > 0 && res.exitCode != 0) { 56 | bail(new Error(res.stderr)); 57 | return; 58 | } 59 | return true; 60 | }); 61 | }, 62 | { 63 | retries: 5 64 | } 65 | ); 66 | core.endGroup(); 67 | } catch (error) { 68 | core.setFailed(error.message); 69 | } 70 | } 71 | 72 | async function cleanup(): Promise { 73 | await exec.exec('sudo killall containerd'); 74 | if (stateHelper.logfile.length == 0) { 75 | return; 76 | } 77 | core.startGroup('containerd logs'); 78 | core.info(fs.readFileSync(stateHelper.logfile, {encoding: 'utf8'})); 79 | core.endGroup(); 80 | } 81 | 82 | if (!stateHelper.IsPost) { 83 | run(); 84 | } else { 85 | cleanup(); 86 | } 87 | -------------------------------------------------------------------------------- /src/state-helper.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core'; 2 | 3 | export const IsPost = !!process.env['STATE_isPost']; 4 | export const logfile = process.env['STATE_logfile'] || ''; 5 | 6 | export function setLogfile(logfile: string) { 7 | core.saveState('logfile', logfile); 8 | } 9 | 10 | if (!IsPost) { 11 | core.saveState('isPost', 'true'); 12 | } 13 | -------------------------------------------------------------------------------- /test/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM --platform=$BUILDPLATFORM golang:alpine AS build 2 | 3 | ARG TARGETPLATFORM 4 | ARG BUILDPLATFORM 5 | RUN echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM" > /log 6 | 7 | FROM alpine 8 | COPY --from=build /log /log 9 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "target": "es6", 5 | "module": "commonjs", 6 | "newLine": "lf", 7 | "outDir": "./lib", 8 | "rootDir": "./src", 9 | "forceConsistentCasingInFileNames": true, 10 | "noImplicitAny": false, 11 | "resolveJsonModule": true, 12 | "useUnknownInCatchVariables": false, 13 | }, 14 | "exclude": [ 15 | "node_modules", 16 | "**/*.test.ts", 17 | "jest.config.ts" 18 | ] 19 | } 20 | --------------------------------------------------------------------------------