diff --git a/ .vscodeignore b/ .vscodeignore
deleted file mode 100755
index f72581b..0000000
--- a/ .vscodeignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.vscode/**
-.gitignore
-.github
-.editorconfig
-*.vsix
-*.code-workspace
\ No newline at end of file
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..8ee726d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -0,0 +1,76 @@
+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: 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
+ 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/.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/.vscodeignore b/.vscodeignore
new file mode 100644
index 0000000..c2e585f
--- /dev/null
+++ b/.vscodeignore
@@ -0,0 +1,12 @@
+.vscode/**
+.gitignore
+.github
+.editorconfig
+.eslintrc.js
+.gitattributes
+.gitignore
+.nvmrc
+*.vsix
+*.code-workspace
+DEVELOPERS.md
+TROUBLESHOOTING.md
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/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 9c6cceb..dd204e1 100755
--- a/README.md
+++ b/README.md
@@ -3,9 +3,9 @@
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.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
@@ -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
---
@@ -21,11 +20,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)
You can disable the filter option popup, and by default only allow the selected item to be hidden, by adding this setting in VSCode:
@@ -39,5 +38,22 @@ 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)
+
+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..1131b45 100644
--- a/TROUBLESHOOTING.md
+++ b/TROUBLESHOOTING.md
@@ -9,9 +9,26 @@ 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.
+
+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.code-workspace b/extension.code-workspace
new file mode 100644
index 0000000..9ac8fa7
--- /dev/null
+++ b/extension.code-workspace
@@ -0,0 +1,16 @@
+{
+ "folders": [
+ {
+ "path": "."
+ }
+ ],
+ "settings": {
+ "cSpell.words": [
+ "mikepenz",
+ "sfccdevops",
+ "srggrs",
+ "viewpane",
+ "vsix"
+ ]
+ }
+}
diff --git a/extension.js b/extension.js
deleted file mode 100755
index 376050e..0000000
--- a/extension.js
+++ /dev/null
@@ -1,120 +0,0 @@
-const vscode = require('vscode');
-const { init, localize } = require('vscode-nls-i18n');
-
-const util = require('./util');
-const ViewPane = require('./viewpane');
-const WelcomePane = require('./welcome');
-
-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);
-}
-
-function deactivate() {}
-
-module.exports = {
- activate,
- deactivate
-}
diff --git a/extension/index.js b/extension/index.js
new file mode 100755
index 0000000..5d70367
--- /dev/null
+++ b/extension/index.js
@@ -0,0 +1,154 @@
+'use strict'
+
+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) {
+ // 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,
+}
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/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/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/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/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/extension/util.js b/extension/util.js
new file mode 100755
index 0000000..b5270a1
--- /dev/null
+++ b/extension/util.js
@@ -0,0 +1,530 @@
+'use strict'
+
+const fs = require('fs')
+const path = require('path')
+const util = require('util')
+const vscode = require('vscode')
+
+const { init, localize } = require('vscode-nls-i18n')
+
+// 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
+ */
+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 (err) {
+ reject(err)
+ }
+ }
+ function rejected(value) {
+ try {
+ step(generator['throw'](value))
+ } catch (err) {
+ reject(err)
+ }
+ }
+ 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())
+ })
+ }
+
+/**
+ * Get VS Code Workspace Base
+ * @param {*} context
+ * @returns
+ */
+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(localize('debug.logger.error', 'getWorkspace:fetch', err.toString()), 'error')
+ }
+ }
+ }
+
+ // If we did not get Workspace, let the user know
+ if (!workspace) {
+ const message = localize('debug.logger.missingWorkspace')
+ logger(localize('debug.logger.error', 'getWorkspace', message), 'error')
+ vscode.window.showErrorMessage(`${localize('extension.title')}: ${message}`)
+ }
+
+ // Debug Cartridge Path
+ logger(localize('debug.logger.workspace', workspace))
+
+ return workspace
+}
+
+/**
+ * Check if Path Exists
+ * @param {string} _path
+ */
+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
+ */
+const isUnavailable = (_path) => {
+ return util.isNullOrUndefined(_path) || _path === ''
+}
+
+/**
+ * Parse File Path
+ * @param {string} _file
+ * @param {string} _root
+ */
+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 (err) {
+ logger(localize('debug.logger.error', 'parseFilePath', err.toString()), 'error')
+ return Promise.reject(err)
+ }
+ })
+}
+
+/**
+ * Show Item Select Menu
+ * @param {array} items
+ */
+const showPicker = (items) => {
+ return vscode.window.showQuickPick(items, {
+ placeHolder: localize('picker.placeholder'),
+ canPickMany: true,
+ })
+}
+
+/**
+ * Write Exclude Updates to Config File
+ * @param {object} excludes
+ * @param {function} callback
+ * @param {string} message
+ */
+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 (err) {
+ logger(localize('debug.logger.error', 'updateConfig', err.toString()), 'error')
+ vscode.window.showErrorMessage(err.message || err)
+ }
+}
+
+/**
+ * Delete Key from Exclude Config
+ * @param {string} key
+ * @param {function} 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))
+ }
+}
+
+/**
+ * Disable All
+ * @param {function} callback
+ */
+function disableAll(callback) {
+ const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {}
+
+ for (let key in excludes) {
+ if (Object.prototype.hasOwnProperty.call(excludes, key)) {
+ excludes[key] = false
+ }
+ }
+
+ updateConfig(excludes, callback)
+}
+
+/**
+ * Enable All
+ * @param {function} callback
+ */
+function enableAll(callback) {
+ const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {}
+
+ for (let key in excludes) {
+ if (Object.prototype.hasOwnProperty.call(excludes, key)) {
+ excludes[key] = true
+ }
+ }
+
+ updateConfig(excludes, callback)
+}
+
+/**
+ * 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 _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']}`)
+ }
+
+ if (_meta['base']) {
+ options.push(`**${path.sep}${_meta['base']}`)
+ if (_meta['dir']) {
+ options.push(`${_meta['dir']}${path.sep}${_meta['base']}`)
+ }
+ }
+
+ selections = yield showPicker(options.reverse())
+ } else {
+ selections = [path.relative(_root, uri.fsPath)]
+ }
+
+ if (selections && selections.length > 0) {
+ const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {}
+
+ logger('Current Excludes:', 'debug')
+ logger(excludes)
+
+ logger('Adding Exclude:', 'debug')
+ logger(selections)
+
+ try {
+ const newExcludes = Object.assign({}, excludes)
+ Array.from(new Set(selections))
+ .filter((v) => v !== '*')
+ .forEach((rule) => {
+ newExcludes[rule] = true
+ })
+ updateConfig(newExcludes, callback)
+ } catch (err) {
+ logger(localize('debug.logger.error', 'exclude:update', err.toString()), 'error')
+ vscode.window.showErrorMessage(err.message || err)
+ }
+ }
+ } catch (err) {
+ logger(localize('debug.logger.error', 'exclude', err.toString()), 'error')
+ vscode.window.showErrorMessage(err.message || err)
+ }
+ })
+}
+
+/**
+ * Get Excluded Fils
+ */
+function getExcludes() {
+ if (!workspace || workspace === '') {
+ return []
+ }
+
+ const excludes = vscode.workspace.getConfiguration().get('files.exclude', vscode.ConfigurationTarget.Workspace) || {}
+
+ let list = excludes ? Object.keys(excludes) : []
+
+ 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 ? context.asAbsolutePath(path.join('extension', 'resources', theme, file)) : context.asAbsolutePath(path.join('extension', 'resources', file))
+}
+
+/**
+ * Get Root Path
+ * @param {string} file
+ */
+function getRootPath(file) {
+ return context.asAbsolutePath(file)
+}
+
+/**
+ * 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}`)
+}
+
+/**
+ * Reset All
+ * @param {function} callback
+ */
+function reset(callback) {
+ updateConfig(
+ {
+ '**/.git': true,
+ '**/.svn': true,
+ '**/.hg': true,
+ '**/CVS': true,
+ '**/.DS_Store': true,
+ '**/Thumbs.db': true,
+ '**/*.git': true,
+ },
+ callback
+ )
+}
+
+/**
+ * Save VS Code Context for Pane Reference
+ * @param {object} _context
+ */
+function saveContext(_context) {
+ context = _context
+ workspace = getWorkspace(_context)
+}
+
+/**
+ * Toggle All Excludes
+ * @param {Function} callback Callback Command
+ */
+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) !== '{}'
+
+ let newExcludes = Object.assign({}, excludes)
+
+ if (!newExcludes) {
+ newExcludes = {}
+ }
+
+ for (let key in newExcludes) {
+ if (Object.prototype.hasOwnProperty.call(newExcludes, key)) {
+ newExcludes[key] = false
+ }
+ }
+
+ 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 (err) {
+ logger(localize('debug.logger.error', 'toggleAll', err.toString()), 'error')
+ vscode.window.showErrorMessage(err.message || err)
+ }
+}
+
+/**
+ * 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'} | ${key}`, 'debug')
+ excludes[key] = !excludes[key]
+ updateConfig(excludes, callback)
+ }
+}
+
+module.exports = {
+ deleteExclude,
+ disableAll,
+ enableAll,
+ exclude,
+ getExcludes,
+ getResourcePath,
+ getRootPath,
+ logger,
+ reset,
+ saveContext,
+ toggleAll,
+ toggleExclude,
+}
diff --git a/extension/viewpane.js b/extension/viewpane.js
new file mode 100644
index 0000000..fe80bcf
--- /dev/null
+++ b/extension/viewpane.js
@@ -0,0 +1,66 @@
+const jsonc_parser = require('jsonc-parser')
+const vscode = require('vscode')
+
+const { localize } = require('vscode-nls-i18n')
+
+const util = require('./util')
+
+class ViewPane {
+ 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)
+ }
+
+ registerEvents() {
+ this.onDidChangeTreeData(() => {})
+ }
+
+ update(list) {
+ let treeString = JSON.stringify(list)
+ this.tree = jsonc_parser.parseTree(treeString)
+ this.viewUpdatedEventEmitter.fire()
+ }
+
+ 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'
+
+ 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.description = this.defaultExclude.indexOf(title) > -1 ? 'system' : ''
+ treeItem.command = {
+ command: 'explorer-exclude.toggle',
+ title: title,
+ arguments: [title],
+ }
+
+ return treeItem
+ }
+}
+
+module.exports = ViewPane
diff --git a/extension/welcome.js b/extension/welcome.js
new file mode 100644
index 0000000..fff2c83
--- /dev/null
+++ b/extension/welcome.js
@@ -0,0 +1,32 @@
+const vscode = require('vscode')
+const fs = require('fs')
+const marked = require('marked')
+
+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
+ }
+ })
+ }
+}
+
+module.exports = WelcomePane
diff --git a/package-lock.json b/package-lock.json
index 7a29529..4390d7e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,16 +1,305 @@
{
- "name": "explorer-exclude-vscode-extension",
- "version": "1.2.0",
+ "name": "explorer-exclude",
+ "version": "1.3.0",
"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 5da7601..319d186 100755
--- a/package.json
+++ b/package.json
@@ -1,14 +1,15 @@
{
- "name": "explorer-exclude-vscode-extension",
+ "name": "explorer-exclude",
"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",
+ "publisher": "PeterSchmalfeldt",
"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",
@@ -45,8 +47,9 @@
}
],
"activationEvents": [
- "*",
+ "onStartupFinished",
"onView:extension",
+ "onCommand:explorer-exclude.enabled",
"onCommand:explorer-exclude.exclude",
"onCommand:explorer-exclude.remove",
"onCommand:explorer-exclude.toggle",
@@ -56,18 +59,28 @@
"onCommand:explorer-exclude.enableAll",
"onCommand:explorer-exclude.reset"
],
- "main": "./extension",
"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"
+ }
}
}
],
@@ -97,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"
}
},
{
@@ -106,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"
}
},
{
@@ -115,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"
}
},
{
@@ -124,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"
}
},
{
@@ -133,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"
}
}
],
@@ -150,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",
@@ -171,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..f3ce444 100644
--- a/package.nls.bg.json
+++ b/package.nls.bg.json
@@ -1,7 +1,14 @@
{
+ "command.openSettings.title": "Актуализиране на настройките на разширението",
+ "config.properties.backup": "Конфигурация на ресурси: Конфигурирайте файловете, като използвате глобални модели, за да имате винаги празен последен ред.",
+ "config.properties.showPicker": "Показване на инструмента за избор на шаблон на файл, когато е активиран, или Изключване на точното съвпадение, когато е деактивиран.",
"config.removedKey": "{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",
"package.exclude": "Добавяне към скрити елементи ...",
"package.pane": "Скрити елементи",
"package.remove": "Премахване от скритите елементи",
@@ -13,4 +20,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..02c2b54 100644
--- a/package.nls.de.json
+++ b/package.nls.de.json
@@ -1,7 +1,14 @@
{
+ "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.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",
"package.exclude": "Zu ausgeblendeten Objekten hinzufügen ...",
"package.pane": "Versteckte Gegenstände",
"package.remove": "Aus ausgeblendeten Objekten entfernen",
@@ -13,4 +20,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..3a7e3af 100644
--- a/package.nls.es.json
+++ b/package.nls.es.json
@@ -1,7 +1,14 @@
{
+ "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.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",
"package.exclude": "Añadir a objetos ocultos ...",
"package.pane": "Objetos ocultos",
"package.remove": "Eliminar de los elementos ocultos",
@@ -13,4 +20,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..684bb37 100644
--- a/package.nls.fr.json
+++ b/package.nls.fr.json
@@ -1,7 +1,14 @@
{
+ "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.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",
"package.exclude": "Ajouter aux éléments cachés ...",
"package.pane": "Objets Cachés",
"package.remove": "Supprimer des éléments cachés",
@@ -13,4 +20,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..98d56f0 100644
--- a/package.nls.hu.json
+++ b/package.nls.hu.json
@@ -1,7 +1,14 @@
{
+ "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.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",
"package.exclude": "Hozzáadás a rejtett elemekhez ...",
"package.pane": "Rejtett elemek",
"package.remove": "Eltávolítás a rejtett elemekből",
@@ -13,4 +20,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..9802612 100644
--- a/package.nls.it.json
+++ b/package.nls.it.json
@@ -1,7 +1,14 @@
{
+ "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.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",
"package.exclude": "Aggiungi a oggetti nascosti ...",
"package.pane": "Oggetti nascosti",
"package.remove": "Rimuovi da oggetti nascosti",
@@ -13,4 +20,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..4419976 100644
--- a/package.nls.ja.json
+++ b/package.nls.ja.json
@@ -1,7 +1,14 @@
{
+ "command.openSettings.title": "拡張設定の更新",
+ "config.properties.backup": "リソース構成:globパターンを使用してファイルを構成し、常に最後の行が空になるようにします。",
+ "config.properties.showPicker": "有効な場合はファイルパターンピッカーを表示し、無効な場合は完全一致を除外します。",
"config.removedKey": "隠しアイテムから{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",
"package.exclude": "隠しアイテムに追加...",
"package.pane": "隠しアイテム",
"package.remove": "隠しアイテムから削除",
@@ -13,4 +20,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..0dc483e 100644
--- a/package.nls.json
+++ b/package.nls.json
@@ -1,7 +1,14 @@
{
+ "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.error": "⚠ ERROR: [{0}] {1}",
+ "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 +20,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..1aaaa8c 100644
--- a/package.nls.ko.json
+++ b/package.nls.ko.json
@@ -1,7 +1,14 @@
{
+ "command.openSettings.title": "확장 설정 업데이트",
+ "config.properties.backup": "리소스 구성: 항상 마지막 줄이 비어 있도록 glob 패턴을 사용하여 파일을 구성합니다.",
+ "config.properties.showPicker": "활성화된 경우 파일 패턴 선택기를 표시하거나 비활성화된 경우 정확히 일치를 제외합니다.",
"config.removedKey": "숨겨진 항목에서 {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",
"package.exclude": "숨겨진 항목에 추가 ...",
"package.pane": "숨겨진 항목",
"package.remove": "숨겨진 항목에서 제거",
@@ -13,4 +20,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..72bf2b8 100644
--- a/package.nls.pt-br.json
+++ b/package.nls.pt-br.json
@@ -1,7 +1,14 @@
{
+ "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.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",
"package.exclude": "Adicionar aos itens ocultos ...",
"package.pane": "Itens ocultos",
"package.remove": "Remover de itens ocultos",
@@ -13,4 +20,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..c9c3427 100644
--- a/package.nls.ru.json
+++ b/package.nls.ru.json
@@ -1,7 +1,14 @@
{
+ "command.openSettings.title": "Обновить настройки расширения",
+ "config.properties.backup": "Конфигурация ресурсов: настройте файлы с использованием шаблонов универсальных объектов, чтобы последняя строка всегда была пустой.",
+ "config.properties.showPicker": "Показывать средство выбора шаблона файла, если оно включено, или исключать точное совпадение, если оно отключено.",
"config.removedKey": "Удалено {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",
"package.exclude": "Добавить в скрытые объекты ...",
"package.pane": "Скрытые предметы",
"package.remove": "Удалить из скрытых предметов",
@@ -13,4 +20,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..9de29ad 100644
--- a/package.nls.tr.json
+++ b/package.nls.tr.json
@@ -1,7 +1,14 @@
{
+ "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.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",
"package.exclude": "Gizli Öğelere Ekle ...",
"package.pane": "Gizli Öğeler",
"package.remove": "Gizli Öğelerden Kaldır",
@@ -13,4 +20,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..5e1406e 100644
--- a/package.nls.zh-cn.json
+++ b/package.nls.zh-cn.json
@@ -1,7 +1,14 @@
{
+ "command.openSettings.title": "更新扩展设置",
+ "config.properties.backup": "资源配置:使用模式配置文件以始终有一个空的最后一行。",
+ "config.properties.showPicker": "启用时显示文件模式选择器或禁用时排除完全匹配。",
"config.removedKey": "从隐藏项目中删除了{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",
"package.exclude": "添加到隐藏物品...",
"package.pane": "隐藏物品",
"package.remove": "从隐藏物品中删除",
@@ -13,4 +20,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..531f174 100644
--- a/package.nls.zh-tw.json
+++ b/package.nls.zh-tw.json
@@ -1,7 +1,14 @@
{
+ "command.openSettings.title": "更新擴展設置",
+ "config.properties.backup": "資源配置:使用模式配置文件以始終有一個空的最後一行。",
+ "config.properties.showPicker": "啟用時顯示文件模式選擇器或禁用時排除完全匹配。",
"config.removedKey": "從隱藏項目中刪除了{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",
"package.exclude": "添加到隱藏物品...",
"package.pane": "隱藏物品",
"package.remove": "從隱藏物品中刪除",
@@ -13,4 +20,4 @@
"tooltip.hide": "隱藏{0}",
"tooltip.show": "顯示{0}",
"reset.prompt": "重置隱藏物品?這不能被撤消。"
-}
\ No newline at end of file
+}
diff --git a/util.js b/util.js
deleted file mode 100755
index c204bd0..0000000
--- a/util.js
+++ /dev/null
@@ -1,504 +0,0 @@
-const fs = require('fs');
-const path = require('path');
-const subdir = require('subdir');
-const util = require('util');
-const vscode = require('vscode');
-
-const { localize } = require('vscode-nls-i18n');
-
-const rootPath = vscode.workspace.rootPath;
-
-let VS_CONTEXT = null;
-
-/**
- * Custom Await Method for Processing Hidden File Config
- */
-var _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());
- });
-};
-
-/**
- * Delete Key from Exclude Config
- * @param {string} key
- * @param {string} uri
- * @param {function} callback
- */
-function deleteExclude(key, uri, callback) {
- if (!key) {
- return false;
- }
-
- const config = vscode.workspace.getConfiguration('files', null);
-
- let excludes = config.get('exclude');
- if (!excludes) {
- excludes = {};
- }
-
- // 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 || '';
- }
-}
-
-/**
- * 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);
-}
-
-/**
- * Check if path is defined
- * @param {string} _path
- */
-function isUnavailable(_path) {
- return util.isNullOrUndefined(_path) || _path === '';
-}
-
-/**
- * Parse File Path
- * @param {string} _file
- * @param {string} rootPath
- */
-function 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);
- }
- });
-}
-
-/**
- * Save VS Code Context for Pane Reference
- * @param {object} context
- */
-function saveContext(context) {
- VS_CONTEXT = context;
-}
-
-/**
- * Show Item Select Menu
- * @param {array} items
- */
-function showPicker(items) {
- return vscode.window.showQuickPick(items, {
- placeHolder: localize('picker.placeholder'),
- canPickMany: true
- });
-}
-
-/**
- * Toggle Visibility of Excluded Pattern
- * @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);
- }
-}
-
-/**
- * Disable All
- * @param {function} callback
- */
-function disableAll(callback) {
- const config = vscode.workspace.getConfiguration('files', null);
-
- let excludes = config.get('exclude');
- if (!excludes) {
- excludes = {};
- }
-
- for (let key in excludes) {
- if (excludes.hasOwnProperty(key)) {
- excludes[key] = false;
- }
- }
-
- updateConfig(excludes, null, callback);
-}
-
-/**
- * Enable All
- * @param {function} callback
- */
-function enableAll(callback) {
- const config = vscode.workspace.getConfiguration('files', null);
-
- let excludes = config.get('exclude');
- if (!excludes) {
- excludes = {};
- }
-
- for (let key in excludes) {
- if (excludes.hasOwnProperty(key)) {
- excludes[key] = true;
- }
- }
-
- updateConfig(excludes, null, callback);
-}
-
-function toggleAll(callback) {
- if (!rootPath || rootPath === '') {
- return;
- }
-
- 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 = {};
- }
-
- for (let key in newExcludes) {
- if (newExcludes.hasOwnProperty(key)) {
- newExcludes[key] = false;
- }
- }
-
- let target = vscode.ConfigurationTarget.Workspace || null;
-
- if (isMultiRoot()) {
- const multiConfig = vscode.workspace.getConfiguration('explorerExclude', null);
- let isExcludeFolder = multiConfig.get('folder');
- target = isExcludeFolder ? vscode.ConfigurationTarget.WorkspaceFolder : vscode.ConfigurationTarget.Workspace;
- }
-
- const newBackup = (backup) ? null : excludes;
- const newExclude = (backup) ? backup : newExcludes;
-
- vscode.commands.executeCommand('setContext', 'explorerExclude:enabled', (backup));
-
- 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);
- }
-}
-
-/**
- * Reset All
- * @param {function} callback
- */
-function reset(callback) {
- updateConfig({}, null, callback);
-}
-
-/**
- * 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;
- }
-
- try {
- const config = vscode.workspace.getConfiguration('files', null);
-
- let target = vscode.ConfigurationTarget.Workspace || null;
-
- if (isMultiRoot()) {
- const multiConfig = vscode.workspace.getConfiguration('explorerExclude', uri);
- let isExcludeFolder = multiConfig.get('folder');
- target = isExcludeFolder ? vscode.ConfigurationTarget.WorkspaceFolder : vscode.ConfigurationTarget.Workspace;
- }
-
- vscode.commands.executeCommand('setContext', 'explorerExclude:enabled', true);
-
- 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);
- }
-
- if (typeof callback === 'function') {
- callback();
- }
- });
- });
- }
- catch (error) {
- vscode.window.showErrorMessage(error.message || error);
- }
-}
-
-/**
- * VS Code Action - Handle Mapping URI Exclusion to possible Regex Pattern Matches
- * @param {string} uri
- * @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);
- }
- });
-}
-
-/**
- * VS Code Action - Remove item from Excluded Patterns
- * @param {*} item
- * @param {*} callback
- */
-function vscRemove (item, callback) {
- if (item && item.value) {
- const value = item.value;
- const title = value.substring(0, value.length - 2);
- deleteExclude(title, null, callback);
- }
-}
-
-/**
- * VS Code Action - Tiggle Visibility of item from Excluded Patterns
- * @param {*} key
- * @param {*} callback
- */
-function vscToggle (key, callback) {
- if (key) {
- toggleExclude(key, callback);
- }
-}
-
-function vscToggleAll (callback) {
- toggleAll(callback);
-}
-
-function vscDisableAll (callback) {
- disableAll(callback);
-}
-
-function vscEnableAll (callback) {
- enableAll(callback);
-}
-
-function vscReset (callback) {
- reset(callback);
-}
-
-module.exports = {
- getExcludes,
- getResourcePath,
- getRootPath,
- saveContext,
- vscDisableAll,
- vscEnableAll,
- vscExclude,
- vscRemove,
- vscReset,
- vscToggle,
- vscToggleAll
-}
diff --git a/viewpane.js b/viewpane.js
deleted file mode 100644
index 3d34c7a..0000000
--- a/viewpane.js
+++ /dev/null
@@ -1,64 +0,0 @@
-const jsonc_parser = require('jsonc-parser');
-const vscode = require('vscode');
-
-const { localize } = require('vscode-nls-i18n');
-
-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();
- }
-
- register(name = '') {
- vscode.window.registerTreeDataProvider(name, this);
- }
-
- registerEvents() {
- this.onDidChangeTreeData(() => {});
- }
-
- update(list) {
- let treeString = JSON.stringify(list);
- this.tree = jsonc_parser.parseTree(treeString);
- this.viewUpdatedEventEmitter.fire();
- }
-
- 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';
-
- 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;
- }
-}
-
-module.exports = ViewPane;
\ No newline at end of file
diff --git a/welcome.js b/welcome.js
deleted file mode 100644
index 802c859..0000000
--- a/welcome.js
+++ /dev/null
@@ -1,38 +0,0 @@
-const vscode = require('vscode');
-const fs = require('fs');
-const marked = require('marked');
-
-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;
- }
-
- });
- }
-}
-
-module.exports = WelcomePane;
\ No newline at end of file