├── .devcontainer
└── devcontainer.json
├── .gitignore
├── .vscode
├── launch.json
├── settings.json
└── tasks.json
├── .vscodeignore
├── CHANGELOG.md
├── LICENSE.txt
├── README.md
├── images
└── icon.png
├── package-lock.json
├── package.json
├── src
├── commands.ts
├── config.ts
├── constants.ts
├── extension.ts
├── git.ts
├── store.ts
├── utils.ts
└── watcher.ts
└── tsconfig.json
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | {
2 | "tasks": {
3 | "build": "npm run package"
4 | }
5 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | out
2 | node_modules
3 | .vscode-test/
4 | *.vsix
5 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | // A launch configuration that compiles the extension and then opens it inside a new window
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | {
6 | "version": "0.2.0",
7 | "configurations": [{
8 | "name": "Run Extension",
9 | "type": "extensionHost",
10 | "request": "launch",
11 | "runtimeExecutable": "${execPath}",
12 | "args": [
13 | "--extensionDevelopmentPath=${workspaceFolder}"
14 | ],
15 | "outFiles": [
16 | "${workspaceFolder}/out/**/*.js"
17 | ],
18 | "preLaunchTask": "npm: watch"
19 | },
20 | {
21 | "name": "Extension Tests",
22 | "type": "extensionHost",
23 | "request": "launch",
24 | "runtimeExecutable": "${execPath}",
25 | "args": [
26 | "--extensionDevelopmentPath=${workspaceFolder}",
27 | "--extensionTestsPath=${workspaceFolder}/out/test"
28 | ],
29 | "outFiles": [
30 | "${workspaceFolder}/out/test/**/*.js"
31 | ],
32 | "preLaunchTask": "npm: watch"
33 | }
34 | ]
35 | }
36 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "files.exclude": {
3 | "out": false
4 | },
5 | "search.exclude": {
6 | "out": true
7 | },
8 | "typescript.tsc.autoDetect": "off",
9 | "editor.formatOnSave": true,
10 | "gitdoc.enabled": false
11 | }
12 |
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | // See https://go.microsoft.com/fwlink/?LinkId=733558
2 | // for the documentation about the tasks.json format
3 | {
4 | "version": "2.0.0",
5 | "tasks": [
6 | {
7 | "type": "npm",
8 | "script": "watch",
9 | "problemMatcher": "$tsc-watch",
10 | "isBackground": true,
11 | "presentation": {
12 | "reveal": "never"
13 | },
14 | "group": {
15 | "kind": "build",
16 | "isDefault": true
17 | }
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/.vscodeignore:
--------------------------------------------------------------------------------
1 | .vscode/**
2 | src/**
3 | .gitignore
4 | **/tsconfig.json
5 | **/tslint.json
6 | **/*.map
7 | **/*.ts
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## v0.2.3 (12/26/2024)
2 |
3 | - Introduced a new `GitDoc > AI: Use Emojis` setting, to alloq prepending AI-generated commit messages with an emoji.
4 |
5 | ## v0.2.2 (12/26/2024)
6 |
7 | - Introduced a new `GitDoc > AI: Custom Instructions` setting, to allow configuring the style/format of the AI-generated commit mesa
8 |
9 | ## v0.2.1 (12/26/2024)
10 |
11 | - Introduced a new `GitDoc: Commit` command, to manually trigger a commit, as opposed to waiting until the next auto-commit
12 | - Introduced a new `GotDoc: No Verify` setting, which allows suppressing git hooks for GitDoc-generated commits
13 | - GitDoc now checks whether a git repo has remotes before trying to push/pull
14 |
15 | ## v0.2.0 (12/26/2024)
16 |
17 | - Introduced the ability to generate semantic commit messages with AI
18 | - The `GitDoc: Auto Commit Delay` and `GitDoc: File Pattern` settings now take affect immediately whenever you change them
19 |
20 | ## v0.1.0 (08/10/2022)
21 |
22 | - Fixed a bug with VS Code v1.70
23 | - Added the `GitDoc: Push Mode` setting, that allows controlling how commits are automatically pushed to the remote repository
24 | - Commit messages now format datetimes using a configured timezone
25 | - Removed the `GitDoc` suffix from the status bar button, in order to reduce UI clutter
26 |
27 | ## v0.0.8 (03/20/2021)
28 |
29 | - Fixed an issue where the GitDoc setting was being written to every workspace you opened
30 |
31 | ## v0.0.7 (03/07/2021)
32 |
33 | - Introduced the ability to auto-pull changes from the remote.
34 | - Changes are now auto-committed when you close VS Code.
35 | - Removed the `GitDoc: Enable (Branch)` and `GitDoc: Disable (Branch)` commands
36 |
37 | ## v0.0.6 (04/25/2020)
38 |
39 | - Auto-commits are now only made when changes files don't have any associated errors. This behavior can be changed with the new `GitDoc: Commit Validation Level` setting.
40 |
41 | ## v0.0.5 (04/23/2020)
42 |
43 | - Introduced the `Undo Version` command to the `Timeline` tree, which allows you to revert a previous change
44 | - Added the new `GitDoc: Auto Commit Delay` setting, which allows you to control how much time to delay creating commits after saving
45 | - Renamed the `Collapse Version(s) Above` command to `Squash Version(s) Above`
46 | - Renamed the `onSave` option of the `GitDoc: Auto Push` setting to `onCommit`
47 |
48 | ## v0.0.4 (04/19/2020)
49 |
50 | - Introduced the `Squash Version(s) Above` command to the `Timeline` tree, which allows you to merge/name a bunch of auto-commits into a single version
51 | - Introduced the `Restore Version` command to the `Timeline` tree, which allows you to restore a previous version of a file
52 |
53 | ## v0.0.3 (04/18/2020)
54 |
55 | - Added the `GitDoc: File Pattern` setting, which allows you to enable auto-commits on only specific files
56 | - Fixed an issue where the commit message and date didn't match
57 |
58 | ## v0.0.2 (04/17/2020)
59 |
60 | - The status bar item now indicates when it is actively syncing or not
61 |
62 | ## v0.0.1 (04/17/2020)
63 |
64 | Initial release! 🎉
65 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) Jonathan Carter and Contributors.
2 |
3 | MIT License
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GitDoc 📄
2 |
3 | GitDoc is a Visual Studio Code extension that allows you to automatically commit/push/pull changes on save. This gives you the simplicity of a Google/Word Doc (creating "snapshots" by saving, not by running `git commit`), but with the richness of git history, and the ability to easily [share](https://github.com) your work. You can enable these auto-commits during specific periods (e.g. when you're working on a feature branch and want to track the evolution of a change), permanently on [specific branches](#auto-commiting-specific-branches) (e.g. you have a `docs` repo that you want to version like a document), or only for [specific files](#auto-commiting-specific-files) (e.g. auto-commmit `*.md` files, but nothing else). This allows you to easily switch between "versioning modalities", in order to support the diverse set of use cases that can benefit from being stored in a git repo (e.g. team projects, your personal blog, school work, etc.)
4 |
5 | By default, commits are only created for [error-free code](#error-detection), which allows you to author and save changes, knowing you aren't accidentally persisting invalid states. Additionally, just because you're auto-commmiting your changes, doesn't mean you lose control over your version history. When needed, you can easily [restore](#restoring-versions), [undo](#undoing-changes), and/or [squash](#squashing-versions) versions, without needing to memorize the [magic of git](https://sethrobertson.github.io/GitFixUm/fixup.html) 🦸♀️
6 |
7 |
8 |
9 | ## Getting Started
10 |
11 | 1. Install this extension
12 | 2. Run the `GitDoc: Enable` command, and notice that your status bar now includes a "mirror" icon button. This indicates that `GitDoc` is enabled 🚀
13 | 3. Open a file, make a change, and then save it
14 | 4. Open the `Timeline` view on the `Explorer` tab (or run `git log`), and within 30s, notice that a new commit was created on your behalf
15 | 5. Select the top item in the `Timeline` view to see the diff of the change you just made
16 | 6. Continue to make changes, knowing that they'll be automatically tracked for you (as long as they don't contain [errors](#error-detection)) 👍
17 |
18 | From here, you can [restore](#restoring-versions), [undo](#undoing-changes), and/or [squash](#collapsing-versions) versions from the `Timeline`, in order to "clean" up/manage your history. When you're done, simply click the `GitDoc` button in your status bar, or run the `GitDoc: Disable` command, in order to disable auto-commits.
19 |
20 | And if you'd like to have GitDoc generate semantic commit messages on your behalf, you can enable the [Copilot integration](#ai-generated-commit-messages), which uses AI to automatically summarize your changes 🤖
21 |
22 | ## Auto-commiting
23 |
24 | By default, when you enable `GitDoc`, it will create commits every 30s, _whenever there are actually changes_. So if you don't make any changes, than it won't make any commits. However, if you're continuously writing code, then it's only going to capture those edits in 30s intervals. This way, you don't generate a massive number of commits, depending on how frequently you save files. If you find that 30s is too short or too long, you can customize this by setting the `GitDoc: Auto Commit Delay` setting to the appropriate value.
25 |
26 | ### Error Detection
27 |
28 | By default, auto-commits are only made when a file is changed, and it doesn't have any pending errors (e.g. issues in the `Problems` panel with an `error` severity). This prevents you from creating commits that represent invalid changes, and allows you to install whatever linting/testing/build extensions you want, knowing that they'll "gate" your auto-commits. If you want to suppress commits in the presence of warnings, or ignore problems entirely, and simply always auto-commit, then you can set the `GitDoc: Commit Validation Level` setting to `warning` or `none` respectively.
29 |
30 |
31 |
32 | ### Auto-commiting specific files
33 |
34 | If you'd like to only enable auto-commiting for specific files, you can set the `GitDoc: File Pattern` setting to a file glob. For example, you could set this to `**/*.md` in order to auto-commit markdown files, but nothing else. By default, this is set to `**/*`, which auto-commits changes to any file.
35 |
36 | When this setting is set, the `GitDoc` [status bar](#status-bar) which only appear when you have a file that is matches it. This way, you can easily tell when you're editing a file that will be auto-committed/pushed.
37 |
38 | ### Auto-saving
39 |
40 | When you enable `GitDoc`, it creates a new commit anytime you save a file. This allows you to control when commits are created, simply be determining when you save. You can save a single file, or multiple files, and all of the changes within a single "save operation" will be committed together. If you'd like to automatically track your changes, without needing to explicitly save, then simply set the `Files: Auto Save` setting, specifying the exact behavior you'd like (e.g. save every 30s).
41 |
42 | ## Auto-pushing
43 |
44 | In addition to automatically creating commits, GitDoc will automatically push your changes to the configured remote. By default, changes will be pushed as soon as you commit them, but this can be configured via the `GitDoc: Autopush` setting. This can be set to `afterDelay` in order to push on some sort of frequency (controlled via the `GitDoc: Auto Push Delay` setting). Additionally, if you don't want to auto-push changes, you can disable this behavior by setting the `GitDoc: Autopush` setting to `off`.
45 |
46 | By default, GitDoc will perform a "force push", since certain operations such as [`squashing`](#squashing-versions) can actually re-write history. However, if you'd like to change this behavior, you can set the `GitDoc: Push Mode` to either `Force Push with Lease` or `Push`.
47 |
48 | ## Auto-pulling
49 |
50 | By default, when you enable `GitDoc`, it will automatically pull changes from the repo when you 1) open the workspace, and 2) [push changes](#auto-pushing). This ensures that your local copy is in sync with the remote, and attempts to mitigate merge conflics from happening. If you'd like to modify this behavior, you can customize the `GitDoc: Auto Pull` and `GitDoc: Pull on Open` settings.
51 |
52 | ## AI-Generated Commit Messages
53 |
54 | By default, GitDoc generates commit messages based on the day and time that they're committed. However, it can also use AI to generate commit messages based on contents of the changes you make. If you'd like to enable this capability, simply install the Copilot extension, and then enable the `GitDoc > AI: Enabled` setting. Once complete, you'll notice that your auto-commits now have semantic/friendly messages.
55 |
56 | By default, GitDoc uses `gpt-4o` for generating commit messages, but you can only try out other models (e.g. `o1`, `claude-3.5-sonnet`) by changing the `GitDoc > AI: Model` setting. Additionally, if you'd like to prepend an emoji to the AI-generated commit messages, then enable the `GitDoc > AI: Use Emojis` setting. And if you'd like to provide GitDoc with more specific stylistic preferences, then you can set the `GitDoc > AI: Custom Instructions` setting to include any additional guidance (e.g. "Use only lowercase letters").
57 |
58 | ## Squashing versions
59 |
60 | Auto-committing is useful for tracking unique versions, however, depending on how frequently you save, you could end up creating a significant number of file versions. If a series of versions represent a single logical change, you can "squash" them together by right-clicking the oldest version in the `Timeline` tree and selecting the `Squash Version(s) Above` command. You can give the new version a name, and when submitted, the selected version, and all versions above it, will be "squashed" into a single version.
61 |
62 |
63 |
64 | > Demystification: Behind the scenes, this command performs a `git reset --soft`, starting at the commit _before_ the selected one. It then runs `git commit -m `, where `message` is the string you specified. This preserves your working directory/index, while "rewritting" the commit history.
65 |
66 | ## Undoing versions
67 |
68 | If you made a change, that you want to undo, you can simply open up the `Timeline` view, right-click the version you want to undo, and select `Undo Version`. This will create a new version that undos the changes that were made in the selected version. This way, any undo action is actually a "forward edit", that you can then undo again if needed.
69 |
70 | > Demystification: Behind the scenes, this command simply performs a `git revert` on the selcted commit. Because this is a "safe" action, you can generally perform it without any problems (including on shared branches), since it doesn't re-write history.
71 |
72 | ## Restoring versions
73 |
74 | If you've made a bunch of changes to a file, and want to restore an older version, simply open up the `Timeline` tree, right-click the desired version, and select `Restore Version`.
75 |
76 | > Demystification: Behind the scenes, this command peforms a `git checkout -- ` (on the file that's associated with the selected timeline item), followed by `git commit` (in order to commit the restoration). This way, the restore is a "forward moving" operation.
77 |
78 | ## Status Bar
79 |
80 | Whenever `GitDoc` is enabled, it will contribute a status bar item to your status bar. This simply indicates that it's enabled, and makes it easier for you to know which "versioning mode" you're in (auto-commit vs. manual commit). Additionally, if you enable [auto-pushing](#auto-pushing), then the status bar will indicate when it's syncing your commits with your repo. If you click the `GitDoc` status bar item, this will disable `GitDoc`. This allows you to easily enable GitDoc for a period of time, and then quickly turn it off.
81 |
82 | ## Contributed Commands
83 |
84 | When you install the `GitDoc` extension, the following commands are contributed to the command palette, and are visible when your open workspace is also a git repository:
85 |
86 | - `GitDoc: Enable` - Enables auto-commits. This command is only visible when GitDoc isn't already enabled.
87 |
88 | - `GitDoc: Disable` - Disables auto-commits. This command is only visible when GitDoc is enabled.
89 |
90 | - `GitDoc: Commit` - Manually commits changes. This command allows you to trigger a commit without waiting for the auto-commit interval.
91 |
92 | ## Contributed Settings
93 |
94 | The following settings enable you to customize the default behavior of `GitDoc`:
95 |
96 | - `GitDoc: Auto Commit Delay` - Controls the delay in ms after which any changes are automatically committed. Only applies when `GitDoc: Enabled` is set to `true`. Defaults to `30000` (30s).
97 |
98 | - `GitDoc: Autopull` - Specifies whether to automatically pull changes from the current remote. Can be set to one of the following values: `afterDelay`, `onCommit`, `onPush`, or `off`. Defaults to `onPush`.
99 |
100 | - `GitDoc: Autopull Delay` - Controls the delay in ms after which any changes are automatically pulled. Only applies when `GitDoc: Auto Pull` is set to `afterDelay`. Defaults to `30000`.
101 |
102 | - `GitDoc: Autopush` - Specifies whether to automatically push changes to the current remote. Can be set to one of the following values: `afterDelay`, `onCommit`,or `off`. Defaults to `onCommit`.
103 |
104 | - `GitDoc: Autopush Delay` - Controls the delay in ms after which any commits are automatically pushed. Only applies when `GitDoc: Auto Push` is set to `afterDelay`. Defaults to `30000`.
105 |
106 | - `GitDoc: Commit Message Format` - Specifies the [moment.js](https://momentjs.com/) format string to use when generating auto-commit messages. Defaults to `LLL`.
107 |
108 | - `GitDoc: Commit Validation Level` - Specifies whether to validate that a file is free of problems, before attempting to commit changes to it. Defaults to `error`.
109 |
110 | - `GitDoc: Commit on Close` - Specifies whether to automatically commit changes when you close VS Code. Defaults to `true`.
111 |
112 | - `GitDoc: Enabled` - Specifies whether to automatically create a commit each time you save a file.
113 |
114 | - `GitDoc: File Pattern` - Specifies a glob that indicates the exact files that should be automatically committed. This is useful if you'd like to only [auto-commiting specific files](#auto-commiting-specific-files), as opposed to an entire branch.
115 |
116 | - `GitDoc: Pull on Open` - Specifies whether to automatically pull remote changes when you open a repo. Defaults to `true`.
117 |
118 | - `GitDoc: Push Mode` - Specifies how changes should be pushed after they're committed. This setting only applies when auto-pushing is enabled. Can be set to one of the following values: `forcePushWithLease`, `forcePush`, or `push`. Defaults to `forcePush`.
119 |
120 | - `GitDoc: Exclude Branches` - Specifies a list of branches that should be excluded from auto-commits. This allows you to prevent auto-commits on specific branches, ensuring that your work on these branches remains manual. This is particularly useful for branches where you want to have more control over the commits, such as production or release branches. Defaults to `[]`.
121 |
122 | - `GitDoc: No Verify` - Specifies whether to ignore any configured git hooks. Defaults to `false`.
123 |
124 | ### AI Settings
125 |
126 | - `GitDoc > AI: Enabled` - Specifies whether to use AI to generate commit messages. This setting only applies when you have the Copilot extension installed and setup.
127 |
128 | - `GitDoc > AI: Model` - Specifies the AI model to use when generating commit messages. This setting only applies when `GitDoc > AI: Enabled` is set to `true`. Defaults to `gpt-4o`.
129 |
130 | - `GitDoc > AI: Custom Instructions` - Specifies custom instructions to use when generating commit messages (e.g. use conventional commit syntax, use emojis). This setting only applies when `GitDoc > AI: Enabled` is set to `true`."
131 |
132 | - `GitDoc > AI: Use Emojis` - Specifies whether to prepend AI-generated commit messages with an emoji. This setting only applies when `GitDoc > AI: Enabled` is set to `true`. Defaults to `false`.
--------------------------------------------------------------------------------
/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lostintangent/gitdoc/5e596daccc7195cd1296f1d4ae7a58936ad8d1a3/images/icon.png
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gitdoc",
3 | "version": "0.1.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "gitdoc",
9 | "version": "0.1.0",
10 | "dependencies": {
11 | "luxon": "^2.0.2",
12 | "minimatch": "^3.0.4",
13 | "mobx": "^5.14.2"
14 | },
15 | "devDependencies": {
16 | "@types/debounce": "^1.2.0",
17 | "@types/luxon": "^2.0.5",
18 | "@types/minimatch": "^3.0.3",
19 | "@types/node": "^18.6.5",
20 | "@types/vscode": "1.90.0",
21 | "tslint": "^5.8.0",
22 | "typescript": "^4.7.4",
23 | "vsce": "^2.10.0"
24 | },
25 | "engines": {
26 | "vscode": "^1.90.0"
27 | }
28 | },
29 | "node_modules/@babel/code-frame": {
30 | "version": "7.5.5",
31 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
32 | "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
33 | "dev": true,
34 | "dependencies": {
35 | "@babel/highlight": "^7.0.0"
36 | }
37 | },
38 | "node_modules/@babel/highlight": {
39 | "version": "7.5.0",
40 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
41 | "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
42 | "dev": true,
43 | "dependencies": {
44 | "chalk": "^2.0.0",
45 | "esutils": "^2.0.2",
46 | "js-tokens": "^4.0.0"
47 | }
48 | },
49 | "node_modules/@types/debounce": {
50 | "version": "1.2.0",
51 | "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.0.tgz",
52 | "integrity": "sha512-bWG5wapaWgbss9E238T0R6bfo5Fh3OkeoSt245CM7JJwVwpw6MEBCbIxLq5z8KzsE3uJhzcIuQkyiZmzV3M/Dw==",
53 | "dev": true
54 | },
55 | "node_modules/@types/luxon": {
56 | "version": "2.0.5",
57 | "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-2.0.5.tgz",
58 | "integrity": "sha512-GKrG5v16BOs9XGpouu33hOkAFaiSDi3ZaDXG9F2yAoyzHRBtksZnI60VWY5aM/yAENCccBejrxw8jDY+9OVlxw==",
59 | "dev": true
60 | },
61 | "node_modules/@types/minimatch": {
62 | "version": "3.0.3",
63 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
64 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
65 | "dev": true
66 | },
67 | "node_modules/@types/node": {
68 | "version": "18.6.5",
69 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
70 | "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
71 | "dev": true
72 | },
73 | "node_modules/@types/vscode": {
74 | "version": "1.90.0",
75 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.90.0.tgz",
76 | "integrity": "sha512-oT+ZJL7qHS9Z8bs0+WKf/kQ27qWYR3trsXpq46YDjFqBsMLG4ygGGjPaJ2tyrH0wJzjOEmDyg9PDJBBhWg9pkQ==",
77 | "dev": true,
78 | "license": "MIT"
79 | },
80 | "node_modules/ansi-styles": {
81 | "version": "3.2.1",
82 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
83 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
84 | "dev": true,
85 | "dependencies": {
86 | "color-convert": "^1.9.0"
87 | },
88 | "engines": {
89 | "node": ">=4"
90 | }
91 | },
92 | "node_modules/argparse": {
93 | "version": "1.0.10",
94 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
95 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
96 | "dev": true,
97 | "dependencies": {
98 | "sprintf-js": "~1.0.2"
99 | }
100 | },
101 | "node_modules/azure-devops-node-api": {
102 | "version": "11.2.0",
103 | "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz",
104 | "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==",
105 | "dev": true,
106 | "dependencies": {
107 | "tunnel": "0.0.6",
108 | "typed-rest-client": "^1.8.4"
109 | }
110 | },
111 | "node_modules/balanced-match": {
112 | "version": "1.0.0",
113 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
114 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
115 | },
116 | "node_modules/base64-js": {
117 | "version": "1.5.1",
118 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
119 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
120 | "dev": true,
121 | "funding": [
122 | {
123 | "type": "github",
124 | "url": "https://github.com/sponsors/feross"
125 | },
126 | {
127 | "type": "patreon",
128 | "url": "https://www.patreon.com/feross"
129 | },
130 | {
131 | "type": "consulting",
132 | "url": "https://feross.org/support"
133 | }
134 | ]
135 | },
136 | "node_modules/bl": {
137 | "version": "4.1.0",
138 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
139 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
140 | "dev": true,
141 | "dependencies": {
142 | "buffer": "^5.5.0",
143 | "inherits": "^2.0.4",
144 | "readable-stream": "^3.4.0"
145 | }
146 | },
147 | "node_modules/boolbase": {
148 | "version": "1.0.0",
149 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
150 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
151 | "dev": true
152 | },
153 | "node_modules/brace-expansion": {
154 | "version": "1.1.11",
155 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
156 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
157 | "dependencies": {
158 | "balanced-match": "^1.0.0",
159 | "concat-map": "0.0.1"
160 | }
161 | },
162 | "node_modules/buffer": {
163 | "version": "5.7.1",
164 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
165 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
166 | "dev": true,
167 | "funding": [
168 | {
169 | "type": "github",
170 | "url": "https://github.com/sponsors/feross"
171 | },
172 | {
173 | "type": "patreon",
174 | "url": "https://www.patreon.com/feross"
175 | },
176 | {
177 | "type": "consulting",
178 | "url": "https://feross.org/support"
179 | }
180 | ],
181 | "dependencies": {
182 | "base64-js": "^1.3.1",
183 | "ieee754": "^1.1.13"
184 | }
185 | },
186 | "node_modules/buffer-crc32": {
187 | "version": "0.2.13",
188 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
189 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
190 | "dev": true,
191 | "engines": {
192 | "node": "*"
193 | }
194 | },
195 | "node_modules/builtin-modules": {
196 | "version": "1.1.1",
197 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
198 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
199 | "dev": true,
200 | "engines": {
201 | "node": ">=0.10.0"
202 | }
203 | },
204 | "node_modules/call-bind": {
205 | "version": "1.0.2",
206 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
207 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
208 | "dev": true,
209 | "dependencies": {
210 | "function-bind": "^1.1.1",
211 | "get-intrinsic": "^1.0.2"
212 | },
213 | "funding": {
214 | "url": "https://github.com/sponsors/ljharb"
215 | }
216 | },
217 | "node_modules/chalk": {
218 | "version": "2.4.2",
219 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
220 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
221 | "dev": true,
222 | "dependencies": {
223 | "ansi-styles": "^3.2.1",
224 | "escape-string-regexp": "^1.0.5",
225 | "supports-color": "^5.3.0"
226 | },
227 | "engines": {
228 | "node": ">=4"
229 | }
230 | },
231 | "node_modules/cheerio": {
232 | "version": "1.0.0-rc.12",
233 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
234 | "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
235 | "dev": true,
236 | "dependencies": {
237 | "cheerio-select": "^2.1.0",
238 | "dom-serializer": "^2.0.0",
239 | "domhandler": "^5.0.3",
240 | "domutils": "^3.0.1",
241 | "htmlparser2": "^8.0.1",
242 | "parse5": "^7.0.0",
243 | "parse5-htmlparser2-tree-adapter": "^7.0.0"
244 | },
245 | "engines": {
246 | "node": ">= 6"
247 | },
248 | "funding": {
249 | "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
250 | }
251 | },
252 | "node_modules/cheerio-select": {
253 | "version": "2.1.0",
254 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
255 | "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
256 | "dev": true,
257 | "dependencies": {
258 | "boolbase": "^1.0.0",
259 | "css-select": "^5.1.0",
260 | "css-what": "^6.1.0",
261 | "domelementtype": "^2.3.0",
262 | "domhandler": "^5.0.3",
263 | "domutils": "^3.0.1"
264 | },
265 | "funding": {
266 | "url": "https://github.com/sponsors/fb55"
267 | }
268 | },
269 | "node_modules/chownr": {
270 | "version": "1.1.4",
271 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
272 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
273 | "dev": true
274 | },
275 | "node_modules/color-convert": {
276 | "version": "1.9.3",
277 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
278 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
279 | "dev": true,
280 | "dependencies": {
281 | "color-name": "1.1.3"
282 | }
283 | },
284 | "node_modules/color-name": {
285 | "version": "1.1.3",
286 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
287 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
288 | "dev": true
289 | },
290 | "node_modules/commander": {
291 | "version": "2.20.3",
292 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
293 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
294 | "dev": true
295 | },
296 | "node_modules/concat-map": {
297 | "version": "0.0.1",
298 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
299 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
300 | },
301 | "node_modules/css-select": {
302 | "version": "5.1.0",
303 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
304 | "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
305 | "dev": true,
306 | "dependencies": {
307 | "boolbase": "^1.0.0",
308 | "css-what": "^6.1.0",
309 | "domhandler": "^5.0.2",
310 | "domutils": "^3.0.1",
311 | "nth-check": "^2.0.1"
312 | },
313 | "funding": {
314 | "url": "https://github.com/sponsors/fb55"
315 | }
316 | },
317 | "node_modules/css-what": {
318 | "version": "6.1.0",
319 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
320 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
321 | "dev": true,
322 | "engines": {
323 | "node": ">= 6"
324 | },
325 | "funding": {
326 | "url": "https://github.com/sponsors/fb55"
327 | }
328 | },
329 | "node_modules/decompress-response": {
330 | "version": "6.0.0",
331 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
332 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
333 | "dev": true,
334 | "dependencies": {
335 | "mimic-response": "^3.1.0"
336 | },
337 | "engines": {
338 | "node": ">=10"
339 | },
340 | "funding": {
341 | "url": "https://github.com/sponsors/sindresorhus"
342 | }
343 | },
344 | "node_modules/deep-extend": {
345 | "version": "0.6.0",
346 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
347 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
348 | "dev": true,
349 | "engines": {
350 | "node": ">=4.0.0"
351 | }
352 | },
353 | "node_modules/detect-libc": {
354 | "version": "2.0.1",
355 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
356 | "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
357 | "dev": true,
358 | "engines": {
359 | "node": ">=8"
360 | }
361 | },
362 | "node_modules/diff": {
363 | "version": "4.0.1",
364 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz",
365 | "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==",
366 | "dev": true,
367 | "engines": {
368 | "node": ">=0.3.1"
369 | }
370 | },
371 | "node_modules/dom-serializer": {
372 | "version": "2.0.0",
373 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
374 | "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
375 | "dev": true,
376 | "dependencies": {
377 | "domelementtype": "^2.3.0",
378 | "domhandler": "^5.0.2",
379 | "entities": "^4.2.0"
380 | },
381 | "funding": {
382 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
383 | }
384 | },
385 | "node_modules/domelementtype": {
386 | "version": "2.3.0",
387 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
388 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
389 | "dev": true,
390 | "funding": [
391 | {
392 | "type": "github",
393 | "url": "https://github.com/sponsors/fb55"
394 | }
395 | ]
396 | },
397 | "node_modules/domhandler": {
398 | "version": "5.0.3",
399 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
400 | "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
401 | "dev": true,
402 | "dependencies": {
403 | "domelementtype": "^2.3.0"
404 | },
405 | "engines": {
406 | "node": ">= 4"
407 | },
408 | "funding": {
409 | "url": "https://github.com/fb55/domhandler?sponsor=1"
410 | }
411 | },
412 | "node_modules/domutils": {
413 | "version": "3.0.1",
414 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
415 | "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
416 | "dev": true,
417 | "dependencies": {
418 | "dom-serializer": "^2.0.0",
419 | "domelementtype": "^2.3.0",
420 | "domhandler": "^5.0.1"
421 | },
422 | "funding": {
423 | "url": "https://github.com/fb55/domutils?sponsor=1"
424 | }
425 | },
426 | "node_modules/end-of-stream": {
427 | "version": "1.4.4",
428 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
429 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
430 | "dev": true,
431 | "dependencies": {
432 | "once": "^1.4.0"
433 | }
434 | },
435 | "node_modules/entities": {
436 | "version": "4.3.1",
437 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz",
438 | "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==",
439 | "dev": true,
440 | "engines": {
441 | "node": ">=0.12"
442 | },
443 | "funding": {
444 | "url": "https://github.com/fb55/entities?sponsor=1"
445 | }
446 | },
447 | "node_modules/escape-string-regexp": {
448 | "version": "1.0.5",
449 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
450 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
451 | "dev": true,
452 | "engines": {
453 | "node": ">=0.8.0"
454 | }
455 | },
456 | "node_modules/esprima": {
457 | "version": "4.0.1",
458 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
459 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
460 | "dev": true,
461 | "bin": {
462 | "esparse": "bin/esparse.js",
463 | "esvalidate": "bin/esvalidate.js"
464 | },
465 | "engines": {
466 | "node": ">=4"
467 | }
468 | },
469 | "node_modules/esutils": {
470 | "version": "2.0.3",
471 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
472 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
473 | "dev": true,
474 | "engines": {
475 | "node": ">=0.10.0"
476 | }
477 | },
478 | "node_modules/expand-template": {
479 | "version": "2.0.3",
480 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
481 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
482 | "dev": true,
483 | "engines": {
484 | "node": ">=6"
485 | }
486 | },
487 | "node_modules/fd-slicer": {
488 | "version": "1.1.0",
489 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
490 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
491 | "dev": true,
492 | "dependencies": {
493 | "pend": "~1.2.0"
494 | }
495 | },
496 | "node_modules/fs-constants": {
497 | "version": "1.0.0",
498 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
499 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
500 | "dev": true
501 | },
502 | "node_modules/fs.realpath": {
503 | "version": "1.0.0",
504 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
505 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
506 | "dev": true
507 | },
508 | "node_modules/function-bind": {
509 | "version": "1.1.1",
510 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
511 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
512 | "dev": true
513 | },
514 | "node_modules/get-intrinsic": {
515 | "version": "1.1.2",
516 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
517 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
518 | "dev": true,
519 | "dependencies": {
520 | "function-bind": "^1.1.1",
521 | "has": "^1.0.3",
522 | "has-symbols": "^1.0.3"
523 | },
524 | "funding": {
525 | "url": "https://github.com/sponsors/ljharb"
526 | }
527 | },
528 | "node_modules/github-from-package": {
529 | "version": "0.0.0",
530 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
531 | "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
532 | "dev": true
533 | },
534 | "node_modules/glob": {
535 | "version": "7.1.6",
536 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
537 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
538 | "deprecated": "Glob versions prior to v9 are no longer supported",
539 | "dev": true,
540 | "dependencies": {
541 | "fs.realpath": "^1.0.0",
542 | "inflight": "^1.0.4",
543 | "inherits": "2",
544 | "minimatch": "^3.0.4",
545 | "once": "^1.3.0",
546 | "path-is-absolute": "^1.0.0"
547 | },
548 | "engines": {
549 | "node": "*"
550 | },
551 | "funding": {
552 | "url": "https://github.com/sponsors/isaacs"
553 | }
554 | },
555 | "node_modules/has": {
556 | "version": "1.0.3",
557 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
558 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
559 | "dev": true,
560 | "dependencies": {
561 | "function-bind": "^1.1.1"
562 | },
563 | "engines": {
564 | "node": ">= 0.4.0"
565 | }
566 | },
567 | "node_modules/has-flag": {
568 | "version": "3.0.0",
569 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
570 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
571 | "dev": true,
572 | "engines": {
573 | "node": ">=4"
574 | }
575 | },
576 | "node_modules/has-symbols": {
577 | "version": "1.0.3",
578 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
579 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
580 | "dev": true,
581 | "engines": {
582 | "node": ">= 0.4"
583 | },
584 | "funding": {
585 | "url": "https://github.com/sponsors/ljharb"
586 | }
587 | },
588 | "node_modules/hosted-git-info": {
589 | "version": "4.1.0",
590 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
591 | "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
592 | "dev": true,
593 | "dependencies": {
594 | "lru-cache": "^6.0.0"
595 | },
596 | "engines": {
597 | "node": ">=10"
598 | }
599 | },
600 | "node_modules/htmlparser2": {
601 | "version": "8.0.1",
602 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz",
603 | "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==",
604 | "dev": true,
605 | "funding": [
606 | "https://github.com/fb55/htmlparser2?sponsor=1",
607 | {
608 | "type": "github",
609 | "url": "https://github.com/sponsors/fb55"
610 | }
611 | ],
612 | "dependencies": {
613 | "domelementtype": "^2.3.0",
614 | "domhandler": "^5.0.2",
615 | "domutils": "^3.0.1",
616 | "entities": "^4.3.0"
617 | }
618 | },
619 | "node_modules/ieee754": {
620 | "version": "1.2.1",
621 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
622 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
623 | "dev": true,
624 | "funding": [
625 | {
626 | "type": "github",
627 | "url": "https://github.com/sponsors/feross"
628 | },
629 | {
630 | "type": "patreon",
631 | "url": "https://www.patreon.com/feross"
632 | },
633 | {
634 | "type": "consulting",
635 | "url": "https://feross.org/support"
636 | }
637 | ]
638 | },
639 | "node_modules/inflight": {
640 | "version": "1.0.6",
641 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
642 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
643 | "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
644 | "dev": true,
645 | "dependencies": {
646 | "once": "^1.3.0",
647 | "wrappy": "1"
648 | }
649 | },
650 | "node_modules/inherits": {
651 | "version": "2.0.4",
652 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
653 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
654 | "dev": true
655 | },
656 | "node_modules/ini": {
657 | "version": "1.3.8",
658 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
659 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
660 | "dev": true
661 | },
662 | "node_modules/js-tokens": {
663 | "version": "4.0.0",
664 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
665 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
666 | "dev": true
667 | },
668 | "node_modules/js-yaml": {
669 | "version": "3.13.1",
670 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
671 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
672 | "dev": true,
673 | "dependencies": {
674 | "argparse": "^1.0.7",
675 | "esprima": "^4.0.0"
676 | },
677 | "bin": {
678 | "js-yaml": "bin/js-yaml.js"
679 | }
680 | },
681 | "node_modules/keytar": {
682 | "version": "7.9.0",
683 | "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz",
684 | "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==",
685 | "dev": true,
686 | "hasInstallScript": true,
687 | "dependencies": {
688 | "node-addon-api": "^4.3.0",
689 | "prebuild-install": "^7.0.1"
690 | }
691 | },
692 | "node_modules/leven": {
693 | "version": "3.1.0",
694 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
695 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
696 | "dev": true,
697 | "engines": {
698 | "node": ">=6"
699 | }
700 | },
701 | "node_modules/linkify-it": {
702 | "version": "3.0.3",
703 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
704 | "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
705 | "dev": true,
706 | "dependencies": {
707 | "uc.micro": "^1.0.1"
708 | }
709 | },
710 | "node_modules/lru-cache": {
711 | "version": "6.0.0",
712 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
713 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
714 | "dev": true,
715 | "dependencies": {
716 | "yallist": "^4.0.0"
717 | },
718 | "engines": {
719 | "node": ">=10"
720 | }
721 | },
722 | "node_modules/luxon": {
723 | "version": "2.0.2",
724 | "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.0.2.tgz",
725 | "integrity": "sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg==",
726 | "engines": {
727 | "node": "*"
728 | }
729 | },
730 | "node_modules/markdown-it": {
731 | "version": "12.3.2",
732 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
733 | "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
734 | "dev": true,
735 | "dependencies": {
736 | "argparse": "^2.0.1",
737 | "entities": "~2.1.0",
738 | "linkify-it": "^3.0.1",
739 | "mdurl": "^1.0.1",
740 | "uc.micro": "^1.0.5"
741 | },
742 | "bin": {
743 | "markdown-it": "bin/markdown-it.js"
744 | }
745 | },
746 | "node_modules/markdown-it/node_modules/argparse": {
747 | "version": "2.0.1",
748 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
749 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
750 | "dev": true
751 | },
752 | "node_modules/markdown-it/node_modules/entities": {
753 | "version": "2.1.0",
754 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
755 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
756 | "dev": true,
757 | "funding": {
758 | "url": "https://github.com/fb55/entities?sponsor=1"
759 | }
760 | },
761 | "node_modules/mdurl": {
762 | "version": "1.0.1",
763 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
764 | "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
765 | "dev": true
766 | },
767 | "node_modules/mime": {
768 | "version": "1.6.0",
769 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
770 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
771 | "dev": true,
772 | "bin": {
773 | "mime": "cli.js"
774 | },
775 | "engines": {
776 | "node": ">=4"
777 | }
778 | },
779 | "node_modules/mimic-response": {
780 | "version": "3.1.0",
781 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
782 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
783 | "dev": true,
784 | "engines": {
785 | "node": ">=10"
786 | },
787 | "funding": {
788 | "url": "https://github.com/sponsors/sindresorhus"
789 | }
790 | },
791 | "node_modules/minimatch": {
792 | "version": "3.0.4",
793 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
794 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
795 | "dependencies": {
796 | "brace-expansion": "^1.1.7"
797 | },
798 | "engines": {
799 | "node": "*"
800 | }
801 | },
802 | "node_modules/minimist": {
803 | "version": "0.0.8",
804 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
805 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
806 | "dev": true
807 | },
808 | "node_modules/mkdirp": {
809 | "version": "0.5.1",
810 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
811 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
812 | "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
813 | "dev": true,
814 | "dependencies": {
815 | "minimist": "0.0.8"
816 | },
817 | "bin": {
818 | "mkdirp": "bin/cmd.js"
819 | }
820 | },
821 | "node_modules/mkdirp-classic": {
822 | "version": "0.5.3",
823 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
824 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
825 | "dev": true
826 | },
827 | "node_modules/mobx": {
828 | "version": "5.14.2",
829 | "resolved": "https://registry.npmjs.org/mobx/-/mobx-5.14.2.tgz",
830 | "integrity": "sha512-yx5Xe6o2WSYFgeytzZt6jGaYghJdQbd1ElR7S2s93x7/+5SYfJBfutvZF1O5gPEsUyTAFZ5IMYGu1KyhkPk+oQ=="
831 | },
832 | "node_modules/mute-stream": {
833 | "version": "0.0.8",
834 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
835 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
836 | "dev": true
837 | },
838 | "node_modules/napi-build-utils": {
839 | "version": "1.0.2",
840 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
841 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
842 | "dev": true
843 | },
844 | "node_modules/node-abi": {
845 | "version": "3.24.0",
846 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.24.0.tgz",
847 | "integrity": "sha512-YPG3Co0luSu6GwOBsmIdGW6Wx0NyNDLg/hriIyDllVsNwnI6UeqaWShxC3lbH4LtEQUgoLP3XR1ndXiDAWvmRw==",
848 | "dev": true,
849 | "dependencies": {
850 | "semver": "^7.3.5"
851 | },
852 | "engines": {
853 | "node": ">=10"
854 | }
855 | },
856 | "node_modules/node-abi/node_modules/semver": {
857 | "version": "7.3.7",
858 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
859 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
860 | "dev": true,
861 | "dependencies": {
862 | "lru-cache": "^6.0.0"
863 | },
864 | "bin": {
865 | "semver": "bin/semver.js"
866 | },
867 | "engines": {
868 | "node": ">=10"
869 | }
870 | },
871 | "node_modules/node-addon-api": {
872 | "version": "4.3.0",
873 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
874 | "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
875 | "dev": true
876 | },
877 | "node_modules/nth-check": {
878 | "version": "2.1.1",
879 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
880 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
881 | "dev": true,
882 | "dependencies": {
883 | "boolbase": "^1.0.0"
884 | },
885 | "funding": {
886 | "url": "https://github.com/fb55/nth-check?sponsor=1"
887 | }
888 | },
889 | "node_modules/object-inspect": {
890 | "version": "1.12.2",
891 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
892 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
893 | "dev": true,
894 | "funding": {
895 | "url": "https://github.com/sponsors/ljharb"
896 | }
897 | },
898 | "node_modules/once": {
899 | "version": "1.4.0",
900 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
901 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
902 | "dev": true,
903 | "dependencies": {
904 | "wrappy": "1"
905 | }
906 | },
907 | "node_modules/parse-semver": {
908 | "version": "1.1.1",
909 | "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
910 | "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==",
911 | "dev": true,
912 | "dependencies": {
913 | "semver": "^5.1.0"
914 | }
915 | },
916 | "node_modules/parse5": {
917 | "version": "7.0.0",
918 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
919 | "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
920 | "dev": true,
921 | "dependencies": {
922 | "entities": "^4.3.0"
923 | },
924 | "funding": {
925 | "url": "https://github.com/inikulin/parse5?sponsor=1"
926 | }
927 | },
928 | "node_modules/parse5-htmlparser2-tree-adapter": {
929 | "version": "7.0.0",
930 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
931 | "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
932 | "dev": true,
933 | "dependencies": {
934 | "domhandler": "^5.0.2",
935 | "parse5": "^7.0.0"
936 | },
937 | "funding": {
938 | "url": "https://github.com/inikulin/parse5?sponsor=1"
939 | }
940 | },
941 | "node_modules/path-is-absolute": {
942 | "version": "1.0.1",
943 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
944 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
945 | "dev": true,
946 | "engines": {
947 | "node": ">=0.10.0"
948 | }
949 | },
950 | "node_modules/path-parse": {
951 | "version": "1.0.6",
952 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
953 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
954 | "dev": true
955 | },
956 | "node_modules/pend": {
957 | "version": "1.2.0",
958 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
959 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
960 | "dev": true
961 | },
962 | "node_modules/prebuild-install": {
963 | "version": "7.1.1",
964 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
965 | "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
966 | "dev": true,
967 | "dependencies": {
968 | "detect-libc": "^2.0.0",
969 | "expand-template": "^2.0.3",
970 | "github-from-package": "0.0.0",
971 | "minimist": "^1.2.3",
972 | "mkdirp-classic": "^0.5.3",
973 | "napi-build-utils": "^1.0.1",
974 | "node-abi": "^3.3.0",
975 | "pump": "^3.0.0",
976 | "rc": "^1.2.7",
977 | "simple-get": "^4.0.0",
978 | "tar-fs": "^2.0.0",
979 | "tunnel-agent": "^0.6.0"
980 | },
981 | "bin": {
982 | "prebuild-install": "bin.js"
983 | },
984 | "engines": {
985 | "node": ">=10"
986 | }
987 | },
988 | "node_modules/prebuild-install/node_modules/minimist": {
989 | "version": "1.2.6",
990 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
991 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
992 | "dev": true
993 | },
994 | "node_modules/pump": {
995 | "version": "3.0.0",
996 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
997 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
998 | "dev": true,
999 | "dependencies": {
1000 | "end-of-stream": "^1.1.0",
1001 | "once": "^1.3.1"
1002 | }
1003 | },
1004 | "node_modules/qs": {
1005 | "version": "6.11.0",
1006 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1007 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1008 | "dev": true,
1009 | "dependencies": {
1010 | "side-channel": "^1.0.4"
1011 | },
1012 | "engines": {
1013 | "node": ">=0.6"
1014 | },
1015 | "funding": {
1016 | "url": "https://github.com/sponsors/ljharb"
1017 | }
1018 | },
1019 | "node_modules/rc": {
1020 | "version": "1.2.8",
1021 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
1022 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
1023 | "dev": true,
1024 | "dependencies": {
1025 | "deep-extend": "^0.6.0",
1026 | "ini": "~1.3.0",
1027 | "minimist": "^1.2.0",
1028 | "strip-json-comments": "~2.0.1"
1029 | },
1030 | "bin": {
1031 | "rc": "cli.js"
1032 | }
1033 | },
1034 | "node_modules/rc/node_modules/minimist": {
1035 | "version": "1.2.6",
1036 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
1037 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
1038 | "dev": true
1039 | },
1040 | "node_modules/read": {
1041 | "version": "1.0.7",
1042 | "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
1043 | "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==",
1044 | "dev": true,
1045 | "dependencies": {
1046 | "mute-stream": "~0.0.4"
1047 | },
1048 | "engines": {
1049 | "node": ">=0.8"
1050 | }
1051 | },
1052 | "node_modules/readable-stream": {
1053 | "version": "3.6.0",
1054 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1055 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1056 | "dev": true,
1057 | "dependencies": {
1058 | "inherits": "^2.0.3",
1059 | "string_decoder": "^1.1.1",
1060 | "util-deprecate": "^1.0.1"
1061 | },
1062 | "engines": {
1063 | "node": ">= 6"
1064 | }
1065 | },
1066 | "node_modules/resolve": {
1067 | "version": "1.14.1",
1068 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz",
1069 | "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==",
1070 | "dev": true,
1071 | "dependencies": {
1072 | "path-parse": "^1.0.6"
1073 | },
1074 | "funding": {
1075 | "url": "https://github.com/sponsors/ljharb"
1076 | }
1077 | },
1078 | "node_modules/rimraf": {
1079 | "version": "3.0.2",
1080 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1081 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1082 | "deprecated": "Rimraf versions prior to v4 are no longer supported",
1083 | "dev": true,
1084 | "dependencies": {
1085 | "glob": "^7.1.3"
1086 | },
1087 | "bin": {
1088 | "rimraf": "bin.js"
1089 | },
1090 | "funding": {
1091 | "url": "https://github.com/sponsors/isaacs"
1092 | }
1093 | },
1094 | "node_modules/safe-buffer": {
1095 | "version": "5.2.1",
1096 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1097 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1098 | "dev": true,
1099 | "funding": [
1100 | {
1101 | "type": "github",
1102 | "url": "https://github.com/sponsors/feross"
1103 | },
1104 | {
1105 | "type": "patreon",
1106 | "url": "https://www.patreon.com/feross"
1107 | },
1108 | {
1109 | "type": "consulting",
1110 | "url": "https://feross.org/support"
1111 | }
1112 | ]
1113 | },
1114 | "node_modules/sax": {
1115 | "version": "1.2.4",
1116 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
1117 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
1118 | "dev": true
1119 | },
1120 | "node_modules/semver": {
1121 | "version": "5.7.1",
1122 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1123 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1124 | "dev": true,
1125 | "bin": {
1126 | "semver": "bin/semver"
1127 | }
1128 | },
1129 | "node_modules/side-channel": {
1130 | "version": "1.0.4",
1131 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1132 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1133 | "dev": true,
1134 | "dependencies": {
1135 | "call-bind": "^1.0.0",
1136 | "get-intrinsic": "^1.0.2",
1137 | "object-inspect": "^1.9.0"
1138 | },
1139 | "funding": {
1140 | "url": "https://github.com/sponsors/ljharb"
1141 | }
1142 | },
1143 | "node_modules/simple-concat": {
1144 | "version": "1.0.1",
1145 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
1146 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
1147 | "dev": true,
1148 | "funding": [
1149 | {
1150 | "type": "github",
1151 | "url": "https://github.com/sponsors/feross"
1152 | },
1153 | {
1154 | "type": "patreon",
1155 | "url": "https://www.patreon.com/feross"
1156 | },
1157 | {
1158 | "type": "consulting",
1159 | "url": "https://feross.org/support"
1160 | }
1161 | ]
1162 | },
1163 | "node_modules/simple-get": {
1164 | "version": "4.0.1",
1165 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
1166 | "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
1167 | "dev": true,
1168 | "funding": [
1169 | {
1170 | "type": "github",
1171 | "url": "https://github.com/sponsors/feross"
1172 | },
1173 | {
1174 | "type": "patreon",
1175 | "url": "https://www.patreon.com/feross"
1176 | },
1177 | {
1178 | "type": "consulting",
1179 | "url": "https://feross.org/support"
1180 | }
1181 | ],
1182 | "dependencies": {
1183 | "decompress-response": "^6.0.0",
1184 | "once": "^1.3.1",
1185 | "simple-concat": "^1.0.0"
1186 | }
1187 | },
1188 | "node_modules/sprintf-js": {
1189 | "version": "1.0.3",
1190 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1191 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1192 | "dev": true
1193 | },
1194 | "node_modules/string_decoder": {
1195 | "version": "1.3.0",
1196 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1197 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1198 | "dev": true,
1199 | "dependencies": {
1200 | "safe-buffer": "~5.2.0"
1201 | }
1202 | },
1203 | "node_modules/strip-json-comments": {
1204 | "version": "2.0.1",
1205 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1206 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
1207 | "dev": true,
1208 | "engines": {
1209 | "node": ">=0.10.0"
1210 | }
1211 | },
1212 | "node_modules/supports-color": {
1213 | "version": "5.5.0",
1214 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1215 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1216 | "dev": true,
1217 | "dependencies": {
1218 | "has-flag": "^3.0.0"
1219 | },
1220 | "engines": {
1221 | "node": ">=4"
1222 | }
1223 | },
1224 | "node_modules/tar-fs": {
1225 | "version": "2.1.1",
1226 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
1227 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
1228 | "dev": true,
1229 | "dependencies": {
1230 | "chownr": "^1.1.1",
1231 | "mkdirp-classic": "^0.5.2",
1232 | "pump": "^3.0.0",
1233 | "tar-stream": "^2.1.4"
1234 | }
1235 | },
1236 | "node_modules/tar-stream": {
1237 | "version": "2.2.0",
1238 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
1239 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
1240 | "dev": true,
1241 | "dependencies": {
1242 | "bl": "^4.0.3",
1243 | "end-of-stream": "^1.4.1",
1244 | "fs-constants": "^1.0.0",
1245 | "inherits": "^2.0.3",
1246 | "readable-stream": "^3.1.1"
1247 | },
1248 | "engines": {
1249 | "node": ">=6"
1250 | }
1251 | },
1252 | "node_modules/tmp": {
1253 | "version": "0.2.1",
1254 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
1255 | "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
1256 | "dev": true,
1257 | "dependencies": {
1258 | "rimraf": "^3.0.0"
1259 | },
1260 | "engines": {
1261 | "node": ">=8.17.0"
1262 | }
1263 | },
1264 | "node_modules/tslib": {
1265 | "version": "1.10.0",
1266 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
1267 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
1268 | "dev": true
1269 | },
1270 | "node_modules/tslint": {
1271 | "version": "5.20.1",
1272 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz",
1273 | "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==",
1274 | "dev": true,
1275 | "dependencies": {
1276 | "@babel/code-frame": "^7.0.0",
1277 | "builtin-modules": "^1.1.1",
1278 | "chalk": "^2.3.0",
1279 | "commander": "^2.12.1",
1280 | "diff": "^4.0.1",
1281 | "glob": "^7.1.1",
1282 | "js-yaml": "^3.13.1",
1283 | "minimatch": "^3.0.4",
1284 | "mkdirp": "^0.5.1",
1285 | "resolve": "^1.3.2",
1286 | "semver": "^5.3.0",
1287 | "tslib": "^1.8.0",
1288 | "tsutils": "^2.29.0"
1289 | },
1290 | "bin": {
1291 | "tslint": "bin/tslint"
1292 | },
1293 | "engines": {
1294 | "node": ">=4.8.0"
1295 | },
1296 | "peerDependencies": {
1297 | "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev"
1298 | }
1299 | },
1300 | "node_modules/tsutils": {
1301 | "version": "2.29.0",
1302 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
1303 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
1304 | "dev": true,
1305 | "dependencies": {
1306 | "tslib": "^1.8.1"
1307 | },
1308 | "peerDependencies": {
1309 | "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev"
1310 | }
1311 | },
1312 | "node_modules/tunnel": {
1313 | "version": "0.0.6",
1314 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
1315 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
1316 | "dev": true,
1317 | "engines": {
1318 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
1319 | }
1320 | },
1321 | "node_modules/tunnel-agent": {
1322 | "version": "0.6.0",
1323 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1324 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
1325 | "dev": true,
1326 | "dependencies": {
1327 | "safe-buffer": "^5.0.1"
1328 | },
1329 | "engines": {
1330 | "node": "*"
1331 | }
1332 | },
1333 | "node_modules/typed-rest-client": {
1334 | "version": "1.8.9",
1335 | "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
1336 | "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
1337 | "dev": true,
1338 | "dependencies": {
1339 | "qs": "^6.9.1",
1340 | "tunnel": "0.0.6",
1341 | "underscore": "^1.12.1"
1342 | }
1343 | },
1344 | "node_modules/typescript": {
1345 | "version": "4.7.4",
1346 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
1347 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
1348 | "dev": true,
1349 | "bin": {
1350 | "tsc": "bin/tsc",
1351 | "tsserver": "bin/tsserver"
1352 | },
1353 | "engines": {
1354 | "node": ">=4.2.0"
1355 | }
1356 | },
1357 | "node_modules/uc.micro": {
1358 | "version": "1.0.6",
1359 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
1360 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
1361 | "dev": true
1362 | },
1363 | "node_modules/underscore": {
1364 | "version": "1.13.4",
1365 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz",
1366 | "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==",
1367 | "dev": true
1368 | },
1369 | "node_modules/url-join": {
1370 | "version": "4.0.1",
1371 | "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
1372 | "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
1373 | "dev": true
1374 | },
1375 | "node_modules/util-deprecate": {
1376 | "version": "1.0.2",
1377 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1378 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
1379 | "dev": true
1380 | },
1381 | "node_modules/vsce": {
1382 | "version": "2.10.0",
1383 | "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.10.0.tgz",
1384 | "integrity": "sha512-b+wB3XMapEi368g64klSM6uylllZdNutseqbNY+tUoHYSy6g2NwnlWuAGKDQTYc0IqfDUjUFRQBpPgA89Q+Fyw==",
1385 | "deprecated": "vsce has been renamed to @vscode/vsce. Install using @vscode/vsce instead.",
1386 | "dev": true,
1387 | "dependencies": {
1388 | "azure-devops-node-api": "^11.0.1",
1389 | "chalk": "^2.4.2",
1390 | "cheerio": "^1.0.0-rc.9",
1391 | "commander": "^6.1.0",
1392 | "glob": "^7.0.6",
1393 | "hosted-git-info": "^4.0.2",
1394 | "keytar": "^7.7.0",
1395 | "leven": "^3.1.0",
1396 | "markdown-it": "^12.3.2",
1397 | "mime": "^1.3.4",
1398 | "minimatch": "^3.0.3",
1399 | "parse-semver": "^1.1.1",
1400 | "read": "^1.0.7",
1401 | "semver": "^5.1.0",
1402 | "tmp": "^0.2.1",
1403 | "typed-rest-client": "^1.8.4",
1404 | "url-join": "^4.0.1",
1405 | "xml2js": "^0.4.23",
1406 | "yauzl": "^2.3.1",
1407 | "yazl": "^2.2.2"
1408 | },
1409 | "bin": {
1410 | "vsce": "vsce"
1411 | },
1412 | "engines": {
1413 | "node": ">= 14"
1414 | }
1415 | },
1416 | "node_modules/vsce/node_modules/commander": {
1417 | "version": "6.2.1",
1418 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
1419 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
1420 | "dev": true,
1421 | "engines": {
1422 | "node": ">= 6"
1423 | }
1424 | },
1425 | "node_modules/wrappy": {
1426 | "version": "1.0.2",
1427 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1428 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1429 | "dev": true
1430 | },
1431 | "node_modules/xml2js": {
1432 | "version": "0.4.23",
1433 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
1434 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
1435 | "dev": true,
1436 | "dependencies": {
1437 | "sax": ">=0.6.0",
1438 | "xmlbuilder": "~11.0.0"
1439 | },
1440 | "engines": {
1441 | "node": ">=4.0.0"
1442 | }
1443 | },
1444 | "node_modules/xmlbuilder": {
1445 | "version": "11.0.1",
1446 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
1447 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
1448 | "dev": true,
1449 | "engines": {
1450 | "node": ">=4.0"
1451 | }
1452 | },
1453 | "node_modules/yallist": {
1454 | "version": "4.0.0",
1455 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1456 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
1457 | "dev": true
1458 | },
1459 | "node_modules/yauzl": {
1460 | "version": "2.10.0",
1461 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
1462 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
1463 | "dev": true,
1464 | "dependencies": {
1465 | "buffer-crc32": "~0.2.3",
1466 | "fd-slicer": "~1.1.0"
1467 | }
1468 | },
1469 | "node_modules/yazl": {
1470 | "version": "2.5.1",
1471 | "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
1472 | "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
1473 | "dev": true,
1474 | "dependencies": {
1475 | "buffer-crc32": "~0.2.3"
1476 | }
1477 | }
1478 | },
1479 | "dependencies": {
1480 | "@babel/code-frame": {
1481 | "version": "7.5.5",
1482 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
1483 | "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
1484 | "dev": true,
1485 | "requires": {
1486 | "@babel/highlight": "^7.0.0"
1487 | }
1488 | },
1489 | "@babel/highlight": {
1490 | "version": "7.5.0",
1491 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
1492 | "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
1493 | "dev": true,
1494 | "requires": {
1495 | "chalk": "^2.0.0",
1496 | "esutils": "^2.0.2",
1497 | "js-tokens": "^4.0.0"
1498 | }
1499 | },
1500 | "@types/debounce": {
1501 | "version": "1.2.0",
1502 | "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.0.tgz",
1503 | "integrity": "sha512-bWG5wapaWgbss9E238T0R6bfo5Fh3OkeoSt245CM7JJwVwpw6MEBCbIxLq5z8KzsE3uJhzcIuQkyiZmzV3M/Dw==",
1504 | "dev": true
1505 | },
1506 | "@types/luxon": {
1507 | "version": "2.0.5",
1508 | "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-2.0.5.tgz",
1509 | "integrity": "sha512-GKrG5v16BOs9XGpouu33hOkAFaiSDi3ZaDXG9F2yAoyzHRBtksZnI60VWY5aM/yAENCccBejrxw8jDY+9OVlxw==",
1510 | "dev": true
1511 | },
1512 | "@types/minimatch": {
1513 | "version": "3.0.3",
1514 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
1515 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
1516 | "dev": true
1517 | },
1518 | "@types/node": {
1519 | "version": "18.6.5",
1520 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz",
1521 | "integrity": "sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw==",
1522 | "dev": true
1523 | },
1524 | "@types/vscode": {
1525 | "version": "1.90.0",
1526 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.90.0.tgz",
1527 | "integrity": "sha512-oT+ZJL7qHS9Z8bs0+WKf/kQ27qWYR3trsXpq46YDjFqBsMLG4ygGGjPaJ2tyrH0wJzjOEmDyg9PDJBBhWg9pkQ==",
1528 | "dev": true
1529 | },
1530 | "ansi-styles": {
1531 | "version": "3.2.1",
1532 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1533 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1534 | "dev": true,
1535 | "requires": {
1536 | "color-convert": "^1.9.0"
1537 | }
1538 | },
1539 | "argparse": {
1540 | "version": "1.0.10",
1541 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
1542 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
1543 | "dev": true,
1544 | "requires": {
1545 | "sprintf-js": "~1.0.2"
1546 | }
1547 | },
1548 | "azure-devops-node-api": {
1549 | "version": "11.2.0",
1550 | "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz",
1551 | "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==",
1552 | "dev": true,
1553 | "requires": {
1554 | "tunnel": "0.0.6",
1555 | "typed-rest-client": "^1.8.4"
1556 | }
1557 | },
1558 | "balanced-match": {
1559 | "version": "1.0.0",
1560 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
1561 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
1562 | },
1563 | "base64-js": {
1564 | "version": "1.5.1",
1565 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
1566 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
1567 | "dev": true
1568 | },
1569 | "bl": {
1570 | "version": "4.1.0",
1571 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
1572 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
1573 | "dev": true,
1574 | "requires": {
1575 | "buffer": "^5.5.0",
1576 | "inherits": "^2.0.4",
1577 | "readable-stream": "^3.4.0"
1578 | }
1579 | },
1580 | "boolbase": {
1581 | "version": "1.0.0",
1582 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
1583 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
1584 | "dev": true
1585 | },
1586 | "brace-expansion": {
1587 | "version": "1.1.11",
1588 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1589 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1590 | "requires": {
1591 | "balanced-match": "^1.0.0",
1592 | "concat-map": "0.0.1"
1593 | }
1594 | },
1595 | "buffer": {
1596 | "version": "5.7.1",
1597 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
1598 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
1599 | "dev": true,
1600 | "requires": {
1601 | "base64-js": "^1.3.1",
1602 | "ieee754": "^1.1.13"
1603 | }
1604 | },
1605 | "buffer-crc32": {
1606 | "version": "0.2.13",
1607 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
1608 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
1609 | "dev": true
1610 | },
1611 | "builtin-modules": {
1612 | "version": "1.1.1",
1613 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
1614 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
1615 | "dev": true
1616 | },
1617 | "call-bind": {
1618 | "version": "1.0.2",
1619 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
1620 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
1621 | "dev": true,
1622 | "requires": {
1623 | "function-bind": "^1.1.1",
1624 | "get-intrinsic": "^1.0.2"
1625 | }
1626 | },
1627 | "chalk": {
1628 | "version": "2.4.2",
1629 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1630 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1631 | "dev": true,
1632 | "requires": {
1633 | "ansi-styles": "^3.2.1",
1634 | "escape-string-regexp": "^1.0.5",
1635 | "supports-color": "^5.3.0"
1636 | }
1637 | },
1638 | "cheerio": {
1639 | "version": "1.0.0-rc.12",
1640 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
1641 | "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
1642 | "dev": true,
1643 | "requires": {
1644 | "cheerio-select": "^2.1.0",
1645 | "dom-serializer": "^2.0.0",
1646 | "domhandler": "^5.0.3",
1647 | "domutils": "^3.0.1",
1648 | "htmlparser2": "^8.0.1",
1649 | "parse5": "^7.0.0",
1650 | "parse5-htmlparser2-tree-adapter": "^7.0.0"
1651 | }
1652 | },
1653 | "cheerio-select": {
1654 | "version": "2.1.0",
1655 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
1656 | "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
1657 | "dev": true,
1658 | "requires": {
1659 | "boolbase": "^1.0.0",
1660 | "css-select": "^5.1.0",
1661 | "css-what": "^6.1.0",
1662 | "domelementtype": "^2.3.0",
1663 | "domhandler": "^5.0.3",
1664 | "domutils": "^3.0.1"
1665 | }
1666 | },
1667 | "chownr": {
1668 | "version": "1.1.4",
1669 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
1670 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
1671 | "dev": true
1672 | },
1673 | "color-convert": {
1674 | "version": "1.9.3",
1675 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1676 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1677 | "dev": true,
1678 | "requires": {
1679 | "color-name": "1.1.3"
1680 | }
1681 | },
1682 | "color-name": {
1683 | "version": "1.1.3",
1684 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1685 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
1686 | "dev": true
1687 | },
1688 | "commander": {
1689 | "version": "2.20.3",
1690 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
1691 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
1692 | "dev": true
1693 | },
1694 | "concat-map": {
1695 | "version": "0.0.1",
1696 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1697 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
1698 | },
1699 | "css-select": {
1700 | "version": "5.1.0",
1701 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
1702 | "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
1703 | "dev": true,
1704 | "requires": {
1705 | "boolbase": "^1.0.0",
1706 | "css-what": "^6.1.0",
1707 | "domhandler": "^5.0.2",
1708 | "domutils": "^3.0.1",
1709 | "nth-check": "^2.0.1"
1710 | }
1711 | },
1712 | "css-what": {
1713 | "version": "6.1.0",
1714 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
1715 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
1716 | "dev": true
1717 | },
1718 | "decompress-response": {
1719 | "version": "6.0.0",
1720 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
1721 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
1722 | "dev": true,
1723 | "requires": {
1724 | "mimic-response": "^3.1.0"
1725 | }
1726 | },
1727 | "deep-extend": {
1728 | "version": "0.6.0",
1729 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
1730 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
1731 | "dev": true
1732 | },
1733 | "detect-libc": {
1734 | "version": "2.0.1",
1735 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
1736 | "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
1737 | "dev": true
1738 | },
1739 | "diff": {
1740 | "version": "4.0.1",
1741 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz",
1742 | "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==",
1743 | "dev": true
1744 | },
1745 | "dom-serializer": {
1746 | "version": "2.0.0",
1747 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
1748 | "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
1749 | "dev": true,
1750 | "requires": {
1751 | "domelementtype": "^2.3.0",
1752 | "domhandler": "^5.0.2",
1753 | "entities": "^4.2.0"
1754 | }
1755 | },
1756 | "domelementtype": {
1757 | "version": "2.3.0",
1758 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
1759 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
1760 | "dev": true
1761 | },
1762 | "domhandler": {
1763 | "version": "5.0.3",
1764 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
1765 | "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
1766 | "dev": true,
1767 | "requires": {
1768 | "domelementtype": "^2.3.0"
1769 | }
1770 | },
1771 | "domutils": {
1772 | "version": "3.0.1",
1773 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
1774 | "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
1775 | "dev": true,
1776 | "requires": {
1777 | "dom-serializer": "^2.0.0",
1778 | "domelementtype": "^2.3.0",
1779 | "domhandler": "^5.0.1"
1780 | }
1781 | },
1782 | "end-of-stream": {
1783 | "version": "1.4.4",
1784 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
1785 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
1786 | "dev": true,
1787 | "requires": {
1788 | "once": "^1.4.0"
1789 | }
1790 | },
1791 | "entities": {
1792 | "version": "4.3.1",
1793 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz",
1794 | "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==",
1795 | "dev": true
1796 | },
1797 | "escape-string-regexp": {
1798 | "version": "1.0.5",
1799 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1800 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1801 | "dev": true
1802 | },
1803 | "esprima": {
1804 | "version": "4.0.1",
1805 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1806 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1807 | "dev": true
1808 | },
1809 | "esutils": {
1810 | "version": "2.0.3",
1811 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1812 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1813 | "dev": true
1814 | },
1815 | "expand-template": {
1816 | "version": "2.0.3",
1817 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
1818 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
1819 | "dev": true
1820 | },
1821 | "fd-slicer": {
1822 | "version": "1.1.0",
1823 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
1824 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
1825 | "dev": true,
1826 | "requires": {
1827 | "pend": "~1.2.0"
1828 | }
1829 | },
1830 | "fs-constants": {
1831 | "version": "1.0.0",
1832 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
1833 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
1834 | "dev": true
1835 | },
1836 | "fs.realpath": {
1837 | "version": "1.0.0",
1838 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1839 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1840 | "dev": true
1841 | },
1842 | "function-bind": {
1843 | "version": "1.1.1",
1844 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1845 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1846 | "dev": true
1847 | },
1848 | "get-intrinsic": {
1849 | "version": "1.1.2",
1850 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
1851 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
1852 | "dev": true,
1853 | "requires": {
1854 | "function-bind": "^1.1.1",
1855 | "has": "^1.0.3",
1856 | "has-symbols": "^1.0.3"
1857 | }
1858 | },
1859 | "github-from-package": {
1860 | "version": "0.0.0",
1861 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
1862 | "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
1863 | "dev": true
1864 | },
1865 | "glob": {
1866 | "version": "7.1.6",
1867 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
1868 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
1869 | "dev": true,
1870 | "requires": {
1871 | "fs.realpath": "^1.0.0",
1872 | "inflight": "^1.0.4",
1873 | "inherits": "2",
1874 | "minimatch": "^3.0.4",
1875 | "once": "^1.3.0",
1876 | "path-is-absolute": "^1.0.0"
1877 | }
1878 | },
1879 | "has": {
1880 | "version": "1.0.3",
1881 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1882 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1883 | "dev": true,
1884 | "requires": {
1885 | "function-bind": "^1.1.1"
1886 | }
1887 | },
1888 | "has-flag": {
1889 | "version": "3.0.0",
1890 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1891 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1892 | "dev": true
1893 | },
1894 | "has-symbols": {
1895 | "version": "1.0.3",
1896 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1897 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
1898 | "dev": true
1899 | },
1900 | "hosted-git-info": {
1901 | "version": "4.1.0",
1902 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
1903 | "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
1904 | "dev": true,
1905 | "requires": {
1906 | "lru-cache": "^6.0.0"
1907 | }
1908 | },
1909 | "htmlparser2": {
1910 | "version": "8.0.1",
1911 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz",
1912 | "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==",
1913 | "dev": true,
1914 | "requires": {
1915 | "domelementtype": "^2.3.0",
1916 | "domhandler": "^5.0.2",
1917 | "domutils": "^3.0.1",
1918 | "entities": "^4.3.0"
1919 | }
1920 | },
1921 | "ieee754": {
1922 | "version": "1.2.1",
1923 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
1924 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
1925 | "dev": true
1926 | },
1927 | "inflight": {
1928 | "version": "1.0.6",
1929 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1930 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1931 | "dev": true,
1932 | "requires": {
1933 | "once": "^1.3.0",
1934 | "wrappy": "1"
1935 | }
1936 | },
1937 | "inherits": {
1938 | "version": "2.0.4",
1939 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1940 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1941 | "dev": true
1942 | },
1943 | "ini": {
1944 | "version": "1.3.8",
1945 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
1946 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
1947 | "dev": true
1948 | },
1949 | "js-tokens": {
1950 | "version": "4.0.0",
1951 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1952 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1953 | "dev": true
1954 | },
1955 | "js-yaml": {
1956 | "version": "3.13.1",
1957 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
1958 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
1959 | "dev": true,
1960 | "requires": {
1961 | "argparse": "^1.0.7",
1962 | "esprima": "^4.0.0"
1963 | }
1964 | },
1965 | "keytar": {
1966 | "version": "7.9.0",
1967 | "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz",
1968 | "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==",
1969 | "dev": true,
1970 | "requires": {
1971 | "node-addon-api": "^4.3.0",
1972 | "prebuild-install": "^7.0.1"
1973 | }
1974 | },
1975 | "leven": {
1976 | "version": "3.1.0",
1977 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
1978 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
1979 | "dev": true
1980 | },
1981 | "linkify-it": {
1982 | "version": "3.0.3",
1983 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
1984 | "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
1985 | "dev": true,
1986 | "requires": {
1987 | "uc.micro": "^1.0.1"
1988 | }
1989 | },
1990 | "lru-cache": {
1991 | "version": "6.0.0",
1992 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1993 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1994 | "dev": true,
1995 | "requires": {
1996 | "yallist": "^4.0.0"
1997 | }
1998 | },
1999 | "luxon": {
2000 | "version": "2.0.2",
2001 | "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.0.2.tgz",
2002 | "integrity": "sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg=="
2003 | },
2004 | "markdown-it": {
2005 | "version": "12.3.2",
2006 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
2007 | "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
2008 | "dev": true,
2009 | "requires": {
2010 | "argparse": "^2.0.1",
2011 | "entities": "~2.1.0",
2012 | "linkify-it": "^3.0.1",
2013 | "mdurl": "^1.0.1",
2014 | "uc.micro": "^1.0.5"
2015 | },
2016 | "dependencies": {
2017 | "argparse": {
2018 | "version": "2.0.1",
2019 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
2020 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
2021 | "dev": true
2022 | },
2023 | "entities": {
2024 | "version": "2.1.0",
2025 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
2026 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
2027 | "dev": true
2028 | }
2029 | }
2030 | },
2031 | "mdurl": {
2032 | "version": "1.0.1",
2033 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
2034 | "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
2035 | "dev": true
2036 | },
2037 | "mime": {
2038 | "version": "1.6.0",
2039 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
2040 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
2041 | "dev": true
2042 | },
2043 | "mimic-response": {
2044 | "version": "3.1.0",
2045 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
2046 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
2047 | "dev": true
2048 | },
2049 | "minimatch": {
2050 | "version": "3.0.4",
2051 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2052 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2053 | "requires": {
2054 | "brace-expansion": "^1.1.7"
2055 | }
2056 | },
2057 | "minimist": {
2058 | "version": "0.0.8",
2059 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
2060 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
2061 | "dev": true
2062 | },
2063 | "mkdirp": {
2064 | "version": "0.5.1",
2065 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
2066 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
2067 | "dev": true,
2068 | "requires": {
2069 | "minimist": "0.0.8"
2070 | }
2071 | },
2072 | "mkdirp-classic": {
2073 | "version": "0.5.3",
2074 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
2075 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
2076 | "dev": true
2077 | },
2078 | "mobx": {
2079 | "version": "5.14.2",
2080 | "resolved": "https://registry.npmjs.org/mobx/-/mobx-5.14.2.tgz",
2081 | "integrity": "sha512-yx5Xe6o2WSYFgeytzZt6jGaYghJdQbd1ElR7S2s93x7/+5SYfJBfutvZF1O5gPEsUyTAFZ5IMYGu1KyhkPk+oQ=="
2082 | },
2083 | "mute-stream": {
2084 | "version": "0.0.8",
2085 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
2086 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
2087 | "dev": true
2088 | },
2089 | "napi-build-utils": {
2090 | "version": "1.0.2",
2091 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
2092 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
2093 | "dev": true
2094 | },
2095 | "node-abi": {
2096 | "version": "3.24.0",
2097 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.24.0.tgz",
2098 | "integrity": "sha512-YPG3Co0luSu6GwOBsmIdGW6Wx0NyNDLg/hriIyDllVsNwnI6UeqaWShxC3lbH4LtEQUgoLP3XR1ndXiDAWvmRw==",
2099 | "dev": true,
2100 | "requires": {
2101 | "semver": "^7.3.5"
2102 | },
2103 | "dependencies": {
2104 | "semver": {
2105 | "version": "7.3.7",
2106 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
2107 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
2108 | "dev": true,
2109 | "requires": {
2110 | "lru-cache": "^6.0.0"
2111 | }
2112 | }
2113 | }
2114 | },
2115 | "node-addon-api": {
2116 | "version": "4.3.0",
2117 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
2118 | "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
2119 | "dev": true
2120 | },
2121 | "nth-check": {
2122 | "version": "2.1.1",
2123 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
2124 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
2125 | "dev": true,
2126 | "requires": {
2127 | "boolbase": "^1.0.0"
2128 | }
2129 | },
2130 | "object-inspect": {
2131 | "version": "1.12.2",
2132 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
2133 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
2134 | "dev": true
2135 | },
2136 | "once": {
2137 | "version": "1.4.0",
2138 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2139 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2140 | "dev": true,
2141 | "requires": {
2142 | "wrappy": "1"
2143 | }
2144 | },
2145 | "parse-semver": {
2146 | "version": "1.1.1",
2147 | "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
2148 | "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==",
2149 | "dev": true,
2150 | "requires": {
2151 | "semver": "^5.1.0"
2152 | }
2153 | },
2154 | "parse5": {
2155 | "version": "7.0.0",
2156 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz",
2157 | "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==",
2158 | "dev": true,
2159 | "requires": {
2160 | "entities": "^4.3.0"
2161 | }
2162 | },
2163 | "parse5-htmlparser2-tree-adapter": {
2164 | "version": "7.0.0",
2165 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
2166 | "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
2167 | "dev": true,
2168 | "requires": {
2169 | "domhandler": "^5.0.2",
2170 | "parse5": "^7.0.0"
2171 | }
2172 | },
2173 | "path-is-absolute": {
2174 | "version": "1.0.1",
2175 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2176 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2177 | "dev": true
2178 | },
2179 | "path-parse": {
2180 | "version": "1.0.6",
2181 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
2182 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
2183 | "dev": true
2184 | },
2185 | "pend": {
2186 | "version": "1.2.0",
2187 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
2188 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
2189 | "dev": true
2190 | },
2191 | "prebuild-install": {
2192 | "version": "7.1.1",
2193 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
2194 | "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
2195 | "dev": true,
2196 | "requires": {
2197 | "detect-libc": "^2.0.0",
2198 | "expand-template": "^2.0.3",
2199 | "github-from-package": "0.0.0",
2200 | "minimist": "^1.2.3",
2201 | "mkdirp-classic": "^0.5.3",
2202 | "napi-build-utils": "^1.0.1",
2203 | "node-abi": "^3.3.0",
2204 | "pump": "^3.0.0",
2205 | "rc": "^1.2.7",
2206 | "simple-get": "^4.0.0",
2207 | "tar-fs": "^2.0.0",
2208 | "tunnel-agent": "^0.6.0"
2209 | },
2210 | "dependencies": {
2211 | "minimist": {
2212 | "version": "1.2.6",
2213 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
2214 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
2215 | "dev": true
2216 | }
2217 | }
2218 | },
2219 | "pump": {
2220 | "version": "3.0.0",
2221 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
2222 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
2223 | "dev": true,
2224 | "requires": {
2225 | "end-of-stream": "^1.1.0",
2226 | "once": "^1.3.1"
2227 | }
2228 | },
2229 | "qs": {
2230 | "version": "6.11.0",
2231 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
2232 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
2233 | "dev": true,
2234 | "requires": {
2235 | "side-channel": "^1.0.4"
2236 | }
2237 | },
2238 | "rc": {
2239 | "version": "1.2.8",
2240 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
2241 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
2242 | "dev": true,
2243 | "requires": {
2244 | "deep-extend": "^0.6.0",
2245 | "ini": "~1.3.0",
2246 | "minimist": "^1.2.0",
2247 | "strip-json-comments": "~2.0.1"
2248 | },
2249 | "dependencies": {
2250 | "minimist": {
2251 | "version": "1.2.6",
2252 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
2253 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
2254 | "dev": true
2255 | }
2256 | }
2257 | },
2258 | "read": {
2259 | "version": "1.0.7",
2260 | "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
2261 | "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==",
2262 | "dev": true,
2263 | "requires": {
2264 | "mute-stream": "~0.0.4"
2265 | }
2266 | },
2267 | "readable-stream": {
2268 | "version": "3.6.0",
2269 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
2270 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
2271 | "dev": true,
2272 | "requires": {
2273 | "inherits": "^2.0.3",
2274 | "string_decoder": "^1.1.1",
2275 | "util-deprecate": "^1.0.1"
2276 | }
2277 | },
2278 | "resolve": {
2279 | "version": "1.14.1",
2280 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz",
2281 | "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==",
2282 | "dev": true,
2283 | "requires": {
2284 | "path-parse": "^1.0.6"
2285 | }
2286 | },
2287 | "rimraf": {
2288 | "version": "3.0.2",
2289 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2290 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2291 | "dev": true,
2292 | "requires": {
2293 | "glob": "^7.1.3"
2294 | }
2295 | },
2296 | "safe-buffer": {
2297 | "version": "5.2.1",
2298 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2299 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
2300 | "dev": true
2301 | },
2302 | "sax": {
2303 | "version": "1.2.4",
2304 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
2305 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
2306 | "dev": true
2307 | },
2308 | "semver": {
2309 | "version": "5.7.1",
2310 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
2311 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
2312 | "dev": true
2313 | },
2314 | "side-channel": {
2315 | "version": "1.0.4",
2316 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
2317 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
2318 | "dev": true,
2319 | "requires": {
2320 | "call-bind": "^1.0.0",
2321 | "get-intrinsic": "^1.0.2",
2322 | "object-inspect": "^1.9.0"
2323 | }
2324 | },
2325 | "simple-concat": {
2326 | "version": "1.0.1",
2327 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
2328 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
2329 | "dev": true
2330 | },
2331 | "simple-get": {
2332 | "version": "4.0.1",
2333 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
2334 | "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
2335 | "dev": true,
2336 | "requires": {
2337 | "decompress-response": "^6.0.0",
2338 | "once": "^1.3.1",
2339 | "simple-concat": "^1.0.0"
2340 | }
2341 | },
2342 | "sprintf-js": {
2343 | "version": "1.0.3",
2344 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2345 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2346 | "dev": true
2347 | },
2348 | "string_decoder": {
2349 | "version": "1.3.0",
2350 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
2351 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
2352 | "dev": true,
2353 | "requires": {
2354 | "safe-buffer": "~5.2.0"
2355 | }
2356 | },
2357 | "strip-json-comments": {
2358 | "version": "2.0.1",
2359 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
2360 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
2361 | "dev": true
2362 | },
2363 | "supports-color": {
2364 | "version": "5.5.0",
2365 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2366 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2367 | "dev": true,
2368 | "requires": {
2369 | "has-flag": "^3.0.0"
2370 | }
2371 | },
2372 | "tar-fs": {
2373 | "version": "2.1.1",
2374 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
2375 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
2376 | "dev": true,
2377 | "requires": {
2378 | "chownr": "^1.1.1",
2379 | "mkdirp-classic": "^0.5.2",
2380 | "pump": "^3.0.0",
2381 | "tar-stream": "^2.1.4"
2382 | }
2383 | },
2384 | "tar-stream": {
2385 | "version": "2.2.0",
2386 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
2387 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
2388 | "dev": true,
2389 | "requires": {
2390 | "bl": "^4.0.3",
2391 | "end-of-stream": "^1.4.1",
2392 | "fs-constants": "^1.0.0",
2393 | "inherits": "^2.0.3",
2394 | "readable-stream": "^3.1.1"
2395 | }
2396 | },
2397 | "tmp": {
2398 | "version": "0.2.1",
2399 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
2400 | "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
2401 | "dev": true,
2402 | "requires": {
2403 | "rimraf": "^3.0.0"
2404 | }
2405 | },
2406 | "tslib": {
2407 | "version": "1.10.0",
2408 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
2409 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
2410 | "dev": true
2411 | },
2412 | "tslint": {
2413 | "version": "5.20.1",
2414 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz",
2415 | "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==",
2416 | "dev": true,
2417 | "requires": {
2418 | "@babel/code-frame": "^7.0.0",
2419 | "builtin-modules": "^1.1.1",
2420 | "chalk": "^2.3.0",
2421 | "commander": "^2.12.1",
2422 | "diff": "^4.0.1",
2423 | "glob": "^7.1.1",
2424 | "js-yaml": "^3.13.1",
2425 | "minimatch": "^3.0.4",
2426 | "mkdirp": "^0.5.1",
2427 | "resolve": "^1.3.2",
2428 | "semver": "^5.3.0",
2429 | "tslib": "^1.8.0",
2430 | "tsutils": "^2.29.0"
2431 | }
2432 | },
2433 | "tsutils": {
2434 | "version": "2.29.0",
2435 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
2436 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
2437 | "dev": true,
2438 | "requires": {
2439 | "tslib": "^1.8.1"
2440 | }
2441 | },
2442 | "tunnel": {
2443 | "version": "0.0.6",
2444 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
2445 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
2446 | "dev": true
2447 | },
2448 | "tunnel-agent": {
2449 | "version": "0.6.0",
2450 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
2451 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
2452 | "dev": true,
2453 | "requires": {
2454 | "safe-buffer": "^5.0.1"
2455 | }
2456 | },
2457 | "typed-rest-client": {
2458 | "version": "1.8.9",
2459 | "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
2460 | "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
2461 | "dev": true,
2462 | "requires": {
2463 | "qs": "^6.9.1",
2464 | "tunnel": "0.0.6",
2465 | "underscore": "^1.12.1"
2466 | }
2467 | },
2468 | "typescript": {
2469 | "version": "4.7.4",
2470 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
2471 | "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
2472 | "dev": true
2473 | },
2474 | "uc.micro": {
2475 | "version": "1.0.6",
2476 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
2477 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
2478 | "dev": true
2479 | },
2480 | "underscore": {
2481 | "version": "1.13.4",
2482 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz",
2483 | "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==",
2484 | "dev": true
2485 | },
2486 | "url-join": {
2487 | "version": "4.0.1",
2488 | "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
2489 | "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
2490 | "dev": true
2491 | },
2492 | "util-deprecate": {
2493 | "version": "1.0.2",
2494 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2495 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
2496 | "dev": true
2497 | },
2498 | "vsce": {
2499 | "version": "2.10.0",
2500 | "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.10.0.tgz",
2501 | "integrity": "sha512-b+wB3XMapEi368g64klSM6uylllZdNutseqbNY+tUoHYSy6g2NwnlWuAGKDQTYc0IqfDUjUFRQBpPgA89Q+Fyw==",
2502 | "dev": true,
2503 | "requires": {
2504 | "azure-devops-node-api": "^11.0.1",
2505 | "chalk": "^2.4.2",
2506 | "cheerio": "^1.0.0-rc.9",
2507 | "commander": "^6.1.0",
2508 | "glob": "^7.0.6",
2509 | "hosted-git-info": "^4.0.2",
2510 | "keytar": "^7.7.0",
2511 | "leven": "^3.1.0",
2512 | "markdown-it": "^12.3.2",
2513 | "mime": "^1.3.4",
2514 | "minimatch": "^3.0.3",
2515 | "parse-semver": "^1.1.1",
2516 | "read": "^1.0.7",
2517 | "semver": "^5.1.0",
2518 | "tmp": "^0.2.1",
2519 | "typed-rest-client": "^1.8.4",
2520 | "url-join": "^4.0.1",
2521 | "xml2js": "^0.4.23",
2522 | "yauzl": "^2.3.1",
2523 | "yazl": "^2.2.2"
2524 | },
2525 | "dependencies": {
2526 | "commander": {
2527 | "version": "6.2.1",
2528 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
2529 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
2530 | "dev": true
2531 | }
2532 | }
2533 | },
2534 | "wrappy": {
2535 | "version": "1.0.2",
2536 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2537 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2538 | "dev": true
2539 | },
2540 | "xml2js": {
2541 | "version": "0.4.23",
2542 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
2543 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
2544 | "dev": true,
2545 | "requires": {
2546 | "sax": ">=0.6.0",
2547 | "xmlbuilder": "~11.0.0"
2548 | }
2549 | },
2550 | "xmlbuilder": {
2551 | "version": "11.0.1",
2552 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
2553 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
2554 | "dev": true
2555 | },
2556 | "yallist": {
2557 | "version": "4.0.0",
2558 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
2559 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
2560 | "dev": true
2561 | },
2562 | "yauzl": {
2563 | "version": "2.10.0",
2564 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
2565 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
2566 | "dev": true,
2567 | "requires": {
2568 | "buffer-crc32": "~0.2.3",
2569 | "fd-slicer": "~1.1.0"
2570 | }
2571 | },
2572 | "yazl": {
2573 | "version": "2.5.1",
2574 | "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
2575 | "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
2576 | "dev": true,
2577 | "requires": {
2578 | "buffer-crc32": "~0.2.3"
2579 | }
2580 | }
2581 | }
2582 | }
2583 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gitdoc",
3 | "displayName": "GitDoc",
4 | "publisher": "vsls-contrib",
5 | "icon": "images/icon.png",
6 | "description": "Automatically commit/push/pull changes on save, so you can edit a Git repo like a multi-file, versioned document.",
7 | "version": "0.2.3",
8 | "extensionKind": [
9 | "workspace"
10 | ],
11 | "repository": {
12 | "type": "git",
13 | "url": "https://github.com/lostintangent/gitdoc.git"
14 | },
15 | "engines": {
16 | "vscode": "^1.90.0"
17 | },
18 | "categories": [
19 | "Other"
20 | ],
21 | "keywords": [
22 | "commit",
23 | "sync",
24 | "git",
25 | "github-copilot"
26 | ],
27 | "activationEvents": [
28 | "onStartupFinished"
29 | ],
30 | "main": "./out/extension.js",
31 | "contributes": {
32 | "commands": [
33 | {
34 | "command": "gitdoc.disable",
35 | "title": "Disable",
36 | "category": "GitDoc"
37 | },
38 | {
39 | "command": "gitdoc.enable",
40 | "title": "Enable",
41 | "category": "GitDoc"
42 | },
43 | {
44 | "command": "gitdoc.restoreVersion",
45 | "title": "Restore Version"
46 | },
47 | {
48 | "command": "gitdoc.squashVersions",
49 | "title": "Squash Version(s) Above"
50 | },
51 | {
52 | "command": "gitdoc.undoVersion",
53 | "title": "Undo Version"
54 | },
55 | {
56 | "command": "gitdoc.commit",
57 | "title": "Commit",
58 | "category": "GitDoc"
59 | }
60 | ],
61 | "configuration": {
62 | "title": "GitDoc",
63 | "properties": {
64 | "gitdoc.autoCommitDelay": {
65 | "type": "number",
66 | "default": 30000,
67 | "markdownDescription": "Controls the delay in ms after which any changes are automatically committed. Only applies when `GitDoc: Enabled` is set to `true`."
68 | },
69 | "gitdoc.autoPull": {
70 | "type": "string",
71 | "enum": [
72 | "afterDelay",
73 | "onCommit",
74 | "onPush",
75 | "off"
76 | ],
77 | "default": "onPush",
78 | "description": "Specifies whether to automatically pull changes from the current remote."
79 | },
80 | "gitdoc.autoPullDelay": {
81 | "type": "number",
82 | "default": 30000,
83 | "markdownDescription": "Controls the delay in ms after which any commits are automatically pulled. Only applies when `GitDoc: Auto Pull` is set to `afterDelay`."
84 | },
85 | "gitdoc.autoPush": {
86 | "type": "string",
87 | "enum": [
88 | "afterDelay",
89 | "onCommit",
90 | "off"
91 | ],
92 | "default": "onCommit",
93 | "description": "Specifies whether to automatically push your changes to the current remote."
94 | },
95 | "gitdoc.autoPushDelay": {
96 | "type": "number",
97 | "default": 30000,
98 | "markdownDescription": "Controls the delay in ms after which any commits are automatically pushed. Only applies when `GitDoc: Auto Push` is set to `afterDelay`."
99 | },
100 | "gitdoc.commitMessageFormat": {
101 | "type": "string",
102 | "default": "ff",
103 | "markdownDescription": "Specifies the date/time format string (using Luxon) to use when generating auto-commit messages. Views [the docs](https://moment.github.io/luxon/#/formatting?id=table-of-tokens) for more details."
104 | },
105 | "gitdoc.commitValidationLevel": {
106 | "type": "string",
107 | "enum": [
108 | "error",
109 | "warning",
110 | "none"
111 | ],
112 | "default": "error",
113 | "description": "Specifies whether to validate that a file is free of problems, before attempting to commit changes to it."
114 | },
115 | "gitdoc.commitOnClose": {
116 | "type": "boolean",
117 | "default": true,
118 | "description": "Specifies whether to automatically commit changes when you close VS Code."
119 | },
120 | "gitdoc.enabled": {
121 | "type": "boolean",
122 | "default": false,
123 | "description": "Specifies whether to automatically create a commit each time you save a file."
124 | },
125 | "gitdoc.filePattern": {
126 | "type": "string",
127 | "default": "**/*",
128 | "description": "Specifies a glob that indicates the specific files that should be automatically committed."
129 | },
130 | "gitdoc.noVerify": {
131 | "type": "boolean",
132 | "default": false,
133 | "markdownDescription": "Specifies whether to ignore any configured git hooks. Defaults to `false`."
134 | },
135 | "gitdoc.pullOnOpen": {
136 | "type": "boolean",
137 | "default": true,
138 | "description": "Specifies whether to automatically pull remote changes when you open a repo."
139 | },
140 | "gitdoc.pushMode": {
141 | "type": "string",
142 | "enum": [
143 | "forcePush",
144 | "forcePushWithLease",
145 | "push"
146 | ],
147 | "default": "forcePush",
148 | "description": "Specifies how changes should be pushed after they're committed. This setting only applies when auto-pushing is enabled."
149 | },
150 | "gitdoc.timeZone": {
151 | "type": "string",
152 | "default": null,
153 | "markdownDescription": "Specifies the timezone (as a [tz database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)) that commit message dates should be offset to. Defaults to UTC."
154 | },
155 | "gitdoc.excludeBranches": {
156 | "type": "array",
157 | "default": [],
158 | "description": "Specifies a list of branches that should be excluded from auto-commits."
159 | },
160 | "gitdoc.ai.enabled": {
161 | "type": "boolean",
162 | "default": false,
163 | "description": "Specifies whether to use AI to generate commit messages. This setting only applies when you have the Copilot extension installed and setup."
164 | },
165 | "gitdoc.ai.model": {
166 | "type": "string",
167 | "default": "gpt-4o",
168 | "enum": [
169 | "gpt-4o",
170 | "o1-ga",
171 | "o1-mini",
172 | "claude-3.5-sonnet",
173 | "gemini-1.5-pro"
174 | ],
175 | "markdownDescription": "Specifies the AI model to use when generating commit messages. This setting only applies when `GitDoc > AI: Enabled` is set to `true`. Defaults to `gpt-4o`."
176 | },
177 | "gitdoc.ai.useEmojis": {
178 | "type": "boolean",
179 | "default": false,
180 | "markdownDescription": "Specifies whether to prepend AI-generated commit messages with an emoji. This setting only applies when `GitDoc > AI: Enabled` is set to `true`. Defaults to `false`."
181 | },
182 | "gitdoc.ai.customInstructions": {
183 | "type": "string",
184 | "default": null,
185 | "markdownDescription": "Specifies custom instructions to use when generating commit messages (e.g. use conventional commit syntax, use emojis). This setting only applies when `GitDoc > AI: Enabled` is set to `true`."
186 | }
187 | }
188 | },
189 | "menus": {
190 | "commandPalette": [
191 | {
192 | "command": "gitdoc.disable",
193 | "when": "gitOpenRepositoryCount != 0 && gitdoc:enabled"
194 | },
195 | {
196 | "command": "gitdoc.enable",
197 | "when": "gitOpenRepositoryCount != 0 && !gitdoc:enabled"
198 | },
199 | {
200 | "command": "gitdoc.restoreVersion",
201 | "when": "false"
202 | },
203 | {
204 | "command": "gitdoc.squashVersions",
205 | "when": "false"
206 | },
207 | {
208 | "command": "gitdoc.undoVersion",
209 | "when": "false"
210 | },
211 | {
212 | "command": "gitdoc.commit",
213 | "when": "gitdoc:enabled"
214 | }
215 | ],
216 | "timeline/item/context": [
217 | {
218 | "command": "gitdoc.restoreVersion",
219 | "when": "gitdoc:enabled && timelineItem =~ /git:file:commit\\b/",
220 | "group": "gitdoc@1"
221 | },
222 | {
223 | "command": "gitdoc.undoVersion",
224 | "when": "gitdoc:enabled && timelineItem =~ /git:file:commit\\b/",
225 | "group": "gitdoc@2"
226 | },
227 | {
228 | "command": "gitdoc.squashVersions",
229 | "when": "gitdoc:enabled && timelineItem =~ /git:file:commit\\b/",
230 | "group": "gitdoc@3"
231 | }
232 | ]
233 | }
234 | },
235 | "scripts": {
236 | "vscode:prepublish": "npm run compile",
237 | "compile": "tsc -p ./",
238 | "watch": "tsc -watch -p ./",
239 | "package": "vsce package"
240 | },
241 | "devDependencies": {
242 | "@types/debounce": "^1.2.0",
243 | "@types/luxon": "^2.0.5",
244 | "@types/minimatch": "^3.0.3",
245 | "@types/node": "^18.6.5",
246 | "@types/vscode": "1.90.0",
247 | "tslint": "^5.8.0",
248 | "typescript": "^4.7.4",
249 | "vsce": "^2.10.0"
250 | },
251 | "dependencies": {
252 | "luxon": "^2.0.2",
253 | "minimatch": "^3.0.4",
254 | "mobx": "^5.14.2"
255 | }
256 | }
--------------------------------------------------------------------------------
/src/commands.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 | import { EXTENSION_NAME } from "./constants";
3 | import { getGitApi } from "./git";
4 | import { updateContext } from "./utils";
5 | import { commit } from "./watcher";
6 |
7 | interface GitTimelineItem {
8 | message: string;
9 | ref: string;
10 | previousRef: string;
11 | }
12 |
13 | export function registerCommands(context: vscode.ExtensionContext) {
14 | function registerCommand(name: string, callback: (...args: any[]) => any) {
15 | context.subscriptions.push(
16 | vscode.commands.registerCommand(`${EXTENSION_NAME}.${name}`, callback)
17 | );
18 | }
19 |
20 | registerCommand("enable", updateContext.bind(null, true));
21 | registerCommand("disable", updateContext.bind(null, false));
22 |
23 | registerCommand("restoreVersion", async (item: GitTimelineItem) => {
24 | if (!vscode.window.activeTextEditor) {
25 | return;
26 | }
27 |
28 | const path = vscode.workspace.asRelativePath(
29 | vscode.window.activeTextEditor.document.uri.path
30 | );
31 |
32 | const git = await getGitApi();
33 |
34 | // @ts-ignore
35 | await git?.repositories[0].repository.repository.checkout(item.ref, [
36 | path,
37 | ]);
38 |
39 | // TODO: Look into why the checkout
40 | // doesn't trigger the watcher.
41 | commit(git?.repositories[0]!);
42 | });
43 |
44 | registerCommand("squashVersions", async (item: GitTimelineItem) => {
45 | const message = await vscode.window.showInputBox({
46 | prompt: "Enter the name to give to the new squashed version",
47 | value: item.message,
48 | });
49 |
50 | if (message) {
51 | const git = await getGitApi();
52 | // @ts-ignore
53 | await git?.repositories[0].repository.reset(`${item.ref}~1`);
54 | await commit(git?.repositories[0]!, message);
55 | }
56 | });
57 |
58 | registerCommand("undoVersion", async (item: GitTimelineItem) => {
59 | const git = await getGitApi();
60 |
61 | // @ts-ignore
62 | await git?.repositories[0].repository.repository.run([
63 | "revert",
64 | "-n", // Tell Git not to create a commit, so that we can make one with the right message format
65 | item.ref,
66 | ]);
67 |
68 | await commit(git?.repositories[0]!);
69 | });
70 |
71 | registerCommand("commit", async () => {
72 | const git = await getGitApi();
73 | if (git && git.repositories.length > 0) {
74 | await commit(git.repositories[0]);
75 | }
76 | });
77 | }
78 |
--------------------------------------------------------------------------------
/src/config.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 |
3 | const DEFAULT_DELAY_MS = 30000;
4 | const ENABLED_KEY = "enabled";
5 |
6 | export type AutoPull = AutoPush | "onPush";
7 | export type AutoPush = "onCommit" | "afterDelay" | "off";
8 | export type CommitValidationLevel = "error" | "warning" | "none";
9 | export type PushMode = "forcePush" | "forcePushWithLease" | "push";
10 |
11 | function config() {
12 | return vscode.workspace.getConfiguration("gitdoc");
13 | }
14 |
15 | export default {
16 | get autoCommitDelay(): number {
17 | return config().get("autoCommitDelay", DEFAULT_DELAY_MS);
18 | },
19 | get autoPull(): AutoPull {
20 | return config().get("autoPull", "onPush");
21 | },
22 | get autoPullDelay(): number {
23 | return config().get("autoPullDelay", DEFAULT_DELAY_MS);
24 | },
25 | get autoPush(): AutoPush {
26 | return config().get("autoPush", "onCommit");
27 | },
28 | get autoPushDelay(): number {
29 | return config().get("autoPushDelay", DEFAULT_DELAY_MS);
30 | },
31 | get commitMessageFormat(): string {
32 | return config().get("commitMessageFormat", "lll");
33 | },
34 | get commitValidationLevel(): CommitValidationLevel {
35 | return config().get("commitValidationLevel", "error");
36 | },
37 | get commitOnClose() {
38 | return config().get("commitOnClose", true);
39 | },
40 | get enabled() {
41 | return config().get(ENABLED_KEY, false);
42 | },
43 | set enabled(value: boolean) {
44 | config().update(ENABLED_KEY, value, vscode.ConfigurationTarget.Workspace);
45 | },
46 | get excludeBranches(): string[] {
47 | return config().get("excludeBranches", []);
48 | },
49 | get filePattern() {
50 | return config().get("filePattern", "**/*");
51 | },
52 | get noVerify(): boolean {
53 | return config().get("noVerify", false);
54 | },
55 | get pullOnOpen() {
56 | return config().get("pullOnOpen", true);
57 | },
58 | get pushMode(): PushMode {
59 | return config().get("pushMode", "forcePush");
60 | },
61 | get timeZone(): string | null {
62 | return config().get("timeZone", null);
63 | },
64 | get aiEnabled() {
65 | return config().get("ai.enabled", false);
66 | },
67 | get aiModel() {
68 | return config().get("ai.model", "gpt-4o");
69 | },
70 | get aiCustomInstructions() {
71 | return config().get("ai.customInstructions", null);
72 | },
73 | get aiUseEmojis() {
74 | return config().get("ai.useEmojis", false);
75 | }
76 | };
77 |
--------------------------------------------------------------------------------
/src/constants.ts:
--------------------------------------------------------------------------------
1 | export const EXTENSION_NAME = "gitdoc";
2 |
--------------------------------------------------------------------------------
/src/extension.ts:
--------------------------------------------------------------------------------
1 | import { reaction } from "mobx";
2 | import * as vscode from "vscode";
3 | import { registerCommands } from "./commands";
4 | import config from "./config";
5 | import { getGitApi, GitAPI, RefType } from "./git";
6 | import { store } from "./store";
7 | import { commit, watchForChanges } from "./watcher";
8 | import { updateContext } from "./utils";
9 |
10 | export async function activate(context: vscode.ExtensionContext) {
11 | const git = await getGitApi();
12 | if (!git) {
13 | return;
14 | }
15 |
16 | // Initialize the store based on the
17 | // user/workspace configuration.
18 | store.enabled = config.enabled;
19 |
20 | registerCommands(context);
21 |
22 | // Enable/disable the auto-commit watcher as the user
23 | // opens/closes Git repos, modifies their settings
24 | // and/or manually enables it via the command palette.
25 | context.subscriptions.push(git.onDidOpenRepository(() => checkEnabled(git)));
26 | context.subscriptions.push(git.onDidCloseRepository(() => checkEnabled(git)));
27 |
28 | reaction(
29 | () => [store.enabled],
30 | () => checkEnabled(git)
31 | );
32 |
33 | context.subscriptions.push(
34 | vscode.workspace.onDidChangeConfiguration((e) => {
35 | if (e.affectsConfiguration("gitdoc.enabled") ||
36 | e.affectsConfiguration("gitdoc.excludeBranches") ||
37 | e.affectsConfiguration("gitdoc.autoCommitDelay") ||
38 | e.affectsConfiguration("gitdoc.filePattern")) {
39 | checkEnabled(git);
40 | }
41 | })
42 | );
43 | }
44 |
45 | let watcher: vscode.Disposable | null;
46 | async function checkEnabled(git: GitAPI) {
47 | if (watcher) {
48 | watcher.dispose();
49 | watcher = null;
50 | }
51 |
52 | let branchName = git.repositories[0]?.state?.HEAD?.name;
53 |
54 | if (!branchName) {
55 | const refs = await git.repositories[0]?.getRefs();
56 | branchName = refs?.find((ref) => ref.type === RefType.Head)?.name;
57 | }
58 |
59 | const enabled =
60 | git.repositories.length > 0 &&
61 | store.enabled && !!branchName && !config.excludeBranches.includes(branchName);
62 |
63 | updateContext(enabled, false);
64 |
65 | if (enabled) {
66 | watcher = watchForChanges(git);
67 | }
68 | }
69 |
70 | export async function deactivate() {
71 | if (store.enabled && config.commitOnClose) {
72 | const git = await getGitApi();
73 | if (git && git.repositories.length > 0) {
74 | return commit(git.repositories[0]);
75 | }
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/src/git.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 |
3 | interface CommitOptions {
4 | all?: boolean | "tracked";
5 | noVerify?: boolean;
6 | }
7 |
8 | export const enum RefType {
9 | Head,
10 | RemoteHead,
11 | Tag
12 | }
13 |
14 | interface Branch {
15 | readonly name: string;
16 | type: RefType;
17 | }
18 |
19 | interface RepositoryState {
20 | HEAD: Branch | undefined | null;
21 | refs: Branch[];
22 | workingTreeChanges: Change[];
23 | indexChanges: Change[];
24 | mergeChanges: Change[];
25 | onDidChange: vscode.Event;
26 | }
27 |
28 | export interface Change {
29 | readonly uri: vscode.Uri;
30 | }
31 |
32 | export enum ForcePushMode {
33 | Force,
34 | ForceWithLease,
35 | }
36 |
37 | export interface Repository {
38 | state: RepositoryState;
39 |
40 | createBranch(name: string, checkout: boolean, ref?: string): Promise;
41 | deleteBranch(name: string, force?: boolean): Promise;
42 |
43 | checkout(treeish: string): Promise;
44 |
45 | pull(unshallow?: boolean): Promise;
46 |
47 | push(
48 | remoteName?: string,
49 | branchName?: string,
50 | setUpstream?: boolean,
51 | forcePush?: ForcePushMode
52 | ): Promise;
53 |
54 | commit(message: string, opts?: CommitOptions): Promise;
55 |
56 | getRefs(): Promise;
57 |
58 | diffWithHEAD(path: string): Promise;
59 | }
60 |
61 | export interface GitAPI {
62 | repositories: Repository[];
63 |
64 | getRepository(uri: vscode.Uri): Repository | null;
65 | onDidOpenRepository: vscode.Event;
66 | onDidCloseRepository: vscode.Event;
67 | }
68 |
69 | export async function getGitApi(): Promise {
70 | const extension = vscode.extensions.getExtension("vscode.git");
71 | if (!extension) {
72 | return;
73 | }
74 |
75 | if (!extension.isActive) {
76 | await extension.activate();
77 | }
78 |
79 | return extension.exports.getAPI(1);
80 | }
81 |
--------------------------------------------------------------------------------
/src/store.ts:
--------------------------------------------------------------------------------
1 | import { observable } from "mobx";
2 |
3 | export const store = observable({
4 | enabled: false,
5 | isPulling: false,
6 | isPushing: false,
7 | });
8 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 | import config from "./config";
3 | import { EXTENSION_NAME } from "./constants";
4 | import { store } from "./store";
5 |
6 | const ENABLED_KEY = `${EXTENSION_NAME}:enabled`;
7 |
8 | export function updateContext(enabled: boolean, updateConfig: boolean = true) {
9 | store.enabled = enabled;
10 | vscode.commands.executeCommand("setContext", ENABLED_KEY, enabled);
11 |
12 | if (updateConfig) {
13 | config.enabled = enabled;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/watcher.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 | import config from "./config";
3 | import { ForcePushMode, GitAPI, Repository, RefType } from "./git";
4 | import { DateTime } from "luxon";
5 | import { store } from "./store";
6 | import { reaction } from "mobx";
7 | import * as minimatch from "minimatch";
8 |
9 | const REMOTE_NAME = "origin";
10 |
11 | async function pushRepository(
12 | repository: Repository,
13 | forcePush: boolean = false
14 | ) {
15 | if (!(await hasRemotes(repository))) return;
16 |
17 | store.isPushing = true;
18 |
19 | try {
20 | if (config.autoPull === "onPush") {
21 | await pullRepository(repository);
22 | }
23 |
24 | const pushArgs: any[] = [REMOTE_NAME, repository.state.HEAD?.name, false];
25 |
26 | if (forcePush) {
27 | pushArgs.push(ForcePushMode.Force);
28 | } else if (config.pushMode !== "push") {
29 | const pushMode =
30 | config.pushMode === "forcePush"
31 | ? ForcePushMode.Force
32 | : ForcePushMode.ForceWithLease;
33 |
34 | pushArgs.push(pushMode);
35 | }
36 |
37 | await repository.push(...pushArgs);
38 |
39 | store.isPushing = false;
40 | } catch {
41 | store.isPushing = false;
42 |
43 | if (
44 | await vscode.window.showWarningMessage(
45 | "Remote repository contains conflicting changes.",
46 | "Force Push"
47 | )
48 | ) {
49 | await pushRepository(repository, true);
50 | }
51 | }
52 | }
53 |
54 | async function pullRepository(repository: Repository) {
55 | if (!(await hasRemotes(repository))) return;
56 |
57 | store.isPulling = true;
58 |
59 | await repository.pull();
60 |
61 | store.isPulling = false;
62 | }
63 |
64 | async function hasRemotes(repository: Repository): Promise {
65 | const refs = await repository.getRefs();
66 | return refs.some((ref) => ref.type === RefType.RemoteHead);
67 | }
68 |
69 | function matches(uri: vscode.Uri) {
70 | return minimatch(uri.path, config.filePattern, { dot: true });
71 | }
72 |
73 | async function generateCommitMessage(repository: Repository, changedUris: vscode.Uri[]): Promise {
74 | const diffs = await Promise.all(
75 | changedUris.map(async (uri) => {
76 | const filePath = vscode.workspace.asRelativePath(uri);
77 | const fileDiff = await repository.diffWithHEAD(filePath);
78 |
79 | return `## ${filePath}
80 | ---
81 | ${fileDiff}`;
82 | }));
83 |
84 | const model = await vscode.lm.selectChatModels({ family: config.aiModel });
85 | if (!model || model.length === 0) return null;
86 |
87 | const prompt = `# Instructions
88 |
89 | You are a developer working on a project that uses Git for version control. You have made some changes to the codebase and are preparing to commit them to the repository. Your task is to summarize the changes that you have made into a concise commit message that describes the essence of the changes that were made.
90 |
91 | * Always start the commit message with a present tense verb such as "Update", "Fix", "Modify", "Add", "Improve", "Organize", "Arrange", "Mark", etc.
92 | * Respond in plain text, with no markdown formatting, and without any extra content. Simply respond with the commit message, and without a trailing period.
93 | * Don't reference the file paths that were changed, but make sure summarize all significant changes (using your best judgement).
94 | * When multiple files have been changed, give priority to edited files, followed by added files, and then renamed/deleted files.
95 | * When a change includes adding an emoji to a list item in markdown, then interpret a runner emoji as marking it as in progress, a checkmark emoji as meaning its completed, and a muscle emoji as meaning its a stretch goal.
96 | ${config.aiUseEmojis ? "* Prepend an emoji to the message that expresses the nature of the changes, and is as specific/relevant to the subject and/or action of the changes as possible.\n" : ""}
97 | # Code change diffs
98 |
99 | ${diffs.join("\n\n")}
100 |
101 | ${config.aiCustomInstructions ? `# Additional Instructions (Important!)
102 |
103 | ${config.aiCustomInstructions}
104 | ` : ""}
105 | # Commit message
106 |
107 | `;
108 |
109 | const response = await model[0].sendRequest([{
110 | role: vscode.LanguageModelChatMessageRole.User,
111 | name: "User",
112 | content: prompt
113 | }]);
114 |
115 | let summary = "";
116 | for await (const part of response.text) {
117 | summary += part;
118 | }
119 |
120 | return summary;
121 | }
122 |
123 | export async function commit(repository: Repository, message?: string) {
124 | // This function shouldn't ever be called when GitDoc
125 | // is disabled, but we're checking it just in case.
126 | if (store.enabled === false) return;
127 |
128 | const changes = [
129 | ...repository.state.workingTreeChanges,
130 | ...repository.state.mergeChanges,
131 | ...repository.state.indexChanges,
132 | ];
133 |
134 | if (changes.length === 0) return;
135 |
136 | const changedUris = changes
137 | .filter((change) => matches(change.uri))
138 | .map((change) => change.uri);
139 |
140 | if (changedUris.length === 0) return;
141 |
142 | if (config.commitValidationLevel !== "none") {
143 | const diagnostics = vscode.languages
144 | .getDiagnostics()
145 | .filter(([uri, diagnostics]) => {
146 | const isChanged = changedUris.find(
147 | (changedUri) =>
148 | changedUri.toString().localeCompare(uri.toString()) === 0
149 | );
150 |
151 | return isChanged
152 | ? diagnostics.some(
153 | (diagnostic) =>
154 | diagnostic.severity === vscode.DiagnosticSeverity.Error ||
155 | (config.commitValidationLevel === "warning" &&
156 | diagnostic.severity === vscode.DiagnosticSeverity.Warning)
157 | )
158 | : false;
159 | });
160 |
161 | if (diagnostics.length > 0) {
162 | return;
163 | }
164 | }
165 |
166 | let currentTime = DateTime.now();
167 |
168 | // Ensure that the commit dates are formatted
169 | // as UTC, so that other clients can properly
170 | // re-offset them based on the user's locale.
171 | const commitDate = currentTime.toUTC().toString();
172 | process.env.GIT_AUTHOR_DATE = commitDate;
173 | process.env.GIT_COMMITTER_DATE = commitDate;
174 |
175 | if (config.timeZone) {
176 | currentTime = currentTime.setZone(config.timeZone);
177 | }
178 |
179 | let commitMessage = message || currentTime.toFormat(config.commitMessageFormat);
180 |
181 | if (config.aiEnabled) {
182 | const aiMessage = await generateCommitMessage(repository, changedUris);
183 | if (aiMessage) {
184 | commitMessage = aiMessage;
185 | }
186 | }
187 |
188 | await repository.commit(commitMessage, { all: true, noVerify: config.noVerify });
189 |
190 | delete process.env.GIT_AUTHOR_DATE;
191 | delete process.env.GIT_COMMITTER_DATE;
192 |
193 | if (config.autoPush === "onCommit") {
194 | await pushRepository(repository);
195 | }
196 |
197 | if (config.autoPull === "onCommit") {
198 | await pullRepository(repository);
199 | }
200 | }
201 |
202 | // TODO: Clear the timeout when GitDoc is disabled.
203 | function debounce(fn: Function, delay: number) {
204 | let timeout: NodeJS.Timeout | null = null;
205 |
206 | return (...args: any[]) => {
207 | if (timeout) {
208 | clearTimeout(timeout);
209 | }
210 |
211 | timeout = setTimeout(() => {
212 | fn(...args);
213 | }, delay);
214 | };
215 | }
216 |
217 | const commitMap = new Map();
218 | function debouncedCommit(repository: Repository) {
219 | if (!commitMap.has(repository)) {
220 | commitMap.set(
221 | repository,
222 | debounce(() => commit(repository), config.autoCommitDelay)
223 | );
224 | }
225 |
226 | return commitMap.get(repository);
227 | }
228 |
229 | let statusBarItem: vscode.StatusBarItem | null = null;
230 | export function ensureStatusBarItem() {
231 | if (!statusBarItem) {
232 | statusBarItem = vscode.window.createStatusBarItem(
233 | vscode.StatusBarAlignment.Left
234 | );
235 |
236 | statusBarItem.text = "$(mirror)";
237 | statusBarItem.tooltip = "GitDoc: Auto-commiting files on save";
238 | statusBarItem.command = "gitdoc.disable";
239 | statusBarItem.show();
240 | }
241 |
242 | return statusBarItem;
243 | }
244 |
245 | let disposables: vscode.Disposable[] = [];
246 | export function watchForChanges(git: GitAPI): vscode.Disposable {
247 | const commitAfterDelay = debouncedCommit(git.repositories[0]);
248 | disposables.push(git.repositories[0].state.onDidChange(commitAfterDelay));
249 |
250 | ensureStatusBarItem();
251 |
252 | disposables.push(
253 | vscode.window.onDidChangeActiveTextEditor((editor) => {
254 | if (editor && matches(editor.document.uri)) {
255 | statusBarItem?.show();
256 | } else {
257 | statusBarItem?.hide();
258 | }
259 | })
260 | );
261 |
262 | if (
263 | vscode.window.activeTextEditor &&
264 | matches(vscode.window.activeTextEditor.document.uri)
265 | ) {
266 | statusBarItem?.show();
267 | } else {
268 | statusBarItem?.hide();
269 | }
270 |
271 | disposables.push({
272 | dispose: () => {
273 | statusBarItem?.dispose();
274 | statusBarItem = null;
275 | },
276 | });
277 |
278 | if (config.autoPush === "afterDelay") {
279 | const interval = setInterval(async () => {
280 | pushRepository(git.repositories[0]);
281 | }, config.autoPushDelay);
282 |
283 | disposables.push({
284 | dispose: () => {
285 | clearInterval(interval);
286 | },
287 | });
288 | }
289 |
290 | if (config.autoPull === "afterDelay") {
291 | const interval = setInterval(
292 | async () => pullRepository(git.repositories[0]),
293 | config.autoPullDelay
294 | );
295 |
296 | disposables.push({
297 | dispose: () => clearInterval(interval),
298 | });
299 | }
300 |
301 | const reactionDisposable = reaction(
302 | () => [store.isPushing, store.isPulling],
303 | () => {
304 | const suffix = store.isPushing
305 | ? " (Pushing...)"
306 | : store.isPulling
307 | ? " (Pulling...)"
308 | : "";
309 | statusBarItem!.text = `$(mirror)${suffix}`;
310 | }
311 | );
312 |
313 | disposables.push({
314 | dispose: reactionDisposable,
315 | });
316 |
317 | if (config.pullOnOpen) {
318 | pullRepository(git.repositories[0]);
319 | }
320 |
321 | return {
322 | dispose: () => {
323 | disposables.forEach((disposable) => disposable.dispose());
324 | disposables = [];
325 | },
326 | };
327 | }
328 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "target": "es6",
5 | "outDir": "out",
6 | "lib": [
7 | "es6"
8 | ],
9 | "sourceMap": true,
10 | "rootDir": "src",
11 | /* Strict Type-Checking Option */
12 | "strict": true, /* enable all strict type-checking options */
13 | /* Additional Checks */
14 | "noUnusedLocals": true /* Report errors on unused locals. */
15 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
16 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
17 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
18 | },
19 | "exclude": [
20 | "node_modules",
21 | ".vscode-test"
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------