├── .eslintignore ├── .prettierignore ├── tsconfig.eslint.json ├── .gitattributes ├── .prettierrc.json ├── jest.config.js ├── workspace.code-workspace ├── src ├── method.ts ├── links │ ├── get-links.ts │ ├── links.ts │ ├── linux-links.ts │ └── windows-links.ts ├── platform.ts ├── run-command.ts ├── version.ts ├── update-path.ts ├── apt-installer.ts ├── installer.ts ├── main.ts └── downloader.ts ├── .github ├── dependabot.yml └── workflows │ ├── CodeQL.yml │ ├── Check-dist.yml │ └── CI.yml ├── __tests__ ├── method.test.ts ├── platform.test.ts ├── links │ ├── get-links.test.ts │ ├── linux-links.test.ts │ └── windows-links.test.ts └── version.test.ts ├── tsconfig.json ├── LICENSE ├── action.yml ├── .gitignore ├── package.json ├── README.md ├── .eslintrc.json └── dist ├── sourcemap-register.js └── licenses.txt /.eslintignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | lib/ 3 | node_modules/ 4 | jest.config.js 5 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | lib/ 3 | node_modules/ 4 | tsconfig.json 5 | -------------------------------------------------------------------------------- /tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["./src/**/*.ts", "__tests__/**/*.test.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Force LF everywhere for prettier 2 | * text eol=lf 3 | # Ignore diffs in dist as it is generated code 4 | dist/** -diff linguist-generated=true 5 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": false, 6 | "singleQuote": true, 7 | "trailingComma": "none", 8 | "bracketSpacing": false, 9 | "arrowParens": "avoid" 10 | } 11 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | clearMocks: true, 3 | moduleFileExtensions: ['js', 'ts'], 4 | testEnvironment: 'node', 5 | testMatch: ['**/*.test.ts'], 6 | testRunner: 'jest-circus/runner', 7 | transform: { 8 | '^.+\\.ts$': 'ts-jest' 9 | }, 10 | verbose: true 11 | } 12 | -------------------------------------------------------------------------------- /workspace.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "." 5 | } 6 | ], 7 | "settings": { 8 | "editor.defaultFormatter": "esbenp.prettier-vscode", 9 | "editor.formatOnSave": true, 10 | "eslint.alwaysShowStatus": true, 11 | "eslint.lintTask.enable": true, 12 | "files.insertFinalNewline": true 13 | } 14 | } -------------------------------------------------------------------------------- /src/method.ts: -------------------------------------------------------------------------------- 1 | export type Method = 'local' | 'network' 2 | 3 | export function parseMethod(methodString: string): Method { 4 | switch (methodString) { 5 | case 'local': 6 | return 'local' 7 | case 'network': 8 | return 'network' 9 | default: 10 | throw new Error(`Invalid method string: ${methodString}`) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Please see the documentation for all configuration options: 2 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 3 | 4 | version: 2 5 | updates: 6 | - package-ecosystem: "npm" 7 | directory: "/" 8 | schedule: 9 | interval: "daily" 10 | - package-ecosystem: "github-actions" 11 | directory: "/" 12 | schedule: 13 | interval: "daily" 14 | -------------------------------------------------------------------------------- /__tests__/method.test.ts: -------------------------------------------------------------------------------- 1 | import {parseMethod} from '../src/method' 2 | 3 | test.concurrent.each(['local', 'network'])( 4 | 'Parse %s method', 5 | async methodString => { 6 | const parsed = parseMethod(methodString) 7 | expect(parsed).toBe(methodString) 8 | } 9 | ) 10 | 11 | test.concurrent('Parse invalid method', async () => { 12 | const invalidMethod = 'invalidMethodString' 13 | expect(() => parseMethod(invalidMethod)).toThrowError( 14 | `Invalid method string: ${invalidMethod}` 15 | ) 16 | }) 17 | -------------------------------------------------------------------------------- /src/links/get-links.ts: -------------------------------------------------------------------------------- 1 | import {OSType, getOs} from '../platform' 2 | import {AbstractLinks} from './links' 3 | import {LinuxLinks} from './linux-links' 4 | import {WindowsLinks} from './windows-links' 5 | 6 | // Platform independent getter for ILinks interface 7 | export async function getLinks(): Promise { 8 | const osType = await getOs() 9 | switch (osType) { 10 | case OSType.windows: 11 | return WindowsLinks.Instance 12 | case OSType.linux: 13 | return LinuxLinks.Instance 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /__tests__/platform.test.ts: -------------------------------------------------------------------------------- 1 | import {OSType, getOs} from '../src/platform' 2 | import os from 'os' 3 | 4 | test.concurrent('Return either windows of linux platform', async () => { 5 | const osString = os.platform() 6 | let expected: OSType 7 | switch (osString) { 8 | case 'win32': 9 | expected = OSType.windows 10 | break 11 | case 'linux': 12 | expected = OSType.linux 13 | break 14 | default: 15 | expect(getOs()).rejects.toThrow(`Unsupported OS: ${osString}`) 16 | return 17 | } 18 | const osPlatform = await getOs() 19 | expect(osPlatform).toBe(expected) 20 | }) 21 | -------------------------------------------------------------------------------- /src/platform.ts: -------------------------------------------------------------------------------- 1 | import {debug} from '@actions/core' 2 | import os from 'os' 3 | 4 | export enum OSType { 5 | windows = 'windows', 6 | linux = 'linux' 7 | } 8 | 9 | export async function getOs(): Promise { 10 | const osPlatform = os.platform() 11 | switch (osPlatform) { 12 | case 'win32': 13 | return OSType.windows 14 | case 'linux': 15 | return OSType.linux 16 | default: 17 | debug(`Unsupported OS: ${osPlatform}`) 18 | throw new Error(`Unsupported OS: ${osPlatform}`) 19 | } 20 | } 21 | 22 | export async function getRelease(): Promise { 23 | return os.release() 24 | } 25 | -------------------------------------------------------------------------------- /src/links/links.ts: -------------------------------------------------------------------------------- 1 | import {SemVer} from 'semver' 2 | 3 | // Interface for getting cuda versions and corresponding download URLs 4 | export abstract class AbstractLinks { 5 | protected cudaVersionToURL: Map = new Map() 6 | 7 | getAvailableLocalCudaVersions(): SemVer[] { 8 | return Array.from(this.cudaVersionToURL.keys()).map(s => new SemVer(s)) 9 | } 10 | 11 | getLocalURLFromCudaVersion(version: SemVer): URL { 12 | const urlString = this.cudaVersionToURL.get(`${version}`) 13 | if (urlString === undefined) { 14 | throw new Error(`Invalid version: ${version}`) 15 | } 16 | return new URL(urlString) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/run-command.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core' 2 | import {exec} from '@actions/exec' 3 | 4 | export async function execReturnOutput( 5 | command: string, 6 | args: string[] = [] 7 | ): Promise { 8 | let result = '' 9 | const execOptions = { 10 | listeners: { 11 | stdout: (data: Buffer) => { 12 | result += data.toString() 13 | }, 14 | stderr: (data: Buffer) => { 15 | core.debug(`Error: ${data.toString()}`) 16 | } 17 | } 18 | } 19 | const exitCode = await exec(command, args, execOptions) 20 | if (exitCode) { 21 | core.debug(`Error executing: ${command}. Exit code: ${exitCode}`) 22 | } 23 | return result.trim() 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ 4 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 5 | "outDir": "./lib", /* Redirect output structure to the directory. */ 6 | "strict": true, /* Enable all strict type-checking options. */ 7 | "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 8 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 9 | }, 10 | "include": [ 11 | "./src/**/*.ts" 12 | ], 13 | "exclude": ["node_modules"] 14 | } 15 | -------------------------------------------------------------------------------- /__tests__/links/get-links.test.ts: -------------------------------------------------------------------------------- 1 | import {LinuxLinks} from '../../src/links/linux-links' 2 | import {WindowsLinks} from '../../src/links/windows-links' 3 | import {getLinks} from '../../src/links/get-links' 4 | 5 | test.concurrent('getLinks gives a valid ILinks class', async () => { 6 | try { 7 | const links = await getLinks() 8 | expect( 9 | links instanceof LinuxLinks || links instanceof WindowsLinks 10 | ).toBeTruthy() 11 | } catch (error) { 12 | // Other OS 13 | } 14 | }) 15 | 16 | test.concurrent('getLinks return same versions in same order', async () => { 17 | const linuxLinks = LinuxLinks.Instance.getAvailableLocalCudaVersions() 18 | const windowsLinks = WindowsLinks.Instance.getAvailableLocalCudaVersions() 19 | const windowsNetworkLinks = 20 | WindowsLinks.Instance.getAvailableNetworkCudaVersions() 21 | 22 | expect(linuxLinks.length).toBe(windowsLinks.length) 23 | expect(windowsLinks.length).toBe(windowsNetworkLinks.length) 24 | expect(linuxLinks).toEqual(windowsLinks) 25 | expect(windowsLinks).toEqual(windowsNetworkLinks) 26 | }) 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Jim 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /__tests__/links/linux-links.test.ts: -------------------------------------------------------------------------------- 1 | import {AbstractLinks} from '../../src/links/links' 2 | import {LinuxLinks} from '../../src/links/linux-links' 3 | import {SemVer} from 'semver' 4 | 5 | test.concurrent('Linux Cuda versions in descending order', async () => { 6 | const wLinks: AbstractLinks = LinuxLinks.Instance 7 | const versions = wLinks.getAvailableLocalCudaVersions() 8 | for (let i = 0; i < versions.length - 1; i++) { 9 | const versionA: SemVer = versions[i] 10 | const versionB: SemVer = versions[i + 1] 11 | expect(versionA.compare(versionB)).toBe(1) // A should be greater than B 12 | } 13 | }) 14 | 15 | test.concurrent( 16 | 'Linux Cuda version to URL map contains valid URLs', 17 | async () => { 18 | for (const version of LinuxLinks.Instance.getAvailableLocalCudaVersions()) { 19 | const url: URL = LinuxLinks.Instance.getLocalURLFromCudaVersion(version) 20 | expect(url).toBeInstanceOf(URL) 21 | } 22 | } 23 | ) 24 | 25 | test.concurrent('There is at least linux 1 version url pair', async () => { 26 | expect( 27 | LinuxLinks.Instance.getAvailableLocalCudaVersions().length 28 | ).toBeGreaterThanOrEqual(1) 29 | }) 30 | -------------------------------------------------------------------------------- /__tests__/version.test.ts: -------------------------------------------------------------------------------- 1 | import {Method} from '../src/method' 2 | import {SemVer} from 'semver' 3 | import {getVersion} from '../src/version' 4 | 5 | test.concurrent.each(['local', 'network'])( 6 | 'Successfully parse correct version for method %s', 7 | async method => { 8 | const versionString = '11.2.2' 9 | try { 10 | const version = await getVersion(versionString, method) 11 | expect(version).toBeInstanceOf(SemVer) 12 | expect(version.compare(new SemVer(versionString))).toBe(0) 13 | } catch (error) { 14 | // Other OS 15 | } 16 | } 17 | ) 18 | 19 | test.concurrent.each(['local', 'network'])( 20 | 'Expect error to be thrown on invalid version string for method %s', 21 | async method => { 22 | const versionString = 23 | 'invalid version string that does not conform to semver' 24 | await expect(getVersion(versionString, method)).rejects.toThrow( 25 | TypeError(`Invalid Version: ${versionString}`) 26 | ) 27 | } 28 | ) 29 | 30 | test.concurrent.each(['local', 'network'])( 31 | 'Expect error to be thrown on unavailable version for method %s', 32 | async method => { 33 | const versionString = '0.0.1' 34 | try { 35 | await expect(getVersion(versionString, method)).rejects.toThrowError( 36 | `Version not available: ${versionString}` 37 | ) 38 | } catch (error) { 39 | // Other OS 40 | } 41 | } 42 | ) 43 | -------------------------------------------------------------------------------- /src/version.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core' 2 | import {OSType, getOs} from './platform' 3 | import {AbstractLinks} from './links/links' 4 | import {Method} from './method' 5 | import {SemVer} from 'semver' 6 | import {WindowsLinks} from './links/windows-links' 7 | import {getLinks} from './links/get-links' 8 | 9 | // Helper for converting string to SemVer and verifying it exists in the links 10 | export async function getVersion( 11 | versionString: string, 12 | method: Method 13 | ): Promise { 14 | const version = new SemVer(versionString) 15 | const links: AbstractLinks = await getLinks() 16 | let versions 17 | switch (method) { 18 | case 'local': 19 | versions = links.getAvailableLocalCudaVersions() 20 | break 21 | case 'network': 22 | switch (await getOs()) { 23 | case OSType.linux: 24 | // TODO adapt this to actual available network versions for linux 25 | versions = links.getAvailableLocalCudaVersions() 26 | break 27 | case OSType.windows: 28 | versions = (links as WindowsLinks).getAvailableNetworkCudaVersions() 29 | break 30 | } 31 | } 32 | core.debug(`Available versions: ${versions}`) 33 | if (versions.find(v => v.compare(version) === 0) !== undefined) { 34 | core.debug(`Version available: ${version}`) 35 | return version 36 | } else { 37 | core.debug(`Version not available error!`) 38 | throw new Error(`Version not available: ${version}`) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'cuda-toolkit' 2 | description: 'Installs NVIDIA CUDA Toolkit and adds it to PATH' 3 | author: 'Jim Verheijde' 4 | inputs: 5 | cuda: 6 | description: 'Cuda version' 7 | required: false 8 | default: '12.1.0' 9 | sub-packages: 10 | description: 'Only installs specified subpackages, must be in the form of a JSON array. For example, if you only want to install nvcc and visual studio integration: ["nvcc", "visual_studio_integration"] double quotes required! Note that if you want to use this on Linux, ''network'' method MUST be used.' 11 | required: false 12 | default: '[]' 13 | method: 14 | description: "Installation method, can be either 'local' or 'network'. 'local' downloads the entire installer with all packages and runs that (you can still only install certain packages with sub-packages on Windows). 'network' downloads a smaller executable which only downloads necessary packages which you can define in subPackages" 15 | required: false 16 | default: 'local' 17 | linux-local-args: 18 | description: '(Linux and ''local'' method only) override arguments for the linux .run installer. For example if you don''t want samples use ["--toolkit"] double quotes required!' 19 | required: false 20 | default: '["--toolkit", "--samples"]' 21 | use-github-cache: 22 | description: 'Use GitHub cache to cache downloaded installer on GitHub servers' 23 | required: false 24 | default: 'true' 25 | runs: 26 | using: 'node16' 27 | main: dist/index.js 28 | branding: 29 | icon: box 30 | color: green 31 | -------------------------------------------------------------------------------- /.github/workflows/CodeQL.yml: -------------------------------------------------------------------------------- 1 | name: "CodeQL" 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | # The branches below must be a subset of the branches above 8 | branches: [ master ] 9 | schedule: 10 | # ┌───────────── minute (0 - 59) 11 | # │ ┌───────────── hour (0 - 23) 12 | # │ │ ┌───────────── day of the month (1 - 31) 13 | # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) 14 | # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) 15 | # │ │ │ │ │ 16 | # │ │ │ │ │ 17 | # │ │ │ │ │ 18 | # * * * * * 19 | - cron: '30 1 * * 0' 20 | 21 | jobs: 22 | analyze: 23 | name: Analyze 24 | runs-on: ubuntu-latest 25 | permissions: 26 | actions: read 27 | contents: read 28 | security-events: write 29 | 30 | strategy: 31 | fail-fast: false 32 | matrix: 33 | language: [ 'TypeScript' ] 34 | 35 | steps: 36 | - name: Checkout repository 37 | uses: actions/checkout@v3 38 | 39 | # Initializes the CodeQL tools for scanning. 40 | - name: Initialize CodeQL 41 | uses: github/codeql-action/init@v2 42 | with: 43 | languages: ${{ matrix.language }} 44 | source-root: src 45 | # If you wish to specify custom queries, you can do so here or in a config file. 46 | # By default, queries listed here will override any specified in a config file. 47 | # Prefix the list here with "+" to use these queries and those in the config file. 48 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 49 | 50 | - name: Autobuild 51 | uses: github/codeql-action/autobuild@v2 52 | 53 | - name: Perform CodeQL Analysis 54 | uses: github/codeql-action/analyze@v2 -------------------------------------------------------------------------------- /.github/workflows/Check-dist.yml: -------------------------------------------------------------------------------- 1 | # `dist/index.js` is a special file in Actions. 2 | # When you reference an action with `uses:` in a workflow, 3 | # `index.js` is the code that will run. 4 | # For our project, we generate this file through a build process from other source files. 5 | # We need to make sure the checked-in `index.js` actually matches what we expect it to be. 6 | name: Check dist/ 7 | 8 | on: 9 | push: 10 | branches: 11 | - main 12 | paths-ignore: 13 | - '**.md' 14 | pull_request: 15 | paths-ignore: 16 | - '**.md' 17 | workflow_dispatch: 18 | 19 | jobs: 20 | check-dist: 21 | runs-on: ubuntu-latest 22 | 23 | steps: 24 | - uses: actions/checkout@v3 25 | 26 | - name: Set Node.js 16.x 27 | uses: actions/setup-node@v3.6.0 28 | with: 29 | node-version: 16.x 30 | 31 | - name: Install dependencies 32 | run: npm ci 33 | 34 | - name: Rebuild the dist/ directory 35 | run: | 36 | npm run build 37 | npm run package 38 | 39 | - name: correct vercel/ncc crlf output 40 | run: | 41 | # See https://github.com/vercel/ncc/issues/638 42 | sed -i 's/\x0D$//' ./dist/* 43 | 44 | - name: Compare the expected and actual dist/ directories 45 | run: | 46 | if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then 47 | echo "Detected uncommitted changes after build. See status below:" 48 | git diff 49 | exit 1 50 | fi 51 | id: diff 52 | 53 | # If index.js was different than expected, upload the expected version as an artifact 54 | - uses: actions/upload-artifact@v3 55 | if: ${{ failure() && steps.diff.conclusion == 'failure' }} 56 | with: 57 | name: dist 58 | path: dist/ 59 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependency directory 2 | node_modules 3 | 4 | # Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | 13 | # Diagnostic reports (https://nodejs.org/api/report.html) 14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 15 | 16 | # Runtime data 17 | pids 18 | *.pid 19 | *.seed 20 | *.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | lib-cov 24 | 25 | # Coverage directory used by tools like istanbul 26 | coverage 27 | *.lcov 28 | 29 | # nyc test coverage 30 | .nyc_output 31 | 32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 33 | .grunt 34 | 35 | # Bower dependency directory (https://bower.io/) 36 | bower_components 37 | 38 | # node-waf configuration 39 | .lock-wscript 40 | 41 | # Compiled binary addons (https://nodejs.org/api/addons.html) 42 | build/Release 43 | 44 | # Dependency directories 45 | jspm_packages/ 46 | 47 | # TypeScript v1 declaration files 48 | typings/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Optional REPL history 60 | .node_repl_history 61 | 62 | # Output of 'npm pack' 63 | *.tgz 64 | 65 | # Yarn Integrity file 66 | .yarn-integrity 67 | 68 | # dotenv environment variables file 69 | .env 70 | .env.test 71 | 72 | # parcel-bundler cache (https://parceljs.org/) 73 | .cache 74 | 75 | # next.js build output 76 | .next 77 | 78 | # nuxt.js build output 79 | .nuxt 80 | 81 | # vuepress build output 82 | .vuepress/dist 83 | 84 | # Serverless directories 85 | .serverless/ 86 | 87 | # FuseBox cache 88 | .fusebox/ 89 | 90 | # DynamoDB Local files 91 | .dynamodb/ 92 | 93 | # OS metadata 94 | .DS_Store 95 | Thumbs.db 96 | 97 | # Ignore built ts files 98 | __tests__/runner/* 99 | lib/ -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cuda-toolkit", 3 | "version": "0.2.10", 4 | "description": "GitHub Action to install the NVIDIA CUDA Toolkit", 5 | "main": "lib/main.js", 6 | "scripts": { 7 | "build": "tsc --newLine lf", 8 | "format": "prettier --write **/*.ts jest.config.js", 9 | "format-check": "prettier --check **/*.ts jest.config.js", 10 | "lint": "eslint src/**/*.ts __tests__/**/*.ts", 11 | "package": "ncc build --source-map --license licenses.txt", 12 | "test": "jest", 13 | "all": "npm run build && npm run format && npm run lint && npm run package && npm test" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/Jimver/cuda-toolkit.git" 18 | }, 19 | "keywords": [], 20 | "author": "Jim Verheijde", 21 | "bugs": { 22 | "url": "https://github.com/Jimver/cuda-toolkit/issues" 23 | }, 24 | "homepage": "https://github.com/Jimver/cuda-toolkit#readme", 25 | "volta": { 26 | "node": "16.19.1" 27 | }, 28 | "license": "MIT", 29 | "dependencies": { 30 | "@actions/artifact": "^1.1.1", 31 | "@actions/core": "^1.10.0", 32 | "@actions/exec": "^1.1.1", 33 | "@actions/glob": "^0.4.0", 34 | "@actions/tool-cache": "^2.0.1", 35 | "@actions/cache": "^3.2.1", 36 | "@actions/io": "^1.1.2", 37 | "@types/semver": "^7.3.13", 38 | "semver": "^7.3.8" 39 | }, 40 | "devDependencies": { 41 | "@types/jest": "^28.1.6", 42 | "@types/node": "^18.11.9", 43 | "@typescript-eslint/parser": "^5.54.1", 44 | "@vercel/ncc": "^0.36.1", 45 | "eslint": "^8.27.0", 46 | "eslint-config-prettier": "^8.7.0", 47 | "eslint-plugin-github": "^4.6.1", 48 | "eslint-plugin-jest": "^27.1.6", 49 | "eslint-plugin-prettier": "^4.2.1", 50 | "jest": "^28.1.3", 51 | "jest-circus": "^29.5.0", 52 | "js-yaml": "^4.1.0", 53 | "prettier": "2.8.4", 54 | "ts-jest": "^28.0.8", 55 | "typescript": "^4.9.4" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/update-path.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core' 2 | import * as path from 'path' 3 | import {OSType, getOs} from './platform' 4 | import {SemVer} from 'semver' 5 | 6 | export async function updatePath(version: SemVer): Promise { 7 | let cudaPath: string 8 | switch (await getOs()) { 9 | case OSType.linux: 10 | cudaPath = `/usr/local/cuda-${version.major}.${version.minor}` 11 | break 12 | case OSType.windows: 13 | cudaPath = `C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v${version.major}.${version.minor}` 14 | } 15 | core.debug(`Cuda path: ${cudaPath}`) 16 | // Export $CUDA_PATH 17 | core.exportVariable('CUDA_PATH', cudaPath) 18 | core.debug(`Cuda path vx_y: ${cudaPath}`) 19 | // Export $CUDA_PATH_VX_Y 20 | core.exportVariable(`CUDA_PATH_V${version.major}_${version.minor}`, cudaPath) 21 | core.exportVariable( 22 | 'CUDA_PATH_VX_Y', 23 | `CUDA_PATH_V${version.major}_${version.minor}` 24 | ) 25 | // Add $CUDA_PATH/bin to $PATH 26 | const binPath = path.join(cudaPath, 'bin') 27 | core.debug(`Adding to PATH: ${binPath}`) 28 | core.addPath(binPath) 29 | 30 | // Update LD_LIBRARY_PATH on linux, see: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#environment-setup 31 | if ((await getOs()) === OSType.linux) { 32 | // Get LD_LIBRARY_PATH 33 | const libPath = process.env.LD_LIBRARY_PATH 34 | ? process.env.LD_LIBRARY_PATH 35 | : '' 36 | // Get CUDA lib path 37 | const cudaLibPath = path.join(cudaPath, 'lib64') 38 | // Check if CUDA lib path is already in LD_LIBRARY_PATH 39 | if (!libPath.split(':').includes(cudaLibPath)) { 40 | // CUDA lib is not in LD_LIBRARY_PATH, so add it 41 | core.debug(`Adding to LD_LIBRARY_PATH: ${cudaLibPath}`) 42 | core.exportVariable( 43 | 'LD_LIBRARY_PATH', 44 | cudaLibPath + path.delimiter + libPath 45 | ) 46 | } 47 | } 48 | // Return cuda path 49 | return cudaPath 50 | } 51 | -------------------------------------------------------------------------------- /__tests__/links/windows-links.test.ts: -------------------------------------------------------------------------------- 1 | import {AbstractLinks} from '../../src/links/links' 2 | import {SemVer} from 'semver' 3 | import {WindowsLinks} from '../../src/links/windows-links' 4 | 5 | test.concurrent('Windows Cuda versions in descending order', async () => { 6 | const wLinks: AbstractLinks = WindowsLinks.Instance 7 | const versions = wLinks.getAvailableLocalCudaVersions() 8 | for (let i = 0; i < versions.length - 1; i++) { 9 | const versionA: SemVer = versions[i] 10 | const versionB: SemVer = versions[i + 1] 11 | expect(versionA.compare(versionB)).toBe(1) // A should be greater than B 12 | } 13 | }) 14 | 15 | test.concurrent( 16 | 'Windows Cuda version to URL map contains valid URLs', 17 | async () => { 18 | for (const version of WindowsLinks.Instance.getAvailableLocalCudaVersions()) { 19 | const url: URL = WindowsLinks.Instance.getLocalURLFromCudaVersion(version) 20 | expect(url).toBeInstanceOf(URL) 21 | } 22 | } 23 | ) 24 | 25 | test.concurrent('There is at least windows 1 version url pair', async () => { 26 | expect( 27 | WindowsLinks.Instance.getAvailableLocalCudaVersions().length 28 | ).toBeGreaterThanOrEqual(1) 29 | }) 30 | 31 | test.concurrent( 32 | 'Windows Cuda network versions in descending order', 33 | async () => { 34 | const wLinks = WindowsLinks.Instance 35 | const versions = wLinks.getAvailableNetworkCudaVersions() 36 | for (let i = 0; i < versions.length - 1; i++) { 37 | const versionA: SemVer = versions[i] 38 | const versionB: SemVer = versions[i + 1] 39 | expect(versionA.compare(versionB)).toBe(1) // A should be greater than B 40 | } 41 | } 42 | ) 43 | 44 | test.concurrent( 45 | 'Windows network Cuda version to URL map contains valid URLs', 46 | async () => { 47 | for (const version of WindowsLinks.Instance.getAvailableNetworkCudaVersions()) { 48 | const url: URL = 49 | WindowsLinks.Instance.getNetworkURLFromCudaVersion(version) 50 | expect(url).toBeInstanceOf(URL) 51 | } 52 | } 53 | ) 54 | 55 | test.concurrent( 56 | 'There is at least windows network 1 version url pair', 57 | async () => { 58 | expect( 59 | WindowsLinks.Instance.getAvailableNetworkCudaVersions().length 60 | ).toBeGreaterThanOrEqual(1) 61 | } 62 | ) 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cuda-toolkit 2 | 3 | This action installs the [NVIDIA® CUDA® Toolkit](https://developer.nvidia.com/cuda-toolkit) on the system. It adds the cuda install location as `CUDA_PATH` to `GITHUB_ENV` so you can access the CUDA install location in subsequent steps. `CUDA_PATH/bin` is added to `GITHUB_PATH` so you can use commands such as `nvcc` directly in subsequent steps. Right now both `windows-2019` and `ubuntu-20.04` runners have been tested to work successfully. 4 | 5 | ## Inputs 6 | 7 | ### `cuda` 8 | 9 | **Optional** The CUDA version to install. View `src/link/windows-links.ts` and `src/link/linux-links.ts` for available versions. 10 | 11 | Default: `'12.1.0'`. 12 | 13 | ### `sub-packages` 14 | 15 | **NOTE: On Linux this only works with the 'network' method [view details](#method)** 16 | 17 | **Optional** 18 | If set, only the specified CUDA subpackages will be installed. 19 | Only installs specified subpackages, must be in the form of a JSON array. For example, if you only want to install nvcc and visual studio integration: `'["nvcc", "visual_studio_integration"]'` (double quotes required) 20 | 21 | Default: `'[]'`. 22 | 23 | ### `method` 24 | 25 | **Optional** 26 | Installation method, can be either `'local'` or `'network'`. 27 | 28 | - `'local'` downloads the entire installer with all packages and runs that (you can still only install certain packages with `sub-packages` on Windows). 29 | - `'network'` downloads a smaller executable which only downloads necessary packages which you can define in `sub-packages`. 30 | 31 | Default: `'local'`. 32 | 33 | ### `linux-local-args` 34 | 35 | **Optional** 36 | (For Linux and 'local' method only) override arguments for the Linux `.run` installer. For example if you don't want samples use `'["--toolkit"]'` (double quotes required) 37 | See the [Nvidia Docs](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-advanced) for available options. Note that the `--silent` option is already always added by the action itself. 38 | 39 | Default: `'["--toolkit", "--samples"]'`. 40 | 41 | ## Outputs 42 | 43 | ### `cuda` 44 | 45 | The cuda version installed (same as `cuda` from input). 46 | 47 | ### `CUDA_PATH` 48 | 49 | The path where cuda is installed (same as `CUDA_PATH` in `GITHUB_ENV`). 50 | 51 | ## Example usage 52 | 53 | ```yaml 54 | steps: 55 | - uses: Jimver/cuda-toolkit@v0.2.10 56 | id: cuda-toolkit 57 | with: 58 | cuda: '12.1.0' 59 | 60 | - run: echo "Installed cuda version is: ${{steps.cuda-toolkit.outputs.cuda}}" 61 | 62 | - run: echo "Cuda install location: ${{steps.cuda-toolkit.outputs.CUDA_PATH}}" 63 | 64 | - run: nvcc -V 65 | ``` 66 | -------------------------------------------------------------------------------- /src/apt-installer.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core' 2 | import {OSType, getOs} from './platform' 3 | import {Method} from './method' 4 | import {SemVer} from 'semver' 5 | import {exec} from '@actions/exec' 6 | import {execReturnOutput} from './run-command' 7 | 8 | export async function useApt(method: Method): Promise { 9 | return method === 'network' && (await getOs()) === OSType.linux 10 | } 11 | 12 | export async function aptSetup(version: SemVer): Promise { 13 | const osType = await getOs() 14 | if (osType !== OSType.linux) { 15 | throw new Error( 16 | `apt setup can only be run on linux runners! Current os type: ${osType}` 17 | ) 18 | } 19 | core.debug(`Setup packages for ${version}`) 20 | const ubuntuVersion: string = await execReturnOutput('lsb_release', ['-sr']) 21 | const ubuntuVersionNoDot = ubuntuVersion.replace('.', '') 22 | const pinFilename = `cuda-ubuntu${ubuntuVersionNoDot}.pin` 23 | const arch = `x86_64` 24 | const pinUrl = `https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${ubuntuVersionNoDot}/${arch}/${pinFilename}` 25 | const repoUrl = `http://developer.download.nvidia.com/compute/cuda/repos/ubuntu${ubuntuVersionNoDot}/${arch}/` 26 | const keyRingVersion = `1.0-1` 27 | const keyRingUrl = `https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${ubuntuVersionNoDot}/${arch}/cuda-keyring_${keyRingVersion}_all.deb` 28 | const keyRingFilename = `cuda_keyring.deb` 29 | 30 | core.debug(`Pin filename: ${pinFilename}`) 31 | core.debug(`Pin url: ${pinUrl}`) 32 | core.debug(`Keyring url: ${keyRingUrl}`) 33 | 34 | core.debug(`Downloading keyring`) 35 | await exec(`wget ${keyRingUrl} -O ${keyRingFilename}`) 36 | await exec(`sudo dpkg -i ${keyRingFilename}`) 37 | 38 | core.debug('Adding CUDA Repository') 39 | await exec(`wget ${pinUrl}`) 40 | await exec( 41 | `sudo mv ${pinFilename} /etc/apt/preferences.d/cuda-repository-pin-600` 42 | ) 43 | await exec(`sudo add-apt-repository "deb ${repoUrl} /"`) 44 | await exec(`sudo apt-get update`) 45 | } 46 | 47 | export async function aptInstall( 48 | version: SemVer, 49 | subPackages: string[] 50 | ): Promise { 51 | const osType = await getOs() 52 | if (osType !== OSType.linux) { 53 | throw new Error( 54 | `apt install can only be run on linux runners! Current os type: ${osType}` 55 | ) 56 | } 57 | if (subPackages.length === 0) { 58 | // Install everything 59 | const packageName = `cuda-${version.major}-${version.minor}` 60 | core.debug(`Install package: ${packageName}`) 61 | return await exec(`sudo apt-get -y install`, [packageName]) 62 | } else { 63 | // Only install specified packages 64 | const versionedSubPackages = subPackages.map( 65 | subPackage => `cuda-${subPackage}-${version.major}-${version.minor}` 66 | ) 67 | core.debug(`Only install subpackages: ${versionedSubPackages}`) 68 | return await exec(`sudo apt-get -y install`, versionedSubPackages) 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "plugins": [ 4 | "jest", 5 | "@typescript-eslint", 6 | "prettier", 7 | "github" 8 | ], 9 | "extends": [ 10 | "plugin:github/recommended", 11 | "plugin:github/typescript", 12 | "prettier" 13 | ], 14 | "parser": "@typescript-eslint/parser", 15 | "parserOptions": { 16 | "ecmaVersion": 9, 17 | "sourceType": "module", 18 | "project": "./tsconfig.eslint.json" 19 | }, 20 | "rules": { 21 | "prettier/prettier": "error", 22 | "filenames/match-regex": [ 23 | "error", 24 | "^[a-z0-9-]+(.test)?$" 25 | ], 26 | "i18n-text/no-en": "off", 27 | "eslint-comments/no-use": "off", 28 | "import/no-namespace": "off", 29 | "no-unused-vars": "off", 30 | "@typescript-eslint/no-unused-vars": [ 31 | "error" 32 | ], 33 | "@typescript-eslint/explicit-member-accessibility": [ 34 | "error", 35 | { 36 | "accessibility": "no-public" 37 | } 38 | ], 39 | "no-shadow": "off", 40 | "@typescript-eslint/no-shadow": [ 41 | "error" 42 | ], 43 | "@typescript-eslint/no-require-imports": "error", 44 | "@typescript-eslint/array-type": "error", 45 | "@typescript-eslint/await-thenable": "error", 46 | "@typescript-eslint/ban-ts-comment": "error", 47 | "camelcase": "off", 48 | "@typescript-eslint/consistent-type-assertions": "error", 49 | "@typescript-eslint/explicit-function-return-type": [ 50 | "error", 51 | { 52 | "allowExpressions": true 53 | } 54 | ], 55 | "@typescript-eslint/func-call-spacing": [ 56 | "error", 57 | "never" 58 | ], 59 | "@typescript-eslint/no-array-constructor": "error", 60 | "@typescript-eslint/no-empty-interface": "error", 61 | "@typescript-eslint/no-explicit-any": "error", 62 | "@typescript-eslint/no-extraneous-class": "error", 63 | "@typescript-eslint/no-for-in-array": "error", 64 | "@typescript-eslint/no-inferrable-types": "error", 65 | "@typescript-eslint/no-misused-new": "error", 66 | "@typescript-eslint/no-namespace": "error", 67 | "@typescript-eslint/no-non-null-assertion": "warn", 68 | "@typescript-eslint/no-unnecessary-qualifier": "error", 69 | "@typescript-eslint/no-unnecessary-type-assertion": "error", 70 | "@typescript-eslint/no-useless-constructor": "error", 71 | "@typescript-eslint/no-var-requires": "error", 72 | "@typescript-eslint/prefer-for-of": "warn", 73 | "@typescript-eslint/prefer-function-type": "warn", 74 | "@typescript-eslint/prefer-includes": "error", 75 | "@typescript-eslint/prefer-string-starts-ends-with": "error", 76 | "@typescript-eslint/promise-function-async": "error", 77 | "@typescript-eslint/require-array-sort-compare": "error", 78 | "@typescript-eslint/restrict-plus-operands": "error", 79 | "semi": "off", 80 | "@typescript-eslint/semi": [ 81 | "error", 82 | "never" 83 | ], 84 | "@typescript-eslint/type-annotation-spacing": "error", 85 | "@typescript-eslint/unbound-method": "error" 86 | }, 87 | "env": { 88 | "node": true, 89 | "es6": true, 90 | "jest/globals": true 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: CI 4 | 5 | # Controls when the action will run. 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the master branch 8 | push: 9 | branches: [master] 10 | pull_request: 11 | 12 | # Allows you to run this workflow manually from the Actions tab 13 | workflow_dispatch: 14 | 15 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 16 | jobs: 17 | # This workflow contains a single job called "CI" 18 | CI: 19 | # The type of runners that the job will run on 20 | strategy: 21 | fail-fast: false 22 | matrix: 23 | os: [windows-2022, windows-2019, ubuntu-22.04, ubuntu-20.04, ubuntu-18.04] 24 | method: [local, network] 25 | runs-on: ${{ matrix.os }} 26 | 27 | # Steps represent a sequence of tasks that will be executed as part of the job 28 | steps: 29 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 30 | - uses: actions/checkout@v3 31 | 32 | # npm cache 33 | - name: Get npm cache directory 34 | id: npm-cache-dir 35 | shell: bash 36 | run: | 37 | echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT 38 | - uses: actions/cache@v3 39 | id: npm-cache # use this to check for `cache-hit` ==> if: steps.npm-cache.outputs.cache-hit != 'true' 40 | with: 41 | path: ${{ steps.npm-cache-dir.outputs.dir }} 42 | key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} 43 | restore-keys: | 44 | ${{ runner.os }}-node- 45 | 46 | - name: Install npm dependencies 47 | run: npm i 48 | 49 | - name: Build 50 | run: npm run build 51 | 52 | - name: Format check 53 | run: npm run format-check 54 | 55 | - name: Lint 56 | run: npm run lint 57 | 58 | - name: Package 59 | run: npm run package 60 | 61 | - name: Test 62 | run: npm run test 63 | 64 | - name: Run the action on this runner with method ${{matrix.method}} 65 | uses: ./ 66 | with: 67 | method: ${{matrix.method}} 68 | 69 | - name: Run the action on this runner with nvcc subpackage only (Linux) 70 | if: runner.os == 'Linux' && matrix.method == 'network' 71 | uses: ./ 72 | with: 73 | method: ${{matrix.method}} 74 | sub-packages: '["nvcc"]' 75 | 76 | - name: Run the action on this runner with nvcc subpackage only (Windows) 77 | if: runner.os == 'Windows' 78 | uses: ./ 79 | with: 80 | method: ${{matrix.method}} 81 | sub-packages: '["nvcc"]' 82 | 83 | - name: Test if nvcc is available 84 | run: nvcc -V 85 | 86 | - name: List paths (windows) 87 | if: runner.os == 'Windows' 88 | shell: powershell 89 | run: | 90 | ls $env:CUDA_PATH 91 | ls $env:CUDA_PATH\bin 92 | ls $env:CUDA_PATH\include 93 | 94 | - name: List paths (linux) 95 | if: runner.os == 'Linux' 96 | run: | 97 | ls $CUDA_PATH 98 | ls $CUDA_PATH/bin 99 | ls $CUDA_PATH/include 100 | -------------------------------------------------------------------------------- /src/installer.ts: -------------------------------------------------------------------------------- 1 | import * as artifact from '@actions/artifact' 2 | import * as core from '@actions/core' 3 | import * as glob from '@actions/glob' 4 | import {OSType, getOs} from './platform' 5 | import {SemVer} from 'semver' 6 | import {exec} from '@actions/exec' 7 | 8 | export async function install( 9 | executablePath: string, 10 | version: SemVer, 11 | subPackagesArray: string[], 12 | linuxLocalArgsArray: string[] 13 | ): Promise { 14 | // Install arguments, see: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-advanced 15 | // and https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html 16 | let installArgs: string[] 17 | 18 | // Command string that is executed 19 | let command: string 20 | 21 | // Subset of subpackages to install instead of everything, see: https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#install-cuda-software 22 | const subPackages: string[] = subPackagesArray 23 | 24 | // Execution options which contain callback functions for stdout and stderr of install process 25 | const execOptions = { 26 | listeners: { 27 | stdout: (data: Buffer) => { 28 | core.debug(data.toString()) 29 | }, 30 | stderr: (data: Buffer) => { 31 | core.debug(`Error: ${data.toString()}`) 32 | } 33 | } 34 | } 35 | 36 | // Configure OS dependent run command and args 37 | switch (await getOs()) { 38 | case OSType.linux: 39 | // Root permission needed on linux 40 | command = `sudo ${executablePath}` 41 | // Install silently, and add additional arguments 42 | installArgs = ['--silent'].concat(linuxLocalArgsArray) 43 | break 44 | case OSType.windows: 45 | // Windows handles permissions automatically 46 | command = executablePath 47 | // Install silently 48 | installArgs = ['-s'] 49 | // Add subpackages to command args (if any) 50 | installArgs = installArgs.concat( 51 | subPackages.map(subPackage => { 52 | // Display driver sub package name is not dependent on version 53 | if (subPackage === 'Display.Driver') { 54 | return subPackage 55 | } 56 | return `${subPackage}_${version.major}.${version.minor}` 57 | }) 58 | ) 59 | break 60 | } 61 | 62 | // Run installer 63 | try { 64 | core.debug(`Running install executable: ${executablePath}`) 65 | const exitCode = await exec(command, installArgs, execOptions) 66 | core.debug(`Installer exit code: ${exitCode}`) 67 | } catch (error) { 68 | core.warning(`Error during installation: ${error}`) 69 | throw error 70 | } finally { 71 | // Always upload installation log regardless of error 72 | if ((await getOs()) === OSType.linux) { 73 | const artifactClient = artifact.create() 74 | const artifactName = 'install-log' 75 | const patterns = ['/var/log/cuda-installer.log'] 76 | const globber = await glob.create(patterns.join('\n')) 77 | const files = await globber.glob() 78 | if (files.length > 0) { 79 | const rootDirectory = '/var/log' 80 | const artifactOptions = { 81 | continueOnError: true 82 | } 83 | const uploadResult = await artifactClient.uploadArtifact( 84 | artifactName, 85 | files, 86 | rootDirectory, 87 | artifactOptions 88 | ) 89 | core.debug(`Upload result: ${uploadResult}`) 90 | } else { 91 | core.debug(`No log file to upload`) 92 | } 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core' 2 | import {Method, parseMethod} from './method' 3 | import {OSType, getOs} from './platform' 4 | import {aptInstall, aptSetup, useApt} from './apt-installer' 5 | import {download} from './downloader' 6 | import {getVersion} from './version' 7 | import {install} from './installer' 8 | import {updatePath} from './update-path' 9 | 10 | async function run(): Promise { 11 | try { 12 | const cuda: string = core.getInput('cuda') 13 | core.debug(`Desired cuda version: ${cuda}`) 14 | const subPackages: string = core.getInput('sub-packages') 15 | core.debug(`Desired subPackes: ${subPackages}`) 16 | const methodString: string = core.getInput('method') 17 | core.debug(`Desired method: ${methodString}`) 18 | const linuxLocalArgs: string = core.getInput('linux-local-args') 19 | core.debug(`Desired local linux args: ${linuxLocalArgs}`) 20 | const useGitHubCache: boolean = core.getBooleanInput('use-github-cache') 21 | core.debug(`Desired GitHub cache usage: ${useGitHubCache}`) 22 | 23 | // Parse subPackages array 24 | let subPackagesArray: string[] = [] 25 | try { 26 | subPackagesArray = JSON.parse(subPackages) 27 | // TODO verify that elements are valid package names (nvcc, etc.) 28 | } catch (error) { 29 | const errString = `Error parsing input 'sub-packages' to a JSON string array: ${subPackages}` 30 | core.debug(errString) 31 | throw new Error(errString) 32 | } 33 | 34 | // Parse method 35 | const methodParsed: Method = parseMethod(methodString) 36 | core.debug(`Parsed method: ${methodParsed}`) 37 | 38 | // Parse version string 39 | const version = await getVersion(cuda, methodParsed) 40 | 41 | // Parse linuxLocalArgs array 42 | let linuxLocalArgsArray: string[] = [] 43 | try { 44 | linuxLocalArgsArray = JSON.parse(linuxLocalArgs) 45 | // TODO verify that elements are valid package names (--samples, --driver, --toolkit, etc.) 46 | } catch (error) { 47 | const errString = `Error parsing input 'linux-local-args' to a JSON string array: ${linuxLocalArgs}` 48 | core.debug(errString) 49 | throw new Error(errString) 50 | } 51 | 52 | // Check if subPackages are specified in 'local' method on Linux 53 | if ( 54 | methodParsed === 'local' && 55 | subPackagesArray.length > 0 && 56 | (await getOs()) === OSType.linux 57 | ) { 58 | throw new Error( 59 | `Subpackages on 'local' method is not supported on Linux, use 'network' instead` 60 | ) 61 | } 62 | 63 | // Linux network install (uses apt repository) 64 | const useAptInstall = await useApt(methodParsed) 65 | if (useAptInstall) { 66 | // Setup aptitude repos 67 | await aptSetup(version) 68 | // Install packages 69 | const installResult = await aptInstall(version, subPackagesArray) 70 | core.debug(`Install result: ${installResult}`) 71 | } else { 72 | // Download 73 | const executablePath: string = await download( 74 | version, 75 | methodParsed, 76 | useGitHubCache 77 | ) 78 | 79 | // Install 80 | await install( 81 | executablePath, 82 | version, 83 | subPackagesArray, 84 | linuxLocalArgsArray 85 | ) 86 | } 87 | 88 | // Add CUDA environment variables to GitHub environment variables 89 | const cudaPath: string = await updatePath(version) 90 | 91 | // Set output variables 92 | core.setOutput('cuda', cuda) 93 | core.setOutput('CUDA_PATH', cudaPath) 94 | } catch (error) { 95 | if (error instanceof Error) { 96 | core.setFailed(error) 97 | } else { 98 | core.setFailed('Unknown error') 99 | } 100 | } 101 | } 102 | 103 | run() 104 | -------------------------------------------------------------------------------- /src/downloader.ts: -------------------------------------------------------------------------------- 1 | import * as cache from '@actions/cache' 2 | import * as core from '@actions/core' 3 | import * as glob from '@actions/glob' 4 | import * as tc from '@actions/tool-cache' 5 | import * as io from '@actions/io' 6 | import {OSType, getOs, getRelease} from './platform' 7 | import {AbstractLinks} from './links/links' 8 | import {Method} from './method' 9 | import {SemVer} from 'semver' 10 | import {WindowsLinks} from './links/windows-links' 11 | import fs from 'fs' 12 | import {getLinks} from './links/get-links' 13 | 14 | // Download helper which returns the installer executable and caches it for next runs 15 | export async function download( 16 | version: SemVer, 17 | method: Method, 18 | useGitHubCache: boolean 19 | ): Promise { 20 | // First try to find tool with desired version in tool cache (local to machine) 21 | const toolName = 'cuda_installer' 22 | const osType = await getOs() 23 | const osRelease = await getRelease() 24 | const toolId = `${toolName}-${osType}-${osRelease}` 25 | const toolPath = tc.find(toolId, `${version}`) 26 | // Path that contains the executable file 27 | let executablePath: string 28 | if (toolPath) { 29 | // Tool is already in cache 30 | core.debug(`Found in local machine cache ${toolPath}`) 31 | executablePath = toolPath 32 | } else { 33 | // Second option, get tool from GitHub cache if enabled 34 | const cacheKey = `${toolId}-${version}` 35 | const cachePath = cacheKey 36 | let cacheResult: string | undefined 37 | if (useGitHubCache) { 38 | cacheResult = await cache.restoreCache([cachePath], cacheKey) 39 | } 40 | if (cacheResult !== undefined) { 41 | core.debug(`Found in GitHub cache ${cachePath}`) 42 | executablePath = cachePath 43 | } else { 44 | // Final option, download tool from NVIDIA servers 45 | core.debug(`Not found in local/GitHub cache, downloading...`) 46 | // Get download URL 47 | const url: URL = await getDownloadURL(method, version) 48 | // Get intsaller filename extension depending on OS 49 | const fileExtension: string = getFileExtension(osType) 50 | const destFileName = `${toolId}_${version}.${fileExtension}` 51 | // Download executable 52 | const downloadPath: string = await tc.downloadTool( 53 | url.toString(), 54 | destFileName 55 | ) 56 | // Copy file to GitHub cachePath 57 | core.debug(`Copying ${destFileName} to ${cachePath}`) 58 | await io.mkdirP(cachePath) 59 | await io.cp(destFileName, cachePath) 60 | // Cache download to local machine cache 61 | const localCachePath = await tc.cacheFile( 62 | downloadPath, 63 | destFileName, 64 | `${toolName}-${osType}`, 65 | `${version}` 66 | ) 67 | core.debug(`Cached download to local machine cache at ${localCachePath}`) 68 | // Cache download to GitHub cache if enabled 69 | if (useGitHubCache) { 70 | const cacheId = await cache.saveCache([cachePath], cacheKey) 71 | if (cacheId !== -1) { 72 | core.debug(`Cached download to GitHub cache with cache id ${cacheId}`) 73 | } else { 74 | core.debug(`Did not cache, cache possibly already exists`) 75 | } 76 | } 77 | executablePath = localCachePath 78 | } 79 | } 80 | // String with full executable path 81 | let fullExecutablePath: string 82 | // Get list of files in tool cache 83 | const filesInCache = await ( 84 | await glob.create(`${executablePath}/**.*`) 85 | ).glob() 86 | core.debug(`Files in tool cache:`) 87 | for (const f of filesInCache) { 88 | core.debug(f) 89 | } 90 | if (filesInCache.length > 1) { 91 | throw new Error(`Got multiple file in tool cache: ${filesInCache.length}`) 92 | } else if (filesInCache.length === 0) { 93 | throw new Error(`Got no files in tool cahce`) 94 | } else { 95 | fullExecutablePath = filesInCache[0] 96 | } 97 | // Make file executable on linux 98 | if ((await getOs()) === OSType.linux) { 99 | // 0755 octal notation permission is: owner(r,w,x), group(r,w,x), other(r,x) where r=read, w=write, x=execute 100 | await fs.promises.chmod(fullExecutablePath, '0755') 101 | } 102 | // Return full executable path 103 | return fullExecutablePath 104 | } 105 | 106 | function getFileExtension(osType: OSType): string { 107 | switch (osType) { 108 | case OSType.windows: 109 | return 'exe' 110 | case OSType.linux: 111 | return 'run' 112 | } 113 | } 114 | 115 | async function getDownloadURL(method: string, version: SemVer): Promise { 116 | const links: AbstractLinks = await getLinks() 117 | switch (method) { 118 | case 'local': 119 | return links.getLocalURLFromCudaVersion(version) 120 | case 'network': 121 | if (!(links instanceof WindowsLinks)) { 122 | core.debug(`Tried to get windows links but got linux links instance`) 123 | throw new Error( 124 | `Network mode is not supported by linux, shouldn't even get here` 125 | ) 126 | } 127 | return links.getNetworkURLFromCudaVersion(version) 128 | default: 129 | throw new Error( 130 | `Invalid method: expected either 'local' or 'network', got '${method}'` 131 | ) 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /src/links/linux-links.ts: -------------------------------------------------------------------------------- 1 | import {AbstractLinks} from './links' 2 | 3 | /** 4 | * Singleton class for windows links. 5 | */ 6 | export class LinuxLinks extends AbstractLinks { 7 | // Singleton instance 8 | private static _instance: LinuxLinks 9 | 10 | // Private constructor to prevent instantiation 11 | private constructor() { 12 | super() 13 | // Map of cuda SemVer version to download URL 14 | this.cudaVersionToURL = new Map([ 15 | [ 16 | '12.1.0', 17 | 'https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run' 18 | ], 19 | [ 20 | '12.0.1', 21 | 'https://developer.download.nvidia.com/compute/cuda/12.0.1/local_installers/cuda_12.0.1_525.85.12_linux.run' 22 | ], 23 | [ 24 | '12.0.0', 25 | 'https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux.run' 26 | ], 27 | [ 28 | '11.8.0', 29 | 'https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run' 30 | ], 31 | [ 32 | '11.7.1', 33 | 'https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux.run' 34 | ], 35 | [ 36 | '11.7.0', 37 | 'https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run' 38 | ], 39 | [ 40 | '11.6.2', 41 | 'https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run' 42 | ], 43 | [ 44 | '11.6.1', 45 | 'https://developer.download.nvidia.com/compute/cuda/11.6.1/local_installers/cuda_11.6.1_510.47.03_linux.run' 46 | ], 47 | [ 48 | '11.6.0', 49 | 'https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run' 50 | ], 51 | [ 52 | '11.5.2', 53 | 'https://developer.download.nvidia.com/compute/cuda/11.5.2/local_installers/cuda_11.5.2_495.29.05_linux.run' 54 | ], 55 | [ 56 | '11.5.1', 57 | 'https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda_11.5.1_495.29.05_linux.run' 58 | ], 59 | [ 60 | '11.5.0', 61 | 'https://developer.download.nvidia.com/compute/cuda/11.5.0/local_installers/cuda_11.5.0_495.29.05_linux.run' 62 | ], 63 | [ 64 | '11.4.4', 65 | 'https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4_470.82.01_linux.run' 66 | ], 67 | [ 68 | '11.4.3', 69 | 'https://developer.download.nvidia.com/compute/cuda/11.4.3/local_installers/cuda_11.4.3_470.82.01_linux.run' 70 | ], 71 | [ 72 | '11.4.2', 73 | 'https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda_11.4.2_470.57.02_linux.run' 74 | ], 75 | [ 76 | '11.4.1', 77 | 'https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda_11.4.1_470.57.02_linux.run' 78 | ], 79 | [ 80 | '11.4.0', 81 | 'https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run' 82 | ], 83 | [ 84 | '11.3.1', 85 | 'https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux.run' 86 | ], 87 | [ 88 | '11.3.0', 89 | 'https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run' 90 | ], 91 | [ 92 | '11.2.2', 93 | 'https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_460.32.03_linux.run' 94 | ], 95 | [ 96 | '11.2.1', 97 | 'https://developer.download.nvidia.com/compute/cuda/11.2.1/local_installers/cuda_11.2.1_460.32.03_linux.run' 98 | ], 99 | [ 100 | '11.2.0', 101 | 'https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run' 102 | ], 103 | [ 104 | '11.1.1', 105 | 'https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run' 106 | ], 107 | [ 108 | '11.0.3', 109 | 'https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_linux.run' 110 | ], 111 | [ 112 | '11.0.2', 113 | 'https://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_451.48_win10.exes' 114 | ], 115 | [ 116 | '11.0.1', 117 | 'https://developer.download.nvidia.com/compute/cuda/11.0.1/local_installers/cuda_11.0.1_450.36.06_linux.run' 118 | ], 119 | [ 120 | '10.2.89', 121 | 'https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run' 122 | ], 123 | [ 124 | '10.1.243', 125 | 'https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run' 126 | ], 127 | [ 128 | '10.0.130', 129 | 'https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux' 130 | ], 131 | [ 132 | '9.2.148', 133 | 'https://developer.nvidia.com/compute/cuda/9.2/Prod2/local_installers/cuda_9.2.148_396.37_linux' 134 | ], 135 | [ 136 | '8.0.61', 137 | 'https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run' 138 | ] 139 | ]) 140 | } 141 | 142 | static get Instance(): LinuxLinks { 143 | return this._instance || (this._instance = new this()) 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /src/links/windows-links.ts: -------------------------------------------------------------------------------- 1 | import {AbstractLinks} from './links' 2 | import {SemVer} from 'semver' 3 | 4 | // # Dictionary of known cuda versions and thier download URLS, which do not follow a consistent pattern :( 5 | // $CUDA_KNOWN_URLS = @{ 6 | // "8.0.44" = "http://developer.nvidia.com/compute/cuda/8.0/Prod/network_installers/cuda_8.0.44_win10_network-exe"; 7 | // "8.0.61" = "http://developer.nvidia.com/compute/cuda/8.0/Prod2/network_installers/cuda_8.0.61_win10_network-exe"; 8 | // "9.0.176" = "http://developer.nvidia.com/compute/cuda/9.0/Prod/network_installers/cuda_9.0.176_win10_network-exe"; 9 | // "9.1.85" = "http://developer.nvidia.com/compute/cuda/9.1/Prod/network_installers/cuda_9.1.85_win10_network"; 10 | // "9.2.148" = "http://developer.nvidia.com/compute/cuda/9.2/Prod2/network_installers2/cuda_9.2.148_win10_network"; 11 | // "10.0.130" = "http://developer.nvidia.com/compute/cuda/10.0/Prod/network_installers/cuda_10.0.130_win10_network"; 12 | // "10.1.105" = "http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.105_win10_network.exe"; 13 | // "10.1.168" = "http://developer.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.168_win10_network.exe"; 14 | // "10.1.243" = "http://developer.download.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.243_win10_network.exe"; 15 | // "10.2.89" = "http://developer.download.nvidia.com/compute/cuda/10.2/Prod/network_installers/cuda_10.2.89_win10_network.exe"; 16 | // "11.0.167" = "http://developer.download.nvidia.com/compute/cuda/11.0.1/network_installers/cuda_11.0.1_win10_network.exe" 17 | // } 18 | 19 | /** 20 | * Singleton class for windows links. 21 | */ 22 | export class WindowsLinks extends AbstractLinks { 23 | // Singleton instance 24 | private static _instance: WindowsLinks 25 | 26 | private cudaVersionToNetworkUrl: Map = new Map([ 27 | [ 28 | '12.1.0', 29 | 'https://developer.download.nvidia.com/compute/cuda/12.1.0/network_installers/cuda_12.1.0_windows_network.exe' 30 | ], 31 | [ 32 | '12.0.1', 33 | 'https://developer.download.nvidia.com/compute/cuda/12.0.1/network_installers/cuda_12.0.1_windows_network.exe' 34 | ], 35 | [ 36 | '12.0.0', 37 | 'https://developer.download.nvidia.com/compute/cuda/12.0.0/network_installers/cuda_12.0.0_windows_network.exe' 38 | ], 39 | [ 40 | '11.8.0', 41 | 'https://developer.download.nvidia.com/compute/cuda/11.8.0/network_installers/cuda_11.8.0_windows_network.exe' 42 | ], 43 | [ 44 | '11.7.1', 45 | 'https://developer.download.nvidia.com/compute/cuda/11.7.1/network_installers/cuda_11.7.1_windows_network.exe' 46 | ], 47 | [ 48 | '11.7.0', 49 | 'https://developer.download.nvidia.com/compute/cuda/11.7.0/network_installers/cuda_11.7.0_windows_network.exe' 50 | ], 51 | [ 52 | '11.6.2', 53 | 'https://developer.download.nvidia.com/compute/cuda/11.6.2/network_installers/cuda_11.6.2_windows_network.exe' 54 | ], 55 | [ 56 | '11.6.1', 57 | 'https://developer.download.nvidia.com/compute/cuda/11.6.1/network_installers/cuda_11.6.1_windows_network.exe' 58 | ], 59 | [ 60 | '11.6.0', 61 | 'https://developer.download.nvidia.com/compute/cuda/11.6.0/network_installers/cuda_11.6.0_windows_network.exe' 62 | ], 63 | [ 64 | '11.5.2', 65 | 'https://developer.download.nvidia.com/compute/cuda/11.5.2/network_installers/cuda_11.5.2_windows_network.exe' 66 | ], 67 | [ 68 | '11.5.1', 69 | 'https://developer.download.nvidia.com/compute/cuda/11.5.1/network_installers/cuda_11.5.1_windows_network.exe' 70 | ], 71 | [ 72 | '11.5.0', 73 | 'https://developer.download.nvidia.com/compute/cuda/11.5.0/network_installers/cuda_11.5.0_win10_network.exe' 74 | ], 75 | [ 76 | '11.4.4', 77 | 'https://developer.download.nvidia.com/compute/cuda/11.4.4/network_installers/cuda_11.4.4_windows_network.exe' 78 | ], 79 | [ 80 | '11.4.3', 81 | 'https://developer.download.nvidia.com/compute/cuda/11.4.3/network_installers/cuda_11.4.3_win10_network.exe' 82 | ], 83 | [ 84 | '11.4.2', 85 | 'https://developer.download.nvidia.com/compute/cuda/11.4.2/network_installers/cuda_11.4.2_win10_network.exe' 86 | ], 87 | [ 88 | '11.4.1', 89 | 'https://developer.download.nvidia.com/compute/cuda/11.4.1/network_installers/cuda_11.4.1_win10_network.exe' 90 | ], 91 | [ 92 | '11.4.0', 93 | 'https://developer.download.nvidia.com/compute/cuda/11.4.0/network_installers/cuda_11.4.0_win10_network.exe' 94 | ], 95 | [ 96 | '11.3.1', 97 | 'https://developer.download.nvidia.com/compute/cuda/11.3.1/network_installers/cuda_11.3.1_win10_network.exe' 98 | ], 99 | [ 100 | '11.3.0', 101 | 'https://developer.download.nvidia.com/compute/cuda/11.3.0/network_installers/cuda_11.3.0_win10_network.exe' 102 | ], 103 | [ 104 | '11.2.2', 105 | 'https://developer.download.nvidia.com/compute/cuda/11.2.2/network_installers/cuda_11.2.2_win10_network.exe' 106 | ], 107 | [ 108 | '11.2.1', 109 | 'https://developer.download.nvidia.com/compute/cuda/11.2.1/network_installers/cuda_11.2.1_win10_network.exe' 110 | ], 111 | [ 112 | '11.2.0', 113 | 'https://developer.download.nvidia.com/compute/cuda/11.2.0/network_installers/cuda_11.2.0_win10_network.exe' 114 | ], 115 | [ 116 | '11.1.1', 117 | 'https://developer.download.nvidia.com/compute/cuda/11.1.1/network_installers/cuda_11.1.1_win10_network.exe' 118 | ], 119 | [ 120 | '11.0.3', 121 | 'https://developer.download.nvidia.com/compute/cuda/11.0.3/network_installers/cuda_11.0.3_win10_network.exe' 122 | ], 123 | [ 124 | '11.0.2', 125 | 'https://developer.download.nvidia.com/compute/cuda/11.0.2/network_installers/cuda_11.0.2_win10_network.exe' 126 | ], 127 | [ 128 | '11.0.1', 129 | 'https://developer.download.nvidia.com/compute/cuda/11.0.1/network_installers/cuda_11.0.1_win10_network.exe' 130 | ], 131 | [ 132 | '10.2.89', 133 | 'https://developer.download.nvidia.com/compute/cuda/10.2/Prod/network_installers/cuda_10.2.89_win10_network.exe' 134 | ], 135 | [ 136 | '10.1.243', 137 | 'https://developer.download.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.243_win10_network.exe' 138 | ], 139 | [ 140 | '10.0.130', 141 | 'https://developer.nvidia.com/compute/cuda/10.0/Prod/network_installers/cuda_10.0.130_win10_network' 142 | ], 143 | [ 144 | '9.2.148', 145 | 'https://developer.nvidia.com/compute/cuda/9.2/Prod2/network_installers2/cuda_9.2.148_win10_network' 146 | ], 147 | [ 148 | '8.0.61', 149 | 'https://developer.nvidia.com/compute/cuda/8.0/Prod2/network_installers/cuda_8.0.61_win10_network-exe' 150 | ] 151 | ]) 152 | 153 | // Private constructor to prevent instantiation 154 | private constructor() { 155 | super() 156 | // Map of cuda SemVer version to download URL 157 | this.cudaVersionToURL = new Map([ 158 | [ 159 | '12.1.0', 160 | 'https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_531.14_windows.exe' 161 | ], 162 | [ 163 | '12.0.1', 164 | 'https://developer.download.nvidia.com/compute/cuda/12.0.1/local_installers/cuda_12.0.1_528.33_windows.exe' 165 | ], 166 | [ 167 | '12.0.0', 168 | 'https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_527.41_windows.exe' 169 | ], 170 | [ 171 | '11.8.0', 172 | 'https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_522.06_windows.exe' 173 | ], 174 | [ 175 | '11.7.1', 176 | 'https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_516.94_windows.exe' 177 | ], 178 | [ 179 | '11.7.0', 180 | 'https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_516.01_windows.exe' 181 | ], 182 | [ 183 | '11.6.2', 184 | 'https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_511.65_windows.exe' 185 | ], 186 | [ 187 | '11.6.1', 188 | 'https://developer.download.nvidia.com/compute/cuda/11.6.1/local_installers/cuda_11.6.1_511.65_windows.exe' 189 | ], 190 | [ 191 | '11.6.0', 192 | 'https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_511.23_windows.exe' 193 | ], 194 | [ 195 | '11.5.2', 196 | 'https://developer.download.nvidia.com/compute/cuda/11.5.2/local_installers/cuda_11.5.2_496.13_windows.exe' 197 | ], 198 | [ 199 | '11.5.1', 200 | 'https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda_11.5.1_496.13_windows.exe' 201 | ], 202 | [ 203 | '11.5.0', 204 | 'https://developer.download.nvidia.com/compute/cuda/11.5.0/local_installers/cuda_11.5.0_496.13_win10.exe' 205 | ], 206 | [ 207 | '11.4.4', 208 | 'https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4_472.50_windows.exe' 209 | ], 210 | [ 211 | '11.4.3', 212 | 'https://developer.download.nvidia.com/compute/cuda/11.4.3/local_installers/cuda_11.4.3_472.50_win10.exe' 213 | ], 214 | [ 215 | '11.4.2', 216 | 'https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda_11.4.2_471.41_win10.exe' 217 | ], 218 | [ 219 | '11.4.1', 220 | 'https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda_11.4.1_471.41_win10.exe' 221 | ], 222 | [ 223 | '11.4.0', 224 | 'https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_471.11_win10.exe' 225 | ], 226 | [ 227 | '11.3.1', 228 | 'https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.89_win10.exe' 229 | ], 230 | [ 231 | '11.3.0', 232 | 'https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.89_win10.exe' 233 | ], 234 | [ 235 | '11.2.2', 236 | 'https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_461.33_win10.exe' 237 | ], 238 | [ 239 | '11.2.1', 240 | 'https://developer.download.nvidia.com/compute/cuda/11.2.1/local_installers/cuda_11.2.1_461.09_win10.exe' 241 | ], 242 | [ 243 | '11.2.0', 244 | 'https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.89_win10.exe' 245 | ], 246 | [ 247 | '11.1.1', 248 | 'https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_456.81_win10.exe' 249 | ], 250 | [ 251 | '11.0.3', 252 | 'https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_451.82_win10.exe' 253 | ], 254 | [ 255 | '11.0.2', 256 | 'https://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_451.48_win10.exe' 257 | ], 258 | [ 259 | '11.0.1', 260 | 'https://developer.download.nvidia.com/compute/cuda/11.0.1/local_installers/cuda_11.0.1_451.22_win10.exe' 261 | ], 262 | [ 263 | '10.2.89', 264 | 'https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_441.22_win10.exe' 265 | ], 266 | [ 267 | '10.1.243', 268 | 'https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_426.00_win10.exe' 269 | ], 270 | [ 271 | '10.0.130', 272 | 'https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_411.31_win10' 273 | ], 274 | [ 275 | '9.2.148', 276 | 'https://developer.nvidia.com/compute/cuda/9.2/Prod2/local_installers2/cuda_9.2.148_win10' 277 | ], 278 | [ 279 | '8.0.61', 280 | 'https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_win10-exe' 281 | ] 282 | ]) 283 | } 284 | 285 | static get Instance(): WindowsLinks { 286 | return this._instance || (this._instance = new this()) 287 | } 288 | 289 | getAvailableNetworkCudaVersions(): SemVer[] { 290 | return Array.from(this.cudaVersionToNetworkUrl.keys()).map( 291 | s => new SemVer(s) 292 | ) 293 | } 294 | 295 | getNetworkURLFromCudaVersion(version: SemVer): URL { 296 | const urlString = this.cudaVersionToNetworkUrl.get(`${version}`) 297 | if (urlString === undefined) { 298 | throw new Error(`Invalid version: ${version}`) 299 | } 300 | return new URL(urlString) 301 | } 302 | } 303 | -------------------------------------------------------------------------------- /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})(); -------------------------------------------------------------------------------- /dist/licenses.txt: -------------------------------------------------------------------------------- 1 | @actions/artifact 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/cache 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/core 26 | MIT 27 | The MIT License (MIT) 28 | 29 | Copyright 2019 GitHub 30 | 31 | 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: 32 | 33 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 34 | 35 | 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. 36 | 37 | @actions/exec 38 | MIT 39 | The MIT License (MIT) 40 | 41 | Copyright 2019 GitHub 42 | 43 | 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: 44 | 45 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 46 | 47 | 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. 48 | 49 | @actions/glob 50 | MIT 51 | The MIT License (MIT) 52 | 53 | Copyright 2019 GitHub 54 | 55 | 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: 56 | 57 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 58 | 59 | 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. 60 | 61 | @actions/http-client 62 | MIT 63 | Actions Http Client for Node.js 64 | 65 | Copyright (c) GitHub, Inc. 66 | 67 | All rights reserved. 68 | 69 | MIT License 70 | 71 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 72 | associated documentation files (the "Software"), to deal in the Software without restriction, 73 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 74 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 75 | subject to the following conditions: 76 | 77 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 78 | 79 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 80 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 81 | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 82 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 83 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 84 | 85 | 86 | @actions/io 87 | MIT 88 | The MIT License (MIT) 89 | 90 | Copyright 2019 GitHub 91 | 92 | 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: 93 | 94 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 95 | 96 | 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. 97 | 98 | @actions/tool-cache 99 | MIT 100 | The MIT License (MIT) 101 | 102 | Copyright 2019 GitHub 103 | 104 | 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: 105 | 106 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 107 | 108 | 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. 109 | 110 | @azure/abort-controller 111 | MIT 112 | The MIT License (MIT) 113 | 114 | Copyright (c) 2020 Microsoft 115 | 116 | Permission is hereby granted, free of charge, to any person obtaining a copy 117 | of this software and associated documentation files (the "Software"), to deal 118 | in the Software without restriction, including without limitation the rights 119 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 120 | copies of the Software, and to permit persons to whom the Software is 121 | furnished to do so, subject to the following conditions: 122 | 123 | The above copyright notice and this permission notice shall be included in all 124 | copies or substantial portions of the Software. 125 | 126 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 127 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 128 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 129 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 130 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 131 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 132 | SOFTWARE. 133 | 134 | 135 | @azure/core-auth 136 | MIT 137 | The MIT License (MIT) 138 | 139 | Copyright (c) 2020 Microsoft 140 | 141 | Permission is hereby granted, free of charge, to any person obtaining a copy 142 | of this software and associated documentation files (the "Software"), to deal 143 | in the Software without restriction, including without limitation the rights 144 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 145 | copies of the Software, and to permit persons to whom the Software is 146 | furnished to do so, subject to the following conditions: 147 | 148 | The above copyright notice and this permission notice shall be included in all 149 | copies or substantial portions of the Software. 150 | 151 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 152 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 153 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 154 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 155 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 156 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 157 | SOFTWARE. 158 | 159 | 160 | @azure/core-http 161 | MIT 162 | The MIT License (MIT) 163 | 164 | Copyright (c) 2020 Microsoft 165 | 166 | Permission is hereby granted, free of charge, to any person obtaining a copy 167 | of this software and associated documentation files (the "Software"), to deal 168 | in the Software without restriction, including without limitation the rights 169 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 170 | copies of the Software, and to permit persons to whom the Software is 171 | furnished to do so, subject to the following conditions: 172 | 173 | The above copyright notice and this permission notice shall be included in all 174 | copies or substantial portions of the Software. 175 | 176 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 177 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 178 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 179 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 180 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 181 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 182 | SOFTWARE. 183 | 184 | 185 | @azure/core-lro 186 | MIT 187 | The MIT License (MIT) 188 | 189 | Copyright (c) 2020 Microsoft 190 | 191 | Permission is hereby granted, free of charge, to any person obtaining a copy 192 | of this software and associated documentation files (the "Software"), to deal 193 | in the Software without restriction, including without limitation the rights 194 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 195 | copies of the Software, and to permit persons to whom the Software is 196 | furnished to do so, subject to the following conditions: 197 | 198 | The above copyright notice and this permission notice shall be included in all 199 | copies or substantial portions of the Software. 200 | 201 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 202 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 203 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 204 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 205 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 206 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 207 | SOFTWARE. 208 | 209 | 210 | @azure/core-paging 211 | MIT 212 | The MIT License (MIT) 213 | 214 | Copyright (c) 2020 Microsoft 215 | 216 | Permission is hereby granted, free of charge, to any person obtaining a copy 217 | of this software and associated documentation files (the "Software"), to deal 218 | in the Software without restriction, including without limitation the rights 219 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 220 | copies of the Software, and to permit persons to whom the Software is 221 | furnished to do so, subject to the following conditions: 222 | 223 | The above copyright notice and this permission notice shall be included in all 224 | copies or substantial portions of the Software. 225 | 226 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 227 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 228 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 229 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 230 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 231 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 232 | SOFTWARE. 233 | 234 | 235 | @azure/core-tracing 236 | MIT 237 | The MIT License (MIT) 238 | 239 | Copyright (c) 2020 Microsoft 240 | 241 | Permission is hereby granted, free of charge, to any person obtaining a copy 242 | of this software and associated documentation files (the "Software"), to deal 243 | in the Software without restriction, including without limitation the rights 244 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 245 | copies of the Software, and to permit persons to whom the Software is 246 | furnished to do so, subject to the following conditions: 247 | 248 | The above copyright notice and this permission notice shall be included in all 249 | copies or substantial portions of the Software. 250 | 251 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 252 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 253 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 254 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 255 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 256 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 257 | SOFTWARE. 258 | 259 | 260 | @azure/core-util 261 | MIT 262 | The MIT License (MIT) 263 | 264 | Copyright (c) 2020 Microsoft 265 | 266 | Permission is hereby granted, free of charge, to any person obtaining a copy 267 | of this software and associated documentation files (the "Software"), to deal 268 | in the Software without restriction, including without limitation the rights 269 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 270 | copies of the Software, and to permit persons to whom the Software is 271 | furnished to do so, subject to the following conditions: 272 | 273 | The above copyright notice and this permission notice shall be included in all 274 | copies or substantial portions of the Software. 275 | 276 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 277 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 278 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 279 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 280 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 281 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 282 | SOFTWARE. 283 | 284 | 285 | @azure/logger 286 | MIT 287 | The MIT License (MIT) 288 | 289 | Copyright (c) 2020 Microsoft 290 | 291 | Permission is hereby granted, free of charge, to any person obtaining a copy 292 | of this software and associated documentation files (the "Software"), to deal 293 | in the Software without restriction, including without limitation the rights 294 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 295 | copies of the Software, and to permit persons to whom the Software is 296 | furnished to do so, subject to the following conditions: 297 | 298 | The above copyright notice and this permission notice shall be included in all 299 | copies or substantial portions of the Software. 300 | 301 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 302 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 303 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 304 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 305 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 306 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 307 | SOFTWARE. 308 | 309 | 310 | @azure/storage-blob 311 | MIT 312 | The MIT License (MIT) 313 | 314 | Copyright (c) 2020 Microsoft 315 | 316 | Permission is hereby granted, free of charge, to any person obtaining a copy 317 | of this software and associated documentation files (the "Software"), to deal 318 | in the Software without restriction, including without limitation the rights 319 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 320 | copies of the Software, and to permit persons to whom the Software is 321 | furnished to do so, subject to the following conditions: 322 | 323 | The above copyright notice and this permission notice shall be included in all 324 | copies or substantial portions of the Software. 325 | 326 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 327 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 328 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 329 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 330 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 331 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 332 | SOFTWARE. 333 | 334 | 335 | @opentelemetry/api 336 | Apache-2.0 337 | Apache License 338 | Version 2.0, January 2004 339 | http://www.apache.org/licenses/ 340 | 341 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 342 | 343 | 1. Definitions. 344 | 345 | "License" shall mean the terms and conditions for use, reproduction, 346 | and distribution as defined by Sections 1 through 9 of this document. 347 | 348 | "Licensor" shall mean the copyright owner or entity authorized by 349 | the copyright owner that is granting the License. 350 | 351 | "Legal Entity" shall mean the union of the acting entity and all 352 | other entities that control, are controlled by, or are under common 353 | control with that entity. For the purposes of this definition, 354 | "control" means (i) the power, direct or indirect, to cause the 355 | direction or management of such entity, whether by contract or 356 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 357 | outstanding shares, or (iii) beneficial ownership of such entity. 358 | 359 | "You" (or "Your") shall mean an individual or Legal Entity 360 | exercising permissions granted by this License. 361 | 362 | "Source" form shall mean the preferred form for making modifications, 363 | including but not limited to software source code, documentation 364 | source, and configuration files. 365 | 366 | "Object" form shall mean any form resulting from mechanical 367 | transformation or translation of a Source form, including but 368 | not limited to compiled object code, generated documentation, 369 | and conversions to other media types. 370 | 371 | "Work" shall mean the work of authorship, whether in Source or 372 | Object form, made available under the License, as indicated by a 373 | copyright notice that is included in or attached to the work 374 | (an example is provided in the Appendix below). 375 | 376 | "Derivative Works" shall mean any work, whether in Source or Object 377 | form, that is based on (or derived from) the Work and for which the 378 | editorial revisions, annotations, elaborations, or other modifications 379 | represent, as a whole, an original work of authorship. For the purposes 380 | of this License, Derivative Works shall not include works that remain 381 | separable from, or merely link (or bind by name) to the interfaces of, 382 | the Work and Derivative Works thereof. 383 | 384 | "Contribution" shall mean any work of authorship, including 385 | the original version of the Work and any modifications or additions 386 | to that Work or Derivative Works thereof, that is intentionally 387 | submitted to Licensor for inclusion in the Work by the copyright owner 388 | or by an individual or Legal Entity authorized to submit on behalf of 389 | the copyright owner. For the purposes of this definition, "submitted" 390 | means any form of electronic, verbal, or written communication sent 391 | to the Licensor or its representatives, including but not limited to 392 | communication on electronic mailing lists, source code control systems, 393 | and issue tracking systems that are managed by, or on behalf of, the 394 | Licensor for the purpose of discussing and improving the Work, but 395 | excluding communication that is conspicuously marked or otherwise 396 | designated in writing by the copyright owner as "Not a Contribution." 397 | 398 | "Contributor" shall mean Licensor and any individual or Legal Entity 399 | on behalf of whom a Contribution has been received by Licensor and 400 | subsequently incorporated within the Work. 401 | 402 | 2. Grant of Copyright License. Subject to the terms and conditions of 403 | this License, each Contributor hereby grants to You a perpetual, 404 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 405 | copyright license to reproduce, prepare Derivative Works of, 406 | publicly display, publicly perform, sublicense, and distribute the 407 | Work and such Derivative Works in Source or Object form. 408 | 409 | 3. Grant of Patent License. Subject to the terms and conditions of 410 | this License, each Contributor hereby grants to You a perpetual, 411 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 412 | (except as stated in this section) patent license to make, have made, 413 | use, offer to sell, sell, import, and otherwise transfer the Work, 414 | where such license applies only to those patent claims licensable 415 | by such Contributor that are necessarily infringed by their 416 | Contribution(s) alone or by combination of their Contribution(s) 417 | with the Work to which such Contribution(s) was submitted. If You 418 | institute patent litigation against any entity (including a 419 | cross-claim or counterclaim in a lawsuit) alleging that the Work 420 | or a Contribution incorporated within the Work constitutes direct 421 | or contributory patent infringement, then any patent licenses 422 | granted to You under this License for that Work shall terminate 423 | as of the date such litigation is filed. 424 | 425 | 4. Redistribution. You may reproduce and distribute copies of the 426 | Work or Derivative Works thereof in any medium, with or without 427 | modifications, and in Source or Object form, provided that You 428 | meet the following conditions: 429 | 430 | (a) You must give any other recipients of the Work or 431 | Derivative Works a copy of this License; and 432 | 433 | (b) You must cause any modified files to carry prominent notices 434 | stating that You changed the files; and 435 | 436 | (c) You must retain, in the Source form of any Derivative Works 437 | that You distribute, all copyright, patent, trademark, and 438 | attribution notices from the Source form of the Work, 439 | excluding those notices that do not pertain to any part of 440 | the Derivative Works; and 441 | 442 | (d) If the Work includes a "NOTICE" text file as part of its 443 | distribution, then any Derivative Works that You distribute must 444 | include a readable copy of the attribution notices contained 445 | within such NOTICE file, excluding those notices that do not 446 | pertain to any part of the Derivative Works, in at least one 447 | of the following places: within a NOTICE text file distributed 448 | as part of the Derivative Works; within the Source form or 449 | documentation, if provided along with the Derivative Works; or, 450 | within a display generated by the Derivative Works, if and 451 | wherever such third-party notices normally appear. The contents 452 | of the NOTICE file are for informational purposes only and 453 | do not modify the License. You may add Your own attribution 454 | notices within Derivative Works that You distribute, alongside 455 | or as an addendum to the NOTICE text from the Work, provided 456 | that such additional attribution notices cannot be construed 457 | as modifying the License. 458 | 459 | You may add Your own copyright statement to Your modifications and 460 | may provide additional or different license terms and conditions 461 | for use, reproduction, or distribution of Your modifications, or 462 | for any such Derivative Works as a whole, provided Your use, 463 | reproduction, and distribution of the Work otherwise complies with 464 | the conditions stated in this License. 465 | 466 | 5. Submission of Contributions. Unless You explicitly state otherwise, 467 | any Contribution intentionally submitted for inclusion in the Work 468 | by You to the Licensor shall be under the terms and conditions of 469 | this License, without any additional terms or conditions. 470 | Notwithstanding the above, nothing herein shall supersede or modify 471 | the terms of any separate license agreement you may have executed 472 | with Licensor regarding such Contributions. 473 | 474 | 6. Trademarks. This License does not grant permission to use the trade 475 | names, trademarks, service marks, or product names of the Licensor, 476 | except as required for reasonable and customary use in describing the 477 | origin of the Work and reproducing the content of the NOTICE file. 478 | 479 | 7. Disclaimer of Warranty. Unless required by applicable law or 480 | agreed to in writing, Licensor provides the Work (and each 481 | Contributor provides its Contributions) on an "AS IS" BASIS, 482 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 483 | implied, including, without limitation, any warranties or conditions 484 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 485 | PARTICULAR PURPOSE. You are solely responsible for determining the 486 | appropriateness of using or redistributing the Work and assume any 487 | risks associated with Your exercise of permissions under this License. 488 | 489 | 8. Limitation of Liability. In no event and under no legal theory, 490 | whether in tort (including negligence), contract, or otherwise, 491 | unless required by applicable law (such as deliberate and grossly 492 | negligent acts) or agreed to in writing, shall any Contributor be 493 | liable to You for damages, including any direct, indirect, special, 494 | incidental, or consequential damages of any character arising as a 495 | result of this License or out of the use or inability to use the 496 | Work (including but not limited to damages for loss of goodwill, 497 | work stoppage, computer failure or malfunction, or any and all 498 | other commercial damages or losses), even if such Contributor 499 | has been advised of the possibility of such damages. 500 | 501 | 9. Accepting Warranty or Additional Liability. While redistributing 502 | the Work or Derivative Works thereof, You may choose to offer, 503 | and charge a fee for, acceptance of support, warranty, indemnity, 504 | or other liability obligations and/or rights consistent with this 505 | License. However, in accepting such obligations, You may act only 506 | on Your own behalf and on Your sole responsibility, not on behalf 507 | of any other Contributor, and only if You agree to indemnify, 508 | defend, and hold each Contributor harmless for any liability 509 | incurred by, or claims asserted against, such Contributor by reason 510 | of your accepting any such warranty or additional liability. 511 | 512 | END OF TERMS AND CONDITIONS 513 | 514 | APPENDIX: How to apply the Apache License to your work. 515 | 516 | To apply the Apache License to your work, attach the following 517 | boilerplate notice, with the fields enclosed by brackets "[]" 518 | replaced with your own identifying information. (Don't include 519 | the brackets!) The text should be enclosed in the appropriate 520 | comment syntax for the file format. We also recommend that a 521 | file or class name and description of purpose be included on the 522 | same "printed page" as the copyright notice for easier 523 | identification within third-party archives. 524 | 525 | Copyright [yyyy] [name of copyright owner] 526 | 527 | Licensed under the Apache License, Version 2.0 (the "License"); 528 | you may not use this file except in compliance with the License. 529 | You may obtain a copy of the License at 530 | 531 | http://www.apache.org/licenses/LICENSE-2.0 532 | 533 | Unless required by applicable law or agreed to in writing, software 534 | distributed under the License is distributed on an "AS IS" BASIS, 535 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 536 | See the License for the specific language governing permissions and 537 | limitations under the License. 538 | 539 | 540 | @vercel/ncc 541 | MIT 542 | Copyright 2018 ZEIT, Inc. 543 | 544 | 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: 545 | 546 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 547 | 548 | 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. 549 | 550 | asynckit 551 | MIT 552 | The MIT License (MIT) 553 | 554 | Copyright (c) 2016 Alex Indigo 555 | 556 | Permission is hereby granted, free of charge, to any person obtaining a copy 557 | of this software and associated documentation files (the "Software"), to deal 558 | in the Software without restriction, including without limitation the rights 559 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 560 | copies of the Software, and to permit persons to whom the Software is 561 | furnished to do so, subject to the following conditions: 562 | 563 | The above copyright notice and this permission notice shall be included in all 564 | copies or substantial portions of the Software. 565 | 566 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 567 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 568 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 569 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 570 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 571 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 572 | SOFTWARE. 573 | 574 | 575 | balanced-match 576 | MIT 577 | (MIT) 578 | 579 | Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> 580 | 581 | Permission is hereby granted, free of charge, to any person obtaining a copy of 582 | this software and associated documentation files (the "Software"), to deal in 583 | the Software without restriction, including without limitation the rights to 584 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 585 | of the Software, and to permit persons to whom the Software is furnished to do 586 | so, subject to the following conditions: 587 | 588 | The above copyright notice and this permission notice shall be included in all 589 | copies or substantial portions of the Software. 590 | 591 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 592 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 593 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 594 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 595 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 596 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 597 | SOFTWARE. 598 | 599 | 600 | brace-expansion 601 | MIT 602 | MIT License 603 | 604 | Copyright (c) 2013 Julian Gruber 605 | 606 | Permission is hereby granted, free of charge, to any person obtaining a copy 607 | of this software and associated documentation files (the "Software"), to deal 608 | in the Software without restriction, including without limitation the rights 609 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 610 | copies of the Software, and to permit persons to whom the Software is 611 | furnished to do so, subject to the following conditions: 612 | 613 | The above copyright notice and this permission notice shall be included in all 614 | copies or substantial portions of the Software. 615 | 616 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 617 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 618 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 619 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 620 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 621 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 622 | SOFTWARE. 623 | 624 | 625 | combined-stream 626 | MIT 627 | Copyright (c) 2011 Debuggable Limited 628 | 629 | Permission is hereby granted, free of charge, to any person obtaining a copy 630 | of this software and associated documentation files (the "Software"), to deal 631 | in the Software without restriction, including without limitation the rights 632 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 633 | copies of the Software, and to permit persons to whom the Software is 634 | furnished to do so, subject to the following conditions: 635 | 636 | The above copyright notice and this permission notice shall be included in 637 | all copies or substantial portions of the Software. 638 | 639 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 640 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 641 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 642 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 643 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 644 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 645 | THE SOFTWARE. 646 | 647 | 648 | concat-map 649 | MIT 650 | This software is released under the MIT license: 651 | 652 | Permission is hereby granted, free of charge, to any person obtaining a copy of 653 | this software and associated documentation files (the "Software"), to deal in 654 | the Software without restriction, including without limitation the rights to 655 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 656 | the Software, and to permit persons to whom the Software is furnished to do so, 657 | subject to the following conditions: 658 | 659 | The above copyright notice and this permission notice shall be included in all 660 | copies or substantial portions of the Software. 661 | 662 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 663 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 664 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 665 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 666 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 667 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 668 | 669 | 670 | delayed-stream 671 | MIT 672 | Copyright (c) 2011 Debuggable Limited 673 | 674 | Permission is hereby granted, free of charge, to any person obtaining a copy 675 | of this software and associated documentation files (the "Software"), to deal 676 | in the Software without restriction, including without limitation the rights 677 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 678 | copies of the Software, and to permit persons to whom the Software is 679 | furnished to do so, subject to the following conditions: 680 | 681 | The above copyright notice and this permission notice shall be included in 682 | all copies or substantial portions of the Software. 683 | 684 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 685 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 686 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 687 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 688 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 689 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 690 | THE SOFTWARE. 691 | 692 | 693 | form-data 694 | MIT 695 | Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors 696 | 697 | Permission is hereby granted, free of charge, to any person obtaining a copy 698 | of this software and associated documentation files (the "Software"), to deal 699 | in the Software without restriction, including without limitation the rights 700 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 701 | copies of the Software, and to permit persons to whom the Software is 702 | furnished to do so, subject to the following conditions: 703 | 704 | The above copyright notice and this permission notice shall be included in 705 | all copies or substantial portions of the Software. 706 | 707 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 708 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 709 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 710 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 711 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 712 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 713 | THE SOFTWARE. 714 | 715 | 716 | fs.realpath 717 | ISC 718 | The ISC License 719 | 720 | Copyright (c) Isaac Z. Schlueter and Contributors 721 | 722 | Permission to use, copy, modify, and/or distribute this software for any 723 | purpose with or without fee is hereby granted, provided that the above 724 | copyright notice and this permission notice appear in all copies. 725 | 726 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 727 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 728 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 729 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 730 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 731 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 732 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 733 | 734 | ---- 735 | 736 | This library bundles a version of the `fs.realpath` and `fs.realpathSync` 737 | methods from Node.js v0.10 under the terms of the Node.js MIT license. 738 | 739 | Node's license follows, also included at the header of `old.js` which contains 740 | the licensed code: 741 | 742 | Copyright Joyent, Inc. and other Node contributors. 743 | 744 | Permission is hereby granted, free of charge, to any person obtaining a 745 | copy of this software and associated documentation files (the "Software"), 746 | to deal in the Software without restriction, including without limitation 747 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 748 | and/or sell copies of the Software, and to permit persons to whom the 749 | Software is furnished to do so, subject to the following conditions: 750 | 751 | The above copyright notice and this permission notice shall be included in 752 | all copies or substantial portions of the Software. 753 | 754 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 755 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 756 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 757 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 758 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 759 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 760 | DEALINGS IN THE SOFTWARE. 761 | 762 | 763 | glob 764 | ISC 765 | The ISC License 766 | 767 | Copyright (c) Isaac Z. Schlueter and Contributors 768 | 769 | Permission to use, copy, modify, and/or distribute this software for any 770 | purpose with or without fee is hereby granted, provided that the above 771 | copyright notice and this permission notice appear in all copies. 772 | 773 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 774 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 775 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 776 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 777 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 778 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 779 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 780 | 781 | ## Glob Logo 782 | 783 | Glob's logo created by Tanya Brassie , licensed 784 | under a Creative Commons Attribution-ShareAlike 4.0 International License 785 | https://creativecommons.org/licenses/by-sa/4.0/ 786 | 787 | 788 | inflight 789 | ISC 790 | The ISC License 791 | 792 | Copyright (c) Isaac Z. Schlueter 793 | 794 | Permission to use, copy, modify, and/or distribute this software for any 795 | purpose with or without fee is hereby granted, provided that the above 796 | copyright notice and this permission notice appear in all copies. 797 | 798 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 799 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 800 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 801 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 802 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 803 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 804 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 805 | 806 | 807 | inherits 808 | ISC 809 | The ISC License 810 | 811 | Copyright (c) Isaac Z. Schlueter 812 | 813 | Permission to use, copy, modify, and/or distribute this software for any 814 | purpose with or without fee is hereby granted, provided that the above 815 | copyright notice and this permission notice appear in all copies. 816 | 817 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 818 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 819 | FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 820 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 821 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 822 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 823 | PERFORMANCE OF THIS SOFTWARE. 824 | 825 | 826 | 827 | lru-cache 828 | ISC 829 | The ISC License 830 | 831 | Copyright (c) Isaac Z. Schlueter and Contributors 832 | 833 | Permission to use, copy, modify, and/or distribute this software for any 834 | purpose with or without fee is hereby granted, provided that the above 835 | copyright notice and this permission notice appear in all copies. 836 | 837 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 838 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 839 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 840 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 841 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 842 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 843 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 844 | 845 | 846 | mime-db 847 | MIT 848 | (The MIT License) 849 | 850 | Copyright (c) 2014 Jonathan Ong 851 | Copyright (c) 2015-2022 Douglas Christopher Wilson 852 | 853 | Permission is hereby granted, free of charge, to any person obtaining 854 | a copy of this software and associated documentation files (the 855 | 'Software'), to deal in the Software without restriction, including 856 | without limitation the rights to use, copy, modify, merge, publish, 857 | distribute, sublicense, and/or sell copies of the Software, and to 858 | permit persons to whom the Software is furnished to do so, subject to 859 | the following conditions: 860 | 861 | The above copyright notice and this permission notice shall be 862 | included in all copies or substantial portions of the Software. 863 | 864 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 865 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 866 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 867 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 868 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 869 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 870 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 871 | 872 | 873 | mime-types 874 | MIT 875 | (The MIT License) 876 | 877 | Copyright (c) 2014 Jonathan Ong 878 | Copyright (c) 2015 Douglas Christopher Wilson 879 | 880 | Permission is hereby granted, free of charge, to any person obtaining 881 | a copy of this software and associated documentation files (the 882 | 'Software'), to deal in the Software without restriction, including 883 | without limitation the rights to use, copy, modify, merge, publish, 884 | distribute, sublicense, and/or sell copies of the Software, and to 885 | permit persons to whom the Software is furnished to do so, subject to 886 | the following conditions: 887 | 888 | The above copyright notice and this permission notice shall be 889 | included in all copies or substantial portions of the Software. 890 | 891 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 892 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 893 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 894 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 895 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 896 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 897 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 898 | 899 | 900 | minimatch 901 | ISC 902 | The ISC License 903 | 904 | Copyright (c) Isaac Z. Schlueter and Contributors 905 | 906 | Permission to use, copy, modify, and/or distribute this software for any 907 | purpose with or without fee is hereby granted, provided that the above 908 | copyright notice and this permission notice appear in all copies. 909 | 910 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 911 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 912 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 913 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 914 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 915 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 916 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 917 | 918 | 919 | node-fetch 920 | MIT 921 | The MIT License (MIT) 922 | 923 | Copyright (c) 2016 David Frank 924 | 925 | Permission is hereby granted, free of charge, to any person obtaining a copy 926 | of this software and associated documentation files (the "Software"), to deal 927 | in the Software without restriction, including without limitation the rights 928 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 929 | copies of the Software, and to permit persons to whom the Software is 930 | furnished to do so, subject to the following conditions: 931 | 932 | The above copyright notice and this permission notice shall be included in all 933 | copies or substantial portions of the Software. 934 | 935 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 936 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 937 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 938 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 939 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 940 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 941 | SOFTWARE. 942 | 943 | 944 | 945 | once 946 | ISC 947 | The ISC License 948 | 949 | Copyright (c) Isaac Z. Schlueter and Contributors 950 | 951 | Permission to use, copy, modify, and/or distribute this software for any 952 | purpose with or without fee is hereby granted, provided that the above 953 | copyright notice and this permission notice appear in all copies. 954 | 955 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 956 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 957 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 958 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 959 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 960 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 961 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 962 | 963 | 964 | path-is-absolute 965 | MIT 966 | The MIT License (MIT) 967 | 968 | Copyright (c) Sindre Sorhus (sindresorhus.com) 969 | 970 | Permission is hereby granted, free of charge, to any person obtaining a copy 971 | of this software and associated documentation files (the "Software"), to deal 972 | in the Software without restriction, including without limitation the rights 973 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 974 | copies of the Software, and to permit persons to whom the Software is 975 | furnished to do so, subject to the following conditions: 976 | 977 | The above copyright notice and this permission notice shall be included in 978 | all copies or substantial portions of the Software. 979 | 980 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 981 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 982 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 983 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 984 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 985 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 986 | THE SOFTWARE. 987 | 988 | 989 | rimraf 990 | ISC 991 | The ISC License 992 | 993 | Copyright (c) Isaac Z. Schlueter and Contributors 994 | 995 | Permission to use, copy, modify, and/or distribute this software for any 996 | purpose with or without fee is hereby granted, provided that the above 997 | copyright notice and this permission notice appear in all copies. 998 | 999 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1000 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1001 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1002 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1003 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1004 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1005 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1006 | 1007 | 1008 | sax 1009 | ISC 1010 | The ISC License 1011 | 1012 | Copyright (c) Isaac Z. Schlueter and Contributors 1013 | 1014 | Permission to use, copy, modify, and/or distribute this software for any 1015 | purpose with or without fee is hereby granted, provided that the above 1016 | copyright notice and this permission notice appear in all copies. 1017 | 1018 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1019 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1020 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1021 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1022 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1023 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1024 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1025 | 1026 | ==== 1027 | 1028 | `String.fromCodePoint` by Mathias Bynens used according to terms of MIT 1029 | License, as follows: 1030 | 1031 | Copyright Mathias Bynens 1032 | 1033 | Permission is hereby granted, free of charge, to any person obtaining 1034 | a copy of this software and associated documentation files (the 1035 | "Software"), to deal in the Software without restriction, including 1036 | without limitation the rights to use, copy, modify, merge, publish, 1037 | distribute, sublicense, and/or sell copies of the Software, and to 1038 | permit persons to whom the Software is furnished to do so, subject to 1039 | the following conditions: 1040 | 1041 | The above copyright notice and this permission notice shall be 1042 | included in all copies or substantial portions of the Software. 1043 | 1044 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 1045 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1046 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1047 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 1048 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 1049 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 1050 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1051 | 1052 | 1053 | semver 1054 | ISC 1055 | The ISC License 1056 | 1057 | Copyright (c) Isaac Z. Schlueter and Contributors 1058 | 1059 | Permission to use, copy, modify, and/or distribute this software for any 1060 | purpose with or without fee is hereby granted, provided that the above 1061 | copyright notice and this permission notice appear in all copies. 1062 | 1063 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1064 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1065 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1066 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1067 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1068 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1069 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1070 | 1071 | 1072 | tmp 1073 | MIT 1074 | The MIT License (MIT) 1075 | 1076 | Copyright (c) 2014 KARASZI István 1077 | 1078 | Permission is hereby granted, free of charge, to any person obtaining a copy 1079 | of this software and associated documentation files (the "Software"), to deal 1080 | in the Software without restriction, including without limitation the rights 1081 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1082 | copies of the Software, and to permit persons to whom the Software is 1083 | furnished to do so, subject to the following conditions: 1084 | 1085 | The above copyright notice and this permission notice shall be included in all 1086 | copies or substantial portions of the Software. 1087 | 1088 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1089 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1090 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1091 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1092 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1093 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 1094 | SOFTWARE. 1095 | 1096 | 1097 | tmp-promise 1098 | MIT 1099 | 1100 | tr46 1101 | MIT 1102 | 1103 | tslib 1104 | 0BSD 1105 | Copyright (c) Microsoft Corporation. 1106 | 1107 | Permission to use, copy, modify, and/or distribute this software for any 1108 | purpose with or without fee is hereby granted. 1109 | 1110 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 1111 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 1112 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 1113 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 1114 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 1115 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 1116 | PERFORMANCE OF THIS SOFTWARE. 1117 | 1118 | tunnel 1119 | MIT 1120 | The MIT License (MIT) 1121 | 1122 | Copyright (c) 2012 Koichi Kobayashi 1123 | 1124 | Permission is hereby granted, free of charge, to any person obtaining a copy 1125 | of this software and associated documentation files (the "Software"), to deal 1126 | in the Software without restriction, including without limitation the rights 1127 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1128 | copies of the Software, and to permit persons to whom the Software is 1129 | furnished to do so, subject to the following conditions: 1130 | 1131 | The above copyright notice and this permission notice shall be included in 1132 | all copies or substantial portions of the Software. 1133 | 1134 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1135 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1136 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1137 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1138 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1139 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 1140 | THE SOFTWARE. 1141 | 1142 | 1143 | uuid 1144 | MIT 1145 | The MIT License (MIT) 1146 | 1147 | Copyright (c) 2010-2020 Robert Kieffer and other contributors 1148 | 1149 | 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: 1150 | 1151 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 1152 | 1153 | 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. 1154 | 1155 | 1156 | webidl-conversions 1157 | BSD-2-Clause 1158 | # The BSD 2-Clause License 1159 | 1160 | Copyright (c) 2014, Domenic Denicola 1161 | All rights reserved. 1162 | 1163 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1164 | 1165 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 1166 | 1167 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 1168 | 1169 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1170 | 1171 | 1172 | whatwg-url 1173 | MIT 1174 | The MIT License (MIT) 1175 | 1176 | Copyright (c) 2015–2016 Sebastian Mayr 1177 | 1178 | Permission is hereby granted, free of charge, to any person obtaining a copy 1179 | of this software and associated documentation files (the "Software"), to deal 1180 | in the Software without restriction, including without limitation the rights 1181 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1182 | copies of the Software, and to permit persons to whom the Software is 1183 | furnished to do so, subject to the following conditions: 1184 | 1185 | The above copyright notice and this permission notice shall be included in 1186 | all copies or substantial portions of the Software. 1187 | 1188 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1189 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1190 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1191 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1192 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1193 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 1194 | THE SOFTWARE. 1195 | 1196 | 1197 | wrappy 1198 | ISC 1199 | The ISC License 1200 | 1201 | Copyright (c) Isaac Z. Schlueter and Contributors 1202 | 1203 | Permission to use, copy, modify, and/or distribute this software for any 1204 | purpose with or without fee is hereby granted, provided that the above 1205 | copyright notice and this permission notice appear in all copies. 1206 | 1207 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1208 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1209 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1210 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1211 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1212 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1213 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1214 | 1215 | 1216 | xml2js 1217 | MIT 1218 | Copyright 2010, 2011, 2012, 2013. All rights reserved. 1219 | 1220 | Permission is hereby granted, free of charge, to any person obtaining a copy 1221 | of this software and associated documentation files (the "Software"), to 1222 | deal in the Software without restriction, including without limitation the 1223 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 1224 | sell copies of the Software, and to permit persons to whom the Software is 1225 | furnished to do so, subject to the following conditions: 1226 | 1227 | The above copyright notice and this permission notice shall be included in 1228 | all copies or substantial portions of the Software. 1229 | 1230 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1231 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1232 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1233 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1234 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 1235 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 1236 | IN THE SOFTWARE. 1237 | 1238 | 1239 | xmlbuilder 1240 | MIT 1241 | The MIT License (MIT) 1242 | 1243 | Copyright (c) 2013 Ozgur Ozcitak 1244 | 1245 | Permission is hereby granted, free of charge, to any person obtaining a copy 1246 | of this software and associated documentation files (the "Software"), to deal 1247 | in the Software without restriction, including without limitation the rights 1248 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 1249 | copies of the Software, and to permit persons to whom the Software is 1250 | furnished to do so, subject to the following conditions: 1251 | 1252 | The above copyright notice and this permission notice shall be included in 1253 | all copies or substantial portions of the Software. 1254 | 1255 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1256 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1257 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1258 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1259 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 1260 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 1261 | THE SOFTWARE. 1262 | 1263 | 1264 | yallist 1265 | ISC 1266 | The ISC License 1267 | 1268 | Copyright (c) Isaac Z. Schlueter and Contributors 1269 | 1270 | Permission to use, copy, modify, and/or distribute this software for any 1271 | purpose with or without fee is hereby granted, provided that the above 1272 | copyright notice and this permission notice appear in all copies. 1273 | 1274 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1275 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1276 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1277 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1278 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1279 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 1280 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1281 | --------------------------------------------------------------------------------