├── .editorconfig ├── .eslintrc.json ├── .github └── workflows │ ├── README.md │ └── npmpublish.yml ├── .gitignore ├── .nvmrc ├── .prettierrc ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── GOALS.md ├── README.md ├── lerna.json ├── package-lock.json ├── package.json └── packages ├── core ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── package-lock.json ├── package.json ├── src │ ├── README.md │ ├── constants │ │ ├── app.ts │ │ ├── commitTypes.ts │ │ ├── index.ts │ │ ├── message.ts │ │ └── parserFormatTemplate.ts │ ├── formatter.ts │ ├── index.ts │ ├── parsers │ │ ├── basicCommitParser.ts │ │ ├── formatterBuilder.ts │ │ ├── index.ts │ │ └── jiraCommitParser.ts │ └── types │ │ ├── commitType.ts │ │ ├── index.ts │ │ └── settings.ts └── tsconfig.json └── vscode-ext ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── icon.png ├── package-lock.json ├── package.json ├── src ├── commitjiCommit │ ├── index.ts │ ├── types │ │ ├── git.ts │ │ ├── index.ts │ │ └── settings.ts │ ├── utils │ │ ├── alerter.ts │ │ ├── clipboard.ts │ │ ├── getJiraIssueKeyOrShowPrompt.ts │ │ ├── getSettings.ts │ │ ├── getWorkflow.ts │ │ ├── git.ts │ │ ├── index.ts │ │ ├── pickJiraIssueKeyFromString.ts │ │ ├── pipe.ts │ │ ├── showCommitBodyInputBox.ts │ │ ├── showCommitTypePicker.ts │ │ ├── showJiraIssueKeyInputBox.ts │ │ ├── showJiraWorkflowTransitionPicker.ts │ │ └── writeCommitToTerminal.ts │ └── workflows │ │ ├── basicWorkflow.ts │ │ ├── index.ts │ │ └── jiraWorkflow.ts ├── extension.ts └── test │ ├── runTest.ts │ └── suite │ ├── extension.test.ts │ └── index.ts └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | charset = utf-8 7 | trim_trailing_whitespace = false 8 | insert_final_newline = false -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "plugins": [ 9 | "@typescript-eslint" 10 | ], 11 | "rules": { 12 | "@typescript-eslint/class-name-casing": "warn", 13 | "@typescript-eslint/semi": "warn", 14 | "curly": "warn", 15 | "eqeqeq": "warn", 16 | "no-throw-literal": "warn", 17 | "semi": "off" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.github/workflows/README.md: -------------------------------------------------------------------------------- 1 | If by a chance, the time will come to filter on `release` events. 2 | Take a look at this workaround: https://github.community/t5/GitHub-Actions/GitHub-Actions-Filter-on-release/td-p/29355 -------------------------------------------------------------------------------- /.github/workflows/npmpublish.yml: -------------------------------------------------------------------------------- 1 | # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages 3 | 4 | name: Node.js Package 5 | 6 | on: 7 | release: 8 | types: [published] 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v2 15 | - uses: actions/setup-node@v1 16 | with: 17 | node-version: '16.x' 18 | - run: npm ci 19 | - run: npm run bs 20 | - run: npm run compile-core 21 | 22 | publish-npm: 23 | needs: build 24 | runs-on: ubuntu-latest 25 | steps: 26 | - uses: actions/checkout@v2 27 | - uses: actions/setup-node@v1 28 | with: 29 | node-version: '16.x' 30 | registry-url: https://registry.npmjs.org/ 31 | - run: npm ci 32 | - run: npm run publish-core 33 | env: 34 | NODE_AUTH_TOKEN: ${{secrets.npm_token}} 35 | 36 | publish-vscode: 37 | needs: build 38 | runs-on: ubuntu-latest 39 | steps: 40 | - uses: actions/checkout@v2 41 | - uses: actions/setup-node@v1 42 | with: 43 | node-version: '16.x' 44 | registry-url: https://registry.npmjs.org/ 45 | - run: npm ci 46 | - run: npm run publish-ext 47 | env: 48 | VSCE_PAT: ${{secrets.vsce_pat}} 49 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules 3 | .vscode-test/ 4 | *.vsix 5 | 6 | .DS_Store 7 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 16.14.2 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "singleQuote": true, 4 | "trailingComma": "es5", 5 | "tabWidth": 2 6 | } -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "dbaeumer.vscode-eslint" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "args": [ 14 | "--extensionDevelopmentPath=${workspaceFolder}/packages/vscode-ext" 15 | ], 16 | "outFiles": [ 17 | "${workspaceFolder}/packages/vscode-ext/out/**/*.js" 18 | ], 19 | "preLaunchTask": "${defaultBuildTask}" 20 | }, 21 | { 22 | "name": "Extension Tests", 23 | "type": "extensionHost", 24 | "request": "launch", 25 | "runtimeExecutable": "${execPath}", 26 | "args": [ 27 | "--extensionDevelopmentPath=${workspaceFolder}/packages/vscode-ext", 28 | "--extensionTestsPath=${workspaceFolder}/packages/vscode-ext/out/test/suite/index" 29 | ], 30 | "outFiles": [ 31 | "${workspaceFolder}/packages/vscode-ext/out/test/**/*.js" 32 | ], 33 | "preLaunchTask": "${defaultBuildTask}" 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 10 | "typescript.tsc.autoDetect": "off" 11 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$tsc-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /GOALS.md: -------------------------------------------------------------------------------- 1 | Follow Gitmoji mapping :D 2 | 3 | Copy to clipboard settings - after typing the command copy it to clipboard to avoid losing it 4 | Unicode settings - allow the emojis to be turned into the real emoji 5 | Jira settings prompt for Smart Commits 6 | - Allow to specify Jira ticket 7 | ` ✨ - feat: [ABC-123] Implement Profile page ` 8 | - Allow to add commits that will move jira movement (will enable adding jira ticket number!) 9 | - 1. Specify the workflow through settings 10 | - 2. Then use these settings to prompt the user where to move it 11 | - 3. It will result to something like 12 | ` ✨ - feat: [ABC-123] Implement Profile page #code-review ` 13 | 14 | Basic output: ` ✨ - feat: Implement Profile page ` 15 | 16 | ---- 17 | Flow: 18 | 19 | 20 | Normal: 21 | - Triggers by user -> show list of mapping (based from Gitmoji) if commit is feature or fix bug -> enter message 22 | Output: ` ✨ - feat: Implement Profile page ` 23 | 24 | With Jira ticket 25 | - Triggers by user -> show list of mapping (based from Gitmoji) if commit is feature or fix bug -> ticket number -> enter message 26 | Output: ` ✨ - feat: [ABC-123] Implement Profile page ` 27 | 28 | With Jira ticket movement 29 | Output: ` ✨ - feat: [ABC-123] Implement Profile page #code-review ` 30 | 31 | ``` 32 | const settings = { 33 | jira: { 34 | allowIssueKeyPrompt: true, 35 | allowWorkflowTransitionPrompt: true, 36 | workflowTransitions: [ 37 | { 38 | key: 'open', 39 | label: 'Open', 40 | workflowTransitionName: '#open' 41 | }, 42 | { 43 | key: 'inProgress', 44 | label: 'In Progress', 45 | workflowTransitionName: '#in-progress' 46 | }, 47 | { 48 | key: 'readyForCodeReview', 49 | label: 'Ready For Code Review', 50 | workflowTransitionName: '#ready-for-code-review' 51 | }, 52 | { 53 | key: 'done', 54 | label: 'Done', 55 | workflowTransitionName: '#done', 56 | } 57 | ], 58 | }, 59 | }; 60 | ``` 61 | 62 | Allow the consumer to add property in the settings where they can format it on their own. This will allow flexibility 63 | 64 | 65 | - Builder pattern on formatting x 66 | - Move to Lerna x 67 | - core 68 | - name: @commitji/core x 69 | - vscode-ext 70 | - name: @commitji/vs-ext x 71 | - Jira support x 72 | - Error handling (skipped ones) x 73 | - Publish -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Welcome to commitji 👋 2 | [![npm version](https://badge.fury.io/js/commitji.svg)](https://badge.fury.io/js/commitji) 3 | [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](#) 4 | 5 | > Create conventional commits with gitmojis 6 | 7 | ### 🏠 [Homepage](https://github.com/jmaicaaan/commitji) 8 | 9 | ## Installations 10 | 11 | - Visit [VSCode marketplace](https://marketplace.visualstudio.com/items?itemName=jmaicaaan.commitji-vs) 12 | 13 | ## Usages 14 | 15 | - Check out this one for [VSCode extension usage](https://github.com/jmaicaaan/commitji/tree/master/packages/vscode-ext) 16 | 17 | ## Author 18 | 19 | 👤 **JM Santos** 20 | 21 | * Website: https://github.com/jmaicaaan 22 | * Github: [@jmaicaaan](https://github.com/jmaicaaan) 23 | 24 | ## 🤝 Contributing 25 | 26 | Contributions, issues and feature requests are welcome! 27 | 28 | Feel free to check [issues page](https://github.com/jmaicaaan/commitji/issues). 29 | 30 | ## Show your support 31 | 32 | Give a ⭐️ if this project helped you! 33 | -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [ 3 | "packages/*" 4 | ], 5 | "version": "independent" 6 | } 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "commitji", 3 | "version": "1.0.0", 4 | "description": "Create conventional commits with gitmojis", 5 | "main": "index.js", 6 | "engines": { 7 | "node": "^16.14.2" 8 | }, 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1", 11 | "lerna": "lerna", 12 | "bs": "lerna bootstrap", 13 | "version": "lerna version --conventional-commits --create-release github", 14 | "compile-core": "lerna run compile --scope=@commitji/core", 15 | "compile-ext": "lerna run compile --scope=commitji-vs", 16 | "watch-core": "lerna run watch --scope=@commitji/core", 17 | "watch-ext": "lerna run watch --scope=commitji-vs", 18 | "publish-core": "lerna exec --scope=@commitji/core -- npm publish", 19 | "publish-ext": "lerna exec --scope=commitji-vs -- npm run vscode:publish" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/jmaicaaan/commitji.git" 24 | }, 25 | "author": "", 26 | "license": "ISC", 27 | "bugs": { 28 | "url": "https://github.com/jmaicaaan/commitji/issues" 29 | }, 30 | "homepage": "https://github.com/jmaicaaan/commitji#readme", 31 | "dependencies": { 32 | "lerna": "^4.0.0" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /packages/core/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 5 | 6 | ## [1.0.12](https://github.com/jmaicaaan/commitji/compare/@commitji/core@1.0.11...@commitji/core@1.0.12) (2020-05-03) 7 | 8 | **Note:** Version bump only for package @commitji/core 9 | 10 | 11 | 12 | 13 | 14 | ## [1.0.11](https://github.com/jmaicaaan/commitji/compare/@commitji/core@1.0.10...@commitji/core@1.0.11) (2020-04-27) 15 | 16 | **Note:** Version bump only for package @commitji/core 17 | 18 | 19 | 20 | 21 | 22 | ## 1.0.10 (2020-04-27) 23 | 24 | 25 | 26 | ## 1.0.9-hot-release (2020-04-27) 27 | 28 | 29 | ### Bug Fixes 30 | 31 | * Updated prepublish script ([c3b2803](https://github.com/jmaicaaan/commitji/commit/c3b2803ebf38d295da6583504ffb65a12c4c07e9)) 32 | * Updated run scripts ([aaff54c](https://github.com/jmaicaaan/commitji/commit/aaff54c9e6f26b423119d3b766398b74917ece28)) 33 | 34 | 35 | 36 | ## 1.0.6-hot-release (2020-04-26) 37 | 38 | 39 | 40 | ## 1.0.5-hot-release (2020-04-26) 41 | 42 | 43 | 44 | ## 1.0.5-release (2020-04-26) 45 | 46 | 47 | 48 | ## 1.0.2-release (2020-04-25) 49 | 50 | 51 | 52 | 53 | 54 | ## 1.0.9 (2020-04-27) 55 | 56 | 57 | ### Bug Fixes 58 | 59 | * Updated prepublish script ([c3b2803](https://github.com/jmaicaaan/commitji/commit/c3b2803ebf38d295da6583504ffb65a12c4c07e9)) 60 | * Updated run scripts ([aaff54c](https://github.com/jmaicaaan/commitji/commit/aaff54c9e6f26b423119d3b766398b74917ece28)) 61 | 62 | 63 | 64 | ## 1.0.6-hot-release (2020-04-26) 65 | 66 | 67 | 68 | ## 1.0.5-hot-release (2020-04-26) 69 | 70 | 71 | 72 | ## 1.0.5-release (2020-04-26) 73 | 74 | 75 | 76 | ## 1.0.2-release (2020-04-25) 77 | -------------------------------------------------------------------------------- /packages/core/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 jmaicaaan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /packages/core/README.md: -------------------------------------------------------------------------------- 1 | # Welcome to @commitji/core 👋 2 | [![npm version](https://badge.fury.io/js/%40commitji%2Fcore.svg)](https://badge.fury.io/js/%40commitji%2Fcore) 3 | [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](#) 4 | 5 | > Create conventional commits with gitmojis 6 | 7 | ### 🏠 [Homepage](https://github.com/jmaicaaan/commitji) 8 | 9 | ## Author 10 | 11 | 👤 **JM Santos** 12 | 13 | * Website: https://github.com/jmaicaaan 14 | * Github: [@jmaicaaan](https://github.com/jmaicaaan) 15 | 16 | ## 🤝 Contributing 17 | 18 | Contributions, issues and feature requests are welcome! 19 | 20 | Feel free to check [issues page](https://github.com/jmaicaaan/system-media/issues). 21 | 22 | ## Show your support 23 | 24 | Give a ⭐️ if this project helped you! 25 | -------------------------------------------------------------------------------- /packages/core/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@commitji/core", 3 | "version": "1.0.12", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@commitji/core", 9 | "version": "1.0.12", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "@typescript-eslint/eslint-plugin": "^2.29.0", 13 | "@typescript-eslint/parser": "^2.29.0", 14 | "eslint": "^6.8.0", 15 | "rimraf": "^3.0.2", 16 | "typescript": "^3.8.3" 17 | } 18 | }, 19 | "node_modules/@babel/code-frame": { 20 | "version": "7.8.3", 21 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", 22 | "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", 23 | "dev": true, 24 | "dependencies": { 25 | "@babel/highlight": "^7.8.3" 26 | } 27 | }, 28 | "node_modules/@babel/helper-validator-identifier": { 29 | "version": "7.9.5", 30 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", 31 | "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", 32 | "dev": true 33 | }, 34 | "node_modules/@babel/highlight": { 35 | "version": "7.9.0", 36 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", 37 | "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", 38 | "dev": true, 39 | "dependencies": { 40 | "@babel/helper-validator-identifier": "^7.9.0", 41 | "chalk": "^2.0.0", 42 | "js-tokens": "^4.0.0" 43 | } 44 | }, 45 | "node_modules/@types/color-name": { 46 | "version": "1.1.1", 47 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 48 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 49 | "dev": true 50 | }, 51 | "node_modules/@types/eslint-visitor-keys": { 52 | "version": "1.0.0", 53 | "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 54 | "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", 55 | "dev": true 56 | }, 57 | "node_modules/@types/json-schema": { 58 | "version": "7.0.4", 59 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", 60 | "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", 61 | "dev": true 62 | }, 63 | "node_modules/@typescript-eslint/eslint-plugin": { 64 | "version": "2.29.0", 65 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.29.0.tgz", 66 | "integrity": "sha512-X/YAY7azKirENm4QRpT7OVmzok02cSkqeIcLmdz6gXUQG4Hk0Fi9oBAynSAyNXeGdMRuZvjBa0c1Lu0dn/u6VA==", 67 | "dev": true, 68 | "dependencies": { 69 | "@typescript-eslint/experimental-utils": "2.29.0", 70 | "functional-red-black-tree": "^1.0.1", 71 | "regexpp": "^3.0.0", 72 | "tsutils": "^3.17.1" 73 | }, 74 | "engines": { 75 | "node": "^8.10.0 || ^10.13.0 || >=11.10.1" 76 | }, 77 | "funding": { 78 | "type": "opencollective", 79 | "url": "https://opencollective.com/typescript-eslint" 80 | }, 81 | "peerDependencies": { 82 | "@typescript-eslint/parser": "^2.0.0", 83 | "eslint": "^5.0.0 || ^6.0.0" 84 | }, 85 | "peerDependenciesMeta": { 86 | "typescript": { 87 | "optional": true 88 | } 89 | } 90 | }, 91 | "node_modules/@typescript-eslint/experimental-utils": { 92 | "version": "2.29.0", 93 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.29.0.tgz", 94 | "integrity": "sha512-H/6VJr6eWYstyqjWXBP2Nn1hQJyvJoFdDtsHxGiD+lEP7piGnGpb/ZQd+z1ZSB1F7dN+WsxUDh8+S4LwI+f3jw==", 95 | "dev": true, 96 | "dependencies": { 97 | "@types/json-schema": "^7.0.3", 98 | "@typescript-eslint/typescript-estree": "2.29.0", 99 | "eslint-scope": "^5.0.0", 100 | "eslint-utils": "^2.0.0" 101 | }, 102 | "engines": { 103 | "node": "^8.10.0 || ^10.13.0 || >=11.10.1" 104 | }, 105 | "funding": { 106 | "type": "opencollective", 107 | "url": "https://opencollective.com/typescript-eslint" 108 | }, 109 | "peerDependencies": { 110 | "eslint": "*" 111 | } 112 | }, 113 | "node_modules/@typescript-eslint/parser": { 114 | "version": "2.29.0", 115 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.29.0.tgz", 116 | "integrity": "sha512-H78M+jcu5Tf6m/5N8iiFblUUv+HJDguMSdFfzwa6vSg9lKR8Mk9BsgeSjO8l2EshKnJKcbv0e8IDDOvSNjl0EA==", 117 | "dev": true, 118 | "dependencies": { 119 | "@types/eslint-visitor-keys": "^1.0.0", 120 | "@typescript-eslint/experimental-utils": "2.29.0", 121 | "@typescript-eslint/typescript-estree": "2.29.0", 122 | "eslint-visitor-keys": "^1.1.0" 123 | }, 124 | "engines": { 125 | "node": "^8.10.0 || ^10.13.0 || >=11.10.1" 126 | }, 127 | "funding": { 128 | "type": "opencollective", 129 | "url": "https://opencollective.com/typescript-eslint" 130 | }, 131 | "peerDependencies": { 132 | "eslint": "^5.0.0 || ^6.0.0" 133 | }, 134 | "peerDependenciesMeta": { 135 | "typescript": { 136 | "optional": true 137 | } 138 | } 139 | }, 140 | "node_modules/@typescript-eslint/typescript-estree": { 141 | "version": "2.29.0", 142 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.29.0.tgz", 143 | "integrity": "sha512-3YGbtnWy4az16Egy5Fj5CckkVlpIh0MADtAQza+jiMADRSKkjdpzZp/5WuvwK/Qib3Z0HtzrDFeWanS99dNhnA==", 144 | "dev": true, 145 | "dependencies": { 146 | "debug": "^4.1.1", 147 | "eslint-visitor-keys": "^1.1.0", 148 | "glob": "^7.1.6", 149 | "is-glob": "^4.0.1", 150 | "lodash": "^4.17.15", 151 | "semver": "^6.3.0", 152 | "tsutils": "^3.17.1" 153 | }, 154 | "engines": { 155 | "node": "^8.10.0 || ^10.13.0 || >=11.10.1" 156 | }, 157 | "funding": { 158 | "type": "opencollective", 159 | "url": "https://opencollective.com/typescript-eslint" 160 | }, 161 | "peerDependenciesMeta": { 162 | "typescript": { 163 | "optional": true 164 | } 165 | } 166 | }, 167 | "node_modules/acorn": { 168 | "version": "7.1.1", 169 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", 170 | "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", 171 | "dev": true, 172 | "bin": { 173 | "acorn": "bin/acorn" 174 | }, 175 | "engines": { 176 | "node": ">=0.4.0" 177 | } 178 | }, 179 | "node_modules/acorn-jsx": { 180 | "version": "5.2.0", 181 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", 182 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", 183 | "dev": true, 184 | "peerDependencies": { 185 | "acorn": "^6.0.0 || ^7.0.0" 186 | } 187 | }, 188 | "node_modules/ajv": { 189 | "version": "6.12.6", 190 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 191 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 192 | "dev": true, 193 | "dependencies": { 194 | "fast-deep-equal": "^3.1.1", 195 | "fast-json-stable-stringify": "^2.0.0", 196 | "json-schema-traverse": "^0.4.1", 197 | "uri-js": "^4.2.2" 198 | }, 199 | "funding": { 200 | "type": "github", 201 | "url": "https://github.com/sponsors/epoberezkin" 202 | } 203 | }, 204 | "node_modules/ansi-escapes": { 205 | "version": "4.3.1", 206 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 207 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 208 | "dev": true, 209 | "dependencies": { 210 | "type-fest": "^0.11.0" 211 | }, 212 | "engines": { 213 | "node": ">=8" 214 | }, 215 | "funding": { 216 | "url": "https://github.com/sponsors/sindresorhus" 217 | } 218 | }, 219 | "node_modules/ansi-escapes/node_modules/type-fest": { 220 | "version": "0.11.0", 221 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 222 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", 223 | "dev": true, 224 | "engines": { 225 | "node": ">=8" 226 | }, 227 | "funding": { 228 | "url": "https://github.com/sponsors/sindresorhus" 229 | } 230 | }, 231 | "node_modules/ansi-regex": { 232 | "version": "5.0.1", 233 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 234 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 235 | "dev": true, 236 | "engines": { 237 | "node": ">=8" 238 | } 239 | }, 240 | "node_modules/ansi-styles": { 241 | "version": "3.2.1", 242 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 243 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 244 | "dev": true, 245 | "dependencies": { 246 | "color-convert": "^1.9.0" 247 | }, 248 | "engines": { 249 | "node": ">=4" 250 | } 251 | }, 252 | "node_modules/argparse": { 253 | "version": "1.0.10", 254 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 255 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 256 | "dev": true, 257 | "dependencies": { 258 | "sprintf-js": "~1.0.2" 259 | } 260 | }, 261 | "node_modules/astral-regex": { 262 | "version": "1.0.0", 263 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 264 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 265 | "dev": true, 266 | "engines": { 267 | "node": ">=4" 268 | } 269 | }, 270 | "node_modules/balanced-match": { 271 | "version": "1.0.0", 272 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 273 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 274 | "dev": true 275 | }, 276 | "node_modules/brace-expansion": { 277 | "version": "1.1.11", 278 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 279 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 280 | "dev": true, 281 | "dependencies": { 282 | "balanced-match": "^1.0.0", 283 | "concat-map": "0.0.1" 284 | } 285 | }, 286 | "node_modules/callsites": { 287 | "version": "3.1.0", 288 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 289 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 290 | "dev": true, 291 | "engines": { 292 | "node": ">=6" 293 | } 294 | }, 295 | "node_modules/chalk": { 296 | "version": "2.4.2", 297 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 298 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 299 | "dev": true, 300 | "dependencies": { 301 | "ansi-styles": "^3.2.1", 302 | "escape-string-regexp": "^1.0.5", 303 | "supports-color": "^5.3.0" 304 | }, 305 | "engines": { 306 | "node": ">=4" 307 | } 308 | }, 309 | "node_modules/chardet": { 310 | "version": "0.7.0", 311 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 312 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 313 | "dev": true 314 | }, 315 | "node_modules/cli-cursor": { 316 | "version": "3.1.0", 317 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 318 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 319 | "dev": true, 320 | "dependencies": { 321 | "restore-cursor": "^3.1.0" 322 | }, 323 | "engines": { 324 | "node": ">=8" 325 | } 326 | }, 327 | "node_modules/cli-width": { 328 | "version": "2.2.1", 329 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 330 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", 331 | "dev": true 332 | }, 333 | "node_modules/color-convert": { 334 | "version": "1.9.3", 335 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 336 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 337 | "dev": true, 338 | "dependencies": { 339 | "color-name": "1.1.3" 340 | } 341 | }, 342 | "node_modules/color-name": { 343 | "version": "1.1.3", 344 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 345 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 346 | "dev": true 347 | }, 348 | "node_modules/concat-map": { 349 | "version": "0.0.1", 350 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 351 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 352 | "dev": true 353 | }, 354 | "node_modules/cross-spawn": { 355 | "version": "6.0.5", 356 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 357 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 358 | "dev": true, 359 | "dependencies": { 360 | "nice-try": "^1.0.4", 361 | "path-key": "^2.0.1", 362 | "semver": "^5.5.0", 363 | "shebang-command": "^1.2.0", 364 | "which": "^1.2.9" 365 | }, 366 | "engines": { 367 | "node": ">=4.8" 368 | } 369 | }, 370 | "node_modules/cross-spawn/node_modules/semver": { 371 | "version": "5.7.1", 372 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 373 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 374 | "dev": true, 375 | "bin": { 376 | "semver": "bin/semver" 377 | } 378 | }, 379 | "node_modules/debug": { 380 | "version": "4.1.1", 381 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 382 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 383 | "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", 384 | "dev": true, 385 | "dependencies": { 386 | "ms": "^2.1.1" 387 | } 388 | }, 389 | "node_modules/deep-is": { 390 | "version": "0.1.3", 391 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 392 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 393 | "dev": true 394 | }, 395 | "node_modules/doctrine": { 396 | "version": "3.0.0", 397 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 398 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 399 | "dev": true, 400 | "dependencies": { 401 | "esutils": "^2.0.2" 402 | }, 403 | "engines": { 404 | "node": ">=6.0.0" 405 | } 406 | }, 407 | "node_modules/emoji-regex": { 408 | "version": "8.0.0", 409 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 410 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 411 | "dev": true 412 | }, 413 | "node_modules/escape-string-regexp": { 414 | "version": "1.0.5", 415 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 416 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 417 | "dev": true, 418 | "engines": { 419 | "node": ">=0.8.0" 420 | } 421 | }, 422 | "node_modules/eslint": { 423 | "version": "6.8.0", 424 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", 425 | "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", 426 | "dev": true, 427 | "dependencies": { 428 | "@babel/code-frame": "^7.0.0", 429 | "ajv": "^6.10.0", 430 | "chalk": "^2.1.0", 431 | "cross-spawn": "^6.0.5", 432 | "debug": "^4.0.1", 433 | "doctrine": "^3.0.0", 434 | "eslint-scope": "^5.0.0", 435 | "eslint-utils": "^1.4.3", 436 | "eslint-visitor-keys": "^1.1.0", 437 | "espree": "^6.1.2", 438 | "esquery": "^1.0.1", 439 | "esutils": "^2.0.2", 440 | "file-entry-cache": "^5.0.1", 441 | "functional-red-black-tree": "^1.0.1", 442 | "glob-parent": "^5.0.0", 443 | "globals": "^12.1.0", 444 | "ignore": "^4.0.6", 445 | "import-fresh": "^3.0.0", 446 | "imurmurhash": "^0.1.4", 447 | "inquirer": "^7.0.0", 448 | "is-glob": "^4.0.0", 449 | "js-yaml": "^3.13.1", 450 | "json-stable-stringify-without-jsonify": "^1.0.1", 451 | "levn": "^0.3.0", 452 | "lodash": "^4.17.14", 453 | "minimatch": "^3.0.4", 454 | "mkdirp": "^0.5.1", 455 | "natural-compare": "^1.4.0", 456 | "optionator": "^0.8.3", 457 | "progress": "^2.0.0", 458 | "regexpp": "^2.0.1", 459 | "semver": "^6.1.2", 460 | "strip-ansi": "^5.2.0", 461 | "strip-json-comments": "^3.0.1", 462 | "table": "^5.2.3", 463 | "text-table": "^0.2.0", 464 | "v8-compile-cache": "^2.0.3" 465 | }, 466 | "bin": { 467 | "eslint": "bin/eslint.js" 468 | }, 469 | "engines": { 470 | "node": "^8.10.0 || ^10.13.0 || >=11.10.1" 471 | }, 472 | "funding": { 473 | "url": "https://opencollective.com/eslint" 474 | } 475 | }, 476 | "node_modules/eslint-scope": { 477 | "version": "5.0.0", 478 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", 479 | "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", 480 | "dev": true, 481 | "dependencies": { 482 | "esrecurse": "^4.1.0", 483 | "estraverse": "^4.1.1" 484 | }, 485 | "engines": { 486 | "node": ">=8.0.0" 487 | } 488 | }, 489 | "node_modules/eslint-utils": { 490 | "version": "2.0.0", 491 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", 492 | "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", 493 | "dev": true, 494 | "dependencies": { 495 | "eslint-visitor-keys": "^1.1.0" 496 | }, 497 | "engines": { 498 | "node": ">=6" 499 | } 500 | }, 501 | "node_modules/eslint-visitor-keys": { 502 | "version": "1.1.0", 503 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 504 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 505 | "dev": true, 506 | "engines": { 507 | "node": ">=4" 508 | } 509 | }, 510 | "node_modules/eslint/node_modules/eslint-utils": { 511 | "version": "1.4.3", 512 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", 513 | "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", 514 | "dev": true, 515 | "dependencies": { 516 | "eslint-visitor-keys": "^1.1.0" 517 | }, 518 | "engines": { 519 | "node": ">=6" 520 | } 521 | }, 522 | "node_modules/eslint/node_modules/regexpp": { 523 | "version": "2.0.1", 524 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 525 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", 526 | "dev": true, 527 | "engines": { 528 | "node": ">=6.5.0" 529 | } 530 | }, 531 | "node_modules/espree": { 532 | "version": "6.2.1", 533 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", 534 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", 535 | "dev": true, 536 | "dependencies": { 537 | "acorn": "^7.1.1", 538 | "acorn-jsx": "^5.2.0", 539 | "eslint-visitor-keys": "^1.1.0" 540 | }, 541 | "engines": { 542 | "node": ">=6.0.0" 543 | } 544 | }, 545 | "node_modules/esprima": { 546 | "version": "4.0.1", 547 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 548 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 549 | "dev": true, 550 | "bin": { 551 | "esparse": "bin/esparse.js", 552 | "esvalidate": "bin/esvalidate.js" 553 | }, 554 | "engines": { 555 | "node": ">=4" 556 | } 557 | }, 558 | "node_modules/esquery": { 559 | "version": "1.3.1", 560 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 561 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 562 | "dev": true, 563 | "dependencies": { 564 | "estraverse": "^5.1.0" 565 | }, 566 | "engines": { 567 | "node": ">=0.10" 568 | } 569 | }, 570 | "node_modules/esquery/node_modules/estraverse": { 571 | "version": "5.1.0", 572 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", 573 | "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", 574 | "dev": true, 575 | "engines": { 576 | "node": ">=4.0" 577 | } 578 | }, 579 | "node_modules/esrecurse": { 580 | "version": "4.2.1", 581 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 582 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 583 | "dev": true, 584 | "dependencies": { 585 | "estraverse": "^4.1.0" 586 | }, 587 | "engines": { 588 | "node": ">=4.0" 589 | } 590 | }, 591 | "node_modules/estraverse": { 592 | "version": "4.3.0", 593 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 594 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 595 | "dev": true, 596 | "engines": { 597 | "node": ">=4.0" 598 | } 599 | }, 600 | "node_modules/esutils": { 601 | "version": "2.0.3", 602 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 603 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 604 | "dev": true, 605 | "engines": { 606 | "node": ">=0.10.0" 607 | } 608 | }, 609 | "node_modules/external-editor": { 610 | "version": "3.1.0", 611 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 612 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 613 | "dev": true, 614 | "dependencies": { 615 | "chardet": "^0.7.0", 616 | "iconv-lite": "^0.4.24", 617 | "tmp": "^0.0.33" 618 | }, 619 | "engines": { 620 | "node": ">=4" 621 | } 622 | }, 623 | "node_modules/fast-deep-equal": { 624 | "version": "3.1.1", 625 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 626 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", 627 | "dev": true 628 | }, 629 | "node_modules/fast-json-stable-stringify": { 630 | "version": "2.1.0", 631 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 632 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 633 | "dev": true 634 | }, 635 | "node_modules/fast-levenshtein": { 636 | "version": "2.0.6", 637 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 638 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 639 | "dev": true 640 | }, 641 | "node_modules/figures": { 642 | "version": "3.2.0", 643 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 644 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 645 | "dev": true, 646 | "dependencies": { 647 | "escape-string-regexp": "^1.0.5" 648 | }, 649 | "engines": { 650 | "node": ">=8" 651 | }, 652 | "funding": { 653 | "url": "https://github.com/sponsors/sindresorhus" 654 | } 655 | }, 656 | "node_modules/file-entry-cache": { 657 | "version": "5.0.1", 658 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 659 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 660 | "dev": true, 661 | "dependencies": { 662 | "flat-cache": "^2.0.1" 663 | }, 664 | "engines": { 665 | "node": ">=4" 666 | } 667 | }, 668 | "node_modules/flat-cache": { 669 | "version": "2.0.1", 670 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 671 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 672 | "dev": true, 673 | "dependencies": { 674 | "flatted": "^2.0.0", 675 | "rimraf": "2.6.3", 676 | "write": "1.0.3" 677 | }, 678 | "engines": { 679 | "node": ">=4" 680 | } 681 | }, 682 | "node_modules/flat-cache/node_modules/rimraf": { 683 | "version": "2.6.3", 684 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 685 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 686 | "dev": true, 687 | "dependencies": { 688 | "glob": "^7.1.3" 689 | }, 690 | "bin": { 691 | "rimraf": "bin.js" 692 | } 693 | }, 694 | "node_modules/flatted": { 695 | "version": "2.0.2", 696 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", 697 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", 698 | "dev": true 699 | }, 700 | "node_modules/fs.realpath": { 701 | "version": "1.0.0", 702 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 703 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 704 | "dev": true 705 | }, 706 | "node_modules/functional-red-black-tree": { 707 | "version": "1.0.1", 708 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 709 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 710 | "dev": true 711 | }, 712 | "node_modules/glob": { 713 | "version": "7.1.6", 714 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 715 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 716 | "dev": true, 717 | "dependencies": { 718 | "fs.realpath": "^1.0.0", 719 | "inflight": "^1.0.4", 720 | "inherits": "2", 721 | "minimatch": "^3.0.4", 722 | "once": "^1.3.0", 723 | "path-is-absolute": "^1.0.0" 724 | }, 725 | "engines": { 726 | "node": "*" 727 | }, 728 | "funding": { 729 | "url": "https://github.com/sponsors/isaacs" 730 | } 731 | }, 732 | "node_modules/glob-parent": { 733 | "version": "5.1.2", 734 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 735 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 736 | "dev": true, 737 | "dependencies": { 738 | "is-glob": "^4.0.1" 739 | }, 740 | "engines": { 741 | "node": ">= 6" 742 | } 743 | }, 744 | "node_modules/globals": { 745 | "version": "12.4.0", 746 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 747 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 748 | "dev": true, 749 | "dependencies": { 750 | "type-fest": "^0.8.1" 751 | }, 752 | "engines": { 753 | "node": ">=8" 754 | }, 755 | "funding": { 756 | "url": "https://github.com/sponsors/sindresorhus" 757 | } 758 | }, 759 | "node_modules/has-flag": { 760 | "version": "3.0.0", 761 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 762 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 763 | "dev": true, 764 | "engines": { 765 | "node": ">=4" 766 | } 767 | }, 768 | "node_modules/iconv-lite": { 769 | "version": "0.4.24", 770 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 771 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 772 | "dev": true, 773 | "dependencies": { 774 | "safer-buffer": ">= 2.1.2 < 3" 775 | }, 776 | "engines": { 777 | "node": ">=0.10.0" 778 | } 779 | }, 780 | "node_modules/ignore": { 781 | "version": "4.0.6", 782 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 783 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 784 | "dev": true, 785 | "engines": { 786 | "node": ">= 4" 787 | } 788 | }, 789 | "node_modules/import-fresh": { 790 | "version": "3.2.1", 791 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 792 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 793 | "dev": true, 794 | "dependencies": { 795 | "parent-module": "^1.0.0", 796 | "resolve-from": "^4.0.0" 797 | }, 798 | "engines": { 799 | "node": ">=6" 800 | } 801 | }, 802 | "node_modules/imurmurhash": { 803 | "version": "0.1.4", 804 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 805 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 806 | "dev": true, 807 | "engines": { 808 | "node": ">=0.8.19" 809 | } 810 | }, 811 | "node_modules/inflight": { 812 | "version": "1.0.6", 813 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 814 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 815 | "dev": true, 816 | "dependencies": { 817 | "once": "^1.3.0", 818 | "wrappy": "1" 819 | } 820 | }, 821 | "node_modules/inherits": { 822 | "version": "2.0.4", 823 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 824 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 825 | "dev": true 826 | }, 827 | "node_modules/inquirer": { 828 | "version": "7.1.0", 829 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", 830 | "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", 831 | "dev": true, 832 | "dependencies": { 833 | "ansi-escapes": "^4.2.1", 834 | "chalk": "^3.0.0", 835 | "cli-cursor": "^3.1.0", 836 | "cli-width": "^2.0.0", 837 | "external-editor": "^3.0.3", 838 | "figures": "^3.0.0", 839 | "lodash": "^4.17.15", 840 | "mute-stream": "0.0.8", 841 | "run-async": "^2.4.0", 842 | "rxjs": "^6.5.3", 843 | "string-width": "^4.1.0", 844 | "strip-ansi": "^6.0.0", 845 | "through": "^2.3.6" 846 | }, 847 | "engines": { 848 | "node": ">=6.0.0" 849 | } 850 | }, 851 | "node_modules/inquirer/node_modules/ansi-styles": { 852 | "version": "4.2.1", 853 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 854 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 855 | "dev": true, 856 | "dependencies": { 857 | "@types/color-name": "^1.1.1", 858 | "color-convert": "^2.0.1" 859 | }, 860 | "engines": { 861 | "node": ">=8" 862 | }, 863 | "funding": { 864 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 865 | } 866 | }, 867 | "node_modules/inquirer/node_modules/chalk": { 868 | "version": "3.0.0", 869 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 870 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 871 | "dev": true, 872 | "dependencies": { 873 | "ansi-styles": "^4.1.0", 874 | "supports-color": "^7.1.0" 875 | }, 876 | "engines": { 877 | "node": ">=8" 878 | } 879 | }, 880 | "node_modules/inquirer/node_modules/color-convert": { 881 | "version": "2.0.1", 882 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 883 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 884 | "dev": true, 885 | "dependencies": { 886 | "color-name": "~1.1.4" 887 | }, 888 | "engines": { 889 | "node": ">=7.0.0" 890 | } 891 | }, 892 | "node_modules/inquirer/node_modules/color-name": { 893 | "version": "1.1.4", 894 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 895 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 896 | "dev": true 897 | }, 898 | "node_modules/inquirer/node_modules/has-flag": { 899 | "version": "4.0.0", 900 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 901 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 902 | "dev": true, 903 | "engines": { 904 | "node": ">=8" 905 | } 906 | }, 907 | "node_modules/inquirer/node_modules/strip-ansi": { 908 | "version": "6.0.0", 909 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 910 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 911 | "dev": true, 912 | "dependencies": { 913 | "ansi-regex": "^5.0.0" 914 | }, 915 | "engines": { 916 | "node": ">=8" 917 | } 918 | }, 919 | "node_modules/inquirer/node_modules/supports-color": { 920 | "version": "7.1.0", 921 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 922 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 923 | "dev": true, 924 | "dependencies": { 925 | "has-flag": "^4.0.0" 926 | }, 927 | "engines": { 928 | "node": ">=8" 929 | } 930 | }, 931 | "node_modules/is-extglob": { 932 | "version": "2.1.1", 933 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 934 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 935 | "dev": true, 936 | "engines": { 937 | "node": ">=0.10.0" 938 | } 939 | }, 940 | "node_modules/is-fullwidth-code-point": { 941 | "version": "3.0.0", 942 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 943 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 944 | "dev": true, 945 | "engines": { 946 | "node": ">=8" 947 | } 948 | }, 949 | "node_modules/is-glob": { 950 | "version": "4.0.1", 951 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 952 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 953 | "dev": true, 954 | "dependencies": { 955 | "is-extglob": "^2.1.1" 956 | }, 957 | "engines": { 958 | "node": ">=0.10.0" 959 | } 960 | }, 961 | "node_modules/is-promise": { 962 | "version": "2.1.0", 963 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 964 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 965 | "dev": true 966 | }, 967 | "node_modules/isexe": { 968 | "version": "2.0.0", 969 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 970 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 971 | "dev": true 972 | }, 973 | "node_modules/js-tokens": { 974 | "version": "4.0.0", 975 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 976 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 977 | "dev": true 978 | }, 979 | "node_modules/js-yaml": { 980 | "version": "3.13.1", 981 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 982 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 983 | "dev": true, 984 | "dependencies": { 985 | "argparse": "^1.0.7", 986 | "esprima": "^4.0.0" 987 | }, 988 | "bin": { 989 | "js-yaml": "bin/js-yaml.js" 990 | } 991 | }, 992 | "node_modules/json-schema-traverse": { 993 | "version": "0.4.1", 994 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 995 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 996 | "dev": true 997 | }, 998 | "node_modules/json-stable-stringify-without-jsonify": { 999 | "version": "1.0.1", 1000 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1001 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1002 | "dev": true 1003 | }, 1004 | "node_modules/levn": { 1005 | "version": "0.3.0", 1006 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1007 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1008 | "dev": true, 1009 | "dependencies": { 1010 | "prelude-ls": "~1.1.2", 1011 | "type-check": "~0.3.2" 1012 | }, 1013 | "engines": { 1014 | "node": ">= 0.8.0" 1015 | } 1016 | }, 1017 | "node_modules/lodash": { 1018 | "version": "4.17.21", 1019 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1020 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1021 | "dev": true 1022 | }, 1023 | "node_modules/mimic-fn": { 1024 | "version": "2.1.0", 1025 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1026 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1027 | "dev": true, 1028 | "engines": { 1029 | "node": ">=6" 1030 | } 1031 | }, 1032 | "node_modules/minimatch": { 1033 | "version": "3.0.4", 1034 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1035 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1036 | "dev": true, 1037 | "dependencies": { 1038 | "brace-expansion": "^1.1.7" 1039 | }, 1040 | "engines": { 1041 | "node": "*" 1042 | } 1043 | }, 1044 | "node_modules/minimist": { 1045 | "version": "1.2.6", 1046 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1047 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 1048 | "dev": true 1049 | }, 1050 | "node_modules/mkdirp": { 1051 | "version": "0.5.5", 1052 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1053 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1054 | "dev": true, 1055 | "dependencies": { 1056 | "minimist": "^1.2.5" 1057 | }, 1058 | "bin": { 1059 | "mkdirp": "bin/cmd.js" 1060 | } 1061 | }, 1062 | "node_modules/ms": { 1063 | "version": "2.1.2", 1064 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1065 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1066 | "dev": true 1067 | }, 1068 | "node_modules/mute-stream": { 1069 | "version": "0.0.8", 1070 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 1071 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 1072 | "dev": true 1073 | }, 1074 | "node_modules/natural-compare": { 1075 | "version": "1.4.0", 1076 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1077 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1078 | "dev": true 1079 | }, 1080 | "node_modules/nice-try": { 1081 | "version": "1.0.5", 1082 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1083 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 1084 | "dev": true 1085 | }, 1086 | "node_modules/once": { 1087 | "version": "1.4.0", 1088 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1089 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1090 | "dev": true, 1091 | "dependencies": { 1092 | "wrappy": "1" 1093 | } 1094 | }, 1095 | "node_modules/onetime": { 1096 | "version": "5.1.0", 1097 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 1098 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 1099 | "dev": true, 1100 | "dependencies": { 1101 | "mimic-fn": "^2.1.0" 1102 | }, 1103 | "engines": { 1104 | "node": ">=6" 1105 | } 1106 | }, 1107 | "node_modules/optionator": { 1108 | "version": "0.8.3", 1109 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1110 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1111 | "dev": true, 1112 | "dependencies": { 1113 | "deep-is": "~0.1.3", 1114 | "fast-levenshtein": "~2.0.6", 1115 | "levn": "~0.3.0", 1116 | "prelude-ls": "~1.1.2", 1117 | "type-check": "~0.3.2", 1118 | "word-wrap": "~1.2.3" 1119 | }, 1120 | "engines": { 1121 | "node": ">= 0.8.0" 1122 | } 1123 | }, 1124 | "node_modules/os-tmpdir": { 1125 | "version": "1.0.2", 1126 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1127 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1128 | "dev": true, 1129 | "engines": { 1130 | "node": ">=0.10.0" 1131 | } 1132 | }, 1133 | "node_modules/parent-module": { 1134 | "version": "1.0.1", 1135 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1136 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1137 | "dev": true, 1138 | "dependencies": { 1139 | "callsites": "^3.0.0" 1140 | }, 1141 | "engines": { 1142 | "node": ">=6" 1143 | } 1144 | }, 1145 | "node_modules/path-is-absolute": { 1146 | "version": "1.0.1", 1147 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1148 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1149 | "dev": true, 1150 | "engines": { 1151 | "node": ">=0.10.0" 1152 | } 1153 | }, 1154 | "node_modules/path-key": { 1155 | "version": "2.0.1", 1156 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1157 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1158 | "dev": true, 1159 | "engines": { 1160 | "node": ">=4" 1161 | } 1162 | }, 1163 | "node_modules/prelude-ls": { 1164 | "version": "1.1.2", 1165 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1166 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1167 | "dev": true, 1168 | "engines": { 1169 | "node": ">= 0.8.0" 1170 | } 1171 | }, 1172 | "node_modules/progress": { 1173 | "version": "2.0.3", 1174 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1175 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1176 | "dev": true, 1177 | "engines": { 1178 | "node": ">=0.4.0" 1179 | } 1180 | }, 1181 | "node_modules/punycode": { 1182 | "version": "2.1.1", 1183 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1184 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1185 | "dev": true, 1186 | "engines": { 1187 | "node": ">=6" 1188 | } 1189 | }, 1190 | "node_modules/regexpp": { 1191 | "version": "3.1.0", 1192 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 1193 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 1194 | "dev": true, 1195 | "engines": { 1196 | "node": ">=8" 1197 | }, 1198 | "funding": { 1199 | "url": "https://github.com/sponsors/mysticatea" 1200 | } 1201 | }, 1202 | "node_modules/resolve-from": { 1203 | "version": "4.0.0", 1204 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1205 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1206 | "dev": true, 1207 | "engines": { 1208 | "node": ">=4" 1209 | } 1210 | }, 1211 | "node_modules/restore-cursor": { 1212 | "version": "3.1.0", 1213 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1214 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1215 | "dev": true, 1216 | "dependencies": { 1217 | "onetime": "^5.1.0", 1218 | "signal-exit": "^3.0.2" 1219 | }, 1220 | "engines": { 1221 | "node": ">=8" 1222 | } 1223 | }, 1224 | "node_modules/rimraf": { 1225 | "version": "3.0.2", 1226 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1227 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1228 | "dev": true, 1229 | "dependencies": { 1230 | "glob": "^7.1.3" 1231 | }, 1232 | "bin": { 1233 | "rimraf": "bin.js" 1234 | }, 1235 | "funding": { 1236 | "url": "https://github.com/sponsors/isaacs" 1237 | } 1238 | }, 1239 | "node_modules/run-async": { 1240 | "version": "2.4.0", 1241 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", 1242 | "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", 1243 | "dev": true, 1244 | "dependencies": { 1245 | "is-promise": "^2.1.0" 1246 | }, 1247 | "engines": { 1248 | "node": ">=0.12.0" 1249 | } 1250 | }, 1251 | "node_modules/rxjs": { 1252 | "version": "6.5.5", 1253 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", 1254 | "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", 1255 | "dev": true, 1256 | "dependencies": { 1257 | "tslib": "^1.9.0" 1258 | }, 1259 | "engines": { 1260 | "npm": ">=2.0.0" 1261 | } 1262 | }, 1263 | "node_modules/safer-buffer": { 1264 | "version": "2.1.2", 1265 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1266 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1267 | "dev": true 1268 | }, 1269 | "node_modules/semver": { 1270 | "version": "6.3.0", 1271 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1272 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1273 | "dev": true, 1274 | "bin": { 1275 | "semver": "bin/semver.js" 1276 | } 1277 | }, 1278 | "node_modules/shebang-command": { 1279 | "version": "1.2.0", 1280 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1281 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1282 | "dev": true, 1283 | "dependencies": { 1284 | "shebang-regex": "^1.0.0" 1285 | }, 1286 | "engines": { 1287 | "node": ">=0.10.0" 1288 | } 1289 | }, 1290 | "node_modules/shebang-regex": { 1291 | "version": "1.0.0", 1292 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1293 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1294 | "dev": true, 1295 | "engines": { 1296 | "node": ">=0.10.0" 1297 | } 1298 | }, 1299 | "node_modules/signal-exit": { 1300 | "version": "3.0.3", 1301 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 1302 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 1303 | "dev": true 1304 | }, 1305 | "node_modules/slice-ansi": { 1306 | "version": "2.1.0", 1307 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 1308 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 1309 | "dev": true, 1310 | "dependencies": { 1311 | "ansi-styles": "^3.2.0", 1312 | "astral-regex": "^1.0.0", 1313 | "is-fullwidth-code-point": "^2.0.0" 1314 | }, 1315 | "engines": { 1316 | "node": ">=6" 1317 | } 1318 | }, 1319 | "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { 1320 | "version": "2.0.0", 1321 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1322 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1323 | "dev": true, 1324 | "engines": { 1325 | "node": ">=4" 1326 | } 1327 | }, 1328 | "node_modules/sprintf-js": { 1329 | "version": "1.0.3", 1330 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1331 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1332 | "dev": true 1333 | }, 1334 | "node_modules/string-width": { 1335 | "version": "4.2.0", 1336 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1337 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1338 | "dev": true, 1339 | "dependencies": { 1340 | "emoji-regex": "^8.0.0", 1341 | "is-fullwidth-code-point": "^3.0.0", 1342 | "strip-ansi": "^6.0.0" 1343 | }, 1344 | "engines": { 1345 | "node": ">=8" 1346 | } 1347 | }, 1348 | "node_modules/string-width/node_modules/strip-ansi": { 1349 | "version": "6.0.0", 1350 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1351 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1352 | "dev": true, 1353 | "dependencies": { 1354 | "ansi-regex": "^5.0.0" 1355 | }, 1356 | "engines": { 1357 | "node": ">=8" 1358 | } 1359 | }, 1360 | "node_modules/strip-ansi": { 1361 | "version": "5.2.0", 1362 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1363 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1364 | "dev": true, 1365 | "dependencies": { 1366 | "ansi-regex": "^4.1.0" 1367 | }, 1368 | "engines": { 1369 | "node": ">=6" 1370 | } 1371 | }, 1372 | "node_modules/strip-ansi/node_modules/ansi-regex": { 1373 | "version": "4.1.1", 1374 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 1375 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", 1376 | "dev": true, 1377 | "engines": { 1378 | "node": ">=6" 1379 | } 1380 | }, 1381 | "node_modules/strip-json-comments": { 1382 | "version": "3.1.0", 1383 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", 1384 | "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", 1385 | "dev": true, 1386 | "engines": { 1387 | "node": ">=8" 1388 | } 1389 | }, 1390 | "node_modules/supports-color": { 1391 | "version": "5.5.0", 1392 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1393 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1394 | "dev": true, 1395 | "dependencies": { 1396 | "has-flag": "^3.0.0" 1397 | }, 1398 | "engines": { 1399 | "node": ">=4" 1400 | } 1401 | }, 1402 | "node_modules/table": { 1403 | "version": "5.4.6", 1404 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 1405 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 1406 | "dev": true, 1407 | "dependencies": { 1408 | "ajv": "^6.10.2", 1409 | "lodash": "^4.17.14", 1410 | "slice-ansi": "^2.1.0", 1411 | "string-width": "^3.0.0" 1412 | }, 1413 | "engines": { 1414 | "node": ">=6.0.0" 1415 | } 1416 | }, 1417 | "node_modules/table/node_modules/emoji-regex": { 1418 | "version": "7.0.3", 1419 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 1420 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 1421 | "dev": true 1422 | }, 1423 | "node_modules/table/node_modules/is-fullwidth-code-point": { 1424 | "version": "2.0.0", 1425 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1426 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1427 | "dev": true, 1428 | "engines": { 1429 | "node": ">=4" 1430 | } 1431 | }, 1432 | "node_modules/table/node_modules/string-width": { 1433 | "version": "3.1.0", 1434 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1435 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1436 | "dev": true, 1437 | "dependencies": { 1438 | "emoji-regex": "^7.0.1", 1439 | "is-fullwidth-code-point": "^2.0.0", 1440 | "strip-ansi": "^5.1.0" 1441 | }, 1442 | "engines": { 1443 | "node": ">=6" 1444 | } 1445 | }, 1446 | "node_modules/text-table": { 1447 | "version": "0.2.0", 1448 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1449 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1450 | "dev": true 1451 | }, 1452 | "node_modules/through": { 1453 | "version": "2.3.8", 1454 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1455 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1456 | "dev": true 1457 | }, 1458 | "node_modules/tmp": { 1459 | "version": "0.0.33", 1460 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1461 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1462 | "dev": true, 1463 | "dependencies": { 1464 | "os-tmpdir": "~1.0.2" 1465 | }, 1466 | "engines": { 1467 | "node": ">=0.6.0" 1468 | } 1469 | }, 1470 | "node_modules/tslib": { 1471 | "version": "1.11.1", 1472 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", 1473 | "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", 1474 | "dev": true 1475 | }, 1476 | "node_modules/tsutils": { 1477 | "version": "3.17.1", 1478 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", 1479 | "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", 1480 | "dev": true, 1481 | "dependencies": { 1482 | "tslib": "^1.8.1" 1483 | }, 1484 | "engines": { 1485 | "node": ">= 6" 1486 | }, 1487 | "peerDependencies": { 1488 | "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" 1489 | } 1490 | }, 1491 | "node_modules/type-check": { 1492 | "version": "0.3.2", 1493 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1494 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1495 | "dev": true, 1496 | "dependencies": { 1497 | "prelude-ls": "~1.1.2" 1498 | }, 1499 | "engines": { 1500 | "node": ">= 0.8.0" 1501 | } 1502 | }, 1503 | "node_modules/type-fest": { 1504 | "version": "0.8.1", 1505 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1506 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 1507 | "dev": true, 1508 | "engines": { 1509 | "node": ">=8" 1510 | } 1511 | }, 1512 | "node_modules/typescript": { 1513 | "version": "3.8.3", 1514 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", 1515 | "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", 1516 | "dev": true, 1517 | "bin": { 1518 | "tsc": "bin/tsc", 1519 | "tsserver": "bin/tsserver" 1520 | }, 1521 | "engines": { 1522 | "node": ">=4.2.0" 1523 | } 1524 | }, 1525 | "node_modules/uri-js": { 1526 | "version": "4.2.2", 1527 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1528 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1529 | "dev": true, 1530 | "dependencies": { 1531 | "punycode": "^2.1.0" 1532 | } 1533 | }, 1534 | "node_modules/v8-compile-cache": { 1535 | "version": "2.1.0", 1536 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", 1537 | "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", 1538 | "dev": true 1539 | }, 1540 | "node_modules/which": { 1541 | "version": "1.3.1", 1542 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1543 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1544 | "dev": true, 1545 | "dependencies": { 1546 | "isexe": "^2.0.0" 1547 | }, 1548 | "bin": { 1549 | "which": "bin/which" 1550 | } 1551 | }, 1552 | "node_modules/word-wrap": { 1553 | "version": "1.2.3", 1554 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1555 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1556 | "dev": true, 1557 | "engines": { 1558 | "node": ">=0.10.0" 1559 | } 1560 | }, 1561 | "node_modules/wrappy": { 1562 | "version": "1.0.2", 1563 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1564 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1565 | "dev": true 1566 | }, 1567 | "node_modules/write": { 1568 | "version": "1.0.3", 1569 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 1570 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 1571 | "dev": true, 1572 | "dependencies": { 1573 | "mkdirp": "^0.5.1" 1574 | }, 1575 | "engines": { 1576 | "node": ">=4" 1577 | } 1578 | } 1579 | }, 1580 | "dependencies": { 1581 | "@babel/code-frame": { 1582 | "version": "7.8.3", 1583 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", 1584 | "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", 1585 | "dev": true, 1586 | "requires": { 1587 | "@babel/highlight": "^7.8.3" 1588 | } 1589 | }, 1590 | "@babel/helper-validator-identifier": { 1591 | "version": "7.9.5", 1592 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", 1593 | "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", 1594 | "dev": true 1595 | }, 1596 | "@babel/highlight": { 1597 | "version": "7.9.0", 1598 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", 1599 | "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", 1600 | "dev": true, 1601 | "requires": { 1602 | "@babel/helper-validator-identifier": "^7.9.0", 1603 | "chalk": "^2.0.0", 1604 | "js-tokens": "^4.0.0" 1605 | } 1606 | }, 1607 | "@types/color-name": { 1608 | "version": "1.1.1", 1609 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 1610 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 1611 | "dev": true 1612 | }, 1613 | "@types/eslint-visitor-keys": { 1614 | "version": "1.0.0", 1615 | "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 1616 | "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", 1617 | "dev": true 1618 | }, 1619 | "@types/json-schema": { 1620 | "version": "7.0.4", 1621 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", 1622 | "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", 1623 | "dev": true 1624 | }, 1625 | "@typescript-eslint/eslint-plugin": { 1626 | "version": "2.29.0", 1627 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.29.0.tgz", 1628 | "integrity": "sha512-X/YAY7azKirENm4QRpT7OVmzok02cSkqeIcLmdz6gXUQG4Hk0Fi9oBAynSAyNXeGdMRuZvjBa0c1Lu0dn/u6VA==", 1629 | "dev": true, 1630 | "requires": { 1631 | "@typescript-eslint/experimental-utils": "2.29.0", 1632 | "functional-red-black-tree": "^1.0.1", 1633 | "regexpp": "^3.0.0", 1634 | "tsutils": "^3.17.1" 1635 | } 1636 | }, 1637 | "@typescript-eslint/experimental-utils": { 1638 | "version": "2.29.0", 1639 | "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.29.0.tgz", 1640 | "integrity": "sha512-H/6VJr6eWYstyqjWXBP2Nn1hQJyvJoFdDtsHxGiD+lEP7piGnGpb/ZQd+z1ZSB1F7dN+WsxUDh8+S4LwI+f3jw==", 1641 | "dev": true, 1642 | "requires": { 1643 | "@types/json-schema": "^7.0.3", 1644 | "@typescript-eslint/typescript-estree": "2.29.0", 1645 | "eslint-scope": "^5.0.0", 1646 | "eslint-utils": "^2.0.0" 1647 | } 1648 | }, 1649 | "@typescript-eslint/parser": { 1650 | "version": "2.29.0", 1651 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.29.0.tgz", 1652 | "integrity": "sha512-H78M+jcu5Tf6m/5N8iiFblUUv+HJDguMSdFfzwa6vSg9lKR8Mk9BsgeSjO8l2EshKnJKcbv0e8IDDOvSNjl0EA==", 1653 | "dev": true, 1654 | "requires": { 1655 | "@types/eslint-visitor-keys": "^1.0.0", 1656 | "@typescript-eslint/experimental-utils": "2.29.0", 1657 | "@typescript-eslint/typescript-estree": "2.29.0", 1658 | "eslint-visitor-keys": "^1.1.0" 1659 | } 1660 | }, 1661 | "@typescript-eslint/typescript-estree": { 1662 | "version": "2.29.0", 1663 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.29.0.tgz", 1664 | "integrity": "sha512-3YGbtnWy4az16Egy5Fj5CckkVlpIh0MADtAQza+jiMADRSKkjdpzZp/5WuvwK/Qib3Z0HtzrDFeWanS99dNhnA==", 1665 | "dev": true, 1666 | "requires": { 1667 | "debug": "^4.1.1", 1668 | "eslint-visitor-keys": "^1.1.0", 1669 | "glob": "^7.1.6", 1670 | "is-glob": "^4.0.1", 1671 | "lodash": "^4.17.15", 1672 | "semver": "^6.3.0", 1673 | "tsutils": "^3.17.1" 1674 | } 1675 | }, 1676 | "acorn": { 1677 | "version": "7.1.1", 1678 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", 1679 | "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", 1680 | "dev": true 1681 | }, 1682 | "acorn-jsx": { 1683 | "version": "5.2.0", 1684 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", 1685 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", 1686 | "dev": true, 1687 | "requires": {} 1688 | }, 1689 | "ajv": { 1690 | "version": "6.12.6", 1691 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1692 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1693 | "dev": true, 1694 | "requires": { 1695 | "fast-deep-equal": "^3.1.1", 1696 | "fast-json-stable-stringify": "^2.0.0", 1697 | "json-schema-traverse": "^0.4.1", 1698 | "uri-js": "^4.2.2" 1699 | } 1700 | }, 1701 | "ansi-escapes": { 1702 | "version": "4.3.1", 1703 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 1704 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 1705 | "dev": true, 1706 | "requires": { 1707 | "type-fest": "^0.11.0" 1708 | }, 1709 | "dependencies": { 1710 | "type-fest": { 1711 | "version": "0.11.0", 1712 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 1713 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", 1714 | "dev": true 1715 | } 1716 | } 1717 | }, 1718 | "ansi-regex": { 1719 | "version": "5.0.1", 1720 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1721 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1722 | "dev": true 1723 | }, 1724 | "ansi-styles": { 1725 | "version": "3.2.1", 1726 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1727 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1728 | "dev": true, 1729 | "requires": { 1730 | "color-convert": "^1.9.0" 1731 | } 1732 | }, 1733 | "argparse": { 1734 | "version": "1.0.10", 1735 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 1736 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 1737 | "dev": true, 1738 | "requires": { 1739 | "sprintf-js": "~1.0.2" 1740 | } 1741 | }, 1742 | "astral-regex": { 1743 | "version": "1.0.0", 1744 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 1745 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 1746 | "dev": true 1747 | }, 1748 | "balanced-match": { 1749 | "version": "1.0.0", 1750 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1751 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 1752 | "dev": true 1753 | }, 1754 | "brace-expansion": { 1755 | "version": "1.1.11", 1756 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1757 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1758 | "dev": true, 1759 | "requires": { 1760 | "balanced-match": "^1.0.0", 1761 | "concat-map": "0.0.1" 1762 | } 1763 | }, 1764 | "callsites": { 1765 | "version": "3.1.0", 1766 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1767 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1768 | "dev": true 1769 | }, 1770 | "chalk": { 1771 | "version": "2.4.2", 1772 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1773 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1774 | "dev": true, 1775 | "requires": { 1776 | "ansi-styles": "^3.2.1", 1777 | "escape-string-regexp": "^1.0.5", 1778 | "supports-color": "^5.3.0" 1779 | } 1780 | }, 1781 | "chardet": { 1782 | "version": "0.7.0", 1783 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 1784 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 1785 | "dev": true 1786 | }, 1787 | "cli-cursor": { 1788 | "version": "3.1.0", 1789 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 1790 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 1791 | "dev": true, 1792 | "requires": { 1793 | "restore-cursor": "^3.1.0" 1794 | } 1795 | }, 1796 | "cli-width": { 1797 | "version": "2.2.1", 1798 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 1799 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", 1800 | "dev": true 1801 | }, 1802 | "color-convert": { 1803 | "version": "1.9.3", 1804 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1805 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1806 | "dev": true, 1807 | "requires": { 1808 | "color-name": "1.1.3" 1809 | } 1810 | }, 1811 | "color-name": { 1812 | "version": "1.1.3", 1813 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1814 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1815 | "dev": true 1816 | }, 1817 | "concat-map": { 1818 | "version": "0.0.1", 1819 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1820 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1821 | "dev": true 1822 | }, 1823 | "cross-spawn": { 1824 | "version": "6.0.5", 1825 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 1826 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 1827 | "dev": true, 1828 | "requires": { 1829 | "nice-try": "^1.0.4", 1830 | "path-key": "^2.0.1", 1831 | "semver": "^5.5.0", 1832 | "shebang-command": "^1.2.0", 1833 | "which": "^1.2.9" 1834 | }, 1835 | "dependencies": { 1836 | "semver": { 1837 | "version": "5.7.1", 1838 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1839 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1840 | "dev": true 1841 | } 1842 | } 1843 | }, 1844 | "debug": { 1845 | "version": "4.1.1", 1846 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1847 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1848 | "dev": true, 1849 | "requires": { 1850 | "ms": "^2.1.1" 1851 | } 1852 | }, 1853 | "deep-is": { 1854 | "version": "0.1.3", 1855 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 1856 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 1857 | "dev": true 1858 | }, 1859 | "doctrine": { 1860 | "version": "3.0.0", 1861 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1862 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1863 | "dev": true, 1864 | "requires": { 1865 | "esutils": "^2.0.2" 1866 | } 1867 | }, 1868 | "emoji-regex": { 1869 | "version": "8.0.0", 1870 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1871 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1872 | "dev": true 1873 | }, 1874 | "escape-string-regexp": { 1875 | "version": "1.0.5", 1876 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1877 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1878 | "dev": true 1879 | }, 1880 | "eslint": { 1881 | "version": "6.8.0", 1882 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", 1883 | "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", 1884 | "dev": true, 1885 | "requires": { 1886 | "@babel/code-frame": "^7.0.0", 1887 | "ajv": "^6.10.0", 1888 | "chalk": "^2.1.0", 1889 | "cross-spawn": "^6.0.5", 1890 | "debug": "^4.0.1", 1891 | "doctrine": "^3.0.0", 1892 | "eslint-scope": "^5.0.0", 1893 | "eslint-utils": "^1.4.3", 1894 | "eslint-visitor-keys": "^1.1.0", 1895 | "espree": "^6.1.2", 1896 | "esquery": "^1.0.1", 1897 | "esutils": "^2.0.2", 1898 | "file-entry-cache": "^5.0.1", 1899 | "functional-red-black-tree": "^1.0.1", 1900 | "glob-parent": "^5.0.0", 1901 | "globals": "^12.1.0", 1902 | "ignore": "^4.0.6", 1903 | "import-fresh": "^3.0.0", 1904 | "imurmurhash": "^0.1.4", 1905 | "inquirer": "^7.0.0", 1906 | "is-glob": "^4.0.0", 1907 | "js-yaml": "^3.13.1", 1908 | "json-stable-stringify-without-jsonify": "^1.0.1", 1909 | "levn": "^0.3.0", 1910 | "lodash": "^4.17.14", 1911 | "minimatch": "^3.0.4", 1912 | "mkdirp": "^0.5.1", 1913 | "natural-compare": "^1.4.0", 1914 | "optionator": "^0.8.3", 1915 | "progress": "^2.0.0", 1916 | "regexpp": "^2.0.1", 1917 | "semver": "^6.1.2", 1918 | "strip-ansi": "^5.2.0", 1919 | "strip-json-comments": "^3.0.1", 1920 | "table": "^5.2.3", 1921 | "text-table": "^0.2.0", 1922 | "v8-compile-cache": "^2.0.3" 1923 | }, 1924 | "dependencies": { 1925 | "eslint-utils": { 1926 | "version": "1.4.3", 1927 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", 1928 | "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", 1929 | "dev": true, 1930 | "requires": { 1931 | "eslint-visitor-keys": "^1.1.0" 1932 | } 1933 | }, 1934 | "regexpp": { 1935 | "version": "2.0.1", 1936 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 1937 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", 1938 | "dev": true 1939 | } 1940 | } 1941 | }, 1942 | "eslint-scope": { 1943 | "version": "5.0.0", 1944 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", 1945 | "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", 1946 | "dev": true, 1947 | "requires": { 1948 | "esrecurse": "^4.1.0", 1949 | "estraverse": "^4.1.1" 1950 | } 1951 | }, 1952 | "eslint-utils": { 1953 | "version": "2.0.0", 1954 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", 1955 | "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", 1956 | "dev": true, 1957 | "requires": { 1958 | "eslint-visitor-keys": "^1.1.0" 1959 | } 1960 | }, 1961 | "eslint-visitor-keys": { 1962 | "version": "1.1.0", 1963 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 1964 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 1965 | "dev": true 1966 | }, 1967 | "espree": { 1968 | "version": "6.2.1", 1969 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", 1970 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", 1971 | "dev": true, 1972 | "requires": { 1973 | "acorn": "^7.1.1", 1974 | "acorn-jsx": "^5.2.0", 1975 | "eslint-visitor-keys": "^1.1.0" 1976 | } 1977 | }, 1978 | "esprima": { 1979 | "version": "4.0.1", 1980 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1981 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1982 | "dev": true 1983 | }, 1984 | "esquery": { 1985 | "version": "1.3.1", 1986 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 1987 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 1988 | "dev": true, 1989 | "requires": { 1990 | "estraverse": "^5.1.0" 1991 | }, 1992 | "dependencies": { 1993 | "estraverse": { 1994 | "version": "5.1.0", 1995 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", 1996 | "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", 1997 | "dev": true 1998 | } 1999 | } 2000 | }, 2001 | "esrecurse": { 2002 | "version": "4.2.1", 2003 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 2004 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 2005 | "dev": true, 2006 | "requires": { 2007 | "estraverse": "^4.1.0" 2008 | } 2009 | }, 2010 | "estraverse": { 2011 | "version": "4.3.0", 2012 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 2013 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 2014 | "dev": true 2015 | }, 2016 | "esutils": { 2017 | "version": "2.0.3", 2018 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2019 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2020 | "dev": true 2021 | }, 2022 | "external-editor": { 2023 | "version": "3.1.0", 2024 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 2025 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 2026 | "dev": true, 2027 | "requires": { 2028 | "chardet": "^0.7.0", 2029 | "iconv-lite": "^0.4.24", 2030 | "tmp": "^0.0.33" 2031 | } 2032 | }, 2033 | "fast-deep-equal": { 2034 | "version": "3.1.1", 2035 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 2036 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", 2037 | "dev": true 2038 | }, 2039 | "fast-json-stable-stringify": { 2040 | "version": "2.1.0", 2041 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2042 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2043 | "dev": true 2044 | }, 2045 | "fast-levenshtein": { 2046 | "version": "2.0.6", 2047 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2048 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 2049 | "dev": true 2050 | }, 2051 | "figures": { 2052 | "version": "3.2.0", 2053 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 2054 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 2055 | "dev": true, 2056 | "requires": { 2057 | "escape-string-regexp": "^1.0.5" 2058 | } 2059 | }, 2060 | "file-entry-cache": { 2061 | "version": "5.0.1", 2062 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 2063 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 2064 | "dev": true, 2065 | "requires": { 2066 | "flat-cache": "^2.0.1" 2067 | } 2068 | }, 2069 | "flat-cache": { 2070 | "version": "2.0.1", 2071 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 2072 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 2073 | "dev": true, 2074 | "requires": { 2075 | "flatted": "^2.0.0", 2076 | "rimraf": "2.6.3", 2077 | "write": "1.0.3" 2078 | }, 2079 | "dependencies": { 2080 | "rimraf": { 2081 | "version": "2.6.3", 2082 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 2083 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 2084 | "dev": true, 2085 | "requires": { 2086 | "glob": "^7.1.3" 2087 | } 2088 | } 2089 | } 2090 | }, 2091 | "flatted": { 2092 | "version": "2.0.2", 2093 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", 2094 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", 2095 | "dev": true 2096 | }, 2097 | "fs.realpath": { 2098 | "version": "1.0.0", 2099 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2100 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 2101 | "dev": true 2102 | }, 2103 | "functional-red-black-tree": { 2104 | "version": "1.0.1", 2105 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 2106 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 2107 | "dev": true 2108 | }, 2109 | "glob": { 2110 | "version": "7.1.6", 2111 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 2112 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 2113 | "dev": true, 2114 | "requires": { 2115 | "fs.realpath": "^1.0.0", 2116 | "inflight": "^1.0.4", 2117 | "inherits": "2", 2118 | "minimatch": "^3.0.4", 2119 | "once": "^1.3.0", 2120 | "path-is-absolute": "^1.0.0" 2121 | } 2122 | }, 2123 | "glob-parent": { 2124 | "version": "5.1.2", 2125 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2126 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2127 | "dev": true, 2128 | "requires": { 2129 | "is-glob": "^4.0.1" 2130 | } 2131 | }, 2132 | "globals": { 2133 | "version": "12.4.0", 2134 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 2135 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 2136 | "dev": true, 2137 | "requires": { 2138 | "type-fest": "^0.8.1" 2139 | } 2140 | }, 2141 | "has-flag": { 2142 | "version": "3.0.0", 2143 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2144 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 2145 | "dev": true 2146 | }, 2147 | "iconv-lite": { 2148 | "version": "0.4.24", 2149 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 2150 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 2151 | "dev": true, 2152 | "requires": { 2153 | "safer-buffer": ">= 2.1.2 < 3" 2154 | } 2155 | }, 2156 | "ignore": { 2157 | "version": "4.0.6", 2158 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 2159 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 2160 | "dev": true 2161 | }, 2162 | "import-fresh": { 2163 | "version": "3.2.1", 2164 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 2165 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 2166 | "dev": true, 2167 | "requires": { 2168 | "parent-module": "^1.0.0", 2169 | "resolve-from": "^4.0.0" 2170 | } 2171 | }, 2172 | "imurmurhash": { 2173 | "version": "0.1.4", 2174 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2175 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 2176 | "dev": true 2177 | }, 2178 | "inflight": { 2179 | "version": "1.0.6", 2180 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2181 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2182 | "dev": true, 2183 | "requires": { 2184 | "once": "^1.3.0", 2185 | "wrappy": "1" 2186 | } 2187 | }, 2188 | "inherits": { 2189 | "version": "2.0.4", 2190 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2191 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2192 | "dev": true 2193 | }, 2194 | "inquirer": { 2195 | "version": "7.1.0", 2196 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", 2197 | "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", 2198 | "dev": true, 2199 | "requires": { 2200 | "ansi-escapes": "^4.2.1", 2201 | "chalk": "^3.0.0", 2202 | "cli-cursor": "^3.1.0", 2203 | "cli-width": "^2.0.0", 2204 | "external-editor": "^3.0.3", 2205 | "figures": "^3.0.0", 2206 | "lodash": "^4.17.15", 2207 | "mute-stream": "0.0.8", 2208 | "run-async": "^2.4.0", 2209 | "rxjs": "^6.5.3", 2210 | "string-width": "^4.1.0", 2211 | "strip-ansi": "^6.0.0", 2212 | "through": "^2.3.6" 2213 | }, 2214 | "dependencies": { 2215 | "ansi-styles": { 2216 | "version": "4.2.1", 2217 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 2218 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 2219 | "dev": true, 2220 | "requires": { 2221 | "@types/color-name": "^1.1.1", 2222 | "color-convert": "^2.0.1" 2223 | } 2224 | }, 2225 | "chalk": { 2226 | "version": "3.0.0", 2227 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 2228 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 2229 | "dev": true, 2230 | "requires": { 2231 | "ansi-styles": "^4.1.0", 2232 | "supports-color": "^7.1.0" 2233 | } 2234 | }, 2235 | "color-convert": { 2236 | "version": "2.0.1", 2237 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2238 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2239 | "dev": true, 2240 | "requires": { 2241 | "color-name": "~1.1.4" 2242 | } 2243 | }, 2244 | "color-name": { 2245 | "version": "1.1.4", 2246 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2247 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2248 | "dev": true 2249 | }, 2250 | "has-flag": { 2251 | "version": "4.0.0", 2252 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2253 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2254 | "dev": true 2255 | }, 2256 | "strip-ansi": { 2257 | "version": "6.0.0", 2258 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2259 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2260 | "dev": true, 2261 | "requires": { 2262 | "ansi-regex": "^5.0.0" 2263 | } 2264 | }, 2265 | "supports-color": { 2266 | "version": "7.1.0", 2267 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 2268 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 2269 | "dev": true, 2270 | "requires": { 2271 | "has-flag": "^4.0.0" 2272 | } 2273 | } 2274 | } 2275 | }, 2276 | "is-extglob": { 2277 | "version": "2.1.1", 2278 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2279 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 2280 | "dev": true 2281 | }, 2282 | "is-fullwidth-code-point": { 2283 | "version": "3.0.0", 2284 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2285 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2286 | "dev": true 2287 | }, 2288 | "is-glob": { 2289 | "version": "4.0.1", 2290 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 2291 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 2292 | "dev": true, 2293 | "requires": { 2294 | "is-extglob": "^2.1.1" 2295 | } 2296 | }, 2297 | "is-promise": { 2298 | "version": "2.1.0", 2299 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 2300 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 2301 | "dev": true 2302 | }, 2303 | "isexe": { 2304 | "version": "2.0.0", 2305 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2306 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2307 | "dev": true 2308 | }, 2309 | "js-tokens": { 2310 | "version": "4.0.0", 2311 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2312 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2313 | "dev": true 2314 | }, 2315 | "js-yaml": { 2316 | "version": "3.13.1", 2317 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 2318 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 2319 | "dev": true, 2320 | "requires": { 2321 | "argparse": "^1.0.7", 2322 | "esprima": "^4.0.0" 2323 | } 2324 | }, 2325 | "json-schema-traverse": { 2326 | "version": "0.4.1", 2327 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2328 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2329 | "dev": true 2330 | }, 2331 | "json-stable-stringify-without-jsonify": { 2332 | "version": "1.0.1", 2333 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2334 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 2335 | "dev": true 2336 | }, 2337 | "levn": { 2338 | "version": "0.3.0", 2339 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 2340 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 2341 | "dev": true, 2342 | "requires": { 2343 | "prelude-ls": "~1.1.2", 2344 | "type-check": "~0.3.2" 2345 | } 2346 | }, 2347 | "lodash": { 2348 | "version": "4.17.21", 2349 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2350 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2351 | "dev": true 2352 | }, 2353 | "mimic-fn": { 2354 | "version": "2.1.0", 2355 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2356 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2357 | "dev": true 2358 | }, 2359 | "minimatch": { 2360 | "version": "3.0.4", 2361 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2362 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2363 | "dev": true, 2364 | "requires": { 2365 | "brace-expansion": "^1.1.7" 2366 | } 2367 | }, 2368 | "minimist": { 2369 | "version": "1.2.6", 2370 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 2371 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 2372 | "dev": true 2373 | }, 2374 | "mkdirp": { 2375 | "version": "0.5.5", 2376 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 2377 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 2378 | "dev": true, 2379 | "requires": { 2380 | "minimist": "^1.2.5" 2381 | } 2382 | }, 2383 | "ms": { 2384 | "version": "2.1.2", 2385 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2386 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2387 | "dev": true 2388 | }, 2389 | "mute-stream": { 2390 | "version": "0.0.8", 2391 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 2392 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 2393 | "dev": true 2394 | }, 2395 | "natural-compare": { 2396 | "version": "1.4.0", 2397 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2398 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 2399 | "dev": true 2400 | }, 2401 | "nice-try": { 2402 | "version": "1.0.5", 2403 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 2404 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 2405 | "dev": true 2406 | }, 2407 | "once": { 2408 | "version": "1.4.0", 2409 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2410 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2411 | "dev": true, 2412 | "requires": { 2413 | "wrappy": "1" 2414 | } 2415 | }, 2416 | "onetime": { 2417 | "version": "5.1.0", 2418 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 2419 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 2420 | "dev": true, 2421 | "requires": { 2422 | "mimic-fn": "^2.1.0" 2423 | } 2424 | }, 2425 | "optionator": { 2426 | "version": "0.8.3", 2427 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 2428 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 2429 | "dev": true, 2430 | "requires": { 2431 | "deep-is": "~0.1.3", 2432 | "fast-levenshtein": "~2.0.6", 2433 | "levn": "~0.3.0", 2434 | "prelude-ls": "~1.1.2", 2435 | "type-check": "~0.3.2", 2436 | "word-wrap": "~1.2.3" 2437 | } 2438 | }, 2439 | "os-tmpdir": { 2440 | "version": "1.0.2", 2441 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2442 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 2443 | "dev": true 2444 | }, 2445 | "parent-module": { 2446 | "version": "1.0.1", 2447 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2448 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2449 | "dev": true, 2450 | "requires": { 2451 | "callsites": "^3.0.0" 2452 | } 2453 | }, 2454 | "path-is-absolute": { 2455 | "version": "1.0.1", 2456 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2457 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2458 | "dev": true 2459 | }, 2460 | "path-key": { 2461 | "version": "2.0.1", 2462 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 2463 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 2464 | "dev": true 2465 | }, 2466 | "prelude-ls": { 2467 | "version": "1.1.2", 2468 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 2469 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 2470 | "dev": true 2471 | }, 2472 | "progress": { 2473 | "version": "2.0.3", 2474 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2475 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2476 | "dev": true 2477 | }, 2478 | "punycode": { 2479 | "version": "2.1.1", 2480 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2481 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2482 | "dev": true 2483 | }, 2484 | "regexpp": { 2485 | "version": "3.1.0", 2486 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 2487 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 2488 | "dev": true 2489 | }, 2490 | "resolve-from": { 2491 | "version": "4.0.0", 2492 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2493 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2494 | "dev": true 2495 | }, 2496 | "restore-cursor": { 2497 | "version": "3.1.0", 2498 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 2499 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 2500 | "dev": true, 2501 | "requires": { 2502 | "onetime": "^5.1.0", 2503 | "signal-exit": "^3.0.2" 2504 | } 2505 | }, 2506 | "rimraf": { 2507 | "version": "3.0.2", 2508 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2509 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2510 | "dev": true, 2511 | "requires": { 2512 | "glob": "^7.1.3" 2513 | } 2514 | }, 2515 | "run-async": { 2516 | "version": "2.4.0", 2517 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", 2518 | "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", 2519 | "dev": true, 2520 | "requires": { 2521 | "is-promise": "^2.1.0" 2522 | } 2523 | }, 2524 | "rxjs": { 2525 | "version": "6.5.5", 2526 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", 2527 | "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", 2528 | "dev": true, 2529 | "requires": { 2530 | "tslib": "^1.9.0" 2531 | } 2532 | }, 2533 | "safer-buffer": { 2534 | "version": "2.1.2", 2535 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2536 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2537 | "dev": true 2538 | }, 2539 | "semver": { 2540 | "version": "6.3.0", 2541 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2542 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2543 | "dev": true 2544 | }, 2545 | "shebang-command": { 2546 | "version": "1.2.0", 2547 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2548 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2549 | "dev": true, 2550 | "requires": { 2551 | "shebang-regex": "^1.0.0" 2552 | } 2553 | }, 2554 | "shebang-regex": { 2555 | "version": "1.0.0", 2556 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2557 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2558 | "dev": true 2559 | }, 2560 | "signal-exit": { 2561 | "version": "3.0.3", 2562 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 2563 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 2564 | "dev": true 2565 | }, 2566 | "slice-ansi": { 2567 | "version": "2.1.0", 2568 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 2569 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 2570 | "dev": true, 2571 | "requires": { 2572 | "ansi-styles": "^3.2.0", 2573 | "astral-regex": "^1.0.0", 2574 | "is-fullwidth-code-point": "^2.0.0" 2575 | }, 2576 | "dependencies": { 2577 | "is-fullwidth-code-point": { 2578 | "version": "2.0.0", 2579 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2580 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2581 | "dev": true 2582 | } 2583 | } 2584 | }, 2585 | "sprintf-js": { 2586 | "version": "1.0.3", 2587 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2588 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2589 | "dev": true 2590 | }, 2591 | "string-width": { 2592 | "version": "4.2.0", 2593 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 2594 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 2595 | "dev": true, 2596 | "requires": { 2597 | "emoji-regex": "^8.0.0", 2598 | "is-fullwidth-code-point": "^3.0.0", 2599 | "strip-ansi": "^6.0.0" 2600 | }, 2601 | "dependencies": { 2602 | "strip-ansi": { 2603 | "version": "6.0.0", 2604 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2605 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2606 | "dev": true, 2607 | "requires": { 2608 | "ansi-regex": "^5.0.0" 2609 | } 2610 | } 2611 | } 2612 | }, 2613 | "strip-ansi": { 2614 | "version": "5.2.0", 2615 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2616 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2617 | "dev": true, 2618 | "requires": { 2619 | "ansi-regex": "^4.1.0" 2620 | }, 2621 | "dependencies": { 2622 | "ansi-regex": { 2623 | "version": "4.1.1", 2624 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 2625 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", 2626 | "dev": true 2627 | } 2628 | } 2629 | }, 2630 | "strip-json-comments": { 2631 | "version": "3.1.0", 2632 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", 2633 | "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", 2634 | "dev": true 2635 | }, 2636 | "supports-color": { 2637 | "version": "5.5.0", 2638 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2639 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2640 | "dev": true, 2641 | "requires": { 2642 | "has-flag": "^3.0.0" 2643 | } 2644 | }, 2645 | "table": { 2646 | "version": "5.4.6", 2647 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 2648 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 2649 | "dev": true, 2650 | "requires": { 2651 | "ajv": "^6.10.2", 2652 | "lodash": "^4.17.14", 2653 | "slice-ansi": "^2.1.0", 2654 | "string-width": "^3.0.0" 2655 | }, 2656 | "dependencies": { 2657 | "emoji-regex": { 2658 | "version": "7.0.3", 2659 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 2660 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 2661 | "dev": true 2662 | }, 2663 | "is-fullwidth-code-point": { 2664 | "version": "2.0.0", 2665 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2666 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2667 | "dev": true 2668 | }, 2669 | "string-width": { 2670 | "version": "3.1.0", 2671 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2672 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2673 | "dev": true, 2674 | "requires": { 2675 | "emoji-regex": "^7.0.1", 2676 | "is-fullwidth-code-point": "^2.0.0", 2677 | "strip-ansi": "^5.1.0" 2678 | } 2679 | } 2680 | } 2681 | }, 2682 | "text-table": { 2683 | "version": "0.2.0", 2684 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2685 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2686 | "dev": true 2687 | }, 2688 | "through": { 2689 | "version": "2.3.8", 2690 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2691 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2692 | "dev": true 2693 | }, 2694 | "tmp": { 2695 | "version": "0.0.33", 2696 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2697 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2698 | "dev": true, 2699 | "requires": { 2700 | "os-tmpdir": "~1.0.2" 2701 | } 2702 | }, 2703 | "tslib": { 2704 | "version": "1.11.1", 2705 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", 2706 | "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", 2707 | "dev": true 2708 | }, 2709 | "tsutils": { 2710 | "version": "3.17.1", 2711 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", 2712 | "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", 2713 | "dev": true, 2714 | "requires": { 2715 | "tslib": "^1.8.1" 2716 | } 2717 | }, 2718 | "type-check": { 2719 | "version": "0.3.2", 2720 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2721 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2722 | "dev": true, 2723 | "requires": { 2724 | "prelude-ls": "~1.1.2" 2725 | } 2726 | }, 2727 | "type-fest": { 2728 | "version": "0.8.1", 2729 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 2730 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 2731 | "dev": true 2732 | }, 2733 | "typescript": { 2734 | "version": "3.8.3", 2735 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", 2736 | "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", 2737 | "dev": true 2738 | }, 2739 | "uri-js": { 2740 | "version": "4.2.2", 2741 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 2742 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 2743 | "dev": true, 2744 | "requires": { 2745 | "punycode": "^2.1.0" 2746 | } 2747 | }, 2748 | "v8-compile-cache": { 2749 | "version": "2.1.0", 2750 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", 2751 | "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", 2752 | "dev": true 2753 | }, 2754 | "which": { 2755 | "version": "1.3.1", 2756 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2757 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2758 | "dev": true, 2759 | "requires": { 2760 | "isexe": "^2.0.0" 2761 | } 2762 | }, 2763 | "word-wrap": { 2764 | "version": "1.2.3", 2765 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2766 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2767 | "dev": true 2768 | }, 2769 | "wrappy": { 2770 | "version": "1.0.2", 2771 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2772 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2773 | "dev": true 2774 | }, 2775 | "write": { 2776 | "version": "1.0.3", 2777 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 2778 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 2779 | "dev": true, 2780 | "requires": { 2781 | "mkdirp": "^0.5.1" 2782 | } 2783 | } 2784 | } 2785 | } 2786 | -------------------------------------------------------------------------------- /packages/core/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@commitji/core", 3 | "version": "1.1.0", 4 | "description": "", 5 | "main": "out/index.js", 6 | "types": "out/index.d.ts", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1", 9 | "clean": "rimraf out", 10 | "precompile": "npm run clean", 11 | "compile": "tsc -p ./", 12 | "lint": "eslint src --ext ts", 13 | "watch": "tsc -watch -p ./", 14 | "prepare": "npm run compile" 15 | }, 16 | "files": [ 17 | "out" 18 | ], 19 | "author": "", 20 | "license": "ISC", 21 | "publishConfig": { 22 | "access": "public" 23 | }, 24 | "devDependencies": { 25 | "@typescript-eslint/eslint-plugin": "^2.29.0", 26 | "@typescript-eslint/parser": "^2.29.0", 27 | "eslint": "^6.8.0", 28 | "rimraf": "^3.0.2", 29 | "typescript": "^3.8.3" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /packages/core/src/README.md: -------------------------------------------------------------------------------- 1 | This will be moved into a separate repo / package 2 | @jmaicaaan/commitji-core -------------------------------------------------------------------------------- /packages/core/src/constants/app.ts: -------------------------------------------------------------------------------- 1 | export enum App { 2 | Name = 'commitji', 3 | Description = 'Create conventional commits with gitmojis', 4 | BasicWorkflow = 'basic', 5 | JiraWorkflow = 'jira' 6 | } 7 | -------------------------------------------------------------------------------- /packages/core/src/constants/commitTypes.ts: -------------------------------------------------------------------------------- 1 | import { CommitType } from '../types'; 2 | 3 | export const commitTypes: CommitType[] = [ 4 | { 5 | name: 'build', 6 | description: 'Changes that affect the build system or external dependencies', 7 | emoji: { 8 | shortcode: ':package:', 9 | unicode: '📦', 10 | }, 11 | }, 12 | { 13 | name: 'ci', 14 | description: 'Changes to our CI configuration files and scripts', 15 | emoji: { 16 | shortcode: ':construction_worker:', 17 | unicode: '👷‍♂', 18 | }, 19 | }, 20 | { 21 | name: 'docs', 22 | description: 'Documentation only changes', 23 | emoji: { 24 | shortcode: ':books:', 25 | unicode: '📚', 26 | }, 27 | }, 28 | { 29 | name: 'feat', 30 | description: 'A new feature', 31 | emoji: { 32 | shortcode: ':sparkles:', 33 | unicode: '✨', 34 | }, 35 | }, 36 | { 37 | name: 'fix', 38 | description: 'A bug fix', 39 | emoji: { 40 | shortcode: ':bug:', 41 | unicode: '🐛', 42 | }, 43 | }, 44 | { 45 | name: 'perf', 46 | description: 'A code change that improves performance', 47 | emoji: { 48 | shortcode: ':zap:', 49 | unicode: '⚡️', 50 | }, 51 | }, 52 | { 53 | name: 'refactor', 54 | description: 'A code change that neither fixes a bug nor adds a feature', 55 | emoji: { 56 | shortcode: ':recycle:', 57 | unicode: '♻️', 58 | }, 59 | }, 60 | { 61 | name: 'style', 62 | description: 63 | 'Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)', 64 | emoji: { 65 | shortcode: ':gem:', 66 | unicode: '💎', 67 | }, 68 | }, 69 | { 70 | name: 'test', 71 | description: 'Adding missing tests or correcting existing tests', 72 | emoji: { 73 | shortcode: ':rotating_light:', 74 | unicode: '🚨', 75 | }, 76 | }, 77 | ]; 78 | -------------------------------------------------------------------------------- /packages/core/src/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './app'; 2 | export * from './commitTypes'; 3 | export * from './parserFormatTemplate'; 4 | export * from './message'; 5 | -------------------------------------------------------------------------------- /packages/core/src/constants/message.ts: -------------------------------------------------------------------------------- 1 | const messageSignature = 'Git Comitji:'; 2 | 3 | const withMessageSignature = (message: string) => [messageSignature, message].join(' '); 4 | 5 | const ErrorMessage = { 6 | MissingCommitType: withMessageSignature( 7 | 'Uh oh! Missing Commit Type. Please select one from the list' 8 | ), 9 | MissingCommitBody: withMessageSignature('Uh oh! Missing Commit Body'), 10 | MissingJiraIssueKey: withMessageSignature( 11 | 'Uh oh! Missing Jira Issue Key. You can turn it off in the settings if you wish not to be prompted' 12 | ), 13 | }; 14 | 15 | const InfoMessage = { 16 | NoActiveTerminal: withMessageSignature( 17 | "Oops! No active terminal found. But we've copied it to your clipboard!" 18 | ), 19 | NoJiraWorkflowTransitionName: withMessageSignature( 20 | 'No workflow transition name? Be sure to pick when you are ready!' 21 | ) 22 | }; 23 | 24 | export const Message = { 25 | Error: { 26 | ...ErrorMessage, 27 | }, 28 | Info: { 29 | ...InfoMessage, 30 | }, 31 | }; 32 | -------------------------------------------------------------------------------- /packages/core/src/constants/parserFormatTemplate.ts: -------------------------------------------------------------------------------- 1 | export const ParserFormatTemplateKey = { 2 | Unicode: '{{unicode}}', 3 | CommitType: '{{commitType}}', 4 | CommitMessage: '{{commitMessage}}', 5 | Jira: { 6 | IssueKey: '{{issueKey}}', 7 | WorkflowTransitionName: '{{workflowTransitionName}}', 8 | }, 9 | }; 10 | export const ParserFormatTemplate = { 11 | BasicCommitParser: `${ParserFormatTemplateKey.Unicode} ${ParserFormatTemplateKey.CommitType}: ${ParserFormatTemplateKey.CommitMessage}`, 12 | JiraCommitParser: `${ParserFormatTemplateKey.Unicode} ${ParserFormatTemplateKey.CommitType}: [${ParserFormatTemplateKey.Jira.IssueKey}] ${ParserFormatTemplateKey.CommitMessage} ${ParserFormatTemplateKey.Jira.WorkflowTransitionName}`, 13 | }; 14 | -------------------------------------------------------------------------------- /packages/core/src/formatter.ts: -------------------------------------------------------------------------------- 1 | type FormatterOptions = { 2 | defaultValue?: string; 3 | }; 4 | 5 | type FormatterParser = (data: T) => string; 6 | 7 | export const formatter = (parser: FormatterParser, { defaultValue = '' }: FormatterOptions = {}) => ( 8 | data: T 9 | ) => { 10 | return parser(data) || defaultValue; 11 | }; 12 | -------------------------------------------------------------------------------- /packages/core/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './formatter'; 2 | export * from './constants'; 3 | export * from './parsers'; 4 | export * from './types'; 5 | -------------------------------------------------------------------------------- /packages/core/src/parsers/basicCommitParser.ts: -------------------------------------------------------------------------------- 1 | import { ParserFormatTemplate } from '../constants'; 2 | import { CommitType } from '../types'; 3 | import { FormatterBuilder } from './formatterBuilder'; 4 | 5 | type BasicCommitParserConfig = { 6 | format?: string; 7 | }; 8 | 9 | type BasicCommitParserArgs = { 10 | commitType: CommitType; 11 | commitMessage: string; 12 | }; 13 | 14 | export const basicCommitParser = ({ 15 | format = ParserFormatTemplate.BasicCommitParser, 16 | }: BasicCommitParserConfig = {}) => ({ 17 | commitType: { 18 | emoji: { unicode }, 19 | name, 20 | }, 21 | commitMessage, 22 | }: BasicCommitParserArgs) => { 23 | const formatted = new FormatterBuilder(format) 24 | .create() 25 | .withUnicode(unicode) 26 | .withCommitType(name) 27 | .withCommitMessage(commitMessage) 28 | .build(); 29 | 30 | return formatted; 31 | }; 32 | -------------------------------------------------------------------------------- /packages/core/src/parsers/formatterBuilder.ts: -------------------------------------------------------------------------------- 1 | import { ParserFormatTemplateKey } from '../constants'; 2 | 3 | export class FormatterBuilder { 4 | constructor(private format: string) {} 5 | 6 | public create() { 7 | return new FormatterBuilderClosure(this.format); 8 | } 9 | } 10 | 11 | class FormatterBuilderClosure { 12 | private value: string; 13 | 14 | constructor(private readonly format: string) { 15 | this.value = this.format; 16 | } 17 | 18 | private mutateValue(replaceKey: string, replaceValue: string) { 19 | this.value = this.value.replace(replaceKey, replaceValue); 20 | } 21 | 22 | public withUnicode(value: string) { 23 | this.mutateValue(ParserFormatTemplateKey.Unicode, value); 24 | return this; 25 | } 26 | 27 | public withCommitType(value: string) { 28 | this.mutateValue(ParserFormatTemplateKey.CommitType, value); 29 | return this; 30 | } 31 | 32 | public withCommitMessage(value: string) { 33 | this.mutateValue(ParserFormatTemplateKey.CommitMessage, value); 34 | return this; 35 | } 36 | 37 | public withJiraIssueKey(value: string) { 38 | this.mutateValue(ParserFormatTemplateKey.Jira.IssueKey, value); 39 | return this; 40 | } 41 | 42 | public withJiraWorkflowTransition(value: string) { 43 | this.mutateValue(ParserFormatTemplateKey.Jira.WorkflowTransitionName, value); 44 | return this; 45 | } 46 | 47 | public build() { 48 | return this.value.trim(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /packages/core/src/parsers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './basicCommitParser'; 2 | export * from './jiraCommitParser'; 3 | -------------------------------------------------------------------------------- /packages/core/src/parsers/jiraCommitParser.ts: -------------------------------------------------------------------------------- 1 | import { ParserFormatTemplate } from '../constants'; 2 | import { CommitType, JiraWorkflowTransition } from '../types'; 3 | import { FormatterBuilder } from './formatterBuilder'; 4 | 5 | type JiraCommitParserConfig = { 6 | includeWorkflow?: boolean; 7 | format?: string; 8 | }; 9 | 10 | type JiraCommitParserArgs = { 11 | commitType: CommitType; 12 | issueKey: string; 13 | commitMessage: string; 14 | workflowTransition?: JiraWorkflowTransition; 15 | }; 16 | 17 | export const jiraCommitParser = ({ 18 | format = ParserFormatTemplate.JiraCommitParser, 19 | includeWorkflow, 20 | }: JiraCommitParserConfig = {}) => ({ 21 | commitType: { 22 | emoji: { unicode }, 23 | name, 24 | }, 25 | issueKey, 26 | commitMessage, 27 | workflowTransition, 28 | }: JiraCommitParserArgs): string => { 29 | const formatted = new FormatterBuilder(format) 30 | .create() 31 | .withUnicode(unicode) 32 | .withCommitType(name) 33 | .withJiraIssueKey(issueKey.toUpperCase()) 34 | .withCommitMessage(commitMessage) 35 | .withJiraWorkflowTransition( 36 | includeWorkflow && workflowTransition 37 | ? workflowTransition.workflowTransitionName 38 | : '' 39 | ).build(); 40 | 41 | return formatted; 42 | }; 43 | -------------------------------------------------------------------------------- /packages/core/src/types/commitType.ts: -------------------------------------------------------------------------------- 1 | export type CommitType = { 2 | name: 'build' | 'ci' | 'docs' | 'feat' | 'fix' | 'perf' | 'refactor' | 'style' | 'test', 3 | description: string, 4 | emoji: Record<'unicode' | 'shortcode', string>, 5 | }; -------------------------------------------------------------------------------- /packages/core/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './settings'; 2 | export * from './commitType'; 3 | -------------------------------------------------------------------------------- /packages/core/src/types/settings.ts: -------------------------------------------------------------------------------- 1 | import { App } from '../constants'; 2 | import { CommitType } from './commitType'; 3 | 4 | export type JiraWorkflowTransition = Record<'key' | 'label' | 'workflowTransitionName', string>; 5 | 6 | export type Settings = { 7 | workflow: App.BasicWorkflow | App.JiraWorkflow; 8 | format?: string; 9 | commitTypes: CommitType[], 10 | jira: { 11 | allowWorkflowTransitionPrompt: boolean; 12 | workflowTransitions: JiraWorkflowTransition[]; 13 | }; 14 | }; 15 | -------------------------------------------------------------------------------- /packages/core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": [ 7 | "es6" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | "declaration": true, 12 | "strict": true /* enable all strict type-checking options */ 13 | /* Additional Checks */ 14 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 15 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 16 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 17 | }, 18 | "exclude": [ 19 | "node_modules", 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /packages/vscode-ext/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/test/** 4 | src/** 5 | .gitignore 6 | vsc-extension-quickstart.md 7 | **/tsconfig.json 8 | **/.eslintrc.json 9 | **/*.map 10 | **/*.ts 11 | -------------------------------------------------------------------------------- /packages/vscode-ext/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 5 | 6 | ## [1.0.5](https://github.com/jmaicaaan/commitji/compare/commitji-vs@1.0.4...commitji-vs@1.0.5) (2020-05-03) 7 | 8 | **Note:** Version bump only for package commitji-vs 9 | 10 | 11 | 12 | 13 | 14 | ## [1.0.4](https://github.com/jmaicaaan/commitji/compare/commitji-vs@1.0.3...commitji-vs@1.0.4) (2020-04-27) 15 | 16 | **Note:** Version bump only for package commitji-vs 17 | 18 | 19 | 20 | 21 | 22 | ## [1.0.3](https://github.com/jmaicaaan/commitji/compare/commitji-vs@1.0.2...commitji-vs@1.0.3) (2020-04-27) 23 | 24 | **Note:** Version bump only for package commitji-vs 25 | 26 | 27 | 28 | 29 | 30 | ## [1.0.2](https://github.com/jmaicaaan/commitji/compare/commitji-vs@1.0.1...commitji-vs@1.0.2) (2020-04-27) 31 | 32 | **Note:** Version bump only for package commitji-vs 33 | 34 | 35 | 36 | 37 | 38 | ## 1.0.1 (2020-04-27) 39 | 40 | 41 | 42 | ## 1.0.5-hot-release (2020-04-26) 43 | 44 | **Note:** Version bump only for package commitji-vs 45 | 46 | 47 | 48 | 49 | 50 | # Change Log 51 | 52 | All notable changes to the "commitji" extension will be documented in this file. 53 | 54 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 55 | 56 | ## [Unreleased] 57 | 58 | - Initial release 59 | -------------------------------------------------------------------------------- /packages/vscode-ext/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 jmaicaaan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /packages/vscode-ext/README.md: -------------------------------------------------------------------------------- 1 | # Welcome to @commitji/vscode-ext 👋 2 | [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](#) 3 | 4 | > Create conventional commits with gitmojis on VSCode 5 | 6 | ### 🏠 [Homepage](https://github.com/jmaicaaan/commitji) 7 | 8 | ## Demo 9 | 10 | - Basic Workflow 11 | 12 | ![commitji-basic-workflow](https://user-images.githubusercontent.com/13105222/80914129-31d93100-8d7c-11ea-93b4-216d3f4afda3.gif) 13 | 14 | - Jira Workflow 15 | 16 | ![commitji-jira-workflow](https://user-images.githubusercontent.com/13105222/80914128-2ede4080-8d7c-11ea-85e8-043763d37fbb.gif) 17 | 18 | ## Usages 19 | 20 | ### Creating a conventional commit 21 | 22 | - Open the command pallete on VSCode (cmd + shift + p) 23 | - Type in `commitji commit` then press enter 24 | - Answer the following prompt questions to compose your commit message 25 | 26 | ### Configuring Commitji 27 | 28 | #### Workflow selection 29 | 30 | Commitji includes two workflow as of the moment (Basic Workflow and Jira Workflow). You can change this on the settings. 31 | 32 | - Basic Workflow will ask you on the following questins: 33 | - What is the commit type? (ex: feat, fix, style) 34 | - What is the commit message? 35 | 36 | - Jira Workflow will ask you on the following questions: 37 | - What is the commit type? (ex: feat, fix, style) 38 | - What is the Jira Issue Key/Number (if no issue key can be found on your current branch/repo; otherwise, it won't ask you about it) 39 | - What is the commit message? 40 | - What is the Jira Workflow Transition (optional) 41 | 42 | #### Jira Workflow Configuration 43 | 44 | Commitji adds extra settings on customizing your Jira Workflow 45 | 46 | - Optional prompt of Jira Workflow Transition 47 | - If you wish to enable the Jira Workflow Transition, toggle the option `Allow Workflow Transition prompt` and you must provide an array of workflow transitions in the settings. 48 | ``` 49 | "commitji.jira.workflowTransitions": [ 50 | { 51 | "key": "open", 52 | "label": "Open", 53 | "workflowTransitionName": "#open" 54 | }, 55 | { 56 | "key": "inProgress", 57 | "label": "In Progress", 58 | "workflowTransitionName": "#in-progress" 59 | } 60 | ] 61 | ``` 62 | For more details about the `workflowTransitionName` check out this [Jira documentation](https://confluence.atlassian.com/bitbucket/use-smart-commits-298979931.html). 63 | 64 | - Customized extraction pattern on getting your Jira Issue Key on your current branch 65 | - By default, it uses the format of `((? 94 | 95 | * Website: https://github.com/jmaicaaan 96 | * Github: [@jmaicaaan](https://github.com/jmaicaaan) 97 | 98 | ## 🤝 Contributing 99 | 100 | Contributions, issues and feature requests are welcome! 101 | 102 | Feel free to check [issues page](https://github.com/jmaicaaan/system-media/issues). 103 | 104 | ## Show your support 105 | 106 | Give a ⭐️ if this project helped you! 107 | -------------------------------------------------------------------------------- /packages/vscode-ext/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jmaicaaan/commitji/74ac31ecac4bda67b0ac7a030027ec4a333c9f2d/packages/vscode-ext/icon.png -------------------------------------------------------------------------------- /packages/vscode-ext/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "commitji-vs", 3 | "displayName": "Commitji", 4 | "description": "Create conventional commits with gitmojis", 5 | "version": "1.1.0", 6 | "engines": { 7 | "vscode": "^1.44.0" 8 | }, 9 | "icon": "icon.png", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/jmaicaaan/commitji.git" 13 | }, 14 | "categories": [ 15 | "Other" 16 | ], 17 | "activationEvents": [ 18 | "onCommand:commitji.commit" 19 | ], 20 | "extensionDependencies": [ 21 | "vscode.git" 22 | ], 23 | "main": "./out/extension.js", 24 | "contributes": { 25 | "commands": [ 26 | { 27 | "command": "commitji.commit", 28 | "title": "Git Commitji: Create Commit Message" 29 | } 30 | ], 31 | "configuration": { 32 | "title": "Commitji", 33 | "properties": { 34 | "commitji.workflow": { 35 | "type": "string", 36 | "default": "basic", 37 | "description": "Set the workflow that you want to use", 38 | "enum": [ 39 | "basic", 40 | "jira" 41 | ], 42 | "scope": "resource", 43 | "enumDescriptions": [ 44 | "Use the basic workflow", 45 | "Use the jira workflow that enables you to do smart commits" 46 | ] 47 | }, 48 | "commitji.format": { 49 | "type": "string", 50 | "default": "{{unicode}} - {{commitType}}: {{commitMessage}}", 51 | "examples": [ 52 | "{{unicode}} - {{commitType}}: {{commitMessage}}" 53 | ], 54 | "description": "Set the commit format you wanted to use", 55 | "scope": "resource" 56 | }, 57 | "commitji.commitTypes": { 58 | "type": "array", 59 | "default": [], 60 | "description": "Extend the current commit types based on your needs", 61 | "items": { 62 | "type": "object", 63 | "title": "Extended Commit Types", 64 | "description": "Commit Type Properties", 65 | "properties": { 66 | "name": { 67 | "type": "string", 68 | "description": "Commit Type name", 69 | "examples": [ 70 | "fix", 71 | "feat" 72 | ] 73 | }, 74 | "description": { 75 | "type": "string", 76 | "description": "The Commit Type description", 77 | "examples": [ 78 | "A bug fix", 79 | "A new feature" 80 | ] 81 | }, 82 | "emoji": { 83 | "type": "object", 84 | "title": "The emoji to be used on the Commit Type", 85 | "description": "The name of the workflow with the hashtag", 86 | "properties": { 87 | "unicode": { 88 | "type": "string", 89 | "description": "The emoji unicode represnetation", 90 | "examples": [ 91 | "🐛", 92 | "✨" 93 | ] 94 | }, 95 | "shortcode": { 96 | "type": "string", 97 | "description": "The emoji shortcode represnetation", 98 | "examples": [ 99 | ":bug:", 100 | ":sparkles:" 101 | ] 102 | } 103 | } 104 | } 105 | } 106 | } 107 | }, 108 | "commitji.autoCommit": { 109 | "type": "boolean", 110 | "default": false, 111 | "description": "Automatically commit instead of manually commiting" 112 | }, 113 | "commitji.jira.issueKeyExtractionPattern": { 114 | "type": "string", 115 | "default": "((? { 5 | const settings = getSettings(); 6 | const runWorkflowFn = getWorkflow(settings.workflow); 7 | 8 | try { 9 | await runWorkflowFn(settings); 10 | } catch (error) { 11 | alerter.error((error as { message: string }).message); 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/types/git.ts: -------------------------------------------------------------------------------- 1 | // https://github.com/Microsoft/vscode/blob/master/extensions/git/src/api/git.d.ts 2 | // https://stackoverflow.com/questions/46511595/how-to-access-the-api-for-git-in-visual-studio-code 3 | 4 | /*--------------------------------------------------------------------------------------------- 5 | * Copyright (c) Microsoft Corporation. All rights reserved. 6 | * Licensed under the MIT License. See License.txt in the project root for license information. 7 | *--------------------------------------------------------------------------------------------*/ 8 | 9 | import { Uri, Event, Disposable, ProviderResult } from 'vscode'; 10 | export { ProviderResult } from 'vscode'; 11 | 12 | export interface Git { 13 | readonly path: string; 14 | } 15 | 16 | export interface InputBox { 17 | value: string; 18 | } 19 | 20 | export const enum RefType { 21 | Head, 22 | RemoteHead, 23 | Tag, 24 | } 25 | 26 | export interface Ref { 27 | readonly type: RefType; 28 | readonly name?: string; 29 | readonly commit?: string; 30 | readonly remote?: string; 31 | } 32 | 33 | export interface UpstreamRef { 34 | readonly remote: string; 35 | readonly name: string; 36 | } 37 | 38 | export interface Branch extends Ref { 39 | readonly upstream?: UpstreamRef; 40 | readonly ahead?: number; 41 | readonly behind?: number; 42 | } 43 | 44 | export interface Commit { 45 | readonly hash: string; 46 | readonly message: string; 47 | readonly parents: string[]; 48 | readonly authorDate?: Date; 49 | readonly authorName?: string; 50 | readonly authorEmail?: string; 51 | readonly commitDate?: Date; 52 | } 53 | 54 | export interface Submodule { 55 | readonly name: string; 56 | readonly path: string; 57 | readonly url: string; 58 | } 59 | 60 | export interface Remote { 61 | readonly name: string; 62 | readonly fetchUrl?: string; 63 | readonly pushUrl?: string; 64 | readonly isReadOnly: boolean; 65 | } 66 | 67 | export const enum Status { 68 | INDEX_MODIFIED, 69 | INDEX_ADDED, 70 | INDEX_DELETED, 71 | INDEX_RENAMED, 72 | INDEX_COPIED, 73 | 74 | MODIFIED, 75 | DELETED, 76 | UNTRACKED, 77 | IGNORED, 78 | INTENT_TO_ADD, 79 | 80 | ADDED_BY_US, 81 | ADDED_BY_THEM, 82 | DELETED_BY_US, 83 | DELETED_BY_THEM, 84 | BOTH_ADDED, 85 | BOTH_DELETED, 86 | BOTH_MODIFIED, 87 | } 88 | 89 | export interface Change { 90 | /** 91 | * Returns either `originalUri` or `renameUri`, depending 92 | * on whether this change is a rename change. When 93 | * in doubt always use `uri` over the other two alternatives. 94 | */ 95 | readonly uri: Uri; 96 | readonly originalUri: Uri; 97 | readonly renameUri: Uri | undefined; 98 | readonly status: Status; 99 | } 100 | 101 | export interface RepositoryState { 102 | readonly HEAD: Branch | undefined; 103 | readonly refs: Ref[]; 104 | readonly remotes: Remote[]; 105 | readonly submodules: Submodule[]; 106 | readonly rebaseCommit: Commit | undefined; 107 | 108 | readonly mergeChanges: Change[]; 109 | readonly indexChanges: Change[]; 110 | readonly workingTreeChanges: Change[]; 111 | 112 | readonly onDidChange: Event; 113 | } 114 | 115 | export interface RepositoryUIState { 116 | readonly selected: boolean; 117 | readonly onDidChange: Event; 118 | } 119 | 120 | /** 121 | * Log options. 122 | */ 123 | export interface LogOptions { 124 | /** Max number of log entries to retrieve. If not specified, the default is 32. */ 125 | readonly maxEntries?: number; 126 | } 127 | 128 | export interface CommitOptions { 129 | all?: boolean | 'tracked'; 130 | amend?: boolean; 131 | signoff?: boolean; 132 | signCommit?: boolean; 133 | empty?: boolean; 134 | } 135 | 136 | export interface Repository { 137 | readonly rootUri: Uri; 138 | readonly inputBox: InputBox; 139 | readonly state: RepositoryState; 140 | readonly ui: RepositoryUIState; 141 | 142 | getConfigs(): Promise<{ key: string; value: string }[]>; 143 | getConfig(key: string): Promise; 144 | setConfig(key: string, value: string): Promise; 145 | getGlobalConfig(key: string): Promise; 146 | 147 | getObjectDetails( 148 | treeish: string, 149 | path: string 150 | ): Promise<{ mode: string; object: string; size: number }>; 151 | detectObjectType(object: string): Promise<{ mimetype: string; encoding?: string }>; 152 | buffer(ref: string, path: string): Promise; 153 | show(ref: string, path: string): Promise; 154 | getCommit(ref: string): Promise; 155 | 156 | clean(paths: string[]): Promise; 157 | 158 | apply(patch: string, reverse?: boolean): Promise; 159 | diff(cached?: boolean): Promise; 160 | diffWithHEAD(): Promise; 161 | diffWithHEAD(path: string): Promise; 162 | diffWith(ref: string): Promise; 163 | diffWith(ref: string, path: string): Promise; 164 | diffIndexWithHEAD(): Promise; 165 | diffIndexWithHEAD(path: string): Promise; 166 | diffIndexWith(ref: string): Promise; 167 | diffIndexWith(ref: string, path: string): Promise; 168 | diffBlobs(object1: string, object2: string): Promise; 169 | diffBetween(ref1: string, ref2: string): Promise; 170 | diffBetween(ref1: string, ref2: string, path: string): Promise; 171 | 172 | hashObject(data: string): Promise; 173 | 174 | createBranch(name: string, checkout: boolean, ref?: string): Promise; 175 | deleteBranch(name: string, force?: boolean): Promise; 176 | getBranch(name: string): Promise; 177 | setBranchUpstream(name: string, upstream: string): Promise; 178 | 179 | getMergeBase(ref1: string, ref2: string): Promise; 180 | 181 | status(): Promise; 182 | checkout(treeish: string): Promise; 183 | 184 | addRemote(name: string, url: string): Promise; 185 | removeRemote(name: string): Promise; 186 | renameRemote(name: string, newName: string): Promise; 187 | 188 | fetch(remote?: string, ref?: string, depth?: number): Promise; 189 | pull(unshallow?: boolean): Promise; 190 | push(remoteName?: string, branchName?: string, setUpstream?: boolean): Promise; 191 | 192 | blame(path: string): Promise; 193 | log(options?: LogOptions): Promise; 194 | 195 | commit(message: string, opts?: CommitOptions): Promise; 196 | } 197 | 198 | export interface RemoteSource { 199 | readonly name: string; 200 | readonly description?: string; 201 | readonly url: string | string[]; 202 | } 203 | 204 | export interface RemoteSourceProvider { 205 | readonly name: string; 206 | readonly icon?: string; // codicon name 207 | readonly supportsQuery?: boolean; 208 | getRemoteSources(query?: string): ProviderResult; 209 | } 210 | 211 | export interface Credentials { 212 | readonly username: string; 213 | readonly password: string; 214 | } 215 | 216 | export interface CredentialsProvider { 217 | getCredentials(host: Uri): ProviderResult; 218 | } 219 | 220 | export type APIState = 'uninitialized' | 'initialized'; 221 | 222 | export interface API { 223 | readonly state: APIState; 224 | readonly onDidChangeState: Event; 225 | readonly git: Git; 226 | readonly repositories: Repository[]; 227 | readonly onDidOpenRepository: Event; 228 | readonly onDidCloseRepository: Event; 229 | 230 | toGitUri(uri: Uri, ref: string): Uri; 231 | getRepository(uri: Uri): Repository | null; 232 | init(root: Uri): Promise; 233 | 234 | registerRemoteSourceProvider(provider: RemoteSourceProvider): Disposable; 235 | registerCredentialsProvider(provider: CredentialsProvider): Disposable; 236 | } 237 | 238 | export interface GitExtension { 239 | readonly enabled: boolean; 240 | readonly onDidChangeEnablement: Event; 241 | 242 | /** 243 | * Returns a specific API version. 244 | * 245 | * Throws error if git extension is disabled. You can listed to the 246 | * [GitExtension.onDidChangeEnablement](#GitExtension.onDidChangeEnablement) event 247 | * to know when the extension becomes enabled/disabled. 248 | * 249 | * @param version Version number. 250 | * @returns API instance 251 | */ 252 | getAPI(version: 1): API; 253 | } 254 | 255 | export const enum GitErrorCodes { 256 | BadConfigFile = 'BadConfigFile', 257 | AuthenticationFailed = 'AuthenticationFailed', 258 | NoUserNameConfigured = 'NoUserNameConfigured', 259 | NoUserEmailConfigured = 'NoUserEmailConfigured', 260 | NoRemoteRepositorySpecified = 'NoRemoteRepositorySpecified', 261 | NotAGitRepository = 'NotAGitRepository', 262 | NotAtRepositoryRoot = 'NotAtRepositoryRoot', 263 | Conflict = 'Conflict', 264 | StashConflict = 'StashConflict', 265 | UnmergedChanges = 'UnmergedChanges', 266 | PushRejected = 'PushRejected', 267 | RemoteConnectionError = 'RemoteConnectionError', 268 | DirtyWorkTree = 'DirtyWorkTree', 269 | CantOpenResource = 'CantOpenResource', 270 | GitNotFound = 'GitNotFound', 271 | CantCreatePipe = 'CantCreatePipe', 272 | CantAccessRemote = 'CantAccessRemote', 273 | RepositoryNotFound = 'RepositoryNotFound', 274 | RepositoryIsLocked = 'RepositoryIsLocked', 275 | BranchNotFullyMerged = 'BranchNotFullyMerged', 276 | NoRemoteReference = 'NoRemoteReference', 277 | InvalidBranchName = 'InvalidBranchName', 278 | BranchAlreadyExists = 'BranchAlreadyExists', 279 | NoLocalChanges = 'NoLocalChanges', 280 | NoStashFound = 'NoStashFound', 281 | LocalChangesOverwritten = 'LocalChangesOverwritten', 282 | NoUpstreamBranch = 'NoUpstreamBranch', 283 | IsInSubmodule = 'IsInSubmodule', 284 | WrongCase = 'WrongCase', 285 | CantLockRef = 'CantLockRef', 286 | CantRebaseMultipleBranches = 'CantRebaseMultipleBranches', 287 | PatchDoesNotApply = 'PatchDoesNotApply', 288 | NoPathFound = 'NoPathFound', 289 | UnknownPath = 'UnknownPath', 290 | } 291 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Settings'; 2 | export { GitExtension } from './git'; 3 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/types/settings.ts: -------------------------------------------------------------------------------- 1 | import { Settings as CommitjiSettings } from '@commitji/core'; 2 | 3 | type ExtendedJiraSettings = Pick & { 4 | issueKeyExtractionPattern: string; 5 | }; 6 | export type Settings = CommitjiSettings & { 7 | // Auto commit is currently available on VSCode extension 8 | autoCommit: boolean; 9 | jira: ExtendedJiraSettings; 10 | }; 11 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/alerter.ts: -------------------------------------------------------------------------------- 1 | import { window } from 'vscode'; 2 | 3 | export const alerter = { 4 | error: (message: string) => window.showErrorMessage(message), 5 | info: (message: string) => window.showInformationMessage(message), 6 | warning: (message: string) => window.showWarningMessage(message), 7 | }; 8 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/clipboard.ts: -------------------------------------------------------------------------------- 1 | import { env } from "vscode"; 2 | 3 | export const clipboard = { 4 | copy: (text: string) => { 5 | return env.clipboard.writeText(text); 6 | }, 7 | read: () => { 8 | return env.clipboard.readText(); 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/getJiraIssueKeyOrShowPrompt.ts: -------------------------------------------------------------------------------- 1 | import { git } from './git'; 2 | import { pipe } from './pipe'; 3 | import { pickJiraIssueKeyFromString } from './pickJiraIssueKeyFromString'; 4 | import { showJiraIssueKeyInputBox } from './showJiraIssueKeyInputBox'; 5 | 6 | import { Settings } from '../types'; 7 | 8 | export const getJiraIssueKeyOrShowPrompt = (settings: Settings) => { 9 | const jiraIssueKeyFromGitBranch = pipe( 10 | git.getBranchName, 11 | pickJiraIssueKeyFromString(settings.jira.issueKeyExtractionPattern), 12 | )(); 13 | 14 | if (jiraIssueKeyFromGitBranch) { 15 | return jiraIssueKeyFromGitBranch; 16 | } 17 | 18 | return showJiraIssueKeyInputBox(); 19 | }; 20 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/getSettings.ts: -------------------------------------------------------------------------------- 1 | import { workspace } from 'vscode'; 2 | import { resolve } from 'path'; 3 | import { readFileSync } from 'fs'; 4 | 5 | import { App } from '@commitji/core'; 6 | 7 | import { Settings } from '../types'; 8 | 9 | const clean = (settings: Settings): Settings => ({ 10 | ...settings, 11 | // Strings will result to "" and that will not trigger the default values 12 | format: settings.format || undefined, 13 | commitTypes: settings.commitTypes || [], 14 | ...settings.jira && { 15 | jira: { 16 | ...settings.jira, 17 | // Safely ensure that the default extraction pattern will always be there 18 | // https://stackoverflow.com/questions/19322669/regular-expression-for-a-jira-identifier/30518972#30518972 19 | issueKeyExtractionPattern: settings.jira.issueKeyExtractionPattern || '((? { 25 | const packageJSONSettings = getSettingsInPackageJSON(); 26 | 27 | if (packageJSONSettings) { 28 | return clean(packageJSONSettings) as unknown as Settings; 29 | } 30 | 31 | return clean( 32 | workspace.getConfiguration(App.Name) as unknown as Settings 33 | ); 34 | }; 35 | 36 | const getSettingsInPackageJSON = () => { 37 | const path = [...workspace.workspaceFolders || []].shift()?.uri.path || ''; 38 | 39 | try { 40 | const manifestPath = resolve(path, 'package.json'); 41 | const packageJSON = JSON.parse(readFileSync(manifestPath, { 42 | encoding: 'utf8', 43 | })); 44 | const settings = packageJSON['commitji']; 45 | return settings; 46 | } catch (error) { 47 | return; 48 | } 49 | }; 50 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/getWorkflow.ts: -------------------------------------------------------------------------------- 1 | import { App } from '@commitji/core'; 2 | 3 | import { basicWorkflow, jiraWorkflow } from '../workflows'; 4 | import { Settings } from '../types'; 5 | 6 | type Workflow = { 7 | key: App.BasicWorkflow | App.JiraWorkflow; 8 | value: (settings: Settings) => Promise; 9 | }; 10 | 11 | const Workflows: Workflow[] = [ 12 | { 13 | key: App.BasicWorkflow, 14 | value: basicWorkflow, 15 | }, 16 | { 17 | key: App.JiraWorkflow, 18 | value: jiraWorkflow, 19 | }, 20 | ]; 21 | 22 | const byWorkflowName = (name: string) => (workflow: Workflow) => workflow.key === name; 23 | 24 | export const getWorkflow = (workflowName: string) => { 25 | return (Workflows.find(byWorkflowName(workflowName)) || Workflows[0]).value; 26 | }; 27 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/git.ts: -------------------------------------------------------------------------------- 1 | import { extensions } from 'vscode'; 2 | 3 | import { GitExtension } from '../types'; 4 | 5 | import { alerter } from './alerter'; 6 | 7 | export const git = { 8 | getBranchName: () => { 9 | const api = getAPI(); 10 | 11 | if (!api) { 12 | return ''; 13 | } 14 | 15 | const repository = [...api.repositories].shift(); 16 | const head = repository?.state.HEAD; 17 | return head?.name || ''; 18 | }, 19 | }; 20 | 21 | const getAPI = () => { 22 | const gitExtension = extensions.getExtension('vscode.git')?.exports; 23 | 24 | if (!gitExtension) { 25 | alerter.error('No Git Extension found. This doesn\'t happen normally. Please update your extension'); 26 | return; 27 | } 28 | 29 | const api = gitExtension.getAPI(1); 30 | return api; 31 | }; 32 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './getSettings'; 2 | export * from './getWorkflow'; 3 | export * from './showCommitBodyInputBox'; 4 | export * from './showCommitTypePicker'; 5 | export * from './showJiraIssueKeyInputBox'; 6 | export * from './showJiraWorkflowTransitionPicker'; 7 | export * from './writeCommitToTerminal'; 8 | export * from './git'; 9 | export * from './pipe'; 10 | export * from './getJiraIssueKeyOrShowPrompt'; 11 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/pickJiraIssueKeyFromString.ts: -------------------------------------------------------------------------------- 1 | export const pickJiraIssueKeyFromString = (pickPattern: string) => ( 2 | value: string = '' 3 | ) => { 4 | const matchedString = value.match(pickPattern) || []; 5 | 6 | if (matchedString && !matchedString.length) { 7 | return; 8 | } 9 | return [...matchedString].shift(); 10 | }; 11 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/pipe.ts: -------------------------------------------------------------------------------- 1 | export const pipe = (...fns: Function[]) => (initialValue?: any) => 2 | fns.reduce((x, f) => f(x), initialValue); 3 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/showCommitBodyInputBox.ts: -------------------------------------------------------------------------------- 1 | import { window } from 'vscode'; 2 | 3 | import { Message } from '@commitji/core'; 4 | 5 | export const showCommitBodyInputBox = async (): Promise => { 6 | const result = await window.showInputBox({ 7 | placeHolder: 'What did you do with your task?', 8 | ignoreFocusOut: true, 9 | }); 10 | 11 | if (!result) { 12 | throw new Error(Message.Error.MissingCommitBody); 13 | } 14 | return result; 15 | }; 16 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/showCommitTypePicker.ts: -------------------------------------------------------------------------------- 1 | import { QuickPickItem, window } from 'vscode'; 2 | 3 | import { commitTypes, CommitType, Message } from '@commitji/core'; 4 | import { Settings } from '../types'; 5 | 6 | type ShowCommitTypePickerResult = CommitType; 7 | 8 | const findCommitTypeByName = (name: string) => (commitType: CommitType) => commitType.name === name; 9 | 10 | export const showCommitTypePicker = async (settings: Settings): Promise => { 11 | const commitTypeToQuickPickDisplay = (commitType: CommitType): QuickPickItem => ({ 12 | label: [commitType.emoji.unicode, commitType.name, '-', commitType.description].join(' '), 13 | }); 14 | const mergedCommitTypes = [...commitTypes, ...settings.commitTypes]; 15 | 16 | const quickPickItems = mergedCommitTypes.map(commitTypeToQuickPickDisplay); 17 | 18 | const result = await window.showQuickPick(quickPickItems, { 19 | placeHolder: 'What type of task did you do?', 20 | ignoreFocusOut: true, 21 | }); 22 | 23 | if (!result) { 24 | throw new Error(Message.Error.MissingCommitType); 25 | } 26 | 27 | // Extraction 28 | const [commitTypeWithEmojiUnicode] = result.label.split('-'); 29 | const [, commitTypeName] = commitTypeWithEmojiUnicode.split(' '); 30 | const commitTypeFromTheResult = findCommitTypeByName(commitTypeName); 31 | const commitTypeFromResult = mergedCommitTypes.find(commitTypeFromTheResult); 32 | 33 | if (!commitTypeFromResult) { 34 | throw new Error(Message.Error.MissingCommitType); 35 | } 36 | 37 | return commitTypeFromResult; 38 | }; 39 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/showJiraIssueKeyInputBox.ts: -------------------------------------------------------------------------------- 1 | import { window } from 'vscode'; 2 | 3 | import { Message } from '@commitji/core'; 4 | 5 | export const showJiraIssueKeyInputBox = async (): Promise => { 6 | const result = await window.showInputBox({ 7 | placeHolder: 'What is your Jira Issue Number?', 8 | ignoreFocusOut: true, 9 | }); 10 | 11 | if (!result) { 12 | throw new Error(Message.Error.MissingJiraIssueKey); 13 | } 14 | 15 | return result; 16 | }; 17 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/showJiraWorkflowTransitionPicker.ts: -------------------------------------------------------------------------------- 1 | import { QuickPickItem, window } from 'vscode'; 2 | 3 | import { JiraWorkflowTransition, Message } from '@commitji/core'; 4 | import { alerter } from './alerter'; 5 | import { Settings } from '../types'; 6 | 7 | const findWorkflowTransitionByName = (name: string) => (workflowTransition: JiraWorkflowTransition) => workflowTransition.workflowTransitionName === name; 8 | const workflowTransitionToQuickPickDisplay = ( 9 | workflowTransition: JiraWorkflowTransition 10 | ): QuickPickItem => ({ 11 | label: [workflowTransition.label, `(${workflowTransition.workflowTransitionName})`].join(' '), 12 | }); 13 | 14 | export const showJiraWorkflowTransitionPicker = async ( 15 | settings: Settings 16 | ): Promise => { 17 | const shouldPrompt = settings.jira.allowWorkflowTransitionPrompt; 18 | const workflowTransitions = settings.jira.workflowTransitions; 19 | const quickPickItems = workflowTransitions.map(workflowTransitionToQuickPickDisplay); 20 | 21 | if (!shouldPrompt) { 22 | return; 23 | } 24 | 25 | const result = await window.showQuickPick(quickPickItems, { 26 | placeHolder: 'What type of task did you do?', 27 | ignoreFocusOut: true, 28 | }); 29 | 30 | if (!result) { 31 | alerter.info(Message.Info.NoJiraWorkflowTransitionName); 32 | return; 33 | } 34 | 35 | // Extraction 36 | const [, dirtyWorkflowTransitionName] = result.label.split('('); 37 | const workflowTransitionName = dirtyWorkflowTransitionName.replace('(', '').replace(')', '') 38 | const workflowTransitionFromTheResult = findWorkflowTransitionByName(workflowTransitionName); 39 | const workflowTransitionFromResult = workflowTransitions.find(workflowTransitionFromTheResult); 40 | 41 | return workflowTransitionFromResult; 42 | }; 43 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/utils/writeCommitToTerminal.ts: -------------------------------------------------------------------------------- 1 | import { window } from 'vscode'; 2 | 3 | import { Message } from '@commitji/core'; 4 | 5 | import { alerter } from './alerter'; 6 | import { clipboard } from './clipboard'; 7 | 8 | export const writeCommitToTerminal = (commitText: string, autoCommitToTerminal = false) => { 9 | const commitMessage = `git commit -m "${commitText}"`; 10 | const terminal = window.activeTerminal; 11 | 12 | clipboard.copy(commitMessage); 13 | 14 | if (!terminal) { 15 | alerter.info(Message.Info.NoActiveTerminal); 16 | return; 17 | } 18 | 19 | terminal.show(); 20 | terminal.sendText(commitMessage, autoCommitToTerminal); 21 | }; 22 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/workflows/basicWorkflow.ts: -------------------------------------------------------------------------------- 1 | import { formatter, basicCommitParser } from '@commitji/core'; 2 | 3 | import { showCommitTypePicker, showCommitBodyInputBox, writeCommitToTerminal } from '../utils'; 4 | import { Settings } from '../types'; 5 | 6 | export const basicWorkflow = async (settings: Settings) => { 7 | const commitType = await showCommitTypePicker(settings); 8 | const commitMessage = await showCommitBodyInputBox(); 9 | const parser = basicCommitParser({ 10 | format: settings.format, 11 | }); 12 | const basicFormatter = formatter(parser); 13 | 14 | const formattedCommitText = basicFormatter({ 15 | commitType, 16 | commitMessage, 17 | }); 18 | 19 | writeCommitToTerminal(formattedCommitText, settings.autoCommit); 20 | }; 21 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/workflows/index.ts: -------------------------------------------------------------------------------- 1 | export * from './basicWorkflow'; 2 | export * from './jiraWorkflow'; 3 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/commitjiCommit/workflows/jiraWorkflow.ts: -------------------------------------------------------------------------------- 1 | import { 2 | formatter, 3 | jiraCommitParser, 4 | } from '@commitji/core'; 5 | 6 | import { 7 | showCommitTypePicker, 8 | showCommitBodyInputBox, 9 | showJiraWorkflowTransitionPicker, 10 | writeCommitToTerminal, 11 | getJiraIssueKeyOrShowPrompt, 12 | } from '../utils'; 13 | import { Settings } from '../types'; 14 | 15 | export const jiraWorkflow = async (settings: Settings) => { 16 | const commitType = await showCommitTypePicker(settings); 17 | const issueKey = await getJiraIssueKeyOrShowPrompt(settings); 18 | const commitMessage = await showCommitBodyInputBox(); 19 | const workflowTransition = await showJiraWorkflowTransitionPicker(settings); 20 | const parser = jiraCommitParser({ 21 | format: settings.format, 22 | includeWorkflow: settings.jira.allowWorkflowTransitionPrompt 23 | }); 24 | const jiraFormatter = formatter(parser); 25 | 26 | const formattedCommitText = jiraFormatter({ 27 | commitType, 28 | commitMessage, 29 | issueKey, 30 | workflowTransition, 31 | }); 32 | 33 | writeCommitToTerminal(formattedCommitText, settings.autoCommit); 34 | }; 35 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | 3 | import { commitjiCommit } from './commitjiCommit'; 4 | 5 | export function activate(context: vscode.ExtensionContext) { 6 | const commitCommand = vscode.commands.registerCommand('commitji.commit', async () => { 7 | await commitjiCommit(); 8 | }); 9 | 10 | context.subscriptions.push(commitCommand); 11 | } 12 | 13 | // this method is called when your extension is deactivated 14 | export function deactivate() {} 15 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | 3 | import { runTests } from 'vscode-test'; 4 | 5 | async function main() { 6 | try { 7 | // The folder containing the Extension Manifest package.json 8 | // Passed to `--extensionDevelopmentPath` 9 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 10 | 11 | // The path to test runner 12 | // Passed to --extensionTestsPath 13 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 14 | 15 | // Download VS Code, unzip it and run the integration test 16 | await runTests({ extensionDevelopmentPath, extensionTestsPath }); 17 | } catch (err) { 18 | console.error('Failed to run tests'); 19 | process.exit(1); 20 | } 21 | } 22 | 23 | main(); 24 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/test/suite/extension.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from 'assert'; 2 | 3 | // You can import and use all API from the 'vscode' module 4 | // as well as import your extension to test it 5 | import * as vscode from 'vscode'; 6 | // import * as myExtension from '../extension'; 7 | 8 | suite('Extension Test Suite', () => { 9 | vscode.window.showInformationMessage('Start all tests.'); 10 | 11 | test('Sample test', () => { 12 | assert.equal(-1, [1, 2, 3].indexOf(5)); 13 | assert.equal(-1, [1, 2, 3].indexOf(0)); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /packages/vscode-ext/src/test/suite/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import * as Mocha from 'mocha'; 3 | import * as glob from 'glob'; 4 | 5 | export function run(): Promise { 6 | // Create the mocha test 7 | const mocha = new Mocha({ 8 | ui: 'tdd', 9 | color: true 10 | }); 11 | 12 | const testsRoot = path.resolve(__dirname, '..'); 13 | 14 | return new Promise((c, e) => { 15 | glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { 16 | if (err) { 17 | return e(err); 18 | } 19 | 20 | // Add files to the test suite 21 | files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); 22 | 23 | try { 24 | // Run the mocha test 25 | mocha.run(failures => { 26 | if (failures > 0) { 27 | e(new Error(`${failures} tests failed.`)); 28 | } else { 29 | c(); 30 | } 31 | }); 32 | } catch (err) { 33 | console.error(err); 34 | e(err); 35 | } 36 | }); 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /packages/vscode-ext/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": [ 7 | "es6" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | "strict": true /* enable all strict type-checking options */ 12 | /* Additional Checks */ 13 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 14 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 15 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 16 | }, 17 | "exclude": [ 18 | "node_modules", 19 | ".vscode-test" 20 | ] 21 | } 22 | --------------------------------------------------------------------------------