From 6d5d935947f0dc4a087d458b35b405416d271cc0 Mon Sep 17 00:00:00 2001 From: Peter Schmalfeldt Date: Sat, 30 Jul 2022 20:48:37 -0400 Subject: [PATCH 1/4] Pre-release for v1.3.0 --- .vscodeignore | 8 +++++++- .gitignore | 6 ++++-- .nvmrc | 1 + CHANGELOG.md | 10 +++++++++- README.md | 10 +++++----- extension.code-workspace | 13 +++++++++++++ extension.js => extension/index.js | 0 .../resources}/dark/checked.svg | 0 {resources => extension/resources}/dark/reset.svg | 0 .../resources}/dark/toggle-off.svg | 0 .../resources}/dark/toggle-on.svg | 0 .../resources}/dark/unchecked.svg | 0 {resources => extension/resources}/icon.png | Bin .../resources}/light/checked.svg | 0 {resources => extension/resources}/light/reset.svg | 0 .../resources}/light/toggle-off.svg | 0 .../resources}/light/toggle-on.svg | 0 .../resources}/light/unchecked.svg | 0 {resources => extension/resources}/welcome.html | 0 util.js => extension/util.js | 0 viewpane.js => extension/viewpane.js | 0 welcome.js => extension/welcome.js | 0 package-lock.json | 2 +- package.json | 9 +++++---- 24 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 .nvmrc create mode 100644 extension.code-workspace rename extension.js => extension/index.js (100%) rename {resources => extension/resources}/dark/checked.svg (100%) rename {resources => extension/resources}/dark/reset.svg (100%) rename {resources => extension/resources}/dark/toggle-off.svg (100%) rename {resources => extension/resources}/dark/toggle-on.svg (100%) rename {resources => extension/resources}/dark/unchecked.svg (100%) rename {resources => extension/resources}/icon.png (100%) rename {resources => extension/resources}/light/checked.svg (100%) rename {resources => extension/resources}/light/reset.svg (100%) rename {resources => extension/resources}/light/toggle-off.svg (100%) rename {resources => extension/resources}/light/toggle-on.svg (100%) rename {resources => extension/resources}/light/unchecked.svg (100%) rename {resources => extension/resources}/welcome.html (100%) rename util.js => extension/util.js (100%) rename viewpane.js => extension/viewpane.js (100%) rename welcome.js => extension/welcome.js (100%) diff --git a/ .vscodeignore b/ .vscodeignore index f72581b..c2e585f 100755 --- a/ .vscodeignore +++ b/ .vscodeignore @@ -2,5 +2,11 @@ .gitignore .github .editorconfig +.eslintrc.js +.gitattributes +.gitignore +.nvmrc *.vsix -*.code-workspace \ No newline at end of file +*.code-workspace +DEVELOPERS.md +TROUBLESHOOTING.md diff --git a/.gitignore b/.gitignore index 91d64de..ab765f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ -*.vsix +!.nvmrc +.vscode/settings.json *.code-workspace +*.vsix node_modules -.vscode/settings.json \ No newline at end of file +!extension.code-workspace diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..7b16f79 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v14.19.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 680bdb4..0e2d86f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ Change Log > Here's our record of all notable changes made to to this project +v1.3.0 +--- + +* Added JSON Settings Linter Fix ( Thanks @MatthewTh0 ) +* Updated default null settings to `{}` vs `null` ( Thanks @Himadu2000 ) +* Add ability to not show picker and just directly exclude selected file ( Thanks @rw3iss ) +* Updated Workspace Detection to handle a few more unique use cases + v1.2.0 --- @@ -26,4 +34,4 @@ v1.0.1 v1.0.0 --- -* Initial Release \ No newline at end of file +* Initial Release diff --git a/README.md b/README.md index bc2f55b..e2ddfee 100755 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Explorer Exclude - VS Code Extension > Context Menu and Explorer Panel to Manage Showing & Hiding Excluded Files & Folders ( for VS Code version 1.32 or newer ) -![screenshot](https://explorer-exclude.s3.amazonaws.com/screenshot.png?v=1.2.0) +![screenshot](https://explorer-exclude.s3.amazonaws.com/screenshot.png?v=1.3.0) - [X] Easily Hide Files & Folders from Explorer, Search Results & Quick Open - [X] New Hidden Items Explorer Pane to Manage Hidden Items @@ -21,11 +21,11 @@ Usage Right-click on any File or Folder in Explorer List to Hide Items -![explorer](https://explorer-exclude.s3.amazonaws.com/explorer.gif?v=1.2.0) +![explorer](https://explorer-exclude.s3.amazonaws.com/explorer.gif?v=1.3.0) Select Filter Options you wish to Hide Files & Folders -![picker](https://explorer-exclude.s3.amazonaws.com/picker.gif?v=1.2.0) +![picker](https://explorer-exclude.s3.amazonaws.com/picker.gif?v=1.3.0) #### Managing Hidden Files & Folders @@ -35,5 +35,5 @@ New `HIDDEN ITEMS` Explorer Pane to Manage Hidden Files: * Right-click an item to view Context Menu where you can Permanently Remove item * Use Hidden Items Menu to manage multiple items at once -![view-pane](https://explorer-exclude.s3.amazonaws.com/view-pane.gif?v=1.2.0) -![pane-menu](https://explorer-exclude.s3.amazonaws.com/pane-menu.gif?v=1.2.0) +![view-pane](https://explorer-exclude.s3.amazonaws.com/view-pane.gif?v=1.3.0) +![pane-menu](https://explorer-exclude.s3.amazonaws.com/pane-menu.gif?v=1.3.0) diff --git a/extension.code-workspace b/extension.code-workspace new file mode 100644 index 0000000..e5f5208 --- /dev/null +++ b/extension.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "cSpell.words": [ + "subdir", + "viewpane" + ] + } +} diff --git a/extension.js b/extension/index.js similarity index 100% rename from extension.js rename to extension/index.js diff --git a/resources/dark/checked.svg b/extension/resources/dark/checked.svg similarity index 100% rename from resources/dark/checked.svg rename to extension/resources/dark/checked.svg diff --git a/resources/dark/reset.svg b/extension/resources/dark/reset.svg similarity index 100% rename from resources/dark/reset.svg rename to extension/resources/dark/reset.svg diff --git a/resources/dark/toggle-off.svg b/extension/resources/dark/toggle-off.svg similarity index 100% rename from resources/dark/toggle-off.svg rename to extension/resources/dark/toggle-off.svg diff --git a/resources/dark/toggle-on.svg b/extension/resources/dark/toggle-on.svg similarity index 100% rename from resources/dark/toggle-on.svg rename to extension/resources/dark/toggle-on.svg diff --git a/resources/dark/unchecked.svg b/extension/resources/dark/unchecked.svg similarity index 100% rename from resources/dark/unchecked.svg rename to extension/resources/dark/unchecked.svg diff --git a/resources/icon.png b/extension/resources/icon.png similarity index 100% rename from resources/icon.png rename to extension/resources/icon.png diff --git a/resources/light/checked.svg b/extension/resources/light/checked.svg similarity index 100% rename from resources/light/checked.svg rename to extension/resources/light/checked.svg diff --git a/resources/light/reset.svg b/extension/resources/light/reset.svg similarity index 100% rename from resources/light/reset.svg rename to extension/resources/light/reset.svg diff --git a/resources/light/toggle-off.svg b/extension/resources/light/toggle-off.svg similarity index 100% rename from resources/light/toggle-off.svg rename to extension/resources/light/toggle-off.svg diff --git a/resources/light/toggle-on.svg b/extension/resources/light/toggle-on.svg similarity index 100% rename from resources/light/toggle-on.svg rename to extension/resources/light/toggle-on.svg diff --git a/resources/light/unchecked.svg b/extension/resources/light/unchecked.svg similarity index 100% rename from resources/light/unchecked.svg rename to extension/resources/light/unchecked.svg diff --git a/resources/welcome.html b/extension/resources/welcome.html similarity index 100% rename from resources/welcome.html rename to extension/resources/welcome.html diff --git a/util.js b/extension/util.js similarity index 100% rename from util.js rename to extension/util.js diff --git a/viewpane.js b/extension/viewpane.js similarity index 100% rename from viewpane.js rename to extension/viewpane.js diff --git a/welcome.js b/extension/welcome.js similarity index 100% rename from welcome.js rename to extension/welcome.js diff --git a/package-lock.json b/package-lock.json index 7a29529..1d944f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "explorer-exclude-vscode-extension", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ccd4320..411d852 100755 --- a/package.json +++ b/package.json @@ -1,14 +1,15 @@ { "name": "explorer-exclude-vscode-extension", "displayName": "Explorer Exclude", - "version": "1.2.0", + "version": "1.3.0", "description": "Explorer Exclude lets you easily Hide Files & Folders with Dynamic Filter Options. Add a New 'Hidden Items' Explorer Pane for you to Manage and Quickly Toggle Visibility of Hidden Items.", "license": "MIT", "publisher": "SFCCDevOps", "categories": [ "Other" ], - "icon": "resources/icon.png", + "main": "extension/index.js", + "icon": "extension/resources/icon.png", "galleryBanner": { "color": "#1c1c1c", "theme": "dark" @@ -21,7 +22,8 @@ "url": "https://github.com/sfccdevops/explorer-exclude-vscode-extension/issues" }, "engines": { - "vscode": "^1.32.0" + "vscode": "^1.60.0", + "node": "^14.19.0" }, "keywords": [ "context-menu", @@ -56,7 +58,6 @@ "onCommand:explorer-exclude.enableAll", "onCommand:explorer-exclude.reset" ], - "main": "./extension", "contributes": { "configuration": [ { From c5e8eff8ea77e038a4a99d0b98d31eed7817ad7f Mon Sep 17 00:00:00 2001 From: Peter Schmalfeldt Date: Sun, 31 Jul 2022 07:11:27 -0400 Subject: [PATCH 2/4] Fixing most of the reported issues and cleaning up a few things I found --- .editorconfig | 14 + .eslintrc.js | 36 + .gitattributes | 1 + .github/CODE_OF_CONDUCT.md | 76 + .github/CONTRIBUTING.md | 57 +- .github/ISSUE_TEMPLATE.md | 19 - .github/ISSUE_TEMPLATE/bug-report.yml | 66 + .github/ISSUE_TEMPLATE/feature-request.yml | 36 + .github/ISSUE_TEMPLATE/question.yml | 12 + .github/ISSUE_TEMPLATE/requested-change.yml | 36 + .github/PULL_REQUEST_TEMPLATE.md | 38 +- .github/workflows/assign-to-project.yml | 20 + .github/workflows/build-test.yml | 21 + .github/workflows/create-release.yml | 25 + .../workflows/publish-vs-code-extension.yml | 26 + .vscodeignore => .vscodeignore | 0 DEVELOPERS.md | 38 + README.md | 20 +- TROUBLESHOOTING.md | 4 +- extension.code-workspace | 7 +- extension/index.js | 256 ++- extension/resources/dark/settings.svg | 4 + extension/resources/light/settings.svg | 4 + extension/util.js | 804 +++---- extension/viewpane.js | 100 +- extension/welcome.js | 60 +- package-lock.json | 1916 +++++++++++++---- package.json | 103 +- package.nls.bg.json | 8 +- package.nls.de.json | 8 +- package.nls.es.json | 8 +- package.nls.fr.json | 8 +- package.nls.hu.json | 8 +- package.nls.it.json | 8 +- package.nls.ja.json | 8 +- package.nls.json | 8 +- package.nls.ko.json | 8 +- package.nls.pt-br.json | 8 +- package.nls.ru.json | 8 +- package.nls.tr.json | 8 +- package.nls.zh-cn.json | 8 +- package.nls.zh-tw.json | 8 +- 42 files changed, 2784 insertions(+), 1127 deletions(-) create mode 100644 .editorconfig create mode 100644 .eslintrc.js create mode 100644 .gitattributes create mode 100644 .github/CODE_OF_CONDUCT.md delete mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/ISSUE_TEMPLATE/bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/feature-request.yml create mode 100644 .github/ISSUE_TEMPLATE/question.yml create mode 100644 .github/ISSUE_TEMPLATE/requested-change.yml create mode 100644 .github/workflows/assign-to-project.yml create mode 100644 .github/workflows/build-test.yml create mode 100644 .github/workflows/create-release.yml create mode 100644 .github/workflows/publish-vs-code-extension.yml rename .vscodeignore => .vscodeignore (100%) mode change 100755 => 100644 create mode 100644 DEVELOPERS.md create mode 100644 extension/resources/dark/settings.svg create mode 100644 extension/resources/light/settings.svg diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..2fe59f7 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +[package.json] +indent_style = space +indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..f43fecb --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,36 @@ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + ecmaVersion: 8, + }, + env: { + es6: true, + node: true, + browser: true, + jest: true, + }, + plugins: ['prettier'], + extends: ['eslint:recommended', 'prettier'], + rules: { + 'prettier/prettier': [ + 'error', + { + singleQuote: true, + bracketSpacing: true, + semi: false, + printWidth: 500, + }, + ], + 'no-empty': [ + 'error', + { + allowEmptyCatch: true, + }, + ], + 'no-console': 0, + 'no-control-regex': 0, + 'no-useless-escape': 0, + }, + globals: {}, + } diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..43b7944 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at me@peterschmalfeldt.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 751defc..a26152c 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,27 +1,52 @@ -![Logo](https://sfccdevops.s3.amazonaws.com/logo-128.png "Logo") - -Thank you for Contributing +Contributing Guide === -We want to make it as easy as possible to contribute changes. +Issues & Feature Requests +--- -Follow the requirements below for __[Creating Issues](https://github.com/sfccdevops/explorer-exclude-vscode-extension/issues/new)__ and __[Pull Requests](https://github.com/sfccdevops/explorer-exclude-vscode-extension/pull/new)__, to keep everything simple for everyone :) +[![Create Issue](https://img.shields.io/badge/Github-Create_Issue-red.svg?style=for-the-badge&logo=github&logoColor=ffffff&logoWidth=16)](https://github.com/sfccdevops/explorer-exclude-vscode-extension/issues/new/choose) - +### Bug Fix -Creating an Issue ---- +> We're sorry things are not working as expected, and want to get things fixed ASAP. In order to help us do that, we need a few things from you. + +1. Create a [New Issue](https://github.com/sfccdevops/explorer-exclude-vscode-extension/issues/new/choose) +2. Enter a Short but Descriptive Title for the Issue +3. Use the Template Provided and fill in as much as you can, if something does not apply, enter `N/A` +4. Look for the `Labels` section, and select `Bug Report` from the drop down menu +5. Click `Submit new issue` button + +### Feature Request -Use the Prepopulated Template that we provide. Issues reported that do not use the template will be rejected. +> Got an idea for a new feature? We'd love to hear it! In order to get this knocked out, we will need a few things from you. +1. Create a [New Issue](https://github.com/sfccdevops/explorer-exclude-vscode-extension/issues/new/choose) +2. Enter a Short but Descriptive Title for the Feature Request +3. Use the Template Provided and fill in as much as you can, if something does not apply, enter `N/A` ( you can delete the `Steps to Duplicate:` section as that does not apply ) +4. Look for the `Labels` section, and select `Feature Request` from the drop down menu +5. Click `Submit new issue` button -Creating a Pull Request +Pull Requests --- -Before you can submit a PR, you will need to: +[![Create Pull Request](https://img.shields.io/badge/Github-Create_Pull_Request-blue.svg?style=for-the-badge&logo=github&logoColor=ffffff&logoWidth=16)](https://github.com/sfccdevops/explorer-exclude-vscode-extension/compare) + +### Bug Fix + +> Each Bug Fix reported on GitHub should have its own `fix/*` branch. The branch name should be formatted `fix/###-issue-name` where `###` is the GitHub Issue Number, and `issue-name` is a 1-3 word summary of the issue. + +1. Checkout latest `develop` branch +2. Pull down the latest changes via `git pull` +3. Create a new branch with the structure `fix/*`, e.g. `fix/123-broken-form` +4. When you are ready to submit your code, submit a new Pull Request that merges your code into `develop` +5. Tag your new Pull Request with `Ready for Code Review` + +### Feature Request + +> Each New Feature should reside in its own `feature/` branch. The branch name should be formatted `feature/###-feature-name` where `###` is the GitHub Issue Number, and `feature-name` is a 1-3 word summary of the feature. -1. Make a New Branch off of `master` ( ideally you will name your branch for the issue you are fixing, e,g, `issue-3-fix-menu` ) -2. Commit & Push your New Branch, with a comment like `Fixes #3` to auto trigger a status change for that issue -3. Make your Pull Request -4. Set `Reviewers` and `Assignees` to `Peter Schmalfeldt` ( or other project administrator ) -5. Choose an appropriate label from the `Labels` +1. Checkout latest `develop` branch +2. Pull down the latest changes via `git pull` +3. Create a new branch with the structure `feature/*`, e.g. `feature/123-search-form` +4. When you are ready to submit your code, submit a new Pull Request that merges your code into `develop` +5. Tag your new Pull Request with `Ready for Code Review` diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 4baf30f..0000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,19 +0,0 @@ -#### Overview: - -_( a detailed overview of the problem this ticket will solve and the targeted audience )_ - -#### Acceptance Criteria: - -_( issue will not be considered complete unless this list of criteria is met, e.g. intended usage, expected functionality, specific metrics met, etc. )_ - -#### Steps to Duplicate _( required for bug reports )_: - -_( a step by step guide written for a person who might be looking at this for the first time )_ - -#### System Info _( required for bug reports )_: - -_( e.g. "MacOS 10.14.2 with ZSH terminal" )_ - -#### Relevant Documentation _( optional )_ - -_( e.g. Screenshots, Github Issues, etc )_ diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000..a914eb0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,66 @@ +name: Bug Report +description: I would like to Report a Bug +labels: [Bug Report] +assignees: + - manifestinteractive +body: + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true + - type: textarea + attributes: + label: Describe the Bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: textarea + attributes: + label: Steps To Reproduce + description: Steps to reproduce the behavior. + placeholder: | + 1. Go to ... + 2. Click on ... + 3. Scroll down to ... + 4. See error ... + validations: + required: true + - type: textarea + attributes: + label: Expected Behavior + description: A concise description of what you expected to happen. + validations: + required: false + - type: textarea + attributes: + label: Screenshots + description: If applicable, add screenshots to help explain your problem. + validations: + required: false + - type: textarea + attributes: + label: Environment + description: | + examples: + - **OS**: Ubuntu 20.04 + - **Node**: 13.14.0 + - **npm**: 7.6.3 + value: | + - OS: + - Node: + - npm: + render: markdown + validations: + required: false + - type: textarea + attributes: + label: Additional Context + description: | + Links? References? Anything that will give us more context about the issue you are encountering! + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 0000000..aa97d8e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,36 @@ +name: Feature Request +description: This is a new Feature Request for this project +labels: [Feature Request] +assignees: + - manifestinteractive +body: + - type: textarea + attributes: + label: Describe the Problem + description: Is your feature request related to a problem? Please describe. + placeholder: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + validations: + required: true + - type: textarea + attributes: + label: Describe the Solution + description: Describe the solution you'd like + placeholder: A clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + attributes: + label: Alternatives + description: Describe alternatives you've considered + placeholder: A clear and concise description of any alternative solutions or features you've considered. + validations: + required: false + - type: textarea + attributes: + label: Additional Context + description: | + Add any other context or screenshots about the feature request here. + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 0000000..3562627 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,12 @@ +name: Question +description: I have a Question about this project +labels: [Question] +assignees: + - manifestinteractive +body: + - type: textarea + attributes: + label: Question + description: Please Write your Question Below. + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/requested-change.yml b/.github/ISSUE_TEMPLATE/requested-change.yml new file mode 100644 index 0000000..a2dfe5a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/requested-change.yml @@ -0,0 +1,36 @@ +name: Requested Change +description: This is a Requested Change to the project +labels: [Requested Change] +assignees: + - manifestinteractive +body: + - type: textarea + attributes: + label: Describe the Problem + description: Is your requested change related to a problem? Please describe. + placeholder: A clear and concise description of what the request is. + validations: + required: true + - type: textarea + attributes: + label: Describe the Solution + description: Describe the solution you'd like + placeholder: A clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + attributes: + label: Alternatives + description: Describe alternatives you've considered + placeholder: A clear and concise description of any alternative solutions or features you've considered. + validations: + required: false + - type: textarea + attributes: + label: Additional Context + description: | + Add any other context or screenshots about the feature request here. + + Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8a1ab10..d1d1a1f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,33 +1,31 @@ -#### What's this PR do? +Overview +--- -_[write_something]_ +TEXT -#### Where should the reviewer start? +Reviewer +--- -_[write_something]_ +> Where should the reviewer start? How to Test? Background Context? etc ( required ) -#### How should this be manually tested? +TEXT -_[write_something]_ +Checklist +--- -#### Any background context you want to provide? +> I have tested each of the following, and they work as expected: ( required ) -_[write_something]_ +- [ ] Meets [Contributing Guide](https://github.com/sfccdevops/explorer-exclude-vscode-extension/blob/develop/.github/CONTRIBUTING.md) Requirements +- [ ] Pulled in the Latest Code from the `develop` branch +- [ ] Works on a Desktop / Laptop Device -#### What are the relevant github issue? +Documentation +--- -_[write_something]_ +> Screenshots, Attachments, Linked GitHub Issues, etc ( optional ) -#### Screenshots (if appropriate) -_[drag_and_drop_here]_ -#### What gif best describes this PR or how it makes you feel? +#### What GIF best describes this PR or how it makes you feel? -_[drag_and_drop_something_fun_here]_ - -#### Definition of Done: - -- [ ] You have actually run this locally and can verify it works -- [ ] You have verified that `npm test` passes without issue -- [ ] You have updated the README file (if appropriate) +> Drag & Drop Something Fun Here ( optional ) diff --git a/.github/workflows/assign-to-project.yml b/.github/workflows/assign-to-project.yml new file mode 100644 index 0000000..d1e284c --- /dev/null +++ b/.github/workflows/assign-to-project.yml @@ -0,0 +1,20 @@ +name: Assign to Project +on: + issues: + types: + - opened + pull_request: + types: + - opened +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} +jobs: + assign_to_project: + runs-on: ubuntu-latest + name: Assign to Project + steps: + - name: Check GitHub Event Action + uses: srggrs/assign-one-project-github-action@1.2.0 + if: github.event.action == 'opened' + with: + project: 'https://github.com/sfccdevops/explorer-exclude-vscode-extension/projects/1' diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml new file mode 100644 index 0000000..d006076 --- /dev/null +++ b/.github/workflows/build-test.yml @@ -0,0 +1,21 @@ +name: Build & Test +on: + push: + branches: + - develop + pull_request: + branches: + - develop +jobs: + build_and_test: + name: Build Application and Run Tests + runs-on: ubuntu-latest + steps: + - name: Check out Repository + uses: actions/checkout@v2 + - name: Use Node.js + uses: actions/setup-node@v1 + with: + node-version: '14.x' + - run: npm install + - run: npm test diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml new file mode 100644 index 0000000..3a0dab3 --- /dev/null +++ b/.github/workflows/create-release.yml @@ -0,0 +1,25 @@ +name: Create Release +on: + push: + tags: + - 'v*' +jobs: + release: + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + steps: + - name: Build Changelog + id: github_release + uses: mikepenz/release-changelog-builder-action@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Create Release + uses: actions/create-release@v1 + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + body: ${{steps.github_release.outputs.changelog}} + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/publish-vs-code-extension.yml b/.github/workflows/publish-vs-code-extension.yml new file mode 100644 index 0000000..11991dd --- /dev/null +++ b/.github/workflows/publish-vs-code-extension.yml @@ -0,0 +1,26 @@ +name: Deploy Extension +on: + push: + tags: + - 'v*' +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 16 + - run: npm ci + # - name: Publish to Open VSX Registry + # uses: HaaLeo/publish-vscode-extension@v1 + # id: publishToOpenVSX + # with: + # pat: ${{ secrets.OPEN_VSX_TOKEN }} + - name: Publish to Visual Studio Marketplace + uses: HaaLeo/publish-vscode-extension@v1 + id: publishToMarketplace + with: + pat: ${{ secrets.VS_MARKETPLACE_TOKEN }} + registryUrl: https://marketplace.visualstudio.com + extensionFile: ${{ steps.publishToOpenVSX.outputs.vsixPath }} diff --git a/ .vscodeignore b/.vscodeignore old mode 100755 new mode 100644 similarity index 100% rename from .vscodeignore rename to .vscodeignore diff --git a/DEVELOPERS.md b/DEVELOPERS.md new file mode 100644 index 0000000..e1b9bd1 --- /dev/null +++ b/DEVELOPERS.md @@ -0,0 +1,38 @@ +Developer Setup +=== + +Extension Development +--- + +### Downloading Extension + +> To get started developing this extension, you will first need to download the source code: + +```bash +git clone git@github.com:sfccdevops/explorer-exclude-vscode-extension.git +cd explorer-exclude-vscode-extension +npm install +``` + +### Testing Extension + +> To develop this extension in VS Code: + +1. Open File `extension.code-workspace` in VS Code +2. Run `npm install` in VS Code Terminal +3. Press `F5` to launch extension in a new VS Code window + +NOTE: The first time you press `F5` it may launch in an empty workspace. You will likely need to open an SFCC project into this new VS Code window in order to test the extension. + +Multilingual Support +--- + +> Want this extension in another language? Translations for [VS Code Supported Locales](https://code.visualstudio.com/docs/getstarted/locales#_available-locales) can easily be added: + +**To make a Translation:** + +1. Open `package.nls.json` +2. Save as a new file with language code, e.g. `Spanish` would be `package.nls.es.json` +3. Update JSON Values with your custom language +4. Double check everything works +5. Submit a Pull Request with a new translation file diff --git a/README.md b/README.md index 19f04fa..dd204e1 100755 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Explorer Exclude - VS Code Extension --- -> Context Menu and Explorer Panel to Manage Showing & Hiding Excluded Files & Folders ( for VS Code version 1.32 or newer ) +> Context Menu and Explorer Panel to Manage Showing & Hiding Excluded Files & Folders ( for VS Code version 1.60 or newer ) ![screenshot](https://explorer-exclude.s3.amazonaws.com/screenshot.png?v=1.3.0) @@ -13,7 +13,6 @@ Explorer Exclude - VS Code Extension - [X] Quickly Toggle Visibility of Hidden Items - [X] Translations for [VS Code Supported Locales](https://code.visualstudio.com/docs/getstarted/locales#_available-locales): _( English, Simplified Chinese, Traditional Chinese, French, German, Italian, Spanish, Japanese, Korean, Russian, Bulgarian, Hungarian, Portuguese & Turkish )_ - Usage --- @@ -41,3 +40,20 @@ New `HIDDEN ITEMS` Explorer Pane to Manage Hidden Files: ![view-pane](https://explorer-exclude.s3.amazonaws.com/view-pane.gif?v=1.3.0) ![pane-menu](https://explorer-exclude.s3.amazonaws.com/pane-menu.gif?v=1.3.0) + +Need Help? +--- + +> Check out or Troubleshooting Page for help with any known issues or report new ones. + +[![Create Issue](https://img.shields.io/badge/Get_Help-Troubleshooting-red.svg?style=for-the-badge&logo=github&logoColor=ffffff&logoWidth=16)](https://github.com/sfccdevops/explorer-exclude-vscode-extension/blob/develop/TROUBLESHOOTING.md) + +About the Author +--- + +> [Peter Schmalfeldt](https://peterschmalfeldt.com/) is a Certified Senior Salesforce Commerce Cloud Developer with over 20 years of experience building eCommerce websites, providing everything you need to design, develop & deploy eCommerce applications for Web, Mobile & Desktop platforms. + +Disclaimer +--- + +> The trademarks and product names of Salesforce®, including the mark Salesforce®, are the property of Salesforce.com. SFCC DevOps is not affiliated with Salesforce.com, nor does Salesforce.com sponsor or endorse the SFCC DevOps products or website. The use of the Salesforce® trademark on this project does not indicate an endorsement, recommendation, or business relationship between Salesforce.com and SFCC DevOps. diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 4d5f54e..92d2dfa 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -9,9 +9,9 @@ Troubleshooting If you are getting an error like this one: ``` -Unable to install Extension 'sfccdevops.explorer-exclude-vscode-extension-1.1.0' as it is not compatible with Code '1.26.0'. +Unable to install Extension 'sfccdevops.explorer-exclude-vscode-extension-1.3.0' as it is not compatible with Code '1.26.0'. ``` It is because you downloaded the Extension from the VS Code Marketplace Website manually ( and not through VS Code's internal extension listing ) and tried to install it into an older, unsupported version of VS Code. -This extension requires VS Code v1.32 or newer. If you would like to install this extension, you will need to [update VS Code](https://code.visualstudio.com/download) to version v1.32 or newer. +This extension requires VS Code v1.60 or newer. If you would like to install this extension, you will need to [update VS Code](https://code.visualstudio.com/download) to version v1.60 or newer. diff --git a/extension.code-workspace b/extension.code-workspace index e5f5208..9ac8fa7 100644 --- a/extension.code-workspace +++ b/extension.code-workspace @@ -6,8 +6,11 @@ ], "settings": { "cSpell.words": [ - "subdir", - "viewpane" + "mikepenz", + "sfccdevops", + "srggrs", + "viewpane", + "vsix" ] } } diff --git a/extension/index.js b/extension/index.js index 376050e..cb93055 100755 --- a/extension/index.js +++ b/extension/index.js @@ -1,120 +1,154 @@ -const vscode = require('vscode'); -const { init, localize } = require('vscode-nls-i18n'); +'use strict' -const util = require('./util'); -const ViewPane = require('./viewpane'); -const WelcomePane = require('./welcome'); +const vscode = require('vscode') +const { init, localize } = require('vscode-nls-i18n') +const util = require('./util') +const ViewPane = require('./viewpane') +const WelcomePane = require('./welcome') + +/** + * Handle Activating Extension + * @param {*} context + */ function activate(context) { - init(context); - - const timeout = 25; - const pane = new ViewPane('explorerExclude.pane.items'); - - /* Get Extension Version Info */ - const currentVersion = context.globalState.get('explorer-exclude.version'); - const packageVersion = vscode.extensions.getExtension('SFCCDevOps.explorer-exclude-vscode-extension').packageJSON.version; - - /* Initialize Hidden Items Pane */ - pane.update(util.getExcludes()); - - /* Save Extension Context for later use */ - util.saveContext(context); - - /* Set Initial State of Extension */ - vscode.commands.executeCommand('setContext', 'explorerExclude:enabled', true); - - /* Check if there was a recent change to installed version */ - if (currentVersion !== packageVersion) { - context.globalState.update('explorer-exclude.version', packageVersion); - - const welcome = new WelcomePane(); - welcome.show(); - } - - const exclude = vscode.commands.registerCommand('explorer-exclude.exclude', (uri) => { - util.vscExclude(uri, function() { - setTimeout(function(){ - pane.update(util.getExcludes()); - }, timeout); - }); - }); - - const remove = vscode.commands.registerCommand('explorer-exclude.remove', (uri) => { - util.vscRemove(uri, function() { - setTimeout(function(){ - pane.update(util.getExcludes()); - }, timeout); - }); - }); - - const toggle = vscode.commands.registerCommand('explorer-exclude.toggle', (uri) => { - util.vscToggle(uri, function() { - setTimeout(function(){ - pane.update(util.getExcludes()); - }, timeout); - }); - }); - - const toggleAllOff = vscode.commands.registerCommand('explorer-exclude.toggleAllOff', () => { - util.vscToggleAll(function() { - setTimeout(function(){ - pane.update(util.getExcludes()); - }, timeout); - }); - }); - - const toggleAllOn = vscode.commands.registerCommand('explorer-exclude.toggleAllOn', () => { - util.vscToggleAll(function() { - setTimeout(function(){ - pane.update(util.getExcludes()); - }, timeout); - }); - }); - - const disableAll = vscode.commands.registerCommand('explorer-exclude.disableAll', () => { - util.vscDisableAll(function() { - setTimeout(function(){ - pane.update(util.getExcludes()); - }, timeout); - }); - }); - - const enableAll = vscode.commands.registerCommand('explorer-exclude.enableAll', () => { - util.vscEnableAll(function() { - setTimeout(function(){ - pane.update(util.getExcludes()); - }, timeout); - }); - }); - - const reset = vscode.commands.registerCommand('explorer-exclude.reset',async () => { - const value = await vscode.window.showInputBox({ - prompt: localize('reset.prompt') - }); - - if (typeof value !== 'undefined') { - util.vscReset(function() { - setTimeout(function(){ - pane.update(util.getExcludes()); - }, timeout); - }); - } - }); - - context.subscriptions.push(exclude); - context.subscriptions.push(remove); - context.subscriptions.push(toggle); - context.subscriptions.push(toggleAllOff); - context.subscriptions.push(toggleAllOn); - context.subscriptions.push(disableAll); - context.subscriptions.push(enableAll); - context.subscriptions.push(reset); + // Initialize Localization + init(context.extensionPath) + + const timeout = 25 + const pane = new ViewPane('explorerExclude.pane.items') + + // Get Extension Version Info + const currentVersion = context.globalState.get('explorer-exclude.version') + const packageVersion = vscode.extensions.getExtension('SFCCDevOps.explorer-exclude-vscode-extension').packageJSON.version + + // Check if there was a recent change to installed version + if (currentVersion !== packageVersion) { + // Update version number so we don't show this again until next update + context.globalState.update('explorer-exclude.version', packageVersion) + + // Show Welcome Modal since this is a new version or install + const welcome = new WelcomePane() + welcome.show() + } + + const disableAll = vscode.commands.registerCommand('explorer-exclude.disableAll', () => { + util.logger('Disable All Excludes', 'debug') + util.disableAll(function () { + setTimeout(function () { + pane.update(util.getExcludes()) + }, timeout) + }) + }) + + const enableAll = vscode.commands.registerCommand('explorer-exclude.enableAll', () => { + util.logger('Enable All Excludes', 'debug') + util.enableAll(function () { + setTimeout(function () { + pane.update(util.getExcludes()) + }, timeout) + }) + }) + + const exclude = vscode.commands.registerCommand('explorer-exclude.exclude', (uri) => { + util.exclude(uri, function () { + setTimeout(function () { + pane.update(util.getExcludes()) + }, timeout) + }) + }) + + const openSettings = vscode.commands.registerCommand('explorer-exclude.openSettings', () => { + util.logger('Opening Explorer Exclude Settings', 'debug') + vscode.commands.executeCommand('workbench.action.openSettings', 'explorerExclude.') + setTimeout(function () { + vscode.commands.executeCommand('workbench.action.openWorkspaceSettings') + }, 1000) + }) + + const remove = vscode.commands.registerCommand('explorer-exclude.remove', (uri) => { + util.logger(`REMOVE: ${uri}`, 'debug') + if (uri && uri.value) { + const value = uri.value + const key = value.substring(0, value.length - 2) + + util.deleteExclude(key, function () { + setTimeout(function () { + pane.update(util.getExcludes()) + }, timeout) + }) + } + }) + + const reset = vscode.commands.registerCommand('explorer-exclude.reset', async () => { + const value = await vscode.window.showInputBox({ + prompt: localize('reset.prompt'), + }) + + if (typeof value !== 'undefined') { + util.logger('Reset Explorer Exclude', 'debug') + + util.reset(function () { + setTimeout(function () { + pane.update(util.getExcludes()) + }, timeout) + }) + } + }) + + const toggle = vscode.commands.registerCommand('explorer-exclude.toggle', (uri) => { + util.toggleExclude(uri, function () { + setTimeout(function () { + pane.update(util.getExcludes()) + }, timeout) + }) + }) + + const toggleAllOff = vscode.commands.registerCommand('explorer-exclude.toggleAllOff', () => { + util.logger('Toggle All Excludes: OFF', 'debug') + util.toggleAll(function () { + setTimeout(function () { + pane.update(util.getExcludes()) + }, timeout) + }) + }) + + const toggleAllOn = vscode.commands.registerCommand('explorer-exclude.toggleAllOn', () => { + util.logger('Toggle All Excludes: ON', 'debug') + util.toggleAll(function () { + setTimeout(function () { + pane.update(util.getExcludes()) + }, timeout) + }) + }) + + // Set Initial State of Extension + vscode.commands.executeCommand('setContext', 'explorer-exclude.enabled', true) + + // Save Extension Context for later use + util.saveContext(context) + + // Initialize Hidden Items Pane + pane.update(util.getExcludes()) + + // Update VS Code Extension Subscriptions + context.subscriptions.push(disableAll) + context.subscriptions.push(enableAll) + context.subscriptions.push(exclude) + context.subscriptions.push(openSettings) + context.subscriptions.push(remove) + context.subscriptions.push(reset) + context.subscriptions.push(toggle) + context.subscriptions.push(toggleAllOff) + context.subscriptions.push(toggleAllOn) } +/** + * Handle Deactivating Extension + */ function deactivate() {} module.exports = { - activate, - deactivate + activate, + deactivate, } diff --git a/extension/resources/dark/settings.svg b/extension/resources/dark/settings.svg new file mode 100644 index 0000000..57e1b5e --- /dev/null +++ b/extension/resources/dark/settings.svg @@ -0,0 +1,4 @@ + + + + diff --git a/extension/resources/light/settings.svg b/extension/resources/light/settings.svg new file mode 100644 index 0000000..57e1b5e --- /dev/null +++ b/extension/resources/light/settings.svg @@ -0,0 +1,4 @@ + + + + diff --git a/extension/util.js b/extension/util.js index c204bd0..94b69ba 100755 --- a/extension/util.js +++ b/extension/util.js @@ -1,226 +1,235 @@ -const fs = require('fs'); -const path = require('path'); -const subdir = require('subdir'); -const util = require('util'); -const vscode = require('vscode'); +'use strict' -const { localize } = require('vscode-nls-i18n'); +const fs = require('fs') +const path = require('path') +const util = require('util') +const vscode = require('vscode') -const rootPath = vscode.workspace.rootPath; +const { init, localize } = require('vscode-nls-i18n') -let VS_CONTEXT = null; +// Create custom Output Channel to Log Helpful Messages +const output = vscode.window.createOutputChannel('Explorer Exclude') + +// Setup Workspace Variables +let workspace = vscode.workspace.rootPath +let context = null /** * Custom Await Method for Processing Hidden File Config */ -var _await = (this && this._await) || function (thisArg, _arguments, P, generator) { +const _await = + (this && this._await) || + function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator['throw'](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; + function fulfilled(value) { + try { + step(generator.next(value)) + } catch (e) { + reject(e) + } + } + function rejected(value) { + try { + step(generator['throw'](value)) + } catch (e) { + reject(e) + } + } + function step(result) { + result.done + ? resolve(result.value) + : new P(function (resolve) { + resolve(result.value) + }).then(fulfilled, rejected) + } + step((generator = generator.apply(thisArg, _arguments || [])).next()) + }) + } /** - * Delete Key from Exclude Config - * @param {string} key - * @param {string} uri - * @param {function} callback + * Get VS Code Workspace Base + * @param {*} context + * @returns */ -function deleteExclude(key, uri, callback) { - if (!key) { - return false; +const getWorkspace = (context) => { + // Initialize Localization + init(context.extensionPath) + + let root + let workspace + + // Check for missing VS Code Workspace, if present, otherwise use context path + if (context && !vscode.workspace && !vscode.workspace.workspaceFolders) { + workspace = vscode.workspace.rootPath ? vscode.workspace.rootPath : path.dirname(context.fsPath) + } else { + // We have a Workspace, now let's figure out if it's single or multiroot + if (vscode.workspace && vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length === 1) { + // There was only one Workspace, so we can just use it + root = vscode.workspace.workspaceFolders[0] + workspace = root && root.uri ? root.uri.fsPath : null + } else if (vscode.workspace && vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 1) { + // There is more than one Workspace, so let's grab the active one + if (vscode.window.activeTextEditor) { + // Since there is a file active, let's find the workspace from that file + root = vscode.workspace.workspaceFolders.find((wsFolder) => { + const relative = path.relative(wsFolder.uri.fsPath, vscode.window.activeTextEditor.document.uri.path) + return relative && !relative.startsWith('..') && !path.isAbsolute(relative) + }) + workspace = root && root.uri ? root.uri.fsPath : null + } else { + // No file was open, so just grab the first available workspace + root = vscode.workspace.workspaceFolders[0] + workspace = root && root.uri ? root.uri.fsPath : null + } + } else if (context && vscode.workspace) { + // Something else is going on, let's see if we can still figure it out + try { + root = vscode.workspace.getWorkspaceFolder(context) + workspace = root && root.uri ? root.uri.fsPath : null + } catch (err) { + logger(err, 'error') + } } + } - const config = vscode.workspace.getConfiguration('files', null); + // If we did not get Workspace, let the user know + if (!workspace) { + const message = localize('debug.logger.missingWorkspace') + logger(message, 'error') + vscode.window.showErrorMessage(`${localize('extension.title')}: ${message}`) + } - let excludes = config.get('exclude'); - if (!excludes) { - excludes = {}; - } + // Debug Cartridge Path + logger(localize('debug.logger.workspace', workspace)) - // Remove if already set - if (key && excludes.hasOwnProperty(key)) { - delete excludes[key]; - updateConfig(excludes, uri, callback, localize('config.removedKey', key)) - } -} - -/** - * Get Excluded Fils - */ -function getExcludes() { - if (!rootPath || rootPath === '') { - return []; - } - - const config = vscode.workspace.getConfiguration('files', null); - const excludes = config.get('exclude'); - - let list = excludes ? Object.keys(config.get('exclude')) : []; - - for (let i = 0; i < list.length; i++) { - let enabled = (excludes[list[i]]) ? 1 : 0; - list[i] = `${list[i]}|${enabled}` - } - - return list; -} - -/** - * Get Resource Path - * @param {string} file - * @param {string} theme - */ -function getResourcePath(file, theme) { - return (theme) ? VS_CONTEXT.asAbsolutePath(path.join('resources', theme, file)) : VS_CONTEXT.asAbsolutePath(path.join('resources', file)); -} - -/** - * Get Root Path - * @param {string} file - */ -function getRootPath(file) { - return VS_CONTEXT.asAbsolutePath(file); -} - -/** - * Get Root Workspace Directory - * @param {string} uri - */ -function getRoot(uri) { - if (isMultiRoot()) { - let matchRoot = vscode.workspace.workspaceFolders.filter((wf) => { - return isParentPath(uri.fsPath, wf.uri.fsPath); - }).map(v => v.uri.fsPath); - - return matchRoot[0]; - } - else { - return rootPath || ''; - } + return workspace } /** * Check if Path Exists * @param {string} _path */ -function ifExists(_path) { - if (isUnavailable(_path)) { - return Promise.reject(new Error(localize('error.ifExists', _path))); - } - return new Promise((res, rej) => { - fs.access(_path, (error) => { - if (util.isNullOrUndefined(error)) { - res(true); - } - else { - rej(error); - } - }); - }); -} - -/** - * Check if this is a Multi Root Workspace - */ -function isMultiRoot() { - if (vscode.workspace.workspaceFolders) { - return vscode.workspace.workspaceFolders.length > 1; - } - return false; -} - -/** - * Check if Path is a Parent Directory - * @param {string} source - * @param {integer} target - */ -function isParentPath(source, target) { - return target !== '/' && subdir(target, source); +const ifExists = (_path) => { + if (isUnavailable(_path)) { + return Promise.reject(new Error(localize('error.ifExists', _path))) + } + return new Promise((res, rej) => { + fs.access(_path, (error) => { + if (util.isNullOrUndefined(error)) { + res(true) + } else { + rej(error) + } + }) + }) } /** * Check if path is defined * @param {string} _path */ -function isUnavailable(_path) { - return util.isNullOrUndefined(_path) || _path === ''; +const isUnavailable = (_path) => { + return util.isNullOrUndefined(_path) || _path === '' } /** * Parse File Path * @param {string} _file - * @param {string} rootPath + * @param {string} _root */ -function parseFilePath(_file, _root = '') { - return _await(this, void 0, void 0, function* () { - if (isUnavailable(_file)) { - return Promise.reject(new Error(localize('error.parseFilePath', _file))); - } +const parseFilePath = (_file, _root = '') => { + return _await(this, void 0, void 0, function* () { + if (isUnavailable(_file)) { + return Promise.reject(new Error(localize('error.parseFilePath', _file))) + } - try { - yield ifExists(_file); - - const ext = path.extname(_file); - const base = path.basename(_file); - const dir = path.relative(_root, path.dirname(_file)); - - return { - path: _file, - ext, - base, - dir - }; - } - catch (error) { - return Promise.reject(error); - } - }); + try { + yield ifExists(_file) + + const ext = path.extname(_file) + const base = path.basename(_file) + const dir = path.relative(_root, path.dirname(_file)) + + return { + path: _file, + ext, + base, + dir, + } + } catch (error) { + return Promise.reject(error) + } + }) } /** - * Save VS Code Context for Pane Reference - * @param {object} context + * Show Item Select Menu + * @param {array} items */ -function saveContext(context) { - VS_CONTEXT = context; +const showPicker = (items) => { + return vscode.window.showQuickPick(items, { + placeHolder: localize('picker.placeholder'), + canPickMany: true, + }) } /** - * Show Item Select Menu - * @param {array} items + * Write Exclude Updates to Config File + * @param {object} excludes + * @param {function} callback + * @param {string} message */ -function showPicker(items) { - return vscode.window.showQuickPick(items, { - placeHolder: localize('picker.placeholder'), - canPickMany: true - }); +const updateConfig = (excludes, callback, message) => { + try { + vscode.commands.executeCommand('setContext', 'explorer-exclude.enabled', true) + + // Update Main VS Code File Exclude + vscode.workspace + .getConfiguration() + .update('files.exclude', excludes, vscode.ConfigurationTarget.Workspace) + .then(() => { + // Remove Backup since we made a manual change + vscode.workspace + .getConfiguration() + .update('explorerExclude.backup', {}, vscode.ConfigurationTarget.Workspace) + .then(() => { + if (message) { + vscode.window.showInformationMessage(message) + } + + if (typeof callback === 'function') { + callback() + } + }) + }) + } catch (error) { + logger(error, 'error') + vscode.window.showErrorMessage(error.message || error) + } } /** - * Toggle Visibility of Excluded Pattern + * Delete Key from Exclude Config * @param {string} key * @param {function} callback */ -function toggleExclude(key, callback) { - if (!key) { - return false; - } - - const config = vscode.workspace.getConfiguration('files', null); - - let excludes = config.get('exclude'); - if (!excludes) { - excludes = {}; - } - - // Invert Selection - if (key && excludes.hasOwnProperty(key)) { - excludes[key] = !(excludes[key]); - updateConfig(excludes, key, callback); - } +function deleteExclude(key, callback) { + if (!key) { + return false + } + + const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {} + + // Remove if already set + if (key && Object.prototype.hasOwnProperty.call(excludes, key)) { + const newExcludes = Object.keys(excludes) + .filter((k) => k !== key) + .reduce((obj, k) => { + obj[k] = excludes[k] + return obj + }, {}) + updateConfig(newExcludes, callback, localize('config.removedKey', key)) + } } /** @@ -228,20 +237,15 @@ function toggleExclude(key, callback) { * @param {function} callback */ function disableAll(callback) { - const config = vscode.workspace.getConfiguration('files', null); - - let excludes = config.get('exclude'); - if (!excludes) { - excludes = {}; - } + const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {} - for (let key in excludes) { - if (excludes.hasOwnProperty(key)) { - excludes[key] = false; - } + for (let key in excludes) { + if (Object.prototype.hasOwnProperty.call(excludes, key)) { + excludes[key] = false } + } - updateConfig(excludes, null, callback); + updateConfig(excludes, callback) } /** @@ -249,256 +253,274 @@ function disableAll(callback) { * @param {function} callback */ function enableAll(callback) { - const config = vscode.workspace.getConfiguration('files', null); + const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {} - let excludes = config.get('exclude'); - if (!excludes) { - excludes = {}; + for (let key in excludes) { + if (Object.prototype.hasOwnProperty.call(excludes, key)) { + excludes[key] = true } + } - for (let key in excludes) { - if (excludes.hasOwnProperty(key)) { - excludes[key] = true; - } - } - - updateConfig(excludes, null, callback); + updateConfig(excludes, callback) } -function toggleAll(callback) { - if (!rootPath || rootPath === '') { - return; - } - +/** + * VS Code Action - Handle Mapping URI Exclusion to possible Regex Pattern Matches + * @param {string} uri + * @param {function} callback + */ +function exclude(uri, callback) { + return _await(this, void 0, void 0, function* () { try { - const config = vscode.workspace.getConfiguration('files', null); - - const excludes = config.get('exclude'); - const backup = vscode.workspace.getConfiguration(null, null).get('explorerExclude.backup'); - - let newExcludes = Object.assign({}, excludes); - - if (!newExcludes) { - newExcludes = {}; + const _path = uri.fsPath + const _root = workspace + const _meta = yield parseFilePath(_path, _root) + + let selections + let options = [] + + let _showPicker = vscode.workspace.getConfiguration().get('explorerExclude.showPicker', vscode.ConfigurationTarget.Workspace) + if (typeof _showPicker == 'undefined') { + _showPicker = true + } + + logger(`USING PICKER: ${_showPicker ? 'YES' : 'NO'}`, 'debug') + + if (_showPicker) { + Object.keys(_meta).forEach((key) => { + let regex = undefined + switch (key) { + case 'path': + break + case 'ext': + regex = _meta[key] ? `**${path.sep}*${_meta[key]}` : undefined + break + case 'base': + regex = _meta[key] + break + case 'dir': + if (_showPicker) regex = _meta[key] ? `${_meta[key] + path.sep}*.*` : undefined + break + } + if (regex) { + options.push(regex) + } + }) + + if (_meta['dir'] && _meta['ext']) { + options.push(`${_meta['dir']}${path.sep}*${_meta['ext']}`) + } else if (_meta['ext']) { + options.push(`*${_meta['ext']}`) } - for (let key in newExcludes) { - if (newExcludes.hasOwnProperty(key)) { - newExcludes[key] = false; - } + if (_meta['base']) { + options.push(`**${path.sep}${_meta['base']}`) + if (_meta['dir']) { + options.push(`${_meta['dir']}${path.sep}${_meta['base']}`) + } } - let target = vscode.ConfigurationTarget.Workspace || null; + selections = yield showPicker(options.reverse()) + } else { + selections = [path.relative(_root, uri.fsPath)] + } - if (isMultiRoot()) { - const multiConfig = vscode.workspace.getConfiguration('explorerExclude', null); - let isExcludeFolder = multiConfig.get('folder'); - target = isExcludeFolder ? vscode.ConfigurationTarget.WorkspaceFolder : vscode.ConfigurationTarget.Workspace; - } + if (selections && selections.length > 0) { + const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {} - const newBackup = (backup) ? null : excludes; - const newExclude = (backup) ? backup : newExcludes; + logger('CURRENT EXCLUDES:', 'debug') + logger(excludes) - vscode.commands.executeCommand('setContext', 'explorerExclude:enabled', (backup)); + logger('ADDING EXCLUDE:', 'debug') + logger(selections) - config.update('exclude', newExclude, target).then(() => { - vscode.workspace.getConfiguration(null, null).update('explorerExclude.backup', newBackup).then(() => { - if (typeof callback === 'function') { - callback(); - } - }); - }); - } - catch (error) { - vscode.window.showErrorMessage(error.message || error); + try { + const newExcludes = Object.assign({}, excludes) + Array.from(new Set(selections)) + .filter((v) => v !== '*') + .forEach((rule) => { + newExcludes[rule] = true + }) + updateConfig(newExcludes, callback) + } catch (error) { + vscode.window.showErrorMessage(error.message || error) + } + } + } catch (error) { + vscode.window.showErrorMessage(error.message || error) } + }) } /** - * Reset All - * @param {function} callback + * Get Excluded Fils */ -function reset(callback) { - updateConfig({}, null, callback); -} +function getExcludes() { + if (!workspace || workspace === '') { + return [] + } -/** - * Write Exclude Updates to Config File - * @param {object} excludes - * @param {string} uri - * @param {function} callback - * @param {string} message - */ -function updateConfig(excludes, uri, callback, message) { - if (!rootPath || rootPath === '') { - return; - } + const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {} - try { - const config = vscode.workspace.getConfiguration('files', null); + let list = excludes ? Object.keys(excludes) : [] - let target = vscode.ConfigurationTarget.Workspace || null; + for (let i = 0; i < list.length; i++) { + let enabled = excludes[list[i]] ? 1 : 0 + list[i] = `${list[i]}|${enabled}` + } - if (isMultiRoot()) { - const multiConfig = vscode.workspace.getConfiguration('explorerExclude', uri); - let isExcludeFolder = multiConfig.get('folder'); - target = isExcludeFolder ? vscode.ConfigurationTarget.WorkspaceFolder : vscode.ConfigurationTarget.Workspace; - } + return list +} - vscode.commands.executeCommand('setContext', 'explorerExclude:enabled', true); +/** + * Get Resource Path + * @param {string} file + * @param {string} theme + */ +function getResourcePath(file, theme) { + return theme ? context.asAbsolutePath(path.join('extension', 'resources', theme, file)) : context.asAbsolutePath(path.join('extension', 'resources', file)) +} - config.update('exclude', excludes, target).then(() => { - // Remove Backup since we made a manual change - vscode.workspace.getConfiguration(null, null).update('explorerExclude.backup', {}).then(() => { - if (message) { - vscode.window.showInformationMessage(message); - } +/** + * Get Root Path + * @param {string} file + */ +function getRootPath(file) { + return context.asAbsolutePath(file) +} - if (typeof callback === 'function') { - callback(); - } - }); - }); - } - catch (error) { - vscode.window.showErrorMessage(error.message || error); - } +/** + * Log output to "SFCC Cartridge Overrides" Output Terminal + * @param {String} message Debug Message + * @param {String} type Debug Type + */ +function logger(message, type) { + let icon = '' + + // Convert message to String if it was not already + if (typeof message !== 'string') { + message = JSON.stringify(message, null, 2) + } + + // Prefix Logger Messages with Icons + if (type === 'debug') { + icon = '› ' + } else if (type === 'error') { + icon = '✖ ' + } else if (type === 'success') { + icon = '✔ ' + } else if (type === 'warn') { + icon = '⚠ ' + } + + // Write Output to Terminal + output.appendLine(`${icon}${message}`) } /** - * VS Code Action - Handle Mapping URI Exclusion to possible Regex Pattern Matches - * @param {string} uri + * Reset All * @param {function} callback */ -function vscExclude(uri, callback) { - return _await(this, void 0, void 0, function* () { - try { - const _path = uri.fsPath; - const _root = getRoot(uri) || ''; - const _meta = (yield parseFilePath(_path, _root)); - - let selections; - let options = []; - - const _showPicker = vscode.workspace.getConfiguration(null, null).get('explorerExclude.showPicker'); - if (typeof _showPicker == 'undefined') - _showPicker = true; - - if (_showPicker) { - Object.keys(_meta).forEach(key => { - let regex = undefined; - switch (key) { - case 'path': - break; - case 'ext': - regex = _meta[key] ? `**/*${_meta[key]}` : undefined; - break; - case 'base': - regex = _meta[key]; - break; - case 'dir': - if (_showPicker) - regex = _meta[key] ? `${_meta[key] + '/'}*.*` : undefined; - break; - } - if (regex) { - options.push(regex); - } - }); - - if (_meta['dir'] && _meta['ext']) { - options.push(`${_meta['dir']}/*${_meta['ext']}`); - } - else if (_meta['ext']) { - options.push(`*${_meta['ext']}`); - } - - if (_meta['base']) { - options.push(`**/${_meta['base']}`); - if (_meta['dir']) { - options.push(`${_meta['dir']}/${_meta['base']}`); - } - } - - selections = yield showPicker(options.reverse()); - } else { - if (_meta['base']) - selections = [_meta['base']]; - } - - if (selections && selections.length > 0) { - const config = vscode.workspace.getConfiguration('files', null); - - let excludes = config.get('exclude'); - if (!excludes) { - excludes = {}; - } - - try { - Array.from(new Set(selections)).filter(v => v !== '*').forEach((rule) => { excludes[rule] = true; }); - updateConfig(excludes, uri, callback); - } - catch (error) { - vscode.window.showErrorMessage(error.message || error); - } - } - } - catch (error) { - vscode.window.showErrorMessage(error.message || error); - } - }); +function reset(callback) { + updateConfig( + { + '**/.git': true, + '**/.svn': true, + '**/.hg': true, + '**/CVS': true, + '**/.DS_Store': true, + '**/Thumbs.db': true, + '**/*.git': true, + }, + callback + ) } /** - * VS Code Action - Remove item from Excluded Patterns - * @param {*} item - * @param {*} callback + * Save VS Code Context for Pane Reference + * @param {object} _context */ -function vscRemove (item, callback) { - if (item && item.value) { - const value = item.value; - const title = value.substring(0, value.length - 2); - deleteExclude(title, null, callback); - } +function saveContext(_context) { + context = _context + workspace = getWorkspace(_context) } /** - * VS Code Action - Tiggle Visibility of item from Excluded Patterns - * @param {*} key - * @param {*} callback + * Toggle All Excludes + * @param {Function} callback Callback Command */ -function vscToggle (key, callback) { - if (key) { - toggleExclude(key, callback); - } -} +function toggleAll(callback) { + try { + const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) + const backup = vscode.workspace.getConfiguration().get('explorerExclude.backup', vscode.ConfigurationTarget.Workspace) + const restore = JSON.stringify(backup) !== '{}' -function vscToggleAll (callback) { - toggleAll(callback); -} + let newExcludes = Object.assign({}, excludes) -function vscDisableAll (callback) { - disableAll(callback); -} + if (!newExcludes) { + newExcludes = {} + } + + for (let key in newExcludes) { + if (Object.prototype.hasOwnProperty.call(newExcludes, key)) { + newExcludes[key] = false + } + } -function vscEnableAll (callback) { - enableAll(callback); + const newBackup = restore ? {} : excludes + const newExclude = restore ? backup : newExcludes + + vscode.commands.executeCommand('setContext', 'explorer-exclude.enabled', restore) + + vscode.workspace + .getConfiguration() + .update('files.exclude', newExclude, vscode.ConfigurationTarget.Workspace) + .then(() => { + vscode.workspace + .getConfiguration() + .update('explorerExclude.backup', newBackup, vscode.ConfigurationTarget.Workspace) + .then(() => { + if (typeof callback === 'function') { + callback() + } + }) + }) + } catch (error) { + vscode.window.showErrorMessage(error.message || error) + } } -function vscReset (callback) { - reset(callback); +/** + * Toggle Visibility of Excluded Pattern + * @param {string} key + * @param {function} callback + */ +function toggleExclude(key, callback) { + if (!key) { + return false + } + + const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {} + + // Invert Selection + if (key && Object.prototype.hasOwnProperty.call(excludes, key)) { + logger(`TOGGLE: ${excludes[key] ? 'OFF' : 'ON'}`, 'debug') + excludes[key] = !excludes[key] + updateConfig(excludes, callback) + } } module.exports = { - getExcludes, - getResourcePath, - getRootPath, - saveContext, - vscDisableAll, - vscEnableAll, - vscExclude, - vscRemove, - vscReset, - vscToggle, - vscToggleAll + deleteExclude, + disableAll, + enableAll, + exclude, + getExcludes, + getResourcePath, + getRootPath, + logger, + reset, + saveContext, + toggleAll, + toggleExclude, } diff --git a/extension/viewpane.js b/extension/viewpane.js index 3d34c7a..fe80bcf 100644 --- a/extension/viewpane.js +++ b/extension/viewpane.js @@ -1,64 +1,66 @@ -const jsonc_parser = require('jsonc-parser'); -const vscode = require('vscode'); +const jsonc_parser = require('jsonc-parser') +const vscode = require('vscode') -const { localize } = require('vscode-nls-i18n'); +const { localize } = require('vscode-nls-i18n') -const util = require('./util'); +const util = require('./util') class ViewPane { - constructor(viewPaneName) { - this.viewUpdatedEventEmitter = new vscode.EventEmitter(); - this.onDidChangeTreeData = this.viewUpdatedEventEmitter.event; - this.tree = { - type: 'object', - offset: 0, - length: 0, - children: [] - }; - this.register(viewPaneName); - this.registerEvents(); + constructor(viewPaneName) { + this.defaultExclude = ['**/.git', '**/.svn', '**/.hg', '**/CVS', '**/.DS_Store', '**/Thumbs.db', '**/*.git'] + this.viewUpdatedEventEmitter = new vscode.EventEmitter() + this.onDidChangeTreeData = this.viewUpdatedEventEmitter.event + this.tree = { + type: 'object', + offset: 0, + length: 0, + children: [], } + this.register(viewPaneName) + this.registerEvents() + } - register(name = '') { - vscode.window.registerTreeDataProvider(name, this); - } + register(name = '') { + vscode.window.registerTreeDataProvider(name, this) + } - registerEvents() { - this.onDidChangeTreeData(() => {}); - } + registerEvents() { + this.onDidChangeTreeData(() => {}) + } - update(list) { - let treeString = JSON.stringify(list); - this.tree = jsonc_parser.parseTree(treeString); - this.viewUpdatedEventEmitter.fire(); - } + update(list) { + let treeString = JSON.stringify(list) + this.tree = jsonc_parser.parseTree(treeString) + this.viewUpdatedEventEmitter.fire() + } - getChildren() { - return Promise.resolve(this.tree.children); - } + getChildren() { + return Promise.resolve(this.tree.children) + } - getTreeItem(node) { - const value = node.value; - const enabled = parseInt(value[value.length -1]); - const title = value.substring(0, value.length - 2); - const icon = enabled ? 'checked.svg' : 'unchecked.svg'; + getTreeItem(node) { + const value = node.value + const enabled = parseInt(value[value.length - 1]) + const title = value.substring(0, value.length - 2) + const icon = enabled ? 'checked.svg' : 'unchecked.svg' - let treeItem = new vscode.TreeItem(title, vscode.TreeItemCollapsibleState.None); + let treeItem = new vscode.TreeItem(title, vscode.TreeItemCollapsibleState.None) - treeItem.iconPath = { - light: util.getResourcePath(icon, 'light'), - dark: util.getResourcePath(icon, 'dark') - }; - treeItem.contextValue = title; - treeItem.tooltip = enabled ? localize('tooltip.show', title) : localize('tooltip.hide', title); - treeItem.command = { - command: 'explorer-exclude.toggle', - title: title, - arguments: [title] - }; - - return treeItem; + treeItem.iconPath = { + light: util.getResourcePath(icon, 'light'), + dark: util.getResourcePath(icon, 'dark'), + } + treeItem.contextValue = title + treeItem.tooltip = enabled ? localize('tooltip.show', title) : localize('tooltip.hide', title) + treeItem.description = this.defaultExclude.indexOf(title) > -1 ? 'system' : '' + treeItem.command = { + command: 'explorer-exclude.toggle', + title: title, + arguments: [title], } + + return treeItem + } } -module.exports = ViewPane; \ No newline at end of file +module.exports = ViewPane diff --git a/extension/welcome.js b/extension/welcome.js index 802c859..fff2c83 100644 --- a/extension/welcome.js +++ b/extension/welcome.js @@ -1,38 +1,32 @@ -const vscode = require('vscode'); -const fs = require('fs'); -const marked = require('marked'); +const vscode = require('vscode') +const fs = require('fs') +const marked = require('marked') -const util = require('./util'); +const util = require('./util') class WelcomePane { - constructor() {} - - show() { - fs.readFile(util.getResourcePath('welcome.html'), function(err, html) { - if (!err) { - const panel = vscode.window.createWebviewPanel( - 'explorerExclude', - 'welcome', - vscode.ViewColumn.One, - {} - ); - - const README = fs.readFileSync(util.getRootPath('README.md'), 'utf8'); - const CHANGELOG = fs.readFileSync(util.getRootPath('CHANGELOG.md'), 'utf8'); - const TROUBLESHOOTING = fs.readFileSync(util.getRootPath('TROUBLESHOOTING.md'), 'utf8'); - - let welcomePage = html.toString(); - - welcomePage = welcomePage.replace('{{README}}', marked(README)); - welcomePage = welcomePage.replace('{{CHANGELOG}}', marked(CHANGELOG)); - welcomePage = welcomePage.replace('{{TROUBLESHOOTING}}', marked(TROUBLESHOOTING)); - - panel.title = 'Explorer Exclude Welcome'; - panel.webview.html = welcomePage; - } - - }); - } + constructor() {} + + show() { + fs.readFile(util.getResourcePath('welcome.html'), function (err, html) { + if (!err) { + const panel = vscode.window.createWebviewPanel('explorerExclude', 'welcome', vscode.ViewColumn.One, {}) + + const README = fs.readFileSync(util.getRootPath('README.md'), 'utf8') + const CHANGELOG = fs.readFileSync(util.getRootPath('CHANGELOG.md'), 'utf8') + const TROUBLESHOOTING = fs.readFileSync(util.getRootPath('TROUBLESHOOTING.md'), 'utf8') + + let welcomePage = html.toString() + + welcomePage = welcomePage.replace('{{README}}', marked(README)) + welcomePage = welcomePage.replace('{{CHANGELOG}}', marked(CHANGELOG)) + welcomePage = welcomePage.replace('{{TROUBLESHOOTING}}', marked(TROUBLESHOOTING)) + + panel.title = 'Explorer Exclude Welcome' + panel.webview.html = welcomePage + } + }) + } } -module.exports = WelcomePane; \ No newline at end of file +module.exports = WelcomePane diff --git a/package-lock.json b/package-lock.json index 1d944f0..09876a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,13 +4,302 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dev": true, + "requires": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", + "dev": true + }, + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/traverse": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "globals": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, "ajv": { @@ -25,54 +314,70 @@ "uri-js": "^4.2.2" } }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -83,37 +388,93 @@ "concat-map": "0.0.1" } }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" } }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, "concat-map": { @@ -122,128 +483,390 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "ms": "2.0.0" + "esutils": "^2.0.2" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", + "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", "dev": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "globals": { + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { - "es6-promise": "^4.0.3" + "prettier-linter-helpers": "^1.0.0" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "to-regex-range": "^5.0.1" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, "glob": { "version": "7.1.4", @@ -259,70 +882,63 @@ "path-is-absolute": "^1.0.0" } }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "function-bind": "^1.1.1" } }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "dev": true }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "agent-base": "4", - "debug": "3.1.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - } + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "inflight": { "version": "1.0.6", @@ -340,28 +956,73 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-schema-traverse": { @@ -370,49 +1031,279 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "jsonc-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.1.0.tgz", - "integrity": "sha512-n9GrT8rrr2fhvBbANa1g+xFmgGK5X91KFeDwlKQ3+SJfmH5+tKv/M/kahx/TXOMflfWHKGKqKyfHQaLKTNzJ6w==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true + }, + "lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "dependencies": { + "commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } } }, "marked": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz", - "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==" + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.18.tgz", + "integrity": "sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw==" }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "mime-db": "1.40.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -422,65 +1313,39 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", - "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.3.1", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" + "path-key": "^4.0.0" }, "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true } } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, "once": { @@ -492,238 +1357,419 @@ "wrappy": "1" } }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "tslib": "^2.1.0" } }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "shebang-regex": "^3.0.0" } }, - "subdir": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/subdir/-/subdir-0.0.3.tgz", - "integrity": "sha1-2afT+MIhoNlRscoc/PWjFH3D4aE=" + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true + } } }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } } } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "ansi-regex": "^5.0.1" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "punycode": "^2.1.0" + "is-number": "^7.0.0" } }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "prelude-ls": "^1.2.1" } }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "punycode": "^2.1.0" } }, - "vscode": { - "version": "1.1.34", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.34.tgz", - "integrity": "sha512-GuT3tCT2N5Qp26VG4C+iGmWMgg/MuqtY5G5TSOT3U/X6pgjM9LFulJEeqpyf6gdzpI4VyU3ZN/lWPo54UFPuQg==", + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vscode-nls-i18n": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vscode-nls-i18n/-/vscode-nls-i18n-0.2.4.tgz", + "integrity": "sha512-1gf+s5qznJ6d5e5FavJ/sjzx/VdRMtZcVc8bjKo32mQPqAx+Bzgm0ur46/el1vAO4UGmCMQjlH8sHQdjEln7zQ==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "glob": "^7.1.2", - "mocha": "^4.0.1", - "request": "^2.88.0", - "semver": "^5.4.1", - "source-map-support": "^0.5.0", - "url-parse": "^1.4.4", - "vscode-test": "^0.4.1" + "isexe": "^2.0.0" } }, - "vscode-nls-i18n": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/vscode-nls-i18n/-/vscode-nls-i18n-0.1.1.tgz", - "integrity": "sha512-LYXU+71VqlwWCyQ494CzYkqsMlkCUseoaH0tzg0mz2Poa4ojQhsxjji8FAg26R7wlH479OIBRJrGEXNwN2GVOw==" + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true }, - "vscode-test": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.2.tgz", - "integrity": "sha512-ZqSh1WNQ1It3SVLnuDMS3HmadM86k2dXvv4ZtdT6+ezxZ1NIQRTbE5SZroV0EvIf5KGjhYNbj5HHqUjBsGjV6Q==", + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } } }, "wrappy": { @@ -731,6 +1777,12 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true + }, + "yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "dev": true } } } diff --git a/package.json b/package.json index 4b3e806..51a270d 100755 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "activationEvents": [ "*", "onView:extension", + "onCommand:explorer-exclude.enabled", "onCommand:explorer-exclude.exclude", "onCommand:explorer-exclude.remove", "onCommand:explorer-exclude.toggle", @@ -61,14 +62,25 @@ "contributes": { "configuration": [ { - "title": "%package.pane%", + "title": "%extension.title%", "properties": { "explorerExclude.backup": { - "type": ["object","null"], - "default": {}, - "description": "Resource configuration: Configure files using glob patterns to have an empty last line always", - "scope": "resource" - } + "order": 1, + "type": [ + "object", + "null" + ], + "default": {}, + "description": "%config.properties.backup%", + "scope": "window" + }, + "explorerExclude.showPicker": { + "order": 2, + "type": "boolean", + "default": true, + "description": "%config.properties.showPicker%", + "scope": "window" + } } } ], @@ -98,8 +110,8 @@ "title": "%package.toggle%", "category": "ExplorerExclude", "icon": { - "dark": "resources/dark/toggle-on.svg", - "light": "resources/light/toggle-on.svg" + "dark": "extension/resources/dark/toggle-on.svg", + "light": "extension/resources/light/toggle-on.svg" } }, { @@ -107,8 +119,8 @@ "title": "%package.toggle%", "category": "ExplorerExclude", "icon": { - "dark": "resources/dark/toggle-off.svg", - "light": "resources/light/toggle-off.svg" + "dark": "extension/resources/dark/toggle-off.svg", + "light": "extension/resources/light/toggle-off.svg" } }, { @@ -116,8 +128,8 @@ "title": "%package.disableAll%", "category": "ExplorerExclude", "icon": { - "dark": "resources/dark/unchecked.svg", - "light": "resources/light/unchecked.svg" + "dark": "extension/resources/dark/unchecked.svg", + "light": "extension/resources/light/unchecked.svg" } }, { @@ -125,8 +137,8 @@ "title": "%package.enableAll%", "category": "ExplorerExclude", "icon": { - "dark": "resources/dark/checked.svg", - "light": "resources/light/checked.svg" + "dark": "extension/resources/dark/checked.svg", + "light": "extension/resources/light/checked.svg" } }, { @@ -134,8 +146,17 @@ "title": "%package.reset%", "category": "ExplorerExclude", "icon": { - "dark": "resources/dark/reset.svg", - "light": "resources/light/reset.svg" + "dark": "extension/resources/dark/reset.svg", + "light": "extension/resources/light/reset.svg" + } + }, + { + "command": "explorer-exclude.openSettings", + "title": "%command.openSettings.title%", + "category": "ExplorerExclude", + "icon": { + "dark": "extension/resources/dark/settings.svg", + "light": "extension/resources/light/settings.svg" } } ], @@ -151,20 +172,10 @@ { "command": "explorer-exclude.remove", "group": "explorer-exclude@1", - "when": "view == explorerExclude.pane.items && viewItem" + "when": "view == explorerExclude.pane.items && viewItem && viewItem != '**/.git' && viewItem != '**/.svn'&& viewItem != '**/.hg'&& viewItem != '**/CVS'&& viewItem != '**/.DS_Store' && viewItem != '**/Thumbs.db' && viewItem != '**/*.git'" } ], "view/title": [ - { - "command": "explorer-exclude.toggleAllOn", - "group": "navigation@10", - "when": "view == explorerExclude.pane.items && !explorerExclude:enabled" - }, - { - "command": "explorer-exclude.toggleAllOff", - "group": "navigation@10", - "when": "view == explorerExclude.pane.items && explorerExclude:enabled" - }, { "command": "explorer-exclude.disableAll", "group": "navigation@10", @@ -172,28 +183,48 @@ }, { "command": "explorer-exclude.enableAll", - "group": "navigation@10", + "group": "navigation@11", "when": "view == explorerExclude.pane.items" }, + { + "command": "explorer-exclude.toggleAllOn", + "group": "navigation@12", + "when": "view == explorerExclude.pane.items && !explorer-exclude.enabled" + }, + { + "command": "explorer-exclude.toggleAllOff", + "group": "navigation@12", + "when": "view == explorerExclude.pane.items && explorer-exclude.enabled" + }, { "command": "explorer-exclude.reset", - "group": "navigation@10", + "group": "navigation@13", + "when": "view == explorerExclude.pane.items" + }, + { + "command": "explorer-exclude.openSettings", + "group": "navigation@14", "when": "view == explorerExclude.pane.items" } ] } }, "scripts": { - "postinstall": "node ./node_modules/vscode/bin/install", - "publish": "vsce package && vsce publish" + "test": "npm run -s test:lint && npm run -s test:unit", + "test:unit": "echo 'No Unit Tests'", + "test:lint": "eslint --ext .js ./extension --fix && echo '\n【ツ】CODE PERFECTION !!!\n'" }, "dependencies": { - "jsonc-parser": "^2.1.0", - "marked": "^0.6.2", - "subdir": "0.0.3", - "vscode-nls-i18n": "^0.1.1" + "jsonc-parser": "^3.1.0", + "marked": "^4.0.18", + "vscode-nls-i18n": "^0.2.4" }, "devDependencies": { - "vscode": "^1.1.34" + "babel-eslint": "^10.1.0", + "eslint": "^8.20.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.2.1", + "lint-staged": "^13.0.3", + "prettier": "^2.7.1" } } diff --git a/package.nls.bg.json b/package.nls.bg.json index 8e29ed2..18a0150 100644 --- a/package.nls.bg.json +++ b/package.nls.bg.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "{0} бе премахнат от скритите елементи", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} не съществува", "error.parseFilePath": "{0} не е налице", + "extension.title": "Explorer Exclude", "package.exclude": "Добавяне към скрити елементи ...", "package.pane": "Скрити елементи", "package.remove": "Премахване от скритите елементи", @@ -13,4 +19,4 @@ "tooltip.hide": "Скриване на {0}", "tooltip.show": "Показване на {0}", "reset.prompt": "Нулиране на скритите елементи? Това не може да бъде отменено." -} \ No newline at end of file +} diff --git a/package.nls.de.json b/package.nls.de.json index 12d093f..c4f5128 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "{0} aus ausgeblendeten Objekten entfernt", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} existiert nicht", "error.parseFilePath": "{0} ist nicht verfügbar", + "extension.title": "Explorer Exclude", "package.exclude": "Zu ausgeblendeten Objekten hinzufügen ...", "package.pane": "Versteckte Gegenstände", "package.remove": "Aus ausgeblendeten Objekten entfernen", @@ -13,4 +19,4 @@ "tooltip.hide": "{0} ausblenden", "tooltip.show": "{0} anzeigen", "reset.prompt": "Versteckte Objekte zurücksetzen? Das kann nicht rückgängig gemacht werden." -} \ No newline at end of file +} diff --git a/package.nls.es.json b/package.nls.es.json index 805dc1c..bdb0cef 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "Se eliminó {0} de los elementos ocultos", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} no existe", "error.parseFilePath": "{0} no está disponible", + "extension.title": "Explorer Exclude", "package.exclude": "Añadir a objetos ocultos ...", "package.pane": "Objetos ocultos", "package.remove": "Eliminar de los elementos ocultos", @@ -13,4 +19,4 @@ "tooltip.hide": "Ocultar {0}", "tooltip.show": "Show {0}", "reset.prompt": "¿Desea restablecer los elementos ocultos? Esto no se puede deshacer." -} \ No newline at end of file +} diff --git a/package.nls.fr.json b/package.nls.fr.json index 3627d95..942879b 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "Suppression de {0} des éléments masqués", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} n'existe pas", "error.parseFilePath": "{0} n'est pas disponible", + "extension.title": "Explorer Exclude", "package.exclude": "Ajouter aux éléments cachés ...", "package.pane": "Objets Cachés", "package.remove": "Supprimer des éléments cachés", @@ -13,4 +19,4 @@ "tooltip.hide": "Masquer {0}", "tooltip.show": "Montrer {0}", "reset.prompt": "Réinitialiser les éléments cachés? Ça ne peut pas être annulé." -} \ No newline at end of file +} diff --git a/package.nls.hu.json b/package.nls.hu.json index f349e06..acf0091 100644 --- a/package.nls.hu.json +++ b/package.nls.hu.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "{0} eltávolítása a rejtett elemekből", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} nem létezik", "error.parseFilePath": "{0} nem érhető el", + "extension.title": "Explorer Exclude", "package.exclude": "Hozzáadás a rejtett elemekhez ...", "package.pane": "Rejtett elemek", "package.remove": "Eltávolítás a rejtett elemekből", @@ -13,4 +19,4 @@ "tooltip.hide": "{0} elrejtése", "tooltip.show": "{0} megjelenítése", "reset.prompt": "A rejtett elemek visszaállítása? Ezt nem lehet visszacsinálni." -} \ No newline at end of file +} diff --git a/package.nls.it.json b/package.nls.it.json index 971daf4..bd36f16 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "Rimosso {0} da oggetti nascosti", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} non esiste", "error.parseFilePath": "{0} non è disponibile", + "extension.title": "Explorer Exclude", "package.exclude": "Aggiungi a oggetti nascosti ...", "package.pane": "Oggetti nascosti", "package.remove": "Rimuovi da oggetti nascosti", @@ -13,4 +19,4 @@ "tooltip.hide": "Nascondi {0}", "tooltip.show": "Mostra {0}", "reset.prompt": "Reimposta elementi nascosti? Questo non può essere annullato." -} \ No newline at end of file +} diff --git a/package.nls.ja.json b/package.nls.ja.json index 1819c89..9a17d7f 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "隠しアイテムから{0}を削除しました", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0}は存在しません", "error.parseFilePath": "{0}は利用できません", + "extension.title": "Explorer Exclude", "package.exclude": "隠しアイテムに追加...", "package.pane": "隠しアイテム", "package.remove": "隠しアイテムから削除", @@ -13,4 +19,4 @@ "tooltip.hide": "{0}を非表示", "tooltip.show": "{0}を表示", "reset.prompt": "隠しアイテムをリセットしますか?これは、元に戻すことはできません。" -} \ No newline at end of file +} diff --git a/package.nls.json b/package.nls.json index eb0ea5f..a388a47 100644 --- a/package.nls.json +++ b/package.nls.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "Removed {0} from Hidden Items", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} does not exist", "error.parseFilePath": "{0} is not available", + "extension.title": "Explorer Exclude", "package.exclude": "Add to Hidden Items ...", "package.pane": "Hidden Items", "package.remove": "Remove from Hidden Items", @@ -13,4 +19,4 @@ "tooltip.hide": "Hide {0}", "tooltip.show": "Show {0}", "reset.prompt": "Reset Hidden Items? This cannot be undone." -} \ No newline at end of file +} diff --git a/package.nls.ko.json b/package.nls.ko.json index 84718f8..55d7577 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "숨겨진 항목에서 {0}을 (를) 제거했습니다.", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0}이 (가) 존재하지 않습니다.", "error.parseFilePath": "{0}을 (를) 사용할 수 없습니다.", + "extension.title": "Explorer Exclude", "package.exclude": "숨겨진 항목에 추가 ...", "package.pane": "숨겨진 항목", "package.remove": "숨겨진 항목에서 제거", @@ -13,4 +19,4 @@ "tooltip.hide": "{0} 숨기기", "tooltip.show": "{0} 표시", "reset.prompt": "숨겨진 항목 재설정? 이 취소 할 수 없습니다." -} \ No newline at end of file +} diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 4dd05eb..7675145 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "Removido {0} dos itens ocultos", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} não existe", "error.parseFilePath": "{0} não está disponível", + "extension.title": "Explorer Exclude", "package.exclude": "Adicionar aos itens ocultos ...", "package.pane": "Itens ocultos", "package.remove": "Remover de itens ocultos", @@ -13,4 +19,4 @@ "tooltip.hide": "Esconder {0}", "tooltip.show": "Mostrar {0}", "reset.prompt": "Redefinir itens ocultos? Isto não pode ser desfeito." -} \ No newline at end of file +} diff --git a/package.nls.ru.json b/package.nls.ru.json index 88bcf78..94e3e9e 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "Удалено {0} из скрытых предметов", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} не существует", "error.parseFilePath": "{0} недоступен", + "extension.title": "Explorer Exclude", "package.exclude": "Добавить в скрытые объекты ...", "package.pane": "Скрытые предметы", "package.remove": "Удалить из скрытых предметов", @@ -13,4 +19,4 @@ "tooltip.hide": "Скрыть {0}", "tooltip.show": "Показать {0}", "reset.prompt": "Сбросить скрытые предметы? Это не может быть отменено." -} \ No newline at end of file +} diff --git a/package.nls.tr.json b/package.nls.tr.json index 99e9526..9a6c767 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "Gizli Öğelerden {0} kaldırıldı", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0} mevcut değil", "error.parseFilePath": "{0} mevcut değil", + "extension.title": "Explorer Exclude", "package.exclude": "Gizli Öğelere Ekle ...", "package.pane": "Gizli Öğeler", "package.remove": "Gizli Öğelerden Kaldır", @@ -13,4 +19,4 @@ "tooltip.hide": "{0} sakla", "tooltip.show": "{0} göster", "reset.prompt": "Gizli Öğeleri Sıfırla? Bu geri alınamaz." -} \ No newline at end of file +} diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 3b6297f..9c975f3 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "从隐藏项目中删除了{0}", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0}不存在", "error.parseFilePath": "{0}不可用", + "extension.title": "Explorer Exclude", "package.exclude": "添加到隐藏物品...", "package.pane": "隐藏物品", "package.remove": "从隐藏物品中删除", @@ -13,4 +19,4 @@ "tooltip.hide": "隐藏{0}", "tooltip.show": "显示{0}", "reset.prompt": "重置隐藏物品?这不能被撤消。" -} \ No newline at end of file +} diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 6461a3c..52cc1a4 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -1,7 +1,13 @@ { + "command.openSettings.title": "Update Extension Settings", + "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", + "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "從隱藏項目中刪除了{0}", + "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", + "debug.logger.workspace": "\nWORKSPACE: {0}", "error.ifExists": "{0}不存在", "error.parseFilePath": "{0}不可用", + "extension.title": "Explorer Exclude", "package.exclude": "添加到隱藏物品...", "package.pane": "隱藏物品", "package.remove": "從隱藏物品中刪除", @@ -13,4 +19,4 @@ "tooltip.hide": "隱藏{0}", "tooltip.show": "顯示{0}", "reset.prompt": "重置隱藏物品?這不能被撤消。" -} \ No newline at end of file +} From 8287103de4b5111322ae507d39044c173f16b096 Mon Sep 17 00:00:00 2001 From: Peter Schmalfeldt Date: Sun, 31 Jul 2022 20:11:46 -0400 Subject: [PATCH 3/4] Updating Locales and adding better logging and issue reporting documentation --- .github/ISSUE_TEMPLATE/bug-report.yml | 10 ++++++ TROUBLESHOOTING.md | 17 ++++++++++ extension/index.js | 2 +- extension/util.js | 46 +++++++++++++++------------ package.nls.bg.json | 11 ++++--- package.nls.de.json | 11 ++++--- package.nls.es.json | 11 ++++--- package.nls.fr.json | 11 ++++--- package.nls.hu.json | 11 ++++--- package.nls.it.json | 11 ++++--- package.nls.ja.json | 11 ++++--- package.nls.json | 3 +- package.nls.ko.json | 11 ++++--- package.nls.pt-br.json | 11 ++++--- package.nls.ru.json | 11 ++++--- package.nls.tr.json | 11 ++++--- package.nls.zh-cn.json | 11 ++++--- package.nls.zh-tw.json | 11 ++++--- 18 files changed, 133 insertions(+), 88 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index a914eb0..8ee726d 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -17,6 +17,16 @@ body: description: A clear and concise description of what the bug is. validations: required: true + - type: textarea + attributes: + label: Extension Output + description: Paste the `Explorer Exclude` Output Log to your ticket. + placeholder: | + 1. Select `View` > `Output` from the Main Menu + 2. Select `Explorer Exclude` from Output Select List + 3. Copy all Output from log and paste in this text field + validations: + required: true - type: textarea attributes: label: Steps To Reproduce diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 92d2dfa..1131b45 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -15,3 +15,20 @@ Unable to install Extension 'sfccdevops.explorer-exclude-vscode-extension-1.3.0' It is because you downloaded the Extension from the VS Code Marketplace Website manually ( and not through VS Code's internal extension listing ) and tried to install it into an older, unsupported version of VS Code. This extension requires VS Code v1.60 or newer. If you would like to install this extension, you will need to [update VS Code](https://code.visualstudio.com/download) to version v1.60 or newer. + +Need Help? +=== + +> Did not find what you are looking for? Check out our current reported issues to see if someone else is having the same problem. + +[![Create Issue](https://img.shields.io/badge/Get_Help-View_Issues-blue.svg?style=for-the-badge&logo=github&logoColor=ffffff&logoWidth=16)](https://github.com/sfccdevops/explorer-exclude-vscode-extension/issues) + +> Still did not find what you were looking for? + +[![Create Issue](https://img.shields.io/badge/Get_Help-Submit_Issue-red.svg?style=for-the-badge&logo=github&logoColor=ffffff&logoWidth=16)](https://github.com/sfccdevops/explorer-exclude-vscode-extension/issues/new/choose) + +**NOTE**: If you're reporting a new bug, add our `Explorer Exclude` Output Log to your ticket. You can access this log at anytime to see output generated by our extension: + +1. Select `View` > `Output` from the Main Menu +2. Select `Explorer Exclude` from Output Select List +3. Copy all Output from log and paste it in the `Extension Output` section of the ticket diff --git a/extension/index.js b/extension/index.js index cb93055..5d70367 100755 --- a/extension/index.js +++ b/extension/index.js @@ -67,7 +67,7 @@ function activate(context) { }) const remove = vscode.commands.registerCommand('explorer-exclude.remove', (uri) => { - util.logger(`REMOVE: ${uri}`, 'debug') + util.logger(`Remove: ${uri}`, 'debug') if (uri && uri.value) { const value = uri.value const key = value.substring(0, value.length - 2) diff --git a/extension/util.js b/extension/util.js index 94b69ba..b5270a1 100755 --- a/extension/util.js +++ b/extension/util.js @@ -24,15 +24,15 @@ const _await = function fulfilled(value) { try { step(generator.next(value)) - } catch (e) { - reject(e) + } catch (err) { + reject(err) } } function rejected(value) { try { step(generator['throw'](value)) - } catch (e) { - reject(e) + } catch (err) { + reject(err) } } function step(result) { @@ -87,7 +87,7 @@ const getWorkspace = (context) => { root = vscode.workspace.getWorkspaceFolder(context) workspace = root && root.uri ? root.uri.fsPath : null } catch (err) { - logger(err, 'error') + logger(localize('debug.logger.error', 'getWorkspace:fetch', err.toString()), 'error') } } } @@ -95,7 +95,7 @@ const getWorkspace = (context) => { // If we did not get Workspace, let the user know if (!workspace) { const message = localize('debug.logger.missingWorkspace') - logger(message, 'error') + logger(localize('debug.logger.error', 'getWorkspace', message), 'error') vscode.window.showErrorMessage(`${localize('extension.title')}: ${message}`) } @@ -156,8 +156,9 @@ const parseFilePath = (_file, _root = '') => { base, dir, } - } catch (error) { - return Promise.reject(error) + } catch (err) { + logger(localize('debug.logger.error', 'parseFilePath', err.toString()), 'error') + return Promise.reject(err) } }) } @@ -202,9 +203,9 @@ const updateConfig = (excludes, callback, message) => { } }) }) - } catch (error) { - logger(error, 'error') - vscode.window.showErrorMessage(error.message || error) + } catch (err) { + logger(localize('debug.logger.error', 'updateConfig', err.toString()), 'error') + vscode.window.showErrorMessage(err.message || err) } } @@ -284,7 +285,7 @@ function exclude(uri, callback) { _showPicker = true } - logger(`USING PICKER: ${_showPicker ? 'YES' : 'NO'}`, 'debug') + logger(`Using Picker: ${_showPicker ? 'YES' : 'NO'}`, 'debug') if (_showPicker) { Object.keys(_meta).forEach((key) => { @@ -328,10 +329,10 @@ function exclude(uri, callback) { if (selections && selections.length > 0) { const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {} - logger('CURRENT EXCLUDES:', 'debug') + logger('Current Excludes:', 'debug') logger(excludes) - logger('ADDING EXCLUDE:', 'debug') + logger('Adding Exclude:', 'debug') logger(selections) try { @@ -342,12 +343,14 @@ function exclude(uri, callback) { newExcludes[rule] = true }) updateConfig(newExcludes, callback) - } catch (error) { - vscode.window.showErrorMessage(error.message || error) + } catch (err) { + logger(localize('debug.logger.error', 'exclude:update', err.toString()), 'error') + vscode.window.showErrorMessage(err.message || err) } } - } catch (error) { - vscode.window.showErrorMessage(error.message || error) + } catch (err) { + logger(localize('debug.logger.error', 'exclude', err.toString()), 'error') + vscode.window.showErrorMessage(err.message || err) } }) } @@ -485,8 +488,9 @@ function toggleAll(callback) { } }) }) - } catch (error) { - vscode.window.showErrorMessage(error.message || error) + } catch (err) { + logger(localize('debug.logger.error', 'toggleAll', err.toString()), 'error') + vscode.window.showErrorMessage(err.message || err) } } @@ -504,7 +508,7 @@ function toggleExclude(key, callback) { // Invert Selection if (key && Object.prototype.hasOwnProperty.call(excludes, key)) { - logger(`TOGGLE: ${excludes[key] ? 'OFF' : 'ON'}`, 'debug') + logger(`Toggle: ${excludes[key] ? 'OFF' : 'ON'} | ${key}`, 'debug') excludes[key] = !excludes[key] updateConfig(excludes, callback) } diff --git a/package.nls.bg.json b/package.nls.bg.json index 18a0150..f3ce444 100644 --- a/package.nls.bg.json +++ b/package.nls.bg.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "Актуализиране на настройките на разширението", + "config.properties.backup": "Конфигурация на ресурси: Конфигурирайте файловете, като използвате глобални модели, за да имате винаги празен последен ред.", + "config.properties.showPicker": "Показване на инструмента за избор на шаблон на файл, когато е активиран, или Изключване на точното съвпадение, когато е деактивиран.", "config.removedKey": "{0} бе премахнат от скритите елементи", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "Папката на работното пространство не е намерена. Отворете папка или работно пространство и опитайте отново.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} не съществува", "error.parseFilePath": "{0} не е налице", "extension.title": "Explorer Exclude", diff --git a/package.nls.de.json b/package.nls.de.json index c4f5128..02c2b54 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "Erweiterungseinstellungen aktualisieren", + "config.properties.backup": "Ressourcenkonfiguration: Konfigurieren Sie Dateien mit Glob-Mustern so, dass sie immer eine leere letzte Zeile haben.", + "config.properties.showPicker": "Dateimusterauswahl anzeigen, wenn aktiviert, oder Exakte Übereinstimmung ausschließen, wenn deaktiviert.", "config.removedKey": "{0} aus ausgeblendeten Objekten entfernt", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "Arbeitsbereichsordner nicht gefunden. Öffnen Sie den Ordner oder Arbeitsbereich und versuchen Sie es erneut.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} existiert nicht", "error.parseFilePath": "{0} ist nicht verfügbar", "extension.title": "Explorer Exclude", diff --git a/package.nls.es.json b/package.nls.es.json index bdb0cef..3a7e3af 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "Actualizar la configuración de la extensión", + "config.properties.backup": "Configuración de recursos: configure archivos usando patrones globales para tener siempre una última línea vacía.", + "config.properties.showPicker": "Mostrar selector de patrón de archivo cuando está habilitado o excluir coincidencia exacta cuando está deshabilitado.", "config.removedKey": "Se eliminó {0} de los elementos ocultos", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "Carpeta del espacio de trabajo no encontrada. Abra Carpeta o Área de trabajo y vuelva a intentarlo.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} no existe", "error.parseFilePath": "{0} no está disponible", "extension.title": "Explorer Exclude", diff --git a/package.nls.fr.json b/package.nls.fr.json index 942879b..684bb37 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "Mettre à jour les paramètres d'extension", + "config.properties.backup": "Configuration des ressources : configurez les fichiers à l'aide de modèles glob pour qu'ils aient toujours une dernière ligne vide.", + "config.properties.showPicker": "Afficher le sélecteur de modèle de fichier lorsqu'il est activé ou exclure la correspondance exacte lorsqu'il est désactivé.", "config.removedKey": "Suppression de {0} des éléments masqués", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "Dossier d'espace de travail introuvable. Ouvrez le dossier ou l'espace de travail et réessayez.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} n'existe pas", "error.parseFilePath": "{0} n'est pas disponible", "extension.title": "Explorer Exclude", diff --git a/package.nls.hu.json b/package.nls.hu.json index acf0091..98d56f0 100644 --- a/package.nls.hu.json +++ b/package.nls.hu.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "Frissítse a bővítmény beállításait", + "config.properties.backup": "Erőforrás-konfiguráció: Állítsa be a fájlokat glob-mintákkal úgy, hogy az utolsó sor mindig üres legyen.", + "config.properties.showPicker": "Fájlmintaválasztó megjelenítése, ha engedélyezve van, vagy Pontos egyezés kizárása, ha le van tiltva.", "config.removedKey": "{0} eltávolítása a rejtett elemekből", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "A munkaterület mappa nem található. Nyissa meg a mappát vagy a munkaterületet, és próbálja újra.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} nem létezik", "error.parseFilePath": "{0} nem érhető el", "extension.title": "Explorer Exclude", diff --git a/package.nls.it.json b/package.nls.it.json index bd36f16..9802612 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "Aggiorna le impostazioni dell'estensione", + "config.properties.backup": "Configurazione delle risorse: configura i file utilizzando i modelli glob per avere sempre un'ultima riga vuota.", + "config.properties.showPicker": "Mostra Selettore modello file quando abilitato o Escludi corrispondenza esatta quando disabilitato.", "config.removedKey": "Rimosso {0} da oggetti nascosti", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "Cartella dell'area di lavoro non trovata. Apri la cartella o l'area di lavoro e riprova.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} non esiste", "error.parseFilePath": "{0} non è disponibile", "extension.title": "Explorer Exclude", diff --git a/package.nls.ja.json b/package.nls.ja.json index 9a17d7f..4419976 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "拡張設定の更新", + "config.properties.backup": "リソース構成:globパターンを使用してファイルを構成し、常に最後の行が空になるようにします。", + "config.properties.showPicker": "有効な場合はファイルパターンピッカーを表示し、無効な場合は完全一致を除外します。", "config.removedKey": "隠しアイテムから{0}を削除しました", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "ワークスペースフォルダが見つかりません。フォルダまたはワークスペースを開いて、再試行してください。", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0}は存在しません", "error.parseFilePath": "{0}は利用できません", "extension.title": "Explorer Exclude", diff --git a/package.nls.json b/package.nls.json index a388a47..0dc483e 100644 --- a/package.nls.json +++ b/package.nls.json @@ -3,8 +3,9 @@ "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", "config.removedKey": "Removed {0} from Hidden Items", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} does not exist", "error.parseFilePath": "{0} is not available", "extension.title": "Explorer Exclude", diff --git a/package.nls.ko.json b/package.nls.ko.json index 55d7577..1aaaa8c 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "확장 설정 업데이트", + "config.properties.backup": "리소스 구성: 항상 마지막 줄이 비어 있도록 glob 패턴을 사용하여 파일을 구성합니다.", + "config.properties.showPicker": "활성화된 경우 파일 패턴 선택기를 표시하거나 비활성화된 경우 정확히 일치를 제외합니다.", "config.removedKey": "숨겨진 항목에서 {0}을 (를) 제거했습니다.", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "작업 공간 폴더를 찾을 수 없습니다. 폴더 또는 작업 공간을 열고 다시 시도하십시오.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0}이 (가) 존재하지 않습니다.", "error.parseFilePath": "{0}을 (를) 사용할 수 없습니다.", "extension.title": "Explorer Exclude", diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 7675145..72bf2b8 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "Atualizar configurações de extensão", + "config.properties.backup": "Configuração de recursos: configure arquivos usando padrões glob para ter sempre uma última linha vazia.", + "config.properties.showPicker": "Mostrar seletor de padrão de arquivo quando ativado ou Excluir correspondência exata quando desativado.", "config.removedKey": "Removido {0} dos itens ocultos", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "Pasta do espaço de trabalho não encontrada. Abra a pasta ou área de trabalho e tente novamente.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} não existe", "error.parseFilePath": "{0} não está disponível", "extension.title": "Explorer Exclude", diff --git a/package.nls.ru.json b/package.nls.ru.json index 94e3e9e..c9c3427 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "Обновить настройки расширения", + "config.properties.backup": "Конфигурация ресурсов: настройте файлы с использованием шаблонов универсальных объектов, чтобы последняя строка всегда была пустой.", + "config.properties.showPicker": "Показывать средство выбора шаблона файла, если оно включено, или исключать точное совпадение, если оно отключено.", "config.removedKey": "Удалено {0} из скрытых предметов", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "Папка рабочей области не найдена. Откройте папку или рабочую область и повторите попытку.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} не существует", "error.parseFilePath": "{0} недоступен", "extension.title": "Explorer Exclude", diff --git a/package.nls.tr.json b/package.nls.tr.json index 9a6c767..9de29ad 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "Uzantı Ayarlarını Güncelle", + "config.properties.backup": "Kaynak yapılandırması: Her zaman boş bir son satıra sahip olmak için glob kalıplarını kullanarak dosyaları yapılandırın.", + "config.properties.showPicker": "Etkinleştirildiğinde Dosya Desen Seçici'yi göster veya devre dışı bırakıldığında Tam Eşleşmeyi Hariç Tut.", "config.removedKey": "Gizli Öğelerden {0} kaldırıldı", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "Çalışma Alanı Klasörü Bulunamadı. Klasör veya Çalışma Alanı'nı açın ve tekrar deneyin.", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0} mevcut değil", "error.parseFilePath": "{0} mevcut değil", "extension.title": "Explorer Exclude", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 9c975f3..5e1406e 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "更新扩展设置", + "config.properties.backup": "资源配置:使用模式配置文件以始终有一个空的最后一行。", + "config.properties.showPicker": "启用时显示文件模式选择器或禁用时排除完全匹配。", "config.removedKey": "从隐藏项目中删除了{0}", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "未找到工作区文件夹。打开文件夹或工作区,然后重试。", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0}不存在", "error.parseFilePath": "{0}不可用", "extension.title": "Explorer Exclude", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 52cc1a4..531f174 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -1,10 +1,11 @@ { - "command.openSettings.title": "Update Extension Settings", - "config.properties.backup": "Resource configuration: Configure files using glob patterns to have an empty last line always.", - "config.properties.showPicker": "Show File Pattern Picker when Enabled or Exclude Exact Match when disabled.", + "command.openSettings.title": "更新擴展設置", + "config.properties.backup": "資源配置:使用模式配置文件以始終有一個空的最後一行。", + "config.properties.showPicker": "啟用時顯示文件模式選擇器或禁用時排除完全匹配。", "config.removedKey": "從隱藏項目中刪除了{0}", - "debug.logger.missingWorkspace": "Workspace Folder Not Found. Open Folder or Workspace and try again.", - "debug.logger.workspace": "\nWORKSPACE: {0}", + "debug.logger.error": "⚠ ERROR: [{0}] {1}", + "debug.logger.missingWorkspace": "未找到工作區文件夾。打開文件夾或工作區,然後重試。", + "debug.logger.workspace": "\nWorkspace: {0}", "error.ifExists": "{0}不存在", "error.parseFilePath": "{0}不可用", "extension.title": "Explorer Exclude", From 4fef232481949d0b85b02f5a533615d1912f7835 Mon Sep 17 00:00:00 2001 From: Peter Schmalfeldt Date: Sun, 31 Jul 2022 23:16:50 -0400 Subject: [PATCH 4/4] Update Package Details --- package-lock.json | 2 +- package.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09876a1..4390d7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "explorer-exclude-vscode-extension", + "name": "explorer-exclude", "version": "1.3.0", "lockfileVersion": 1, "requires": true, diff --git a/package.json b/package.json index 51a270d..319d186 100755 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "explorer-exclude-vscode-extension", + "name": "explorer-exclude", "displayName": "Explorer Exclude", "version": "1.3.0", "description": "Explorer Exclude lets you easily Hide Files & Folders with Dynamic Filter Options. Add a New 'Hidden Items' Explorer Pane for you to Manage and Quickly Toggle Visibility of Hidden Items.", "license": "MIT", - "publisher": "SFCCDevOps", + "publisher": "PeterSchmalfeldt", "categories": [ "Other" ], @@ -47,7 +47,7 @@ } ], "activationEvents": [ - "*", + "onStartupFinished", "onView:extension", "onCommand:explorer-exclude.enabled", "onCommand:explorer-exclude.exclude",