├── .github └── workflows │ └── main.yml ├── .gitignore ├── LICENSE.txt ├── README.md ├── action.yml ├── dist └── index.js ├── package.json ├── projectFixtures └── simple │ ├── package.json │ ├── src │ └── index.ts │ ├── tsconfig.json │ └── yarn.lock ├── scripts └── packLibDTS.js ├── src ├── doctor.ts ├── gen │ └── libDTS.ts ├── index.ts ├── langSvc │ ├── createHost.ts │ ├── createService.ts │ └── index.ts ├── loadTSModule.ts ├── reporter │ ├── helper.ts │ └── index.ts ├── types │ ├── index.ts │ └── message.ts └── utils │ ├── diagnostic.ts │ └── index.ts ├── tsconfig.json ├── webpack.config.js └── yarn.lock /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: main 2 | 3 | on: [push] 4 | 5 | jobs: 6 | test: 7 | runs-on: ubuntu-latest 8 | strategy: 9 | matrix: 10 | node-version: [18.x] 11 | steps: 12 | - uses: actions/checkout@v1 13 | - name: Use Node.js ${{ matrix.node-version }} 14 | uses: actions/setup-node@v1 15 | with: 16 | node-version: ${{ matrix.node-version }} 17 | - name: Restore dependencies 18 | uses: actions/cache@v1 19 | with: 20 | path: node_modules 21 | key: ${{ runner.os }}-node-${{ hashFiles('yarn.lock') }} 22 | restore-keys: | 23 | ${{ runner.os }}-node- 24 | - name: Install dependencies 25 | run: yarn install --frozen-lockfile 26 | - name: Typecheck 27 | uses: ./ 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | *.log 4 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Shin Ando 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TypeScript Error Reporter Action ![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/andoshin11/typescript-error-reporter-action) ![GitHub](https://img.shields.io/github/license/andoshin11/typescript-error-reporter-action) 2 | 3 | Ensuring type safety is one of the most important responsibilities of modern software developers. 4 | 5 | This action uses the [TypeScript Compiler API](https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API) to run a static type check on your code and display the results of the check. 6 | 7 | ![TypeScript Error Reporter Action](https://user-images.githubusercontent.com/8381075/78413929-a40f0680-7654-11ea-8365-0ef72fb4d6b3.png) 8 | 9 | ## Example Configuration 10 | 11 | `.github/workflows/test.yml`: 12 | 13 | ```yaml 14 | name: Test 15 | 16 | on: [push, pull_request] 17 | 18 | jobs: 19 | test: 20 | runs-on: ubuntu-latest 21 | strategy: 22 | matrix: 23 | node-version: [13.x] 24 | steps: 25 | - uses: actions/checkout@v1 26 | - name: Use Node.js ${{ matrix.node-version }} 27 | uses: actions/setup-node@v1 28 | with: 29 | node-version: ${{ matrix.node-version }} 30 | - name: Install dependencies 31 | run: yarn install --frozen-lockfile 32 | - name: Typecheck 33 | uses: andoshin11/typescript-error-reporter-action@v1.0.2 34 | ``` 35 | 36 | `tsconfig.json`: 37 | 38 | ```json 39 | { 40 | "compilerOptions": { 41 | "target": "es5", 42 | "module": "commonjs", 43 | "strict": true, 44 | "skipLibCheck": true, 45 | "moduleResolution": "node", 46 | "types": ["node"], 47 | "lib": ["ES2017"] 48 | }, 49 | "include": ["src/**/*.ts"] 50 | } 51 | ``` 52 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'TypeScript Error Reporter' 2 | description: 'Report type check result on PR diff view.' 3 | author: 'andoshin11' 4 | inputs: 5 | workingDirectory: 6 | description: 'Path to run from. If not set, top level directory will be used.' 7 | required: false 8 | runs: 9 | using: 'node12' 10 | main: 'dist/index.js' 11 | branding: 12 | icon: 'check-circle' 13 | color: 'blue' 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-error-reporter-action", 3 | "version": "1.0.3", 4 | "main": "dist/index.js", 5 | "author": "andoshin11 ", 6 | "license": "MIT", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/andoshin11/typescript-error-reporter-action.git" 10 | }, 11 | "bugs": { 12 | "url": "https://github.com/andoshin11/typescript-error-reporter-action/issues" 13 | }, 14 | "homepage": "https://github.com/andoshin11/typescript-error-reporter-action#readme", 15 | "scripts": { 16 | "build": "tsc", 17 | "watch": "tsc -w", 18 | "bundle": "webpack", 19 | "test:type": "tsc --noEmit --incremental false", 20 | "pack:libDTS": "node scripts/packLibDTS.js" 21 | }, 22 | "devDependencies": { 23 | "@types/concat-stream": "^1.6.0", 24 | "@types/glob": "^7.1.1", 25 | "@types/node": "^13.7.7", 26 | "@types/yarnpkg__lockfile": "^1.1.3", 27 | "ts-loader": "9.4.2", 28 | "typescript": "^4.9.5", 29 | "webpack": "5.75.0", 30 | "webpack-cli": "5.0.1" 31 | }, 32 | "dependencies": { 33 | "@actions/core": "^1.10.0", 34 | "@yarnpkg/lockfile": "^1.1.0", 35 | "buffer-from": "1.1.2", 36 | "concat-stream": "^2.0.0", 37 | "fast-deep-equal": "3.1.3", 38 | "glob": "^7.1.6", 39 | "uri-js": "^4.4.1" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /projectFixtures/simple/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "test": "node ../../lib/bin/cli.js run", 8 | "test:check": "node ../../dist/index.js" 9 | }, 10 | "devDependencies": { 11 | "@types/node": "^13.9.0", 12 | "typescript": "^3.8.3" 13 | }, 14 | "dependencies": {} 15 | } 16 | -------------------------------------------------------------------------------- /projectFixtures/simple/src/index.ts: -------------------------------------------------------------------------------- 1 | // import * as https from 'https' <- this import statement will crash the compiler somehow :thinking_face: 2 | 3 | function say(input: 'fuga') { 4 | console.log(input) 5 | } 6 | 7 | // say('hello') 8 | 9 | const hoge = 'hoge' 10 | hoge = 'fuga' 11 | 12 | const fuga = 'fuga' 13 | fuga = 'hoge' 14 | -------------------------------------------------------------------------------- /projectFixtures/simple/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "target": "esnext", 5 | "module": "commonjs", 6 | "strict": true, 7 | "skipLibCheck": true, 8 | "types": ["node"], 9 | "typeRoots": ["./node_modules/@types"], 10 | "outDir": "lib" 11 | }, 12 | "include": ["src/**/*.ts"], 13 | "exclude": ["node_modules"] 14 | } 15 | -------------------------------------------------------------------------------- /projectFixtures/simple/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node@^13.9.0": 6 | version "13.9.0" 7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.0.tgz#5b6ee7a77faacddd7de719017d0bc12f52f81589" 8 | integrity sha512-0ARSQootUG1RljH2HncpsY2TJBfGQIKOOi7kxzUY6z54ePu/ZD+wJA8zI2Q6v8rol2qpG/rvqsReco8zNMPvhQ== 9 | 10 | typescript@^3.8.3: 11 | version "3.8.3" 12 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" 13 | integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== 14 | -------------------------------------------------------------------------------- /scripts/packLibDTS.js: -------------------------------------------------------------------------------- 1 | const glob = require('glob') 2 | const path = require('path') 3 | const fs = require('fs') 4 | 5 | const referenceRegExp = /\/\/\/ / 6 | 7 | /** 8 | * since we use CDN-hosted TS runtime, which is a bundled version, 9 | * we need to manually pre-bundle lib.*.d.ts files. 10 | */ 11 | async function main() { 12 | 13 | const currentDir = process.cwd() 14 | const libDTSFiles = glob.sync(path.resolve(currentDir, 'node_modules/typescript/lib/lib*.d.ts')) 15 | 16 | const libDTS = libDTSFiles.reduce((acc, ac) => { 17 | const libName = ac.replace(currentDir + '/node_modules/typescript/lib/', '') 18 | const content = fs.readFileSync(ac, 'utf8') 19 | const references = content.split('\n').map(l => l.match(referenceRegExp)).filter(Boolean).map(m => m[1]) 20 | 21 | acc[libName] = { 22 | content, 23 | references 24 | } 25 | return acc 26 | }, {}) 27 | 28 | fs.writeFileSync(path.resolve(currentDir, 'src/gen/libDTS.ts'), `export const libDTS: { [name: string]: { content: string; references: string[] } } = ${JSON.stringify(libDTS, null, '\t')}`) 29 | } 30 | 31 | main() 32 | -------------------------------------------------------------------------------- /src/doctor.ts: -------------------------------------------------------------------------------- 1 | import * as _ts from 'typescript' 2 | import * as fs from 'fs' 3 | import * as path from 'path' 4 | import { createHost, createService } from './langSvc' 5 | import { Reporter } from './reporter' 6 | import { FileEntry } from './types' 7 | import { getAllLibs, uniq } from './utils' 8 | 9 | export class Doctor { 10 | private service: _ts.LanguageService 11 | public reporter: Reporter 12 | 13 | scriptVersions: FileEntry = new Map() 14 | 15 | constructor(public fileNames: string[], private compilerOptions: _ts.CompilerOptions, ts: typeof _ts) { 16 | const host = createHost(fileNames, compilerOptions, this.scriptVersions, ts) 17 | this.service = createService(host, ts) 18 | this.reporter = new Reporter(ts) 19 | } 20 | 21 | static fromConfigFile(configPath: string, ts: typeof _ts): Doctor { 22 | const content = fs.readFileSync(configPath).toString(); 23 | const parsed = ts.parseJsonConfigFileContent( 24 | JSON.parse(content), 25 | ts.sys, 26 | path.dirname(configPath) 27 | ); 28 | const compilerOptions = parsed.options 29 | 30 | const defaultLibFileName = _ts.getDefaultLibFileName(compilerOptions) 31 | const libs = [defaultLibFileName, ...(compilerOptions.lib || [])] 32 | const allLibs = getAllLibs(uniq(libs)) 33 | 34 | /** 35 | * Note: somehow, `types` option inside tsconfig.json is ignored. 36 | */ 37 | const { typeRoots, types } = compilerOptions 38 | const _typeRoots = [path.resolve(path.dirname(configPath), './node_modules/@types'), path.resolve(path.dirname(configPath), './node_modules'), ...(typeRoots || [])] 39 | let typesFiles = (types || []).map(t => { 40 | for (const typeRoot of _typeRoots) { 41 | const modulePath = path.resolve(typeRoot, t) 42 | if (fs.existsSync(modulePath)) { 43 | const entrypoint = JSON.parse(fs.readFileSync(path.resolve(modulePath, 'package.json'), 'utf-8'))['types'] 44 | const entrypointPath = path.resolve(modulePath, entrypoint) 45 | if (fs.existsSync(entrypointPath)) { 46 | return entrypointPath 47 | } 48 | } 49 | } 50 | 51 | return null 52 | }).filter(Boolean) as string[] 53 | 54 | 55 | /** 56 | * Note: 57 | * 58 | * since we use CDN-hosted TS runtime, which is a bundled version, 59 | * we need to manually added lib.*.d.ts. 60 | */ 61 | const fileNames = [ 62 | ...parsed.fileNames, 63 | ...allLibs, 64 | ...typesFiles 65 | ] 66 | 67 | return new Doctor(fileNames, compilerOptions, ts) 68 | } 69 | 70 | getSemanticDiagnostics() { 71 | const { service } = this 72 | const result = service.getProgram()!.getSemanticDiagnostics() 73 | return [...result] 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path' 2 | import * as fs from 'fs' 3 | import { DiagnosticCategory } from 'typescript' 4 | import { getInput, setFailed } from '@actions/core' 5 | import * as YarnLockFile from '@yarnpkg/lockfile' 6 | import { Doctor } from './doctor' 7 | import { loadTSModule } from './loadTSModule' 8 | 9 | function parseTSVersion(currentDir: string) { 10 | const yarnLockFilePath = path.resolve(currentDir, 'yarn.lock') 11 | const packageLockFile = path.resolve(currentDir, 'package-lock.json') 12 | if (fs.existsSync(yarnLockFilePath)) { 13 | const content = fs.readFileSync(yarnLockFilePath, 'utf8') 14 | return parseTSVersionFromYarnLockFile(content) 15 | } else if (fs.existsSync(packageLockFile)) { 16 | const content = fs.readFileSync(packageLockFile, 'utf8') 17 | return parseTSVersionFromPackageLockFile(content) 18 | } else { 19 | throw new Error('no lock file found.') 20 | } 21 | } 22 | 23 | function parseTSVersionFromYarnLockFile(content: string) { 24 | const { type, object } = YarnLockFile.parse(content) 25 | if (type !== 'success') { 26 | throw new Error('failed to parse yarn.lock') 27 | } 28 | const packages = Object.keys(object) 29 | const _typescript = packages.filter(p => /^typescript@.*/.test(p)) 30 | if (!_typescript.length) { 31 | throw new Error('could not find typescript in yarn.lock') 32 | } 33 | const latestTSVersion = _typescript.map(v => object[v] && object[v]['version']).sort().reverse()[0] 34 | if (typeof latestTSVersion !== 'string') { 35 | throw new Error('could not par typescript version from yarn.lock') 36 | } 37 | return latestTSVersion 38 | } 39 | 40 | function parseTSVersionFromPackageLockFile(content: string) { 41 | const json = JSON.parse(content) 42 | const dependencies = json['dependencies'] || {} 43 | const _typescriptInfo = dependencies['typescript'] 44 | if (!_typescriptInfo) { 45 | throw new Error('could not find typescript in package-lock.json') 46 | } 47 | const tsVersion = _typescriptInfo['version'] 48 | if (typeof tsVersion !== 'string') { 49 | throw new Error('could not par typescript version from yarn.lock') 50 | } 51 | return tsVersion 52 | } 53 | 54 | async function main() { 55 | try { 56 | 57 | let currentDir = getInput('workingDirectory', { 58 | required: false, 59 | }) 60 | 61 | if (currentDir === '') { 62 | currentDir = process.cwd() 63 | } 64 | 65 | const configPath = path.resolve(currentDir, 'tsconfig.json') 66 | if (!fs.existsSync(configPath)) { 67 | throw new Error(`could not find tsconfig.json at: ${currentDir}`) 68 | } 69 | 70 | const tsVersion = parseTSVersion(currentDir) 71 | const remoteTS = await loadTSModule(tsVersion) 72 | 73 | const doctor = Doctor.fromConfigFile(configPath, remoteTS) 74 | const diagnostics = doctor.getSemanticDiagnostics() 75 | 76 | if (diagnostics) { 77 | doctor.reporter.reportDiagnostics(diagnostics) 78 | const errors = diagnostics.filter(d => d.category === DiagnosticCategory.Error) 79 | if (errors.length) { 80 | setFailed(`Found ${errors.length} errors!`) 81 | } 82 | } 83 | 84 | } catch (e: any) { 85 | setFailed(e) 86 | } 87 | } 88 | 89 | main() 90 | -------------------------------------------------------------------------------- /src/langSvc/createHost.ts: -------------------------------------------------------------------------------- 1 | import * as _ts from 'typescript' 2 | import * as fs from 'fs' 3 | import * as path from 'path' 4 | import { FileEntry } from '../types' 5 | import { libDTS } from '../gen/libDTS' 6 | 7 | const libDTSRegexp = /^lib\..*\.d\.ts$/ 8 | 9 | export const createHost = (fileNames: string[], compilerOptions: _ts.CompilerOptions, fileEntry: FileEntry, ts: typeof _ts): _ts.LanguageServiceHost => { 10 | const getCurrentVersion = (fileName: string) => fileEntry.has(fileName) ? fileEntry.get(fileName)!.version : 0 11 | const getTextFromSnapshot = (snapshot: _ts.IScriptSnapshot) => snapshot.getText(0, snapshot.getLength()) 12 | 13 | const readFile = (fileName: string, encoding: string | undefined = 'utf8') => { 14 | if (libDTSRegexp.test(fileName)) { 15 | return libDTS[fileName].content 16 | } 17 | 18 | fileName = path.normalize(fileName); 19 | try { 20 | return fs.readFileSync(fileName, encoding); 21 | } catch (e) { 22 | return undefined; 23 | } 24 | } 25 | 26 | const readFileWithFallback = ( 27 | filePath: string, 28 | encoding?: string | undefined 29 | ) => { 30 | return ts.sys.readFile(filePath, encoding) || readFile(filePath, encoding) 31 | } 32 | 33 | const moduleResolutionHost: _ts.ModuleResolutionHost = { 34 | fileExists: fileName => { 35 | return ts.sys.fileExists(fileName) || readFile(fileName) !== undefined 36 | }, 37 | readFile: fileName => { 38 | if (fileEntry.has(fileName)) { 39 | const snapshot = fileEntry.get(fileName)!.scriptSnapshot 40 | return getTextFromSnapshot(snapshot) 41 | } 42 | return readFileWithFallback(fileName) 43 | }, 44 | realpath: ts.sys.realpath, 45 | directoryExists: ts.sys.directoryExists, 46 | getCurrentDirectory: ts.sys.getCurrentDirectory, 47 | getDirectories: ts.sys.getDirectories 48 | } 49 | 50 | const host: _ts.LanguageServiceHost = { 51 | getScriptFileNames: () => fileNames, 52 | getScriptVersion: fileName => getCurrentVersion(fileName) + '', 53 | getScriptSnapshot: fileName => { 54 | if (fileEntry.has(fileName)) { 55 | return fileEntry.get(fileName)!.scriptSnapshot 56 | } else { 57 | const isLibDTS = libDTSRegexp.test(fileName) 58 | if (!isLibDTS && !fs.existsSync(fileName)) { 59 | return undefined 60 | } 61 | const content = isLibDTS ? libDTS[fileName].content : fs.readFileSync(fileName).toString() 62 | 63 | const scriptSnapshot = ts.ScriptSnapshot.fromString(content) 64 | fileEntry.set(fileName, { version: 0, scriptSnapshot }) 65 | return scriptSnapshot 66 | } 67 | }, 68 | getCurrentDirectory: () => process.cwd(), 69 | getCompilationSettings: () => compilerOptions, 70 | getDefaultLibFileName: options => ts.getDefaultLibFilePath(options), 71 | resolveModuleNames: (moduleNames, containingFile, _, __, options) => { 72 | const ret: (_ts.ResolvedModule | undefined)[] = moduleNames.map(name => { 73 | if (/\.vue$/.test(name)) { 74 | const resolved: _ts.ResolvedModule = { 75 | resolvedFileName: normalize(path.resolve(path.dirname(containingFile), name)) 76 | } 77 | return resolved 78 | } 79 | 80 | const { resolvedModule } = ts.resolveModuleName( 81 | name, 82 | containingFile, 83 | options, 84 | moduleResolutionHost 85 | ); 86 | return resolvedModule 87 | }); 88 | return ret; 89 | }, 90 | fileExists: moduleResolutionHost.fileExists, 91 | readFile: moduleResolutionHost.readFile, 92 | readDirectory: ts.sys.readDirectory, 93 | getDirectories: ts.sys.getDirectories, 94 | realpath: moduleResolutionHost.realpath 95 | } 96 | 97 | return host 98 | } 99 | 100 | // .ts suffix is needed since the compiler skips compile 101 | // if the file name seems to be not supported types 102 | function normalize (fileName: string): string { 103 | if (/\.vue$/.test(fileName)) { 104 | return fileName + '.ts' 105 | } 106 | return fileName 107 | } 108 | -------------------------------------------------------------------------------- /src/langSvc/createService.ts: -------------------------------------------------------------------------------- 1 | import * as _ts from 'typescript' 2 | 3 | export const createService = (host: _ts.LanguageServiceHost, ts: typeof _ts) => { 4 | return ts.createLanguageService(host, ts.createDocumentRegistry()) 5 | } 6 | -------------------------------------------------------------------------------- /src/langSvc/index.ts: -------------------------------------------------------------------------------- 1 | export * from './createHost' 2 | export * from './createService' 3 | -------------------------------------------------------------------------------- /src/loadTSModule.ts: -------------------------------------------------------------------------------- 1 | import * as https from 'https' 2 | const concat = require('concat-stream') 3 | 4 | type TSModule = typeof import('typescript') 5 | 6 | export const loadTSModule = async (version: string) => { 7 | let localTS: TSModule 8 | 9 | try { 10 | const CDNPath = `https://cdnjs.cloudflare.com/ajax/libs/typescript/${version}/typescript.min.js` 11 | const remoteScript = await fetchScript(CDNPath) 12 | localTS = _eval(remoteScript) 13 | console.log(`Loaded typescript@${localTS.version} from CDN.`); 14 | } catch (e) { 15 | localTS = require('typescript'); 16 | console.log(`Failed to load typescript from CDN. Using bundled typescript@${localTS.version}.`); 17 | } 18 | 19 | return localTS 20 | } 21 | 22 | async function fetchScript(url: string) { 23 | return new Promise((resolve, reject) => { 24 | try { 25 | https.get(url, function (res) { 26 | res.setEncoding('utf8') 27 | res.pipe(concat({ encoding: 'string' }, function (remoteSrc: string) { 28 | resolve(remoteSrc) 29 | })) 30 | }) 31 | } catch (e) { 32 | reject(e) 33 | } 34 | }) 35 | } 36 | 37 | function _eval(script: string): any { 38 | const _isEmpty = (o: object) => { 39 | return ((o == null) || (o instanceof Array && o.length == 0) || (typeof(o) == "object" && Object.keys(o).length == 0)) 40 | } 41 | 42 | const loadScript = (_script: string) => { 43 | const exports = {}; 44 | 45 | try { 46 | eval(_script); 47 | } catch(e){ 48 | throw new Error(`Exception evaluating remote code '${_script}'`); 49 | } 50 | 51 | if (!_isEmpty(exports) && _isEmpty(module.exports)) 52 | module.exports = exports; 53 | } 54 | 55 | const module = { 56 | exports: {} 57 | }; 58 | 59 | loadScript(script) 60 | 61 | return module.exports; 62 | } 63 | -------------------------------------------------------------------------------- /src/reporter/helper.ts: -------------------------------------------------------------------------------- 1 | import * as _ts from 'typescript' 2 | import { Message } from '../types' 3 | import { pos2location } from '../utils' 4 | 5 | const category2command = (category: _ts.DiagnosticCategory, ts: typeof _ts): 'error' | 'warning' | undefined => { 6 | switch (category) { 7 | case ts.DiagnosticCategory.Error: 8 | return 'error' 9 | case ts.DiagnosticCategory.Warning: 10 | return 'warning' 11 | default: 12 | return undefined 13 | } 14 | } 15 | 16 | const getProperties = (diagnostic: _ts.Diagnostic): Message['properties'] => { 17 | const file = diagnostic.file && diagnostic.file.fileName 18 | if (!file) return {} 19 | 20 | const start = diagnostic.start 21 | if (!start) return { file } 22 | 23 | const content = diagnostic.file!.getFullText() 24 | const { line, character } = pos2location(content, start) 25 | return { 26 | file, 27 | line: line + '', 28 | col: character + '' 29 | } 30 | } 31 | 32 | export const diagnostic2message = (diagnostic: _ts.Diagnostic, ts: typeof _ts): Message | undefined => { 33 | const command = category2command(diagnostic.category, ts) 34 | if (!command) return undefined 35 | 36 | const properties = getProperties(diagnostic) 37 | 38 | return { 39 | command, 40 | properties, 41 | message: ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n') 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/reporter/index.ts: -------------------------------------------------------------------------------- 1 | import * as _ts from 'typescript' 2 | import { issueCommand } from '@actions/core/lib/command' 3 | import { nonNullable } from '../utils' 4 | import { diagnostic2message } from './helper' 5 | 6 | export class Reporter { 7 | constructor(private ts: typeof _ts) {} 8 | 9 | reportDiagnostics(diagnostics: _ts.Diagnostic[]) { 10 | const ts = this.ts 11 | // Target only Error & Warning type 12 | const targetDiagnostics = diagnostics.filter(d => { 13 | return d.category === this.ts.DiagnosticCategory.Error || d.category === ts.DiagnosticCategory.Warning 14 | }) 15 | 16 | const messages = targetDiagnostics.map(d => diagnostic2message(d, ts)).filter(nonNullable) 17 | messages.forEach(({ command, properties, message }) => { 18 | issueCommand(command, properties, message) 19 | }) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | import * as ts from 'typescript' 2 | 3 | export * from './message' 4 | 5 | export type Location = { line: number; character: number } 6 | 7 | export type FileEntry = Map 8 | -------------------------------------------------------------------------------- /src/types/message.ts: -------------------------------------------------------------------------------- 1 | type CommandType = 'error' | 'warning' 2 | 3 | export type Message = { 4 | command: CommandType; 5 | properties: { 6 | file?: string; 7 | line?: string; 8 | col?: string; 9 | }; 10 | message: string 11 | } 12 | -------------------------------------------------------------------------------- /src/utils/diagnostic.ts: -------------------------------------------------------------------------------- 1 | import { Location } from '../types' 2 | 3 | export const pos2location = (content: string, pos: number): Location => { 4 | let l = 1, 5 | c = 0; 6 | for (let i = 0; i < content.length && i < pos; i++) { 7 | const cc = content[i]; 8 | if (cc === '\n') { 9 | c = 0; 10 | l++; 11 | } else { 12 | c++; 13 | } 14 | } 15 | return { line: l, character: c }; 16 | } 17 | 18 | export const toRelativePath = (str: string) => str.replace(process.cwd() + '/', '') 19 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './diagnostic' 2 | import { libDTS } from '../gen/libDTS' 3 | 4 | export function nonNullable(arg: T): arg is NonNullable { 5 | return arg !== undefined || arg !== null 6 | } 7 | 8 | export const uniq = (arr: T[]) => arr.filter((elm, i, self) => self.indexOf(elm) === i) 9 | 10 | export function getAllLibs(libs: string[]) { 11 | const allLibs: { [name: string]: boolean } = {} 12 | 13 | const libDTSRegexp = /^lib.*\.d\.ts$/ 14 | 15 | const resolveReferences = (libName: string) => { 16 | if (!libDTSRegexp.test(libName)) { 17 | libName = `lib.${libName}.d.ts` 18 | } 19 | 20 | allLibs[libName] = true 21 | const references = libDTS[libName].references 22 | if (!references.length) return 23 | references.forEach(resolveReferences) 24 | } 25 | 26 | libs.forEach(resolveReferences) 27 | 28 | return Object.keys(allLibs) 29 | } 30 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "commonjs", 5 | "strict": true, 6 | "types": ["node"], 7 | "lib": ["ES2017"], 8 | "incremental": true, 9 | "esModuleInterop": true, 10 | "moduleResolution": "node", 11 | "outDir": "lib" 12 | }, 13 | "include": ["src/**/*.ts"], 14 | "exclude": ["node_modules"] 15 | } 16 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | module.exports = { 4 | mode: 'production', 5 | entry: './src/index.ts', 6 | output: { 7 | path: path.resolve(__dirname, 'dist'), 8 | filename: 'index.js' 9 | }, 10 | target: 'node', 11 | module: { 12 | rules: [ 13 | { 14 | test: /\.tsx?$/, 15 | loader: 'ts-loader', 16 | options: { 17 | transpileOnly: true 18 | } 19 | } 20 | ] 21 | }, 22 | resolve: { 23 | extensions: [ '.ts', '.tsx', '.js' ] 24 | } 25 | } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@actions/core@^1.10.0": 6 | version "1.10.0" 7 | resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.0.tgz#44551c3c71163949a2f06e94d9ca2157a0cfac4f" 8 | integrity sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug== 9 | dependencies: 10 | "@actions/http-client" "^2.0.1" 11 | uuid "^8.3.2" 12 | 13 | "@actions/http-client@^2.0.1": 14 | version "2.0.1" 15 | resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.0.1.tgz#873f4ca98fe32f6839462a6f046332677322f99c" 16 | integrity sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw== 17 | dependencies: 18 | tunnel "^0.0.6" 19 | 20 | "@discoveryjs/json-ext@^0.5.0": 21 | version "0.5.7" 22 | resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" 23 | integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== 24 | 25 | "@jridgewell/gen-mapping@^0.3.0": 26 | version "0.3.2" 27 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 28 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 29 | dependencies: 30 | "@jridgewell/set-array" "^1.0.1" 31 | "@jridgewell/sourcemap-codec" "^1.4.10" 32 | "@jridgewell/trace-mapping" "^0.3.9" 33 | 34 | "@jridgewell/resolve-uri@3.1.0": 35 | version "3.1.0" 36 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 37 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 38 | 39 | "@jridgewell/set-array@^1.0.1": 40 | version "1.1.2" 41 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 42 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 43 | 44 | "@jridgewell/source-map@^0.3.2": 45 | version "0.3.2" 46 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" 47 | integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== 48 | dependencies: 49 | "@jridgewell/gen-mapping" "^0.3.0" 50 | "@jridgewell/trace-mapping" "^0.3.9" 51 | 52 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 53 | version "1.4.14" 54 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 55 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 56 | 57 | "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": 58 | version "0.3.17" 59 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 60 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 61 | dependencies: 62 | "@jridgewell/resolve-uri" "3.1.0" 63 | "@jridgewell/sourcemap-codec" "1.4.14" 64 | 65 | "@types/concat-stream@^1.6.0": 66 | version "1.6.0" 67 | resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.0.tgz#394dbe0bb5fee46b38d896735e8b68ef2390d00d" 68 | integrity sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0= 69 | dependencies: 70 | "@types/node" "*" 71 | 72 | "@types/eslint-scope@^3.7.3": 73 | version "3.7.4" 74 | resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" 75 | integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== 76 | dependencies: 77 | "@types/eslint" "*" 78 | "@types/estree" "*" 79 | 80 | "@types/eslint@*": 81 | version "8.21.0" 82 | resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.0.tgz#21724cfe12b96696feafab05829695d4d7bd7c48" 83 | integrity sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA== 84 | dependencies: 85 | "@types/estree" "*" 86 | "@types/json-schema" "*" 87 | 88 | "@types/estree@*": 89 | version "1.0.0" 90 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" 91 | integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== 92 | 93 | "@types/estree@^0.0.51": 94 | version "0.0.51" 95 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" 96 | integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== 97 | 98 | "@types/events@*": 99 | version "3.0.0" 100 | resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" 101 | integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== 102 | 103 | "@types/glob@^7.1.1": 104 | version "7.1.1" 105 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" 106 | integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== 107 | dependencies: 108 | "@types/events" "*" 109 | "@types/minimatch" "*" 110 | "@types/node" "*" 111 | 112 | "@types/json-schema@*", "@types/json-schema@^7.0.8": 113 | version "7.0.11" 114 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 115 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 116 | 117 | "@types/minimatch@*": 118 | version "3.0.3" 119 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" 120 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 121 | 122 | "@types/node@*": 123 | version "13.11.0" 124 | resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" 125 | integrity sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ== 126 | 127 | "@types/node@^13.7.7": 128 | version "13.7.7" 129 | resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.7.tgz#1628e6461ba8cc9b53196dfeaeec7b07fa6eea99" 130 | integrity sha512-Uo4chgKbnPNlxQwoFmYIwctkQVkMMmsAoGGU4JKwLuvBefF0pCq4FybNSnfkfRCpC7ZW7kttcC/TrRtAJsvGtg== 131 | 132 | "@types/yarnpkg__lockfile@^1.1.3": 133 | version "1.1.3" 134 | resolved "https://registry.yarnpkg.com/@types/yarnpkg__lockfile/-/yarnpkg__lockfile-1.1.3.tgz#38fb31d82ed07dea87df6bd565721d11979fd761" 135 | integrity sha512-mhdQq10tYpiNncMkg1vovCud5jQm+rWeRVz6fxjCJlY6uhDlAn9GnMSmBa2DQwqPf/jS5YR0K/xChDEh1jdOQg== 136 | 137 | "@webassemblyjs/ast@1.11.1": 138 | version "1.11.1" 139 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" 140 | integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== 141 | dependencies: 142 | "@webassemblyjs/helper-numbers" "1.11.1" 143 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 144 | 145 | "@webassemblyjs/floating-point-hex-parser@1.11.1": 146 | version "1.11.1" 147 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" 148 | integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== 149 | 150 | "@webassemblyjs/helper-api-error@1.11.1": 151 | version "1.11.1" 152 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" 153 | integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== 154 | 155 | "@webassemblyjs/helper-buffer@1.11.1": 156 | version "1.11.1" 157 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" 158 | integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== 159 | 160 | "@webassemblyjs/helper-numbers@1.11.1": 161 | version "1.11.1" 162 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" 163 | integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== 164 | dependencies: 165 | "@webassemblyjs/floating-point-hex-parser" "1.11.1" 166 | "@webassemblyjs/helper-api-error" "1.11.1" 167 | "@xtuc/long" "4.2.2" 168 | 169 | "@webassemblyjs/helper-wasm-bytecode@1.11.1": 170 | version "1.11.1" 171 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" 172 | integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== 173 | 174 | "@webassemblyjs/helper-wasm-section@1.11.1": 175 | version "1.11.1" 176 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" 177 | integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== 178 | dependencies: 179 | "@webassemblyjs/ast" "1.11.1" 180 | "@webassemblyjs/helper-buffer" "1.11.1" 181 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 182 | "@webassemblyjs/wasm-gen" "1.11.1" 183 | 184 | "@webassemblyjs/ieee754@1.11.1": 185 | version "1.11.1" 186 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" 187 | integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== 188 | dependencies: 189 | "@xtuc/ieee754" "^1.2.0" 190 | 191 | "@webassemblyjs/leb128@1.11.1": 192 | version "1.11.1" 193 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" 194 | integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== 195 | dependencies: 196 | "@xtuc/long" "4.2.2" 197 | 198 | "@webassemblyjs/utf8@1.11.1": 199 | version "1.11.1" 200 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" 201 | integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== 202 | 203 | "@webassemblyjs/wasm-edit@1.11.1": 204 | version "1.11.1" 205 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" 206 | integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== 207 | dependencies: 208 | "@webassemblyjs/ast" "1.11.1" 209 | "@webassemblyjs/helper-buffer" "1.11.1" 210 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 211 | "@webassemblyjs/helper-wasm-section" "1.11.1" 212 | "@webassemblyjs/wasm-gen" "1.11.1" 213 | "@webassemblyjs/wasm-opt" "1.11.1" 214 | "@webassemblyjs/wasm-parser" "1.11.1" 215 | "@webassemblyjs/wast-printer" "1.11.1" 216 | 217 | "@webassemblyjs/wasm-gen@1.11.1": 218 | version "1.11.1" 219 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" 220 | integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== 221 | dependencies: 222 | "@webassemblyjs/ast" "1.11.1" 223 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 224 | "@webassemblyjs/ieee754" "1.11.1" 225 | "@webassemblyjs/leb128" "1.11.1" 226 | "@webassemblyjs/utf8" "1.11.1" 227 | 228 | "@webassemblyjs/wasm-opt@1.11.1": 229 | version "1.11.1" 230 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" 231 | integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== 232 | dependencies: 233 | "@webassemblyjs/ast" "1.11.1" 234 | "@webassemblyjs/helper-buffer" "1.11.1" 235 | "@webassemblyjs/wasm-gen" "1.11.1" 236 | "@webassemblyjs/wasm-parser" "1.11.1" 237 | 238 | "@webassemblyjs/wasm-parser@1.11.1": 239 | version "1.11.1" 240 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" 241 | integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== 242 | dependencies: 243 | "@webassemblyjs/ast" "1.11.1" 244 | "@webassemblyjs/helper-api-error" "1.11.1" 245 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 246 | "@webassemblyjs/ieee754" "1.11.1" 247 | "@webassemblyjs/leb128" "1.11.1" 248 | "@webassemblyjs/utf8" "1.11.1" 249 | 250 | "@webassemblyjs/wast-printer@1.11.1": 251 | version "1.11.1" 252 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" 253 | integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== 254 | dependencies: 255 | "@webassemblyjs/ast" "1.11.1" 256 | "@xtuc/long" "4.2.2" 257 | 258 | "@webpack-cli/configtest@^2.0.1": 259 | version "2.0.1" 260 | resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f" 261 | integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A== 262 | 263 | "@webpack-cli/info@^2.0.1": 264 | version "2.0.1" 265 | resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0" 266 | integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA== 267 | 268 | "@webpack-cli/serve@^2.0.1": 269 | version "2.0.1" 270 | resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8" 271 | integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw== 272 | 273 | "@xtuc/ieee754@^1.2.0": 274 | version "1.2.0" 275 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" 276 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== 277 | 278 | "@xtuc/long@4.2.2": 279 | version "4.2.2" 280 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" 281 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== 282 | 283 | "@yarnpkg/lockfile@^1.1.0": 284 | version "1.1.0" 285 | resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" 286 | integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== 287 | 288 | acorn-import-assertions@^1.7.6: 289 | version "1.8.0" 290 | resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" 291 | integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== 292 | 293 | acorn@^8.5.0, acorn@^8.7.1: 294 | version "8.8.2" 295 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 296 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 297 | 298 | ajv-keywords@^3.5.2: 299 | version "3.5.2" 300 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" 301 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== 302 | 303 | ajv@^6.12.5: 304 | version "6.12.6" 305 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 306 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 307 | dependencies: 308 | fast-deep-equal "^3.1.1" 309 | fast-json-stable-stringify "^2.0.0" 310 | json-schema-traverse "^0.4.1" 311 | uri-js "^4.2.2" 312 | 313 | ansi-styles@^4.1.0: 314 | version "4.3.0" 315 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 316 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 317 | dependencies: 318 | color-convert "^2.0.1" 319 | 320 | balanced-match@^1.0.0: 321 | version "1.0.0" 322 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 323 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 324 | 325 | brace-expansion@^1.1.7: 326 | version "1.1.11" 327 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 328 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 329 | dependencies: 330 | balanced-match "^1.0.0" 331 | concat-map "0.0.1" 332 | 333 | braces@^3.0.1: 334 | version "3.0.2" 335 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 336 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 337 | dependencies: 338 | fill-range "^7.0.1" 339 | 340 | browserslist@^4.14.5: 341 | version "4.21.5" 342 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" 343 | integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== 344 | dependencies: 345 | caniuse-lite "^1.0.30001449" 346 | electron-to-chromium "^1.4.284" 347 | node-releases "^2.0.8" 348 | update-browserslist-db "^1.0.10" 349 | 350 | buffer-from@1.1.2: 351 | version "1.1.2" 352 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 353 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 354 | 355 | buffer-from@^1.0.0: 356 | version "1.1.1" 357 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 358 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 359 | 360 | caniuse-lite@^1.0.30001449: 361 | version "1.0.30001450" 362 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001450.tgz#022225b91200589196b814b51b1bbe45144cf74f" 363 | integrity sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew== 364 | 365 | chalk@^4.1.0: 366 | version "4.1.2" 367 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 368 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 369 | dependencies: 370 | ansi-styles "^4.1.0" 371 | supports-color "^7.1.0" 372 | 373 | chrome-trace-event@^1.0.2: 374 | version "1.0.2" 375 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" 376 | integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== 377 | dependencies: 378 | tslib "^1.9.0" 379 | 380 | clone-deep@^4.0.1: 381 | version "4.0.1" 382 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" 383 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== 384 | dependencies: 385 | is-plain-object "^2.0.4" 386 | kind-of "^6.0.2" 387 | shallow-clone "^3.0.0" 388 | 389 | color-convert@^2.0.1: 390 | version "2.0.1" 391 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 392 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 393 | dependencies: 394 | color-name "~1.1.4" 395 | 396 | color-name@~1.1.4: 397 | version "1.1.4" 398 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 399 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 400 | 401 | colorette@^2.0.14: 402 | version "2.0.19" 403 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" 404 | integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== 405 | 406 | commander@^2.20.0: 407 | version "2.20.3" 408 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 409 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 410 | 411 | commander@^9.4.1: 412 | version "9.5.0" 413 | resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" 414 | integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== 415 | 416 | concat-map@0.0.1: 417 | version "0.0.1" 418 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 419 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 420 | 421 | concat-stream@^2.0.0: 422 | version "2.0.0" 423 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" 424 | integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== 425 | dependencies: 426 | buffer-from "^1.0.0" 427 | inherits "^2.0.3" 428 | readable-stream "^3.0.2" 429 | typedarray "^0.0.6" 430 | 431 | cross-spawn@^7.0.3: 432 | version "7.0.3" 433 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 434 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 435 | dependencies: 436 | path-key "^3.1.0" 437 | shebang-command "^2.0.0" 438 | which "^2.0.1" 439 | 440 | electron-to-chromium@^1.4.284: 441 | version "1.4.286" 442 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.286.tgz#0e039de59135f44ab9a8ec9025e53a9135eba11f" 443 | integrity sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ== 444 | 445 | enhanced-resolve@^5.0.0, enhanced-resolve@^5.10.0: 446 | version "5.12.0" 447 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" 448 | integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== 449 | dependencies: 450 | graceful-fs "^4.2.4" 451 | tapable "^2.2.0" 452 | 453 | envinfo@^7.7.3: 454 | version "7.8.1" 455 | resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" 456 | integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== 457 | 458 | es-module-lexer@^0.9.0: 459 | version "0.9.3" 460 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" 461 | integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== 462 | 463 | escalade@^3.1.1: 464 | version "3.1.1" 465 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 466 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 467 | 468 | eslint-scope@5.1.1: 469 | version "5.1.1" 470 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 471 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 472 | dependencies: 473 | esrecurse "^4.3.0" 474 | estraverse "^4.1.1" 475 | 476 | esrecurse@^4.3.0: 477 | version "4.3.0" 478 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 479 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 480 | dependencies: 481 | estraverse "^5.2.0" 482 | 483 | estraverse@^4.1.1: 484 | version "4.3.0" 485 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 486 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 487 | 488 | estraverse@^5.2.0: 489 | version "5.3.0" 490 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 491 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 492 | 493 | events@^3.2.0: 494 | version "3.3.0" 495 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 496 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 497 | 498 | fast-deep-equal@3.1.3: 499 | version "3.1.3" 500 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 501 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 502 | 503 | fast-deep-equal@^3.1.1: 504 | version "3.1.1" 505 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" 506 | integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== 507 | 508 | fast-json-stable-stringify@^2.0.0: 509 | version "2.1.0" 510 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 511 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 512 | 513 | fastest-levenshtein@^1.0.12: 514 | version "1.0.16" 515 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" 516 | integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== 517 | 518 | fill-range@^7.0.1: 519 | version "7.0.1" 520 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 521 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 522 | dependencies: 523 | to-regex-range "^5.0.1" 524 | 525 | find-up@^4.0.0: 526 | version "4.1.0" 527 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 528 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 529 | dependencies: 530 | locate-path "^5.0.0" 531 | path-exists "^4.0.0" 532 | 533 | fs.realpath@^1.0.0: 534 | version "1.0.0" 535 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 536 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 537 | 538 | function-bind@^1.1.1: 539 | version "1.1.1" 540 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 541 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 542 | 543 | glob-to-regexp@^0.4.1: 544 | version "0.4.1" 545 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" 546 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 547 | 548 | glob@^7.1.6: 549 | version "7.1.6" 550 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 551 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 552 | dependencies: 553 | fs.realpath "^1.0.0" 554 | inflight "^1.0.4" 555 | inherits "2" 556 | minimatch "^3.0.4" 557 | once "^1.3.0" 558 | path-is-absolute "^1.0.0" 559 | 560 | graceful-fs@^4.1.2: 561 | version "4.2.3" 562 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" 563 | integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== 564 | 565 | graceful-fs@^4.2.4, graceful-fs@^4.2.9: 566 | version "4.2.10" 567 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 568 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 569 | 570 | has-flag@^4.0.0: 571 | version "4.0.0" 572 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 573 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 574 | 575 | has@^1.0.3: 576 | version "1.0.3" 577 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 578 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 579 | dependencies: 580 | function-bind "^1.1.1" 581 | 582 | import-local@^3.0.2: 583 | version "3.1.0" 584 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 585 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 586 | dependencies: 587 | pkg-dir "^4.2.0" 588 | resolve-cwd "^3.0.0" 589 | 590 | inflight@^1.0.4: 591 | version "1.0.6" 592 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 593 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 594 | dependencies: 595 | once "^1.3.0" 596 | wrappy "1" 597 | 598 | inherits@2, inherits@^2.0.3: 599 | version "2.0.4" 600 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 601 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 602 | 603 | interpret@^3.1.1: 604 | version "3.1.1" 605 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" 606 | integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== 607 | 608 | is-core-module@^2.9.0: 609 | version "2.11.0" 610 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 611 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 612 | dependencies: 613 | has "^1.0.3" 614 | 615 | is-number@^7.0.0: 616 | version "7.0.0" 617 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 618 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 619 | 620 | is-plain-object@^2.0.4: 621 | version "2.0.4" 622 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 623 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 624 | dependencies: 625 | isobject "^3.0.1" 626 | 627 | isexe@^2.0.0: 628 | version "2.0.0" 629 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 630 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 631 | 632 | isobject@^3.0.1: 633 | version "3.0.1" 634 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 635 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 636 | 637 | jest-worker@^27.4.5: 638 | version "27.5.1" 639 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" 640 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== 641 | dependencies: 642 | "@types/node" "*" 643 | merge-stream "^2.0.0" 644 | supports-color "^8.0.0" 645 | 646 | json-parse-even-better-errors@^2.3.1: 647 | version "2.3.1" 648 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 649 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 650 | 651 | json-schema-traverse@^0.4.1: 652 | version "0.4.1" 653 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 654 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 655 | 656 | kind-of@^6.0.2: 657 | version "6.0.3" 658 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 659 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 660 | 661 | loader-runner@^4.2.0: 662 | version "4.3.0" 663 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" 664 | integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== 665 | 666 | locate-path@^5.0.0: 667 | version "5.0.0" 668 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 669 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 670 | dependencies: 671 | p-locate "^4.1.0" 672 | 673 | lru-cache@^6.0.0: 674 | version "6.0.0" 675 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 676 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 677 | dependencies: 678 | yallist "^4.0.0" 679 | 680 | merge-stream@^2.0.0: 681 | version "2.0.0" 682 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 683 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 684 | 685 | micromatch@^4.0.0: 686 | version "4.0.2" 687 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 688 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 689 | dependencies: 690 | braces "^3.0.1" 691 | picomatch "^2.0.5" 692 | 693 | mime-db@1.52.0: 694 | version "1.52.0" 695 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 696 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 697 | 698 | mime-types@^2.1.27: 699 | version "2.1.35" 700 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 701 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 702 | dependencies: 703 | mime-db "1.52.0" 704 | 705 | minimatch@^3.0.4: 706 | version "3.0.4" 707 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 708 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 709 | dependencies: 710 | brace-expansion "^1.1.7" 711 | 712 | neo-async@^2.6.2: 713 | version "2.6.2" 714 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" 715 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 716 | 717 | node-releases@^2.0.8: 718 | version "2.0.9" 719 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.9.tgz#fe66405285382b0c4ac6bcfbfbe7e8a510650b4d" 720 | integrity sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA== 721 | 722 | once@^1.3.0: 723 | version "1.4.0" 724 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 725 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 726 | dependencies: 727 | wrappy "1" 728 | 729 | p-limit@^2.2.0: 730 | version "2.3.0" 731 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 732 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 733 | dependencies: 734 | p-try "^2.0.0" 735 | 736 | p-locate@^4.1.0: 737 | version "4.1.0" 738 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 739 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 740 | dependencies: 741 | p-limit "^2.2.0" 742 | 743 | p-try@^2.0.0: 744 | version "2.2.0" 745 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 746 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 747 | 748 | path-exists@^4.0.0: 749 | version "4.0.0" 750 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 751 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 752 | 753 | path-is-absolute@^1.0.0: 754 | version "1.0.1" 755 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 756 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 757 | 758 | path-key@^3.1.0: 759 | version "3.1.1" 760 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 761 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 762 | 763 | path-parse@^1.0.7: 764 | version "1.0.7" 765 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 766 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 767 | 768 | picocolors@^1.0.0: 769 | version "1.0.0" 770 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 771 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 772 | 773 | picomatch@^2.0.5: 774 | version "2.2.2" 775 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 776 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 777 | 778 | pkg-dir@^4.2.0: 779 | version "4.2.0" 780 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 781 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 782 | dependencies: 783 | find-up "^4.0.0" 784 | 785 | punycode@^2.1.0: 786 | version "2.1.1" 787 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 788 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 789 | 790 | randombytes@^2.1.0: 791 | version "2.1.0" 792 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 793 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 794 | dependencies: 795 | safe-buffer "^5.1.0" 796 | 797 | readable-stream@^3.0.2: 798 | version "3.6.0" 799 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 800 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 801 | dependencies: 802 | inherits "^2.0.3" 803 | string_decoder "^1.1.1" 804 | util-deprecate "^1.0.1" 805 | 806 | rechoir@^0.8.0: 807 | version "0.8.0" 808 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" 809 | integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== 810 | dependencies: 811 | resolve "^1.20.0" 812 | 813 | resolve-cwd@^3.0.0: 814 | version "3.0.0" 815 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 816 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 817 | dependencies: 818 | resolve-from "^5.0.0" 819 | 820 | resolve-from@^5.0.0: 821 | version "5.0.0" 822 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 823 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 824 | 825 | resolve@^1.20.0: 826 | version "1.22.1" 827 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 828 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 829 | dependencies: 830 | is-core-module "^2.9.0" 831 | path-parse "^1.0.7" 832 | supports-preserve-symlinks-flag "^1.0.0" 833 | 834 | safe-buffer@^5.1.0, safe-buffer@~5.2.0: 835 | version "5.2.0" 836 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 837 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 838 | 839 | schema-utils@^3.1.0, schema-utils@^3.1.1: 840 | version "3.1.1" 841 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" 842 | integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== 843 | dependencies: 844 | "@types/json-schema" "^7.0.8" 845 | ajv "^6.12.5" 846 | ajv-keywords "^3.5.2" 847 | 848 | semver@^7.3.4: 849 | version "7.3.8" 850 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 851 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 852 | dependencies: 853 | lru-cache "^6.0.0" 854 | 855 | serialize-javascript@^6.0.0: 856 | version "6.0.1" 857 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" 858 | integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== 859 | dependencies: 860 | randombytes "^2.1.0" 861 | 862 | shallow-clone@^3.0.0: 863 | version "3.0.1" 864 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" 865 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== 866 | dependencies: 867 | kind-of "^6.0.2" 868 | 869 | shebang-command@^2.0.0: 870 | version "2.0.0" 871 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 872 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 873 | dependencies: 874 | shebang-regex "^3.0.0" 875 | 876 | shebang-regex@^3.0.0: 877 | version "3.0.0" 878 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 879 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 880 | 881 | source-map-support@~0.5.20: 882 | version "0.5.21" 883 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 884 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 885 | dependencies: 886 | buffer-from "^1.0.0" 887 | source-map "^0.6.0" 888 | 889 | source-map@^0.6.0: 890 | version "0.6.1" 891 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 892 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 893 | 894 | string_decoder@^1.1.1: 895 | version "1.3.0" 896 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 897 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 898 | dependencies: 899 | safe-buffer "~5.2.0" 900 | 901 | supports-color@^7.1.0: 902 | version "7.2.0" 903 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 904 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 905 | dependencies: 906 | has-flag "^4.0.0" 907 | 908 | supports-color@^8.0.0: 909 | version "8.1.1" 910 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 911 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 912 | dependencies: 913 | has-flag "^4.0.0" 914 | 915 | supports-preserve-symlinks-flag@^1.0.0: 916 | version "1.0.0" 917 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 918 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 919 | 920 | tapable@^2.1.1, tapable@^2.2.0: 921 | version "2.2.1" 922 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 923 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 924 | 925 | terser-webpack-plugin@^5.1.3: 926 | version "5.3.6" 927 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" 928 | integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== 929 | dependencies: 930 | "@jridgewell/trace-mapping" "^0.3.14" 931 | jest-worker "^27.4.5" 932 | schema-utils "^3.1.1" 933 | serialize-javascript "^6.0.0" 934 | terser "^5.14.1" 935 | 936 | terser@^5.14.1: 937 | version "5.16.3" 938 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.3.tgz#3266017a9b682edfe019b8ecddd2abaae7b39c6b" 939 | integrity sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q== 940 | dependencies: 941 | "@jridgewell/source-map" "^0.3.2" 942 | acorn "^8.5.0" 943 | commander "^2.20.0" 944 | source-map-support "~0.5.20" 945 | 946 | to-regex-range@^5.0.1: 947 | version "5.0.1" 948 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 949 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 950 | dependencies: 951 | is-number "^7.0.0" 952 | 953 | ts-loader@9.4.2: 954 | version "9.4.2" 955 | resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.2.tgz#80a45eee92dd5170b900b3d00abcfa14949aeb78" 956 | integrity sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA== 957 | dependencies: 958 | chalk "^4.1.0" 959 | enhanced-resolve "^5.0.0" 960 | micromatch "^4.0.0" 961 | semver "^7.3.4" 962 | 963 | tslib@^1.9.0: 964 | version "1.11.1" 965 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" 966 | integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== 967 | 968 | tunnel@^0.0.6: 969 | version "0.0.6" 970 | resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" 971 | integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== 972 | 973 | typedarray@^0.0.6: 974 | version "0.0.6" 975 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 976 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 977 | 978 | typescript@^4.9.5: 979 | version "4.9.5" 980 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" 981 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 982 | 983 | update-browserslist-db@^1.0.10: 984 | version "1.0.10" 985 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 986 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 987 | dependencies: 988 | escalade "^3.1.1" 989 | picocolors "^1.0.0" 990 | 991 | uri-js@^4.2.2: 992 | version "4.2.2" 993 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 994 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 995 | dependencies: 996 | punycode "^2.1.0" 997 | 998 | uri-js@^4.4.1: 999 | version "4.4.1" 1000 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1001 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1002 | dependencies: 1003 | punycode "^2.1.0" 1004 | 1005 | util-deprecate@^1.0.1: 1006 | version "1.0.2" 1007 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1008 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1009 | 1010 | uuid@^8.3.2: 1011 | version "8.3.2" 1012 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 1013 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1014 | 1015 | watchpack@^2.4.0: 1016 | version "2.4.0" 1017 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" 1018 | integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== 1019 | dependencies: 1020 | glob-to-regexp "^0.4.1" 1021 | graceful-fs "^4.1.2" 1022 | 1023 | webpack-cli@5.0.1: 1024 | version "5.0.1" 1025 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.1.tgz#95fc0495ac4065e9423a722dec9175560b6f2d9a" 1026 | integrity sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A== 1027 | dependencies: 1028 | "@discoveryjs/json-ext" "^0.5.0" 1029 | "@webpack-cli/configtest" "^2.0.1" 1030 | "@webpack-cli/info" "^2.0.1" 1031 | "@webpack-cli/serve" "^2.0.1" 1032 | colorette "^2.0.14" 1033 | commander "^9.4.1" 1034 | cross-spawn "^7.0.3" 1035 | envinfo "^7.7.3" 1036 | fastest-levenshtein "^1.0.12" 1037 | import-local "^3.0.2" 1038 | interpret "^3.1.1" 1039 | rechoir "^0.8.0" 1040 | webpack-merge "^5.7.3" 1041 | 1042 | webpack-merge@^5.7.3: 1043 | version "5.8.0" 1044 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" 1045 | integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== 1046 | dependencies: 1047 | clone-deep "^4.0.1" 1048 | wildcard "^2.0.0" 1049 | 1050 | webpack-sources@^3.2.3: 1051 | version "3.2.3" 1052 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" 1053 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== 1054 | 1055 | webpack@5.75.0: 1056 | version "5.75.0" 1057 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" 1058 | integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== 1059 | dependencies: 1060 | "@types/eslint-scope" "^3.7.3" 1061 | "@types/estree" "^0.0.51" 1062 | "@webassemblyjs/ast" "1.11.1" 1063 | "@webassemblyjs/wasm-edit" "1.11.1" 1064 | "@webassemblyjs/wasm-parser" "1.11.1" 1065 | acorn "^8.7.1" 1066 | acorn-import-assertions "^1.7.6" 1067 | browserslist "^4.14.5" 1068 | chrome-trace-event "^1.0.2" 1069 | enhanced-resolve "^5.10.0" 1070 | es-module-lexer "^0.9.0" 1071 | eslint-scope "5.1.1" 1072 | events "^3.2.0" 1073 | glob-to-regexp "^0.4.1" 1074 | graceful-fs "^4.2.9" 1075 | json-parse-even-better-errors "^2.3.1" 1076 | loader-runner "^4.2.0" 1077 | mime-types "^2.1.27" 1078 | neo-async "^2.6.2" 1079 | schema-utils "^3.1.0" 1080 | tapable "^2.1.1" 1081 | terser-webpack-plugin "^5.1.3" 1082 | watchpack "^2.4.0" 1083 | webpack-sources "^3.2.3" 1084 | 1085 | which@^2.0.1: 1086 | version "2.0.2" 1087 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1088 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1089 | dependencies: 1090 | isexe "^2.0.0" 1091 | 1092 | wildcard@^2.0.0: 1093 | version "2.0.0" 1094 | resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" 1095 | integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== 1096 | 1097 | wrappy@1: 1098 | version "1.0.2" 1099 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1100 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1101 | 1102 | yallist@^4.0.0: 1103 | version "4.0.0" 1104 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1105 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1106 | --------------------------------------------------------------------------------