├── .githooks └── pre-commit ├── .mocharc.json ├── src ├── browser.ts ├── index.ts ├── KoreFileAdaptor.ts ├── korefile.ts ├── fsAdaptor.ts └── GitHubAdaptor.ts ├── test ├── tsconfig.json ├── fsAdaptor.test.ts └── GitHubAdapter.test.ts ├── .github └── workflows │ └── test.yml ├── tsconfig.json ├── LICENSE ├── package.json ├── README.md ├── .gitignore └── yarn.lock /.githooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | npx --no-install lint-staged 3 | -------------------------------------------------------------------------------- /.mocharc.json: -------------------------------------------------------------------------------- 1 | { 2 | "timeout": "20000", 3 | "require": [ 4 | "ts-node-test-register" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /src/browser.ts: -------------------------------------------------------------------------------- 1 | export { createKoreFile, KoreFile } from "./korefile"; 2 | export { KoreFileAdaptor } from "./KoreFileAdaptor"; 3 | export { createGitHubAdaptor, GitHubAdaptorOptions } from "./GitHubAdaptor"; 4 | -------------------------------------------------------------------------------- /test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "declaration": false, 5 | "noEmit": true 6 | }, 7 | "include": [ 8 | "../src/**/*", 9 | "./**/*" 10 | ] 11 | } -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { createKoreFile, KoreFile } from "./korefile"; 2 | export { KoreFileAdaptor } from "./KoreFileAdaptor"; 3 | export { createFsAdaptor } from "./fsAdaptor"; 4 | export { createGitHubAdaptor, GitHubAdaptorOptions } from "./GitHubAdaptor"; 5 | -------------------------------------------------------------------------------- /src/KoreFileAdaptor.ts: -------------------------------------------------------------------------------- 1 | export interface KoreFileAdaptor { 2 | readFile(filePath: string): Promise; 3 | 4 | writeFile(filePath: string, content: string | ArrayBuffer): Promise; 5 | 6 | writeFiles(files: { path: string; content: string | ArrayBuffer }[]): Promise; 7 | 8 | deleteFile(filePath: string): Promise; 9 | } 10 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | on: [push, pull_request] 3 | env: 4 | CI: true 5 | jobs: 6 | test: 7 | name: "Test on Node.js ${{ matrix.node-version }}" 8 | runs-on: ubuntu-latest 9 | strategy: 10 | matrix: 11 | node-version: [14] 12 | steps: 13 | - name: checkout 14 | uses: actions/checkout@v2 15 | - name: setup Node.js ${{ matrix.node-version }} 16 | uses: actions/setup-node@v2 17 | with: 18 | node-version: ${{ matrix.node-version }} 19 | - name: Install 20 | run: yarn install 21 | - name: Test 22 | run: yarn test 23 | env: 24 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 25 | -------------------------------------------------------------------------------- /test/fsAdaptor.test.ts: -------------------------------------------------------------------------------- 1 | import { createKoreFile, createFsAdaptor } from "../src/index"; 2 | import * as path from "path"; 3 | import * as fs from "fs"; 4 | import * as assert from "assert"; 5 | 6 | const testFilePath = path.join(__dirname, "/file.test"); 7 | describe("fsAdaptor", function () { 8 | afterEach(() => { 9 | try { 10 | fs.unlinkSync(testFilePath); 11 | } catch {} 12 | }); 13 | it("write -> read -> delete", async () => { 14 | const koreFile = createKoreFile({ 15 | adaptor: createFsAdaptor() 16 | }); 17 | const input = "content"; 18 | await koreFile.writeFile(testFilePath, input); 19 | const content = await koreFile.readFile(testFilePath); 20 | assert.strictEqual(content, input); 21 | await koreFile.deleteFile(testFilePath); 22 | assert.ok(!fs.existsSync(testFilePath)); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /test/GitHubAdapter.test.ts: -------------------------------------------------------------------------------- 1 | import { createKoreFile, createGitHubAdaptor } from "../src/index"; 2 | import * as assert from "assert"; 3 | 4 | const testFilePath = "dir/file.test." + Date.now(); 5 | const it = process.env.GH_TOKEN ? global.it : global.it.skip; 6 | describe("GitHubAdapter", function () { 7 | it("write -> read -> delete", async () => { 8 | const koreFile = createKoreFile({ 9 | adaptor: createGitHubAdaptor({ 10 | owner: "azu", 11 | repo: "korefile", 12 | ref: "heads/test", 13 | token: process.env.GH_TOKEN 14 | }) 15 | }); 16 | const input = "content"; 17 | await koreFile.writeFile(testFilePath, input); 18 | const content = await koreFile.readFile(testFilePath); 19 | assert.strictEqual(content, input); 20 | await koreFile.deleteFile(testFilePath); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "esModuleInterop": true, 7 | "newLine": "LF", 8 | "outDir": "./lib/", 9 | "target": "es5", 10 | "sourceMap": true, 11 | "declaration": true, 12 | "jsx": "preserve", 13 | "lib": [ 14 | "es2018", 15 | "dom" 16 | ], 17 | /* Strict Type-Checking Options */ 18 | "strict": true, 19 | /* Additional Checks */ 20 | /* Report errors on unused locals. */ 21 | "noUnusedLocals": true, 22 | /* Report errors on unused parameters. */ 23 | "noUnusedParameters": true, 24 | /* Report error when not all code paths in function return a value. */ 25 | "noImplicitReturns": true, 26 | /* Report errors for fallthrough cases in switch statement. */ 27 | "noFallthroughCasesInSwitch": true 28 | }, 29 | "include": [ 30 | "src/**/*" 31 | ], 32 | "exclude": [ 33 | ".git", 34 | "node_modules" 35 | ] 36 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 azu 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /src/korefile.ts: -------------------------------------------------------------------------------- 1 | import { KoreFileAdaptor } from "./KoreFileAdaptor"; 2 | 3 | export interface KoreFile { 4 | readFile(filePath: string): Promise; 5 | 6 | writeFile(filePath: string, content: string | ArrayBuffer): Promise; 7 | 8 | writeFiles(files: { path: string; content: string | ArrayBuffer }[]): Promise; 9 | 10 | deleteFile(filePath: string): Promise; 11 | } 12 | 13 | export const createKoreFile = ({ adaptor }: { adaptor: KoreFileAdaptor }): KoreFile => { 14 | return { 15 | deleteFile(filePath: string): Promise { 16 | return adaptor.deleteFile(filePath); 17 | }, 18 | readFile(filePath: string): Promise { 19 | return adaptor.readFile(filePath); 20 | }, 21 | writeFile(filePath: string, content: string | ArrayBuffer): Promise { 22 | return adaptor.writeFile(filePath, content); 23 | }, 24 | writeFiles(files: { path: string; content: string | ArrayBuffer }[]): Promise { 25 | return adaptor.writeFiles(files); 26 | } 27 | }; 28 | }; 29 | -------------------------------------------------------------------------------- /src/fsAdaptor.ts: -------------------------------------------------------------------------------- 1 | import { KoreFileAdaptor } from "./KoreFileAdaptor"; 2 | import * as fs from "fs"; 3 | import * as path from "path"; 4 | import * as util from "util"; 5 | 6 | export interface FsAdaptorOptions { 7 | cwd?: string; 8 | } 9 | 10 | export const createFsAdaptor = (options?: FsAdaptorOptions): KoreFileAdaptor => { 11 | const readFile = util.promisify(fs.readFile); 12 | const writeFile = util.promisify(fs.writeFile); 13 | const unlinkFile = util.promisify(fs.unlink); 14 | const mkdir = util.promisify(fs.mkdir); 15 | const cwd = options && options.cwd ? options.cwd : process.cwd(); 16 | return { 17 | readFile(filePath: string): Promise { 18 | return readFile(path.resolve(cwd, filePath), "utf-8"); 19 | }, 20 | async writeFile(filePath: string, content: string | Buffer): Promise { 21 | const resolvedFilePath = path.resolve(cwd, filePath); 22 | const dir = path.dirname(resolvedFilePath); 23 | await mkdir(dir, { 24 | recursive: true 25 | }); 26 | if (Buffer.isBuffer(content)) { 27 | return writeFile(resolvedFilePath, content); 28 | } else { 29 | return writeFile(resolvedFilePath, content, "utf-8"); 30 | } 31 | }, 32 | async writeFiles(files: { path: string; content: string | ArrayBuffer }[]): Promise { 33 | const promises = files.map((file) => { 34 | return this.writeFile(file.path, file.content); 35 | }); 36 | await Promise.all(promises); 37 | }, 38 | deleteFile(filePath: string): Promise { 39 | return unlinkFile(path.resolve(cwd, filePath)); 40 | } 41 | }; 42 | }; 43 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "korefile", 3 | "version": "2.1.1", 4 | "description": "File System API for Local/GitHub.", 5 | "keywords": [ 6 | "api", 7 | "filesystem", 8 | "fs", 9 | "github", 10 | "local" 11 | ], 12 | "homepage": "https://github.com/azu/korefile", 13 | "bugs": { 14 | "url": "https://github.com/azu/korefile/issues" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "https://github.com/azu/korefile.git" 19 | }, 20 | "license": "MIT", 21 | "author": "azu", 22 | "files": [ 23 | "bin/", 24 | "lib/", 25 | "src/" 26 | ], 27 | "main": "lib/index.js", 28 | "browser": "lib/browser.js", 29 | "types": "lib/index.d.ts", 30 | "directories": { 31 | "lib": "lib", 32 | "test": "test" 33 | }, 34 | "scripts": { 35 | "build": "tsc -p .", 36 | "clean": "rimraf lib/", 37 | "prepublish": "npm run --if-present build", 38 | "test": "mocha \"test/**/*.ts\"", 39 | "watch": "tsc -p . --watch", 40 | "format": "prettier --write \"**/*.{js,jsx,ts,tsx,css}\"", 41 | "prepare": "git config --local core.hooksPath .githooks" 42 | }, 43 | "lint-staged": { 44 | "*.{js,jsx,ts,tsx,css}": [ 45 | "prettier --write" 46 | ] 47 | }, 48 | "prettier": { 49 | "singleQuote": false, 50 | "printWidth": 120, 51 | "tabWidth": 4, 52 | "trailingComma": "none" 53 | }, 54 | "devDependencies": { 55 | "@types/debug": "^4.1.9", 56 | "@types/mocha": "^8.2.3", 57 | "@types/node": "^16.3.1", 58 | "lint-staged": "^11.0.1", 59 | "mocha": "^9.0.2", 60 | "prettier": "^3.0.3", 61 | "rimraf": "^3.0.2", 62 | "ts-node": "^10.1.0", 63 | "ts-node-test-register": "^10.0.0", 64 | "typescript": "^4.3.5" 65 | }, 66 | "dependencies": { 67 | "@octokit/rest": "^18.6.7", 68 | "base64-arraybuffer": "^0.2.0", 69 | "debug": "^4.3.2", 70 | "js-base64": "^3.6.1" 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # korefile [![Actions Status: test](https://github.com/azu/korefile/workflows/test/badge.svg)](https://github.com/azu/korefile/actions?query=workflow%3A"test") 2 | 3 | > korefile: コレ・ファイル 4 | 5 | File System API for Local/GitHub. 6 | 7 | ## Features 8 | 9 | - Write/Read/Delete API for Local/GitHub 10 | - Pluggable adaptor 11 | 12 | ## Install 13 | 14 | Install with [npm](https://www.npmjs.com/): 15 | 16 | npm install korefile 17 | 18 | ## Usage 19 | 20 | Korefile apply [KoreFileAdaptor](./src/KoreFileAdaptor.ts) implementation. 21 | 22 | ### FsAdaptor 23 | 24 | Read/Write/Delete for local file system. 25 | It wraps `fs` module. 26 | 27 | ```js 28 | import {createKoreFile, createFsAdaptor} from "korefile"; 29 | const koreFile = createKoreFile({ 30 | adaptor: createFsAdaptor() 31 | }); 32 | (async () => { 33 | // write 34 | await koreFile.writeFile("/path/to/file", "content"); 35 | // read 36 | const content = await koreFile.readFile("/path/to/file"); 37 | // delete 38 | await koreFile.deleteFile("/path/to/file"); 39 | })() 40 | ``` 41 | 42 | ### GitHubAdaptor 43 | 44 | Read/Write/Delete for GitHub repository. 45 | It wrap [octokit/rest.js](https://github.com/octokit/rest.js/). 46 | 47 | Require [GitHub Auth Token](https://github.com/settings/tokens/new). 48 | 49 | ```js 50 | import {createKoreFile, createGitHubAdaptor} from "korefile"; 51 | const koreFile = createKoreFile({ 52 | adaptor: createGitHubAdaptor({ 53 | owner: "azu", 54 | repo: "korefile", 55 | ref: "heads/test", 56 | token: process.env.GH_TOKEN 57 | }) 58 | }); 59 | (async () => { 60 | // file path should be relative 61 | const testFilePath = "file.test"; 62 | // write 63 | await koreFile.writeFile(testFilePath, input); 64 | // read 65 | const content = await koreFile.readFile(testFilePath); 66 | // delete 67 | await koreFile.deleteFile(testFilePath); 68 | })(); 69 | ``` 70 | 71 | ## UseCase 72 | 73 | - [asocial-bookmark](https://github.com/azu/asocial-bookmark) 74 | - [github-funding-yml-updater](https://github.com/azu/github-funding-yml-updater) 75 | 76 | ## Changelog 77 | 78 | See [Releases page](https://github.com/azu/korefile/releases). 79 | 80 | ## Running tests 81 | 82 | Install devDependencies and Run `npm test`: 83 | 84 | npm test 85 | 86 | ## Contributing 87 | 88 | Pull requests and stars are always welcome. 89 | 90 | For bugs and feature requests, [please create an issue](https://github.com/azu/korefile/issues). 91 | 92 | 1. Fork it! 93 | 2. Create your feature branch: `git checkout -b my-new-feature` 94 | 3. Commit your changes: `git commit -am 'Add some feature'` 95 | 4. Push to the branch: `git push origin my-new-feature` 96 | 5. Submit a pull request :D 97 | 98 | ## Author 99 | 100 | - [github/azu](https://github.com/azu) 101 | - [twitter/azu_re](https://twitter.com/azu_re) 102 | 103 | ## License 104 | 105 | MIT © azu 106 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### https://raw.github.com/github/gitignore/d2c1bb2b9c72ead618c9f6a48280ebc7a8e0dff6/Node.gitignore 2 | 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | .env.test 62 | 63 | # parcel-bundler cache (https://parceljs.org/) 64 | .cache 65 | 66 | # next.js build output 67 | .next 68 | 69 | # nuxt.js build output 70 | .nuxt 71 | 72 | # vuepress build output 73 | .vuepress/dist 74 | 75 | # Serverless directories 76 | .serverless/ 77 | 78 | # FuseBox cache 79 | .fusebox/ 80 | 81 | # DynamoDB Local files 82 | .dynamodb/ 83 | 84 | 85 | ### https://raw.github.com/github/gitignore/d2c1bb2b9c72ead618c9f6a48280ebc7a8e0dff6/Global/JetBrains.gitignore 86 | 87 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm 88 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 89 | 90 | # User-specific stuff 91 | .idea/**/workspace.xml 92 | .idea/**/tasks.xml 93 | .idea/**/usage.statistics.xml 94 | .idea/**/dictionaries 95 | .idea/**/shelf 96 | 97 | # Generated files 98 | .idea/**/contentModel.xml 99 | 100 | # Sensitive or high-churn files 101 | .idea/**/dataSources/ 102 | .idea/**/dataSources.ids 103 | .idea/**/dataSources.local.xml 104 | .idea/**/sqlDataSources.xml 105 | .idea/**/dynamic.xml 106 | .idea/**/uiDesigner.xml 107 | .idea/**/dbnavigator.xml 108 | 109 | # Gradle 110 | .idea/**/gradle.xml 111 | .idea/**/libraries 112 | 113 | # Gradle and Maven with auto-import 114 | # When using Gradle or Maven with auto-import, you should exclude module files, 115 | # since they will be recreated, and may cause churn. Uncomment if using 116 | # auto-import. 117 | # .idea/modules.xml 118 | # .idea/*.iml 119 | # .idea/modules 120 | 121 | # CMake 122 | cmake-build-*/ 123 | 124 | # Mongo Explorer plugin 125 | .idea/**/mongoSettings.xml 126 | 127 | # File-based project format 128 | *.iws 129 | 130 | # IntelliJ 131 | out/ 132 | 133 | # mpeltonen/sbt-idea plugin 134 | .idea_modules/ 135 | 136 | # JIRA plugin 137 | atlassian-ide-plugin.xml 138 | 139 | # Cursive Clojure plugin 140 | .idea/replstate.xml 141 | 142 | # Crashlytics plugin (for Android Studio and IntelliJ) 143 | com_crashlytics_export_strings.xml 144 | crashlytics.properties 145 | crashlytics-build.properties 146 | fabric.properties 147 | 148 | # Editor-based Rest Client 149 | .idea/httpRequests 150 | 151 | # Android studio 3.1+ serialized cache file 152 | .idea/caches/build_file_checksums.ser 153 | 154 | 155 | /lib 156 | -------------------------------------------------------------------------------- /src/GitHubAdaptor.ts: -------------------------------------------------------------------------------- 1 | import { Octokit } from "@octokit/rest"; 2 | import { KoreFileAdaptor } from "./KoreFileAdaptor"; 3 | import { encode as arrayBufferToBase64 } from "base64-arraybuffer"; 4 | // https://github.com/octokit/rest.js/issues/1971 5 | import type { components } from "@octokit/openapi-types"; 6 | import { fromBase64 } from "js-base64"; 7 | import debug0 from "debug"; 8 | type GetRepoContentResponseDataFile = components["schemas"]["content-file"]; 9 | const debug = debug0("korefile"); 10 | const GITHUB_API_TOKEN = typeof process === "object" && process.env.GITHUB_API_TOKEN; 11 | 12 | export interface GitCommitPushOptions { 13 | owner: string; 14 | repo: string; 15 | files: { 16 | path: string; 17 | content: string | ArrayBuffer; 18 | }[]; 19 | ref: string; 20 | forceUpdate?: boolean; 21 | commitMessage?: string; 22 | token?: string; // or process.env.GITHUB_API_TOKEN 23 | } 24 | 25 | const getReferenceCommit = function (octokit: Octokit, options: Pick) { 26 | return octokit.git 27 | .getRef({ 28 | owner: options.owner, 29 | repo: options.repo, 30 | ref: options.ref 31 | }) 32 | .then((res) => { 33 | debug("getReferenceCommit Response: %O", res); 34 | return { referenceCommitSha: res.data.object.sha }; 35 | }); 36 | }; 37 | 38 | const createTree = function ( 39 | octokit: Octokit, 40 | options: Pick, 41 | data: { referenceCommitSha: string } 42 | ) { 43 | const promises = options.files.map((file) => { 44 | if (typeof file.content === "string") { 45 | return octokit.git 46 | .createBlob({ 47 | owner: options.owner, 48 | repo: options.repo, 49 | content: file.content, 50 | encoding: "utf-8" 51 | }) 52 | .then((blob: any) => { 53 | debug("createBlob:text"); 54 | return { 55 | sha: blob.data.sha, 56 | path: file.path, 57 | mode: "100644", 58 | type: "blob" 59 | } as const; 60 | }); 61 | } else if (ArrayBuffer.isView(file.content)) { 62 | return octokit.git 63 | .createBlob({ 64 | owner: options.owner, 65 | repo: options.repo, 66 | content: arrayBufferToBase64(file.content), 67 | encoding: "base64" 68 | }) 69 | .then((blob: any) => { 70 | debug("createBlob:buffer"); 71 | return { 72 | sha: blob.data.sha, 73 | path: file.path, 74 | mode: "100644", 75 | type: "blob" 76 | } as const; 77 | }); 78 | } 79 | throw new Error(`This file can not handled: ${file}`); 80 | }); 81 | return Promise.all(promises).then((files) => { 82 | debug("files: %O", files); 83 | return octokit.git 84 | .createTree({ 85 | owner: options.owner, 86 | repo: options.repo, 87 | tree: files, 88 | base_tree: data.referenceCommitSha 89 | }) 90 | .then((res) => { 91 | debug("createCommit Response: %O", res); 92 | return { 93 | ...data, 94 | newTreeSha: res.data.sha 95 | }; 96 | }); 97 | }); 98 | }; 99 | 100 | const createCommit = function ( 101 | octokit: Octokit, 102 | options: Pick, 103 | data: any 104 | ) { 105 | return octokit.git 106 | .createCommit({ 107 | owner: options.owner, 108 | repo: options.repo, 109 | message: options.commitMessage || "commit", 110 | tree: data.newTreeSha, 111 | parents: [data.referenceCommitSha] 112 | }) 113 | .then((res) => { 114 | debug("createTree Response: %O", res); 115 | return { ...data, newCommitSha: res.data.sha }; 116 | }); 117 | }; 118 | 119 | const updateReference = function (github: Octokit, options: GitCommitPushOptions, data: any) { 120 | return github.git 121 | .updateRef({ 122 | owner: options.owner, 123 | repo: options.repo, 124 | ref: options.ref, 125 | sha: data.newCommitSha, 126 | force: options.forceUpdate 127 | }) 128 | .then((res) => { 129 | debug("updateReference Response: %O", res); 130 | }); 131 | }; 132 | 133 | export const getContent = ( 134 | github: Octokit, 135 | { 136 | owner, 137 | repo, 138 | path, 139 | ref 140 | }: { 141 | owner: string; 142 | repo: string; 143 | path: string; 144 | ref: string; 145 | } 146 | ) => { 147 | return github.repos 148 | .getContent({ 149 | owner, 150 | repo, 151 | path, 152 | ref 153 | }) 154 | .then((res) => { 155 | const data = res.data as GetRepoContentResponseDataFile; 156 | if (Array.isArray(data)) { 157 | throw new Error(`folder does not support`); 158 | } 159 | debug("getContent Response: %O", res); 160 | if (data.type !== "file") { 161 | return Promise.reject(new Error("This is not file:" + path)); 162 | } 163 | if (data.encoding === "base64") { 164 | // TODO: support binary 165 | return Promise.resolve(fromBase64(data.content)); 166 | } 167 | throw new Error("Unknown file type" + data.type + ":" + data.encoding); 168 | }); 169 | }; 170 | 171 | export const deleteFile = async ( 172 | octokit: Octokit, 173 | { 174 | owner, 175 | repo, 176 | path, 177 | ref, 178 | commitMessage 179 | }: { 180 | owner: string; 181 | repo: string; 182 | path: string; 183 | ref: string; 184 | commitMessage: string; 185 | } 186 | ) => { 187 | const response = await octokit.repos.getContent({ 188 | owner, 189 | repo, 190 | path, 191 | ref 192 | }); 193 | const { data } = response; 194 | debug("deleteFile:getContents Response: %O", data); 195 | if (Array.isArray(data)) { 196 | throw new Error(`folder does not support`); 197 | } 198 | return octokit.repos 199 | .deleteFile({ 200 | owner, 201 | repo, 202 | path, 203 | branch: ref.replace(/^refs\//, "").replace(/^heads\//, ""), 204 | sha: data.sha, 205 | message: commitMessage 206 | }) 207 | .then((res) => { 208 | debug("deleteFile:deleteFile Response: %O", res); 209 | }); 210 | }; 211 | 212 | export interface GitHubAdaptorOptions { 213 | host?: string; 214 | owner: string; 215 | repo: string; 216 | ref: string; 217 | commitMessage?: { 218 | write?: (filePath: string) => string; 219 | delete?: (filePath: string) => string; 220 | }; 221 | forceUpdate?: boolean; 222 | token?: string; // or process.env.GITHUB_API_TOKEN 223 | } 224 | 225 | export const createGitHubAdaptor = (options: GitHubAdaptorOptions): KoreFileAdaptor => { 226 | const token = options.token || GITHUB_API_TOKEN; 227 | if (!token) { 228 | throw new Error(`token is not defined`); 229 | } 230 | const octKit = new Octokit({ 231 | auth: token, 232 | type: "oauth", 233 | userAgent: "korefile" 234 | }); 235 | const filledOptions = { 236 | owner: options.owner, 237 | repo: options.repo, 238 | ref: options.ref, 239 | forceUpdate: options.forceUpdate || false 240 | }; 241 | return { 242 | readFile(filePath: string): Promise { 243 | return getContent(octKit, { 244 | repo: filledOptions.repo, 245 | owner: filledOptions.owner, 246 | path: filePath, 247 | ref: filledOptions.ref 248 | }); 249 | }, 250 | writeFile(filePath: string, content: string | ArrayBuffer): Promise { 251 | const withFileOption = { 252 | ...filledOptions, 253 | files: [ 254 | { 255 | path: filePath, 256 | content: content 257 | } 258 | ] 259 | }; 260 | const commitMessage = 261 | options.commitMessage && typeof options.commitMessage.write === "function" 262 | ? options.commitMessage.write(filePath) 263 | : `Update ${filePath}`; 264 | return getReferenceCommit(octKit, filledOptions) 265 | .then((data) => createTree(octKit, withFileOption, data)) 266 | .then((data) => 267 | createCommit( 268 | octKit, 269 | { 270 | ...filledOptions, 271 | commitMessage 272 | }, 273 | data 274 | ) 275 | ) 276 | .then((data) => updateReference(octKit, withFileOption, data)); 277 | }, 278 | writeFiles(files: { path: string; content: string | ArrayBuffer }[]): Promise { 279 | const withFileOption = { 280 | ...filledOptions, 281 | files: files 282 | }; 283 | const commitMessage = `Update files`; 284 | return getReferenceCommit(octKit, filledOptions) 285 | .then((data) => createTree(octKit, withFileOption, data)) 286 | .then((data) => 287 | createCommit( 288 | octKit, 289 | { 290 | ...filledOptions, 291 | commitMessage 292 | }, 293 | data 294 | ) 295 | ) 296 | .then((data) => updateReference(octKit, withFileOption, data)); 297 | }, 298 | deleteFile(filePath: string): Promise { 299 | const commitMessage = 300 | options.commitMessage && typeof options.commitMessage.delete === "function" 301 | ? options.commitMessage.delete(filePath) 302 | : `Delete ${filePath}`; 303 | return deleteFile(octKit, { 304 | ...filledOptions, 305 | path: filePath, 306 | commitMessage: commitMessage 307 | }); 308 | } 309 | }; 310 | }; 311 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.14.5" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" 8 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== 9 | dependencies: 10 | "@babel/highlight" "^7.14.5" 11 | 12 | "@babel/helper-validator-identifier@^7.14.5": 13 | version "7.14.5" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" 15 | integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== 16 | 17 | "@babel/highlight@^7.14.5": 18 | version "7.14.5" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 20 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.14.5" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@octokit/auth-token@^2.4.4": 27 | version "2.4.5" 28 | resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" 29 | integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== 30 | dependencies: 31 | "@octokit/types" "^6.0.3" 32 | 33 | "@octokit/core@^3.5.0": 34 | version "3.5.1" 35 | resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b" 36 | integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw== 37 | dependencies: 38 | "@octokit/auth-token" "^2.4.4" 39 | "@octokit/graphql" "^4.5.8" 40 | "@octokit/request" "^5.6.0" 41 | "@octokit/request-error" "^2.0.5" 42 | "@octokit/types" "^6.0.3" 43 | before-after-hook "^2.2.0" 44 | universal-user-agent "^6.0.0" 45 | 46 | "@octokit/endpoint@^6.0.1": 47 | version "6.0.12" 48 | resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" 49 | integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== 50 | dependencies: 51 | "@octokit/types" "^6.0.3" 52 | is-plain-object "^5.0.0" 53 | universal-user-agent "^6.0.0" 54 | 55 | "@octokit/graphql@^4.5.8": 56 | version "4.6.4" 57 | resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.4.tgz#0c3f5bed440822182e972317122acb65d311a5ed" 58 | integrity sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg== 59 | dependencies: 60 | "@octokit/request" "^5.6.0" 61 | "@octokit/types" "^6.0.3" 62 | universal-user-agent "^6.0.0" 63 | 64 | "@octokit/openapi-types@^8.2.1": 65 | version "8.2.1" 66 | resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-8.2.1.tgz#102e752a7378ff8d21057c70fd16f1c83856d8c5" 67 | integrity sha512-BJz6kWuL3n+y+qM8Pv+UGbSxH6wxKf/SBs5yzGufMHwDefsa+Iq7ZGy1BINMD2z9SkXlIzk1qiu988rMuGXEMg== 68 | 69 | "@octokit/plugin-paginate-rest@^2.6.2": 70 | version "2.14.0" 71 | resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.14.0.tgz#f469cb4a908792fb44679c5973d8bba820c88b0f" 72 | integrity sha512-S2uEu2uHeI7Vf+Lvj8tv3O5/5TCAa8GHS0dUQN7gdM7vKA6ZHAbR6HkAVm5yMb1mbedLEbxOuQ+Fa0SQ7tCDLA== 73 | dependencies: 74 | "@octokit/types" "^6.18.0" 75 | 76 | "@octokit/plugin-request-log@^1.0.2": 77 | version "1.0.4" 78 | resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" 79 | integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== 80 | 81 | "@octokit/plugin-rest-endpoint-methods@5.4.1": 82 | version "5.4.1" 83 | resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.4.1.tgz#540ec90bb753dcaa682ee9f2cd6efdde9132fa90" 84 | integrity sha512-Nx0g7I5ayAYghsLJP4Q1Ch2W9jYYM0FlWWWZocUro8rNxVwuZXGfFd7Rcqi9XDWepSXjg1WByiNJnZza2hIOvQ== 85 | dependencies: 86 | "@octokit/types" "^6.18.1" 87 | deprecation "^2.3.1" 88 | 89 | "@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": 90 | version "2.1.0" 91 | resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" 92 | integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== 93 | dependencies: 94 | "@octokit/types" "^6.0.3" 95 | deprecation "^2.0.0" 96 | once "^1.4.0" 97 | 98 | "@octokit/request@^5.6.0": 99 | version "5.6.0" 100 | resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672" 101 | integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA== 102 | dependencies: 103 | "@octokit/endpoint" "^6.0.1" 104 | "@octokit/request-error" "^2.1.0" 105 | "@octokit/types" "^6.16.1" 106 | is-plain-object "^5.0.0" 107 | node-fetch "^2.6.1" 108 | universal-user-agent "^6.0.0" 109 | 110 | "@octokit/rest@^18.6.7": 111 | version "18.6.7" 112 | resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.6.7.tgz#89b8ecd13edd9603f00453640d1fb0b4175d4b31" 113 | integrity sha512-Kn6WrI2ZvmAztdx+HEaf88RuJn+LK72S8g6OpciE4kbZddAN84fu4fiPGxcEu052WmqKVnA/cnQsbNlrYC6rqQ== 114 | dependencies: 115 | "@octokit/core" "^3.5.0" 116 | "@octokit/plugin-paginate-rest" "^2.6.2" 117 | "@octokit/plugin-request-log" "^1.0.2" 118 | "@octokit/plugin-rest-endpoint-methods" "5.4.1" 119 | 120 | "@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.18.0", "@octokit/types@^6.18.1": 121 | version "6.18.1" 122 | resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.18.1.tgz#a6db178536e649fd5d67a7b747754bcc43940be4" 123 | integrity sha512-5YsddjO1U+xC8ZYKV8yZYebW55PCc7qiEEeZ+wZRr6qyclynzfyD65KZ5FdtIeP0/cANyFaD7hV69qElf1nMsQ== 124 | dependencies: 125 | "@octokit/openapi-types" "^8.2.1" 126 | 127 | "@tsconfig/node10@^1.0.7": 128 | version "1.0.8" 129 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" 130 | integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== 131 | 132 | "@tsconfig/node12@^1.0.7": 133 | version "1.0.9" 134 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" 135 | integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== 136 | 137 | "@tsconfig/node14@^1.0.0": 138 | version "1.0.1" 139 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" 140 | integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== 141 | 142 | "@tsconfig/node16@^1.0.1": 143 | version "1.0.1" 144 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1" 145 | integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA== 146 | 147 | "@types/debug@^4.1.9": 148 | version "4.1.9" 149 | resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.9.tgz#906996938bc672aaf2fb8c0d3733ae1dda05b005" 150 | integrity sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow== 151 | dependencies: 152 | "@types/ms" "*" 153 | 154 | "@types/mocha@^8.2.3": 155 | version "8.2.3" 156 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" 157 | integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== 158 | 159 | "@types/ms@*": 160 | version "0.7.32" 161 | resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.32.tgz#f6cd08939ae3ad886fcc92ef7f0109dacddf61ab" 162 | integrity sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g== 163 | 164 | "@types/node@^16.3.1": 165 | version "16.3.1" 166 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.1.tgz#24691fa2b0c3ec8c0d34bfcfd495edac5593ebb4" 167 | integrity sha512-N87VuQi7HEeRJkhzovao/JviiqKjDKMVKxKMfUvSKw+MbkbW8R0nA3fi/MQhhlxV2fQ+2ReM+/Nt4efdrJx3zA== 168 | 169 | "@types/normalize-package-data@^2.4.0": 170 | version "2.4.1" 171 | resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" 172 | integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== 173 | 174 | "@types/parse-json@^4.0.0": 175 | version "4.0.0" 176 | resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" 177 | integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== 178 | 179 | "@ungap/promise-all-settled@1.1.2": 180 | version "1.1.2" 181 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 182 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 183 | 184 | aggregate-error@^3.0.0: 185 | version "3.1.0" 186 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" 187 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 188 | dependencies: 189 | clean-stack "^2.0.0" 190 | indent-string "^4.0.0" 191 | 192 | ansi-colors@4.1.1, ansi-colors@^4.1.1: 193 | version "4.1.1" 194 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 195 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 196 | 197 | ansi-escapes@^4.3.0: 198 | version "4.3.2" 199 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 200 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 201 | dependencies: 202 | type-fest "^0.21.3" 203 | 204 | ansi-regex@^3.0.0: 205 | version "3.0.0" 206 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 207 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 208 | 209 | ansi-regex@^5.0.0: 210 | version "5.0.0" 211 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 212 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 213 | 214 | ansi-styles@^3.2.1: 215 | version "3.2.1" 216 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 217 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 218 | dependencies: 219 | color-convert "^1.9.0" 220 | 221 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 222 | version "4.3.0" 223 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 224 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 225 | dependencies: 226 | color-convert "^2.0.1" 227 | 228 | anymatch@~3.1.2: 229 | version "3.1.2" 230 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 231 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 232 | dependencies: 233 | normalize-path "^3.0.0" 234 | picomatch "^2.0.4" 235 | 236 | arg@^4.1.0: 237 | version "4.1.3" 238 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 239 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 240 | 241 | argparse@^2.0.1: 242 | version "2.0.1" 243 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 244 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 245 | 246 | astral-regex@^2.0.0: 247 | version "2.0.0" 248 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 249 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 250 | 251 | balanced-match@^1.0.0: 252 | version "1.0.2" 253 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 254 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 255 | 256 | base64-arraybuffer@^0.2.0: 257 | version "0.2.0" 258 | resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz#4b944fac0191aa5907afe2d8c999ccc57ce80f45" 259 | integrity sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ== 260 | 261 | before-after-hook@^2.2.0: 262 | version "2.2.2" 263 | resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" 264 | integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== 265 | 266 | binary-extensions@^2.0.0: 267 | version "2.2.0" 268 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 269 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 270 | 271 | brace-expansion@^1.1.7: 272 | version "1.1.11" 273 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 274 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 275 | dependencies: 276 | balanced-match "^1.0.0" 277 | concat-map "0.0.1" 278 | 279 | braces@^3.0.1, braces@~3.0.2: 280 | version "3.0.2" 281 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 282 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 283 | dependencies: 284 | fill-range "^7.0.1" 285 | 286 | browser-stdout@1.3.1: 287 | version "1.3.1" 288 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 289 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 290 | 291 | buffer-from@^1.0.0: 292 | version "1.1.1" 293 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 294 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 295 | 296 | callsites@^3.0.0: 297 | version "3.1.0" 298 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 299 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 300 | 301 | camelcase@^6.0.0: 302 | version "6.2.0" 303 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 304 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 305 | 306 | chalk@^2.0.0: 307 | version "2.4.2" 308 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 309 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 310 | dependencies: 311 | ansi-styles "^3.2.1" 312 | escape-string-regexp "^1.0.5" 313 | supports-color "^5.3.0" 314 | 315 | chalk@^4.1.0, chalk@^4.1.1: 316 | version "4.1.1" 317 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 318 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 319 | dependencies: 320 | ansi-styles "^4.1.0" 321 | supports-color "^7.1.0" 322 | 323 | chokidar@3.5.2: 324 | version "3.5.2" 325 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" 326 | integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== 327 | dependencies: 328 | anymatch "~3.1.2" 329 | braces "~3.0.2" 330 | glob-parent "~5.1.2" 331 | is-binary-path "~2.1.0" 332 | is-glob "~4.0.1" 333 | normalize-path "~3.0.0" 334 | readdirp "~3.6.0" 335 | optionalDependencies: 336 | fsevents "~2.3.2" 337 | 338 | clean-stack@^2.0.0: 339 | version "2.2.0" 340 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 341 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 342 | 343 | cli-cursor@^3.1.0: 344 | version "3.1.0" 345 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" 346 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 347 | dependencies: 348 | restore-cursor "^3.1.0" 349 | 350 | cli-truncate@^2.1.0: 351 | version "2.1.0" 352 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" 353 | integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== 354 | dependencies: 355 | slice-ansi "^3.0.0" 356 | string-width "^4.2.0" 357 | 358 | cliui@^7.0.2: 359 | version "7.0.4" 360 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 361 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 362 | dependencies: 363 | string-width "^4.2.0" 364 | strip-ansi "^6.0.0" 365 | wrap-ansi "^7.0.0" 366 | 367 | color-convert@^1.9.0: 368 | version "1.9.3" 369 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 370 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 371 | dependencies: 372 | color-name "1.1.3" 373 | 374 | color-convert@^2.0.1: 375 | version "2.0.1" 376 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 377 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 378 | dependencies: 379 | color-name "~1.1.4" 380 | 381 | color-name@1.1.3: 382 | version "1.1.3" 383 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 384 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 385 | 386 | color-name@~1.1.4: 387 | version "1.1.4" 388 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 389 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 390 | 391 | colorette@^1.2.2: 392 | version "1.2.2" 393 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" 394 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== 395 | 396 | commander@^7.2.0: 397 | version "7.2.0" 398 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" 399 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== 400 | 401 | concat-map@0.0.1: 402 | version "0.0.1" 403 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 404 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 405 | 406 | cosmiconfig@^7.0.0: 407 | version "7.0.0" 408 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" 409 | integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== 410 | dependencies: 411 | "@types/parse-json" "^4.0.0" 412 | import-fresh "^3.2.1" 413 | parse-json "^5.0.0" 414 | path-type "^4.0.0" 415 | yaml "^1.10.0" 416 | 417 | create-require@^1.1.0: 418 | version "1.1.1" 419 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 420 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 421 | 422 | cross-spawn@^7.0.3: 423 | version "7.0.3" 424 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 425 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 426 | dependencies: 427 | path-key "^3.1.0" 428 | shebang-command "^2.0.0" 429 | which "^2.0.1" 430 | 431 | debug@4.3.1: 432 | version "4.3.1" 433 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 434 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 435 | dependencies: 436 | ms "2.1.2" 437 | 438 | debug@^4.3.1, debug@^4.3.2: 439 | version "4.3.2" 440 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 441 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 442 | dependencies: 443 | ms "2.1.2" 444 | 445 | decamelize@^4.0.0: 446 | version "4.0.0" 447 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 448 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 449 | 450 | dedent@^0.7.0: 451 | version "0.7.0" 452 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 453 | integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= 454 | 455 | deprecation@^2.0.0, deprecation@^2.3.1: 456 | version "2.3.1" 457 | resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" 458 | integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== 459 | 460 | diff@5.0.0: 461 | version "5.0.0" 462 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 463 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 464 | 465 | diff@^4.0.1: 466 | version "4.0.2" 467 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 468 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 469 | 470 | emoji-regex@^8.0.0: 471 | version "8.0.0" 472 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 473 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 474 | 475 | enquirer@^2.3.6: 476 | version "2.3.6" 477 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 478 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 479 | dependencies: 480 | ansi-colors "^4.1.1" 481 | 482 | error-ex@^1.3.1: 483 | version "1.3.2" 484 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 485 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 486 | dependencies: 487 | is-arrayish "^0.2.1" 488 | 489 | escalade@^3.1.1: 490 | version "3.1.1" 491 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 492 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 493 | 494 | escape-string-regexp@4.0.0: 495 | version "4.0.0" 496 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 497 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 498 | 499 | escape-string-regexp@^1.0.5: 500 | version "1.0.5" 501 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 502 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 503 | 504 | execa@^5.0.0: 505 | version "5.1.1" 506 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 507 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 508 | dependencies: 509 | cross-spawn "^7.0.3" 510 | get-stream "^6.0.0" 511 | human-signals "^2.1.0" 512 | is-stream "^2.0.0" 513 | merge-stream "^2.0.0" 514 | npm-run-path "^4.0.1" 515 | onetime "^5.1.2" 516 | signal-exit "^3.0.3" 517 | strip-final-newline "^2.0.0" 518 | 519 | fill-range@^7.0.1: 520 | version "7.0.1" 521 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 522 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 523 | dependencies: 524 | to-regex-range "^5.0.1" 525 | 526 | find-up@5.0.0: 527 | version "5.0.0" 528 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 529 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 530 | dependencies: 531 | locate-path "^6.0.0" 532 | path-exists "^4.0.0" 533 | 534 | flat@^5.0.2: 535 | version "5.0.2" 536 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 537 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 538 | 539 | fs.realpath@^1.0.0: 540 | version "1.0.0" 541 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 542 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 543 | 544 | fsevents@~2.3.2: 545 | version "2.3.2" 546 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 547 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 548 | 549 | function-bind@^1.1.1: 550 | version "1.1.1" 551 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 552 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 553 | 554 | get-caller-file@^2.0.5: 555 | version "2.0.5" 556 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 557 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 558 | 559 | get-own-enumerable-property-symbols@^3.0.0: 560 | version "3.0.2" 561 | resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" 562 | integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== 563 | 564 | get-stream@^6.0.0: 565 | version "6.0.1" 566 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 567 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 568 | 569 | glob-parent@~5.1.2: 570 | version "5.1.2" 571 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 572 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 573 | dependencies: 574 | is-glob "^4.0.1" 575 | 576 | glob@7.1.7, glob@^7.1.3: 577 | version "7.1.7" 578 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 579 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 580 | dependencies: 581 | fs.realpath "^1.0.0" 582 | inflight "^1.0.4" 583 | inherits "2" 584 | minimatch "^3.0.4" 585 | once "^1.3.0" 586 | path-is-absolute "^1.0.0" 587 | 588 | growl@1.10.5: 589 | version "1.10.5" 590 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 591 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 592 | 593 | has-flag@^3.0.0: 594 | version "3.0.0" 595 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 596 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 597 | 598 | has-flag@^4.0.0: 599 | version "4.0.0" 600 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 601 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 602 | 603 | has@^1.0.3: 604 | version "1.0.3" 605 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 606 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 607 | dependencies: 608 | function-bind "^1.1.1" 609 | 610 | he@1.2.0: 611 | version "1.2.0" 612 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 613 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 614 | 615 | hosted-git-info@^2.1.4: 616 | version "2.8.9" 617 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" 618 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 619 | 620 | human-signals@^2.1.0: 621 | version "2.1.0" 622 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 623 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 624 | 625 | import-fresh@^3.2.1: 626 | version "3.3.0" 627 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 628 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 629 | dependencies: 630 | parent-module "^1.0.0" 631 | resolve-from "^4.0.0" 632 | 633 | indent-string@^4.0.0: 634 | version "4.0.0" 635 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 636 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 637 | 638 | inflight@^1.0.4: 639 | version "1.0.6" 640 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 641 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 642 | dependencies: 643 | once "^1.3.0" 644 | wrappy "1" 645 | 646 | inherits@2: 647 | version "2.0.4" 648 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 649 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 650 | 651 | is-arrayish@^0.2.1: 652 | version "0.2.1" 653 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 654 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 655 | 656 | is-binary-path@~2.1.0: 657 | version "2.1.0" 658 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 659 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 660 | dependencies: 661 | binary-extensions "^2.0.0" 662 | 663 | is-core-module@^2.2.0: 664 | version "2.4.0" 665 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" 666 | integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== 667 | dependencies: 668 | has "^1.0.3" 669 | 670 | is-extglob@^2.1.1: 671 | version "2.1.1" 672 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 673 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 674 | 675 | is-fullwidth-code-point@^2.0.0: 676 | version "2.0.0" 677 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 678 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 679 | 680 | is-fullwidth-code-point@^3.0.0: 681 | version "3.0.0" 682 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 683 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 684 | 685 | is-glob@^4.0.1, is-glob@~4.0.1: 686 | version "4.0.1" 687 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 688 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 689 | dependencies: 690 | is-extglob "^2.1.1" 691 | 692 | is-number@^7.0.0: 693 | version "7.0.0" 694 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 695 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 696 | 697 | is-obj@^1.0.1: 698 | version "1.0.1" 699 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 700 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 701 | 702 | is-plain-obj@^2.1.0: 703 | version "2.1.0" 704 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 705 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 706 | 707 | is-plain-object@^5.0.0: 708 | version "5.0.0" 709 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" 710 | integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== 711 | 712 | is-regexp@^1.0.0: 713 | version "1.0.0" 714 | resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" 715 | integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= 716 | 717 | is-stream@^2.0.0: 718 | version "2.0.0" 719 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" 720 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 721 | 722 | is-unicode-supported@^0.1.0: 723 | version "0.1.0" 724 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 725 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 726 | 727 | isexe@^2.0.0: 728 | version "2.0.0" 729 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 730 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 731 | 732 | js-base64@^3.6.1: 733 | version "3.6.1" 734 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.6.1.tgz#555aae398b74694b4037af1f8a5a6209d170efbe" 735 | integrity sha512-Frdq2+tRRGLQUIQOgsIGSCd1VePCS2fsddTG5dTCqR0JHgltXWfsxnY0gIXPoMeRmdom6Oyq+UMOFg5suduOjQ== 736 | 737 | js-tokens@^4.0.0: 738 | version "4.0.0" 739 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 740 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 741 | 742 | js-yaml@4.1.0: 743 | version "4.1.0" 744 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 745 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 746 | dependencies: 747 | argparse "^2.0.1" 748 | 749 | json-parse-even-better-errors@^2.3.0: 750 | version "2.3.1" 751 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 752 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 753 | 754 | lines-and-columns@^1.1.6: 755 | version "1.1.6" 756 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 757 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 758 | 759 | lint-staged@^11.0.1: 760 | version "11.0.1" 761 | resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.0.1.tgz#1b8ae8ed5a52ed87252db95fe008c2618c85f55a" 762 | integrity sha512-RkTA1ulE6jAGFskxpGAwxfVRXjHp7D9gFg/+KMARUWMPiVFP0t28Em2u0gL8sA0w3/ck3TC57F2v2RNeQ5XPnw== 763 | dependencies: 764 | chalk "^4.1.1" 765 | cli-truncate "^2.1.0" 766 | commander "^7.2.0" 767 | cosmiconfig "^7.0.0" 768 | debug "^4.3.1" 769 | dedent "^0.7.0" 770 | enquirer "^2.3.6" 771 | execa "^5.0.0" 772 | listr2 "^3.8.2" 773 | log-symbols "^4.1.0" 774 | micromatch "^4.0.4" 775 | normalize-path "^3.0.0" 776 | please-upgrade-node "^3.2.0" 777 | string-argv "0.3.1" 778 | stringify-object "^3.3.0" 779 | 780 | listr2@^3.8.2: 781 | version "3.10.0" 782 | resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.10.0.tgz#58105a53ed7fa1430d1b738c6055ef7bb006160f" 783 | integrity sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw== 784 | dependencies: 785 | cli-truncate "^2.1.0" 786 | colorette "^1.2.2" 787 | log-update "^4.0.0" 788 | p-map "^4.0.0" 789 | rxjs "^6.6.7" 790 | through "^2.3.8" 791 | wrap-ansi "^7.0.0" 792 | 793 | locate-path@^6.0.0: 794 | version "6.0.0" 795 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 796 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 797 | dependencies: 798 | p-locate "^5.0.0" 799 | 800 | log-symbols@4.1.0, log-symbols@^4.1.0: 801 | version "4.1.0" 802 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 803 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 804 | dependencies: 805 | chalk "^4.1.0" 806 | is-unicode-supported "^0.1.0" 807 | 808 | log-update@^4.0.0: 809 | version "4.0.0" 810 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" 811 | integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== 812 | dependencies: 813 | ansi-escapes "^4.3.0" 814 | cli-cursor "^3.1.0" 815 | slice-ansi "^4.0.0" 816 | wrap-ansi "^6.2.0" 817 | 818 | make-error@^1.1.1: 819 | version "1.3.6" 820 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 821 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 822 | 823 | merge-stream@^2.0.0: 824 | version "2.0.0" 825 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 826 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 827 | 828 | micromatch@^4.0.4: 829 | version "4.0.4" 830 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 831 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 832 | dependencies: 833 | braces "^3.0.1" 834 | picomatch "^2.2.3" 835 | 836 | mimic-fn@^2.1.0: 837 | version "2.1.0" 838 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 839 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 840 | 841 | minimatch@3.0.4, minimatch@^3.0.4: 842 | version "3.0.4" 843 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 844 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 845 | dependencies: 846 | brace-expansion "^1.1.7" 847 | 848 | mocha@^9.0.2: 849 | version "9.0.2" 850 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.0.2.tgz#e84849b61f406a680ced85af76425f6f3108d1a0" 851 | integrity sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA== 852 | dependencies: 853 | "@ungap/promise-all-settled" "1.1.2" 854 | ansi-colors "4.1.1" 855 | browser-stdout "1.3.1" 856 | chokidar "3.5.2" 857 | debug "4.3.1" 858 | diff "5.0.0" 859 | escape-string-regexp "4.0.0" 860 | find-up "5.0.0" 861 | glob "7.1.7" 862 | growl "1.10.5" 863 | he "1.2.0" 864 | js-yaml "4.1.0" 865 | log-symbols "4.1.0" 866 | minimatch "3.0.4" 867 | ms "2.1.3" 868 | nanoid "3.1.23" 869 | serialize-javascript "6.0.0" 870 | strip-json-comments "3.1.1" 871 | supports-color "8.1.1" 872 | which "2.0.2" 873 | wide-align "1.1.3" 874 | workerpool "6.1.5" 875 | yargs "16.2.0" 876 | yargs-parser "20.2.4" 877 | yargs-unparser "2.0.0" 878 | 879 | ms@2.1.2: 880 | version "2.1.2" 881 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 882 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 883 | 884 | ms@2.1.3: 885 | version "2.1.3" 886 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 887 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 888 | 889 | nanoid@3.1.23: 890 | version "3.1.23" 891 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" 892 | integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== 893 | 894 | node-fetch@^2.6.1: 895 | version "2.6.1" 896 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 897 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 898 | 899 | normalize-package-data@^2.5.0: 900 | version "2.5.0" 901 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 902 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 903 | dependencies: 904 | hosted-git-info "^2.1.4" 905 | resolve "^1.10.0" 906 | semver "2 || 3 || 4 || 5" 907 | validate-npm-package-license "^3.0.1" 908 | 909 | normalize-path@^3.0.0, normalize-path@~3.0.0: 910 | version "3.0.0" 911 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 912 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 913 | 914 | npm-run-path@^4.0.1: 915 | version "4.0.1" 916 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 917 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 918 | dependencies: 919 | path-key "^3.0.0" 920 | 921 | once@^1.3.0, once@^1.4.0: 922 | version "1.4.0" 923 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 924 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 925 | dependencies: 926 | wrappy "1" 927 | 928 | onetime@^5.1.0, onetime@^5.1.2: 929 | version "5.1.2" 930 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 931 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 932 | dependencies: 933 | mimic-fn "^2.1.0" 934 | 935 | p-limit@^3.0.2: 936 | version "3.1.0" 937 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 938 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 939 | dependencies: 940 | yocto-queue "^0.1.0" 941 | 942 | p-locate@^5.0.0: 943 | version "5.0.0" 944 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 945 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 946 | dependencies: 947 | p-limit "^3.0.2" 948 | 949 | p-map@^4.0.0: 950 | version "4.0.0" 951 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" 952 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== 953 | dependencies: 954 | aggregate-error "^3.0.0" 955 | 956 | parent-module@^1.0.0: 957 | version "1.0.1" 958 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 959 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 960 | dependencies: 961 | callsites "^3.0.0" 962 | 963 | parse-json@^5.0.0: 964 | version "5.2.0" 965 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 966 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 967 | dependencies: 968 | "@babel/code-frame" "^7.0.0" 969 | error-ex "^1.3.1" 970 | json-parse-even-better-errors "^2.3.0" 971 | lines-and-columns "^1.1.6" 972 | 973 | path-exists@^4.0.0: 974 | version "4.0.0" 975 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 976 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 977 | 978 | path-is-absolute@^1.0.0: 979 | version "1.0.1" 980 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 981 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 982 | 983 | path-key@^3.0.0, path-key@^3.1.0: 984 | version "3.1.1" 985 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 986 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 987 | 988 | path-parse@^1.0.6: 989 | version "1.0.7" 990 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 991 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 992 | 993 | path-type@^4.0.0: 994 | version "4.0.0" 995 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 996 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 997 | 998 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: 999 | version "2.3.0" 1000 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 1001 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 1002 | 1003 | please-upgrade-node@^3.2.0: 1004 | version "3.2.0" 1005 | resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" 1006 | integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== 1007 | dependencies: 1008 | semver-compare "^1.0.0" 1009 | 1010 | prettier@^3.0.3: 1011 | version "3.0.3" 1012 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" 1013 | integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== 1014 | 1015 | randombytes@^2.1.0: 1016 | version "2.1.0" 1017 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1018 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1019 | dependencies: 1020 | safe-buffer "^5.1.0" 1021 | 1022 | read-pkg@^5.2.0: 1023 | version "5.2.0" 1024 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" 1025 | integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== 1026 | dependencies: 1027 | "@types/normalize-package-data" "^2.4.0" 1028 | normalize-package-data "^2.5.0" 1029 | parse-json "^5.0.0" 1030 | type-fest "^0.6.0" 1031 | 1032 | readdirp@~3.6.0: 1033 | version "3.6.0" 1034 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1035 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1036 | dependencies: 1037 | picomatch "^2.2.1" 1038 | 1039 | require-directory@^2.1.1: 1040 | version "2.1.1" 1041 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1042 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1043 | 1044 | resolve-from@^4.0.0: 1045 | version "4.0.0" 1046 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1047 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1048 | 1049 | resolve@^1.10.0: 1050 | version "1.20.0" 1051 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 1052 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 1053 | dependencies: 1054 | is-core-module "^2.2.0" 1055 | path-parse "^1.0.6" 1056 | 1057 | restore-cursor@^3.1.0: 1058 | version "3.1.0" 1059 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" 1060 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 1061 | dependencies: 1062 | onetime "^5.1.0" 1063 | signal-exit "^3.0.2" 1064 | 1065 | rimraf@^3.0.2: 1066 | version "3.0.2" 1067 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1068 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1069 | dependencies: 1070 | glob "^7.1.3" 1071 | 1072 | rxjs@^6.6.7: 1073 | version "6.6.7" 1074 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" 1075 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== 1076 | dependencies: 1077 | tslib "^1.9.0" 1078 | 1079 | safe-buffer@^5.1.0: 1080 | version "5.2.1" 1081 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1082 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1083 | 1084 | semver-compare@^1.0.0: 1085 | version "1.0.0" 1086 | resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" 1087 | integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= 1088 | 1089 | "semver@2 || 3 || 4 || 5": 1090 | version "5.7.1" 1091 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1092 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1093 | 1094 | serialize-javascript@6.0.0: 1095 | version "6.0.0" 1096 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1097 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1098 | dependencies: 1099 | randombytes "^2.1.0" 1100 | 1101 | shebang-command@^2.0.0: 1102 | version "2.0.0" 1103 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1104 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1105 | dependencies: 1106 | shebang-regex "^3.0.0" 1107 | 1108 | shebang-regex@^3.0.0: 1109 | version "3.0.0" 1110 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1111 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1112 | 1113 | signal-exit@^3.0.2, signal-exit@^3.0.3: 1114 | version "3.0.3" 1115 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1116 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1117 | 1118 | slice-ansi@^3.0.0: 1119 | version "3.0.0" 1120 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" 1121 | integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== 1122 | dependencies: 1123 | ansi-styles "^4.0.0" 1124 | astral-regex "^2.0.0" 1125 | is-fullwidth-code-point "^3.0.0" 1126 | 1127 | slice-ansi@^4.0.0: 1128 | version "4.0.0" 1129 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 1130 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 1131 | dependencies: 1132 | ansi-styles "^4.0.0" 1133 | astral-regex "^2.0.0" 1134 | is-fullwidth-code-point "^3.0.0" 1135 | 1136 | source-map-support@^0.5.17: 1137 | version "0.5.19" 1138 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 1139 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1140 | dependencies: 1141 | buffer-from "^1.0.0" 1142 | source-map "^0.6.0" 1143 | 1144 | source-map@^0.6.0: 1145 | version "0.6.1" 1146 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1147 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1148 | 1149 | spdx-correct@^3.0.0: 1150 | version "3.1.1" 1151 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 1152 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 1153 | dependencies: 1154 | spdx-expression-parse "^3.0.0" 1155 | spdx-license-ids "^3.0.0" 1156 | 1157 | spdx-exceptions@^2.1.0: 1158 | version "2.3.0" 1159 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 1160 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 1161 | 1162 | spdx-expression-parse@^3.0.0: 1163 | version "3.0.1" 1164 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 1165 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 1166 | dependencies: 1167 | spdx-exceptions "^2.1.0" 1168 | spdx-license-ids "^3.0.0" 1169 | 1170 | spdx-license-ids@^3.0.0: 1171 | version "3.0.9" 1172 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" 1173 | integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== 1174 | 1175 | string-argv@0.3.1: 1176 | version "0.3.1" 1177 | resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" 1178 | integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== 1179 | 1180 | "string-width@^1.0.2 || 2": 1181 | version "2.1.1" 1182 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1183 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1184 | dependencies: 1185 | is-fullwidth-code-point "^2.0.0" 1186 | strip-ansi "^4.0.0" 1187 | 1188 | string-width@^4.1.0, string-width@^4.2.0: 1189 | version "4.2.2" 1190 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 1191 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 1192 | dependencies: 1193 | emoji-regex "^8.0.0" 1194 | is-fullwidth-code-point "^3.0.0" 1195 | strip-ansi "^6.0.0" 1196 | 1197 | stringify-object@^3.3.0: 1198 | version "3.3.0" 1199 | resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" 1200 | integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== 1201 | dependencies: 1202 | get-own-enumerable-property-symbols "^3.0.0" 1203 | is-obj "^1.0.1" 1204 | is-regexp "^1.0.0" 1205 | 1206 | strip-ansi@^4.0.0: 1207 | version "4.0.0" 1208 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1209 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1210 | dependencies: 1211 | ansi-regex "^3.0.0" 1212 | 1213 | strip-ansi@^6.0.0: 1214 | version "6.0.0" 1215 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1216 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1217 | dependencies: 1218 | ansi-regex "^5.0.0" 1219 | 1220 | strip-final-newline@^2.0.0: 1221 | version "2.0.0" 1222 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 1223 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1224 | 1225 | strip-json-comments@3.1.1: 1226 | version "3.1.1" 1227 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1228 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1229 | 1230 | supports-color@8.1.1: 1231 | version "8.1.1" 1232 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1233 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1234 | dependencies: 1235 | has-flag "^4.0.0" 1236 | 1237 | supports-color@^5.3.0: 1238 | version "5.5.0" 1239 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1240 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1241 | dependencies: 1242 | has-flag "^3.0.0" 1243 | 1244 | supports-color@^7.1.0: 1245 | version "7.2.0" 1246 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1247 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1248 | dependencies: 1249 | has-flag "^4.0.0" 1250 | 1251 | through@^2.3.8: 1252 | version "2.3.8" 1253 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1254 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1255 | 1256 | to-regex-range@^5.0.1: 1257 | version "5.0.1" 1258 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1259 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1260 | dependencies: 1261 | is-number "^7.0.0" 1262 | 1263 | ts-node-test-register@^10.0.0: 1264 | version "10.0.0" 1265 | resolved "https://registry.yarnpkg.com/ts-node-test-register/-/ts-node-test-register-10.0.0.tgz#eb8cbe40954331f2f70c8e5fb83c677965ac14f9" 1266 | integrity sha512-W8yzvufsG7/ulT65G1D218HMPf6uduojDXuSrGAaakkZlUtuLC+3pxphDktBe/N9w5Gi7teAxKCaTpBH5p6fkQ== 1267 | dependencies: 1268 | read-pkg "^5.2.0" 1269 | 1270 | ts-node@^10.1.0: 1271 | version "10.1.0" 1272 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.1.0.tgz#e656d8ad3b61106938a867f69c39a8ba6efc966e" 1273 | integrity sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA== 1274 | dependencies: 1275 | "@tsconfig/node10" "^1.0.7" 1276 | "@tsconfig/node12" "^1.0.7" 1277 | "@tsconfig/node14" "^1.0.0" 1278 | "@tsconfig/node16" "^1.0.1" 1279 | arg "^4.1.0" 1280 | create-require "^1.1.0" 1281 | diff "^4.0.1" 1282 | make-error "^1.1.1" 1283 | source-map-support "^0.5.17" 1284 | yn "3.1.1" 1285 | 1286 | tslib@^1.9.0: 1287 | version "1.14.1" 1288 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1289 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1290 | 1291 | type-fest@^0.21.3: 1292 | version "0.21.3" 1293 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 1294 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 1295 | 1296 | type-fest@^0.6.0: 1297 | version "0.6.0" 1298 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" 1299 | integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== 1300 | 1301 | typescript@^4.3.5: 1302 | version "4.3.5" 1303 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" 1304 | integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== 1305 | 1306 | universal-user-agent@^6.0.0: 1307 | version "6.0.0" 1308 | resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" 1309 | integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== 1310 | 1311 | validate-npm-package-license@^3.0.1: 1312 | version "3.0.4" 1313 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1314 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1315 | dependencies: 1316 | spdx-correct "^3.0.0" 1317 | spdx-expression-parse "^3.0.0" 1318 | 1319 | which@2.0.2, which@^2.0.1: 1320 | version "2.0.2" 1321 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1322 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1323 | dependencies: 1324 | isexe "^2.0.0" 1325 | 1326 | wide-align@1.1.3: 1327 | version "1.1.3" 1328 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1329 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1330 | dependencies: 1331 | string-width "^1.0.2 || 2" 1332 | 1333 | workerpool@6.1.5: 1334 | version "6.1.5" 1335 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581" 1336 | integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw== 1337 | 1338 | wrap-ansi@^6.2.0: 1339 | version "6.2.0" 1340 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" 1341 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== 1342 | dependencies: 1343 | ansi-styles "^4.0.0" 1344 | string-width "^4.1.0" 1345 | strip-ansi "^6.0.0" 1346 | 1347 | wrap-ansi@^7.0.0: 1348 | version "7.0.0" 1349 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1350 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1351 | dependencies: 1352 | ansi-styles "^4.0.0" 1353 | string-width "^4.1.0" 1354 | strip-ansi "^6.0.0" 1355 | 1356 | wrappy@1: 1357 | version "1.0.2" 1358 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1359 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1360 | 1361 | y18n@^5.0.5: 1362 | version "5.0.8" 1363 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1364 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1365 | 1366 | yaml@^1.10.0: 1367 | version "1.10.2" 1368 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 1369 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 1370 | 1371 | yargs-parser@20.2.4: 1372 | version "20.2.4" 1373 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1374 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1375 | 1376 | yargs-parser@^20.2.2: 1377 | version "20.2.9" 1378 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1379 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1380 | 1381 | yargs-unparser@2.0.0: 1382 | version "2.0.0" 1383 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1384 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1385 | dependencies: 1386 | camelcase "^6.0.0" 1387 | decamelize "^4.0.0" 1388 | flat "^5.0.2" 1389 | is-plain-obj "^2.1.0" 1390 | 1391 | yargs@16.2.0: 1392 | version "16.2.0" 1393 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1394 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1395 | dependencies: 1396 | cliui "^7.0.2" 1397 | escalade "^3.1.1" 1398 | get-caller-file "^2.0.5" 1399 | require-directory "^2.1.1" 1400 | string-width "^4.2.0" 1401 | y18n "^5.0.5" 1402 | yargs-parser "^20.2.2" 1403 | 1404 | yn@3.1.1: 1405 | version "3.1.1" 1406 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 1407 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1408 | 1409 | yocto-queue@^0.1.0: 1410 | version "0.1.0" 1411 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1412 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1413 | --------------------------------------------------------------------------------