├── .eslintrc.json
├── .github
├── FUNDING.yml
└── workflows
│ ├── main.yml
│ └── pullrequest.yml
├── .gitignore
├── .vscode
├── extensions.json
├── launch.json
├── settings.json
└── tasks.json
├── .vscodeignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── images
├── FormatSelection.png
├── Minimize.gif
├── Prettify.gif
├── after.png
├── before.png
├── logo.png
├── old_logo.png
├── screenshot.png
└── settings.png
├── lib
├── XmlFormatter.CommandLine.deps.json
├── XmlFormatter.CommandLine.dll
├── XmlFormatter.CommandLine.exe
├── XmlFormatter.CommandLine.pdb
├── XmlFormatter.CommandLine.runtimeconfig.json
├── XmlFormatter.dll
└── XmlFormatter.pdb
├── package.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── src
├── documentFilter.ts
├── documentHelper.ts
├── extension.ts
├── formatter.ts
├── formattingActionKind.ts
├── helper.ts
├── jsonInputDto.ts
├── logger.ts
├── notificationService.ts
├── prettyXmlFormattingEditProvider.ts
├── rangeFormatterProvider.ts
├── regexFormatter.ts
├── settings.ts
├── test
│ └── runTest.ts
└── updateNote.ts
├── tsconfig.json
└── webpack.config.js
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "root": true,
3 | "parser": "@typescript-eslint/parser",
4 | "parserOptions": {
5 | "ecmaVersion": 6,
6 | "sourceType": "module"
7 | },
8 | "plugins": [
9 | "@typescript-eslint"
10 | ],
11 | "rules": {
12 | "@typescript-eslint/naming-convention": "warn",
13 | "@typescript-eslint/semi": "warn",
14 | "curly": "warn",
15 | "eqeqeq": "warn",
16 | "no-throw-literal": "warn",
17 | "semi": "off"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: prateekmahendrakar
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: prateek
10 | issuehunt: # Replace with a single IssueHunt username
11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
12 | polar: # Replace with a single Polar username
13 | buy_me_a_coffee: pmahend1
14 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
15 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: Deploy CI
2 |
3 | on:
4 | workflow_dispatch:
5 | inputs:
6 | shouldPublishToVSMarketPlace:
7 | description: "Publish to Visual Studio MarketPlace?"
8 | type: boolean
9 | default: true
10 | shouldPublishToOpenVsx:
11 | description: "Publish to Open-VSX?"
12 | type: boolean
13 | default: true
14 |
15 | jobs:
16 | deploy:
17 | runs-on: windows-latest
18 | steps:
19 | - name: Checkout
20 | uses: actions/checkout@v4.2.2
21 |
22 | - name: Setup Node.js environment
23 | uses: actions/setup-node@v4.3.0
24 | with:
25 | node-version: 22
26 |
27 | - name: Setup pnpm
28 | uses: pnpm/action-setup@v4
29 | with:
30 | version: 10
31 | run_install: true
32 |
33 | - name: Install vsce and open vsx
34 | run: |
35 | pnpm add -g @vscode/vsce
36 | pnpm add -g ovsx
37 |
38 | - name: Pack vsix
39 | id: pack
40 | run: |
41 | vsce pack --no-dependencies
42 | $VsixName = Get-ChildItem -Filter *.vsix | Select-Object -First 1 -ExpandProperty Name
43 | Write-Host "`$VsixName = $VsixName"
44 | "VSIX_FILENAME=$VsixName" >> $env:GITHUB_OUTPUT
45 |
46 | - name: VSCE Publish
47 | if: ${{ inputs.shouldPublishToVSMarketPlace }}
48 | run: |
49 | Write-Host "Running vsce publish --packagePath ${{ steps.pack.outputs.VSIX_FILENAME }} --pat `$env:VSCE_PAT"
50 | vsce publish --packagePath ${{ steps.pack.outputs.VSIX_FILENAME }} --pat $env:VSCE_PAT
51 | env:
52 | VSCE_PAT: ${{ secrets.VSCE_PRETTYXML }}
53 |
54 | - name: Open VSX Publish
55 | if: ${{ inputs.shouldPublishToOpenVsx }}
56 | run: |
57 | Write-Host "Running npx ovsx publish --packagePath ${{ steps.pack.outputs.VSIX_FILENAME }} --pat `$env:OPEN_VSX_PAT"
58 | npx ovsx publish --packagePath ${{ steps.pack.outputs.VSIX_FILENAME }} --pat $env:OPEN_VSX_PAT
59 | env:
60 | OPEN_VSX_PAT: ${{ secrets.OPENVSX }}
--------------------------------------------------------------------------------
/.github/workflows/pullrequest.yml:
--------------------------------------------------------------------------------
1 | name: Version Check
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - main
7 | workflow_dispatch:
8 |
9 | jobs:
10 | versioncheck:
11 | runs-on: windows-latest
12 | steps:
13 | - name: Checkout branch
14 | uses: actions/checkout@v4.2.2
15 |
16 | - name: "Get changed files"
17 | id: getChangedFiles
18 | uses: jitterbit/get-changed-files@v1
19 | with:
20 | format: "json"
21 |
22 | - name: "Verify ChangeLog.md and package.json files have changes"
23 | shell: pwsh
24 | run: |
25 | $fileFilters=@('package.json', 'CHANGELOG*')
26 | $changesJson='${{ steps.getChangedFiles.outputs.all }}'
27 | $changes=ConvertFrom-Json -InputObject $changesJson
28 | foreach ($filter in $fileFilters) {
29 | if ($changes -match $filter){
30 | Write-Host "$filter file is modified."
31 | } else {
32 | throw [System.Exception]("Files with filter $filter are not modified. ❌")
33 | }
34 | }
35 | Write-Host "Pass ✅"
36 |
37 | - name: Get current version from package.json
38 | id: getpackageversion
39 | shell: pwsh
40 | run: |
41 | $package = Get-Content .\package.json | ConvertFrom-Json
42 | $version = $package.version
43 | Write-Host 'Current version from package.json: ' $version
44 | "VERSION=$version" >> $env:GITHUB_OUTPUT
45 |
46 | - name: Get published version from VS Code extension REST API
47 | id: getPublishedVersion
48 | shell: pwsh
49 | run: |
50 | $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
51 | $headers.Add("VSMarketplaceBadge", "1.0")
52 | $headers.Add("Accept", "application/json;api-version=3.0-preview.1")
53 | $headers.Add("Content-Type", "application/json")
54 | $body = "{`"filters`":[{`"criteria`":[{`"filterType`":7,`"value`":`"PrateekMahendrakar.PrettyXML`"},{`"filterType`":12,`"value`":4096}]}],`"flags`":914}"
55 | $response = Invoke-RestMethod 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery' -Method Post -Headers $headers -Body $body
56 | $publishedVersion= ($response.results[0].extensions.versions.version).ToString()
57 | Write-Host 'Last Published version: '$publishedVersion
58 | "PUB_VERSION=$publishedVersion" >> $env:GITHUB_OUTPUT
59 |
60 | - name: Compare local version with marketplace version
61 | id: compare
62 | shell: pwsh
63 | run: |
64 | $localVersion = [System.Version]('${{ steps.getpackageversion.outputs.VERSION }}')
65 | $storeVersion = [System.Version]('${{ steps.getPublishedVersion.outputs.PUB_VERSION }}')
66 |
67 | if ($localVersion -gt $storeVersion) {
68 | Write-Host "Version in package.json is higher than latest published version"
69 | Write-Host "Pass"
70 | }
71 | else {
72 | throw [System.Exception]("Version can not be same as latest published version ❌! Update package version.")
73 | }
74 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/*
2 | out
3 | .vscode-test/
4 | *.vsix
5 | *.DS_Store
6 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // See http://go.microsoft.com/fwlink/?LinkId=827846
3 | // for the documentation about the extensions.json format
4 | "recommendations": [
5 | "dbaeumer.vscode-eslint",
6 | "connor4312.esbuild-problem-matchers"
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | // A launch configuration that compiles the extension and then opens it inside a new window
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | {
6 | "version": "0.2.0",
7 | "configurations": [
8 | {
9 | "name": "Run Extension",
10 | "type": "extensionHost",
11 | "request": "launch",
12 | "runtimeExecutable": "${execPath}",
13 | "args": [
14 | "--extensionDevelopmentPath=${workspaceFolder}"
15 | ],
16 | "outFiles": [
17 | "${workspaceFolder}/out/**/*.js"
18 | ],
19 | "preLaunchTask": "${defaultBuildTask}"
20 | },
21 | {
22 | "name": "Extension Tests",
23 | "type": "extensionHost",
24 | "request": "launch",
25 | "runtimeExecutable": "${execPath}",
26 | "args": [
27 | "--extensionDevelopmentPath=${workspaceFolder}",
28 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
29 | ],
30 | "outFiles": [
31 | "${workspaceFolder}/out/test/**/*.js"
32 | ],
33 | "preLaunchTask": "${defaultBuildTask}"
34 | }
35 | ]
36 | }
37 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | // Place your settings in this file to overwrite default and user settings.
2 | {
3 | "files.exclude": {
4 | "out": false // set this to true to hide the "out" folder with the compiled JS files
5 | },
6 | "search.exclude": {
7 | "out": true // set this to false to include "out" folder in search results
8 | },
9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts
10 | "typescript.tsc.autoDetect": "off"
11 | }
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | // See https://go.microsoft.com/fwlink/?LinkId=733558
2 | // for the documentation about the tasks.json format
3 | {
4 | "version": "2.0.0",
5 | "tasks": [
6 | {
7 | "type": "npm",
8 | "script": "watch",
9 | "problemMatcher": "$ts-checker-webpack-watch",//amodio.tsl-problem-matcher
10 | "isBackground": true,
11 | "label": "npm: watch",
12 | "presentation": {
13 | "reveal": "silent",
14 | "showReuseMessage": true,
15 | "panel": "dedicated"
16 | },
17 | "group": {
18 | "kind": "build",
19 | "isDefault": true
20 | }
21 | }
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/.vscodeignore:
--------------------------------------------------------------------------------
1 | .vscode/**
2 | .vscode-test/**
3 | out/test/**
4 | src/**
5 | .gitignore
6 | vsc-extension-quickstart.md
7 | **/tsconfig.json
8 | **/tslint.json
9 | **/.eslintrc.json
10 | **/*.map
11 | **/*.ts
12 | node_modules
13 | webpack.config.js
14 | *.yml
15 | .github/**
16 | images/old_logo.png
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | ## Stable
4 |
5 | ## 6.1.0: 21-May-2025
6 |
7 | - Fixed processing instruction not formatting correctly.
8 | - Package updates.
9 | - Added sponsor link.
10 |
11 | ## 6.0.0: 10-Apr-2025
12 |
13 | - Added format selection feature - **Beta**.
14 | 
15 | - Package updates.
16 |
17 | ## 5.3.0: 20-Feb-2025
18 |
19 | - Added feature [Add empty line between elements if elements count is greater than 2](https://github.com/pmahend1/PrettyXML/issues/172)
20 | - Package updates to latest.
21 |
22 | ## 5.2.0: 26-Dec-2024
23 |
24 | - Added feature [Allow the user to specify which elements have attributes on separate lines](https://github.com/pmahend1/PrettyXML/issues/162)
25 | - Package updates to latest.
26 |
27 | ## 5.1.0: 29-Nov-2024
28 |
29 | - Fixes [Formatting doesn't seem to work when using with .xaml files.](https://github.com/pmahend1/PrettyXML/issues/167)
30 | - Yarn upgrades to latest.
31 |
32 | ## 5.0.3: 01-Sep-2024
33 |
34 | - Yarn upgrades.
35 | - Fixes [Regular Expression Denial of Service (ReDoS) in micromatch](https://nvd.nist.gov/vuln/detail/CVE-2024-4067)
36 |
37 | ## 5.0.1/5.0.2: 18-Jun-2024
38 |
39 | - Yarn upgrades.
40 | - Fixes [braces vulnerability](https://github.com/advisories/GHSA-grv7-fg5c-xmjg)
41 |
42 | ## 5.0.0: 11-May-2024
43 |
44 | - Updated Dotnet dependency to version 8.
45 |
46 | ## 4.5.1: 16-Apr-2024
47 |
48 | - Yarn upgrades.
49 | - Fixed shield.io badges for open-vsx.
50 |
51 | ## 4.5.0: 5-Apr-2024
52 |
53 | - Yarn upgrades.
54 | - Added funding info on repository.
55 |
56 | ## 4.4.1: 25-Feb-2024
57 |
58 | - **Attributes In Newline Threshold** setting information added.
59 |
60 | ## 4.4.0: 25-Feb-2024
61 |
62 | - **Attributes In Newline Threshold** setting added.
63 |
64 | ## 4.3.0: 23-Feb-2024
65 |
66 | - Fixed some CDATA and text formatting.
67 | - Yarn upgrades.
68 |
69 | ### 4.2.0: 04-Feb-2024
70 |
71 | - Added setting `addSpaceBeforeEndOfXmlDeclaration`
72 |
73 | ### 4.1.3: 03-Feb-2024
74 |
75 | - Fix for [#141: Some comments are lost after format](https://github.com/pmahend1/PrettyXML/issues/141).
76 |
77 | ### 4.1.2: 03-Feb-2024
78 |
79 | - Fixes [#139: "Position All Attributes On First Line" not work](https://github.com/pmahend1/PrettyXML/issues/139)
80 |
81 | ### 4.1.1: 01-Feb-2024
82 |
83 | - Fixes [#137: Apple Plist/MobileConfig files create error after first format](https://github.com/pmahend1/PrettyXML/issues/137).
84 | - Yarn upgrades.
85 |
86 | ### 4.1.0: 31-Jan-2024
87 |
88 | - Added [`AXAML`](https://docs.avaloniaui.net/docs/basics/user-interface/introduction-to-xaml) support for Avalonia.
89 |
90 | ### 4.0.0: 31-Jan-2024
91 |
92 | - Removed Newtonsoft.Json dependency.
93 | - Yarn upgrades.
94 | - Fixed an issue where errors where not shown to users.
95 |
96 | ### 3.8.0: 21-Dec-2023
97 |
98 | - Yarn upgrades
99 | - Added option to unescape `>` character in attribute values.
100 |
101 | ### 3.7.0: 10-Nov-2023
102 |
103 | - Yarn upgrades.
104 | - Review prompt won't show for the very first time.
105 |
106 | ### 3.6.0: 20-Sep-2023
107 |
108 | - Yarn upgrades.
109 |
110 | ### 3.5.0: 30-Jul-2023
111 |
112 | - Yarn upgrades.
113 | - Updated ReadMe to reflect latest settings.
114 |
115 | ### 3.4.0: 11-Jul-2023
116 |
117 | - Added setting to preserve whitespaces in comments.
118 | - Yarn upgrades.
119 |
120 | ### 3.3.0: 18-May-2023
121 |
122 | - Implemented optional logger.
123 | - Yarn upgrades.
124 |
125 | ### 3.2.0: 18-Apr-2023
126 |
127 | - Yarn upgrades.
128 |
129 | ### 3.1.0: 15-Mar-2023
130 |
131 | - Yarn upgrades.
132 |
133 | ### 3.0.1: 19-Dec-2022
134 |
135 | - Updated Settings screenshot.
136 | - Fixed shields.io badges.
137 | - YARN upgrades.
138 | - pullrequest.yml checks if changelog and package.json have changed.
139 |
140 | ### 3.0.0: 19-Oct-2022
141 |
142 | - Added Setting [**Position All Attributes On First Line**](https://github.com/pmahend1/PrettyXML/issues/104).
143 | - Removed [deprecated `set-output`](https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/) from GitHub actions.
144 |
145 | ### 2.4.0: 16-Oct-2022
146 |
147 | - Added ESBuild.
148 | - Yarn upgrades.
149 |
150 | ### 2.3.0: 20-Sep-2022
151 |
152 | - Yarn upgrades.
153 |
154 | ### 2.2.0: 07-Aug-2022
155 |
156 | - Yarn upgrades.
157 |
158 | ### 2.1.0: 13-Jul-2022
159 |
160 | - Yarn upgrades.
161 |
162 | ### 2.0.1: 20-Jun-2022
163 |
164 | - Updated ReadMe badges.
165 | - Yarn upgrades.
166 |
167 | ### 2.0.0 : 17-Jun-2022
168 |
169 | - Dependency updated to .Net 6
170 | - Position First Attribute On Same Line setting added. Default is `True`.
171 | `False` keeps all attributes on new lines.
172 | - Some notification service clean up.
173 |
174 | ### 1.6.1: 18-Apr-2022
175 |
176 | - Added `Don't show again` for review extension prompt since some people got annoyed being asked once in 15-30 days.
177 |
178 | ### 1.6.0: 18-Apr-2022
179 |
180 | - Removed Electron-Edge-JS dependency.
181 | - Added missing SVG support.
182 |
183 | ### 1.5.3: 04-Apr-2022
184 |
185 | - Module did not self-register error work-around added for electron-edge-js.
186 |
187 | ### 1.5.2: 01-Apr-2022
188 |
189 | - Fixed bug with Electron-Edge-JS module.
190 |
191 | ### 1.5.1: 27-Mar-2022
192 |
193 | - Fixed bug in release notes URL.
194 |
195 | ### 1.5.0: 27-Mar-2022
196 |
197 | - Yarn security upgrades.
198 |
199 | ### 1.4.0: 29-Jan-2022
200 |
201 | - Yarn security upgrades.
202 |
203 | ### 1.3.4: 27-Dec-2021
204 |
205 | - Fix for infinite formatting progress on errored XML file. [#88](https://github.com/pmahend1/PrettyXML/issues/88)
206 |
207 | ### 1.3.3: 23-Dec-2021
208 |
209 | - Missing release notes not displaying bugfix.
210 |
211 | ### 1.3.2: 23-Dec-2021
212 |
213 | - Missing release notes text added.
214 |
215 | ### 1.3.1: 22-Dec-2021
216 |
217 | - Fixed a bug where release notes information pop up isn't displaying.
218 |
219 | ### 1.3.0: 19-Dec-2021
220 |
221 | - Added review prompt
222 | - Fixed issue with what's new dialog logic.
223 | - Yarn upgrades.
224 |
225 | ### 1.2.1: 6-Dec-2021
226 |
227 | - Yarn upgrades.
228 |
229 | ### 1.2.0: 3-Oct-2021
230 |
231 | - New logo added.
232 |
233 | ### 1.1.2 : 3-Oct-2021
234 |
235 | - Fixed a bug where progress bar was not dismissing if there was a formatting error.
236 |
237 | ### 1.1.0 : 18-Sep-2021
238 |
239 | - Linux support added
240 | - Command line mode added internally as back-up in case electron-edge-js binary issue for NodeJs version.
241 |
242 | ### 1.0.2 : 12-Sep-2021
243 |
244 | - Fixed _on save_ which was running after the document save.
245 |
246 | ### 1.0.1 : 10-Sep-2021
247 |
248 | - Fixed a bug where _on save_ was triggering formatting command for non-xml documents .
249 |
250 | ### 1.0.0 : 9-Sep-2021
251 |
252 | - Document formatting provider added.🆕
253 |
254 | ## Preview
255 |
256 | ### 0.11.0 : 8-Aug-2021
257 |
258 | - Electron 13.1.7 specific build.
259 |
260 | ### 0.10.0 : 31-Jul-2021
261 |
262 | - Added setting `prettyxml.settings.allowWhiteSpaceUnicodesInAttributeValues`
263 | - Updated **Readme.md**.
264 |
265 | ### 0.9.0 : 30-Jul-2021
266 |
267 | - Added settings :
268 | - `prettyxml.settings.allowSingleQuoteInAttributeValue`
269 | - `prettyxml.settings.addSpaceBeforeSelfClosingTag`
270 | - `prettyxml.settings.wrapCommentTextWithSpaces`
271 | - Updated **Readme.md**.
272 |
273 | ### 0.8.1
274 |
275 | - Fix for [#66:The edge module has not been pre-compiled for node.js version v14.16.0](https://github.com/pmahend1/PrettyXML/issues/66)
276 |
277 | ### 0.7.3
278 |
279 | - Yarn security updates
280 |
281 | ### 0.7.2
282 |
283 | - Fixed XML value escape issue [#61: "&" in attributes are reformatted as "&"](https://github.com/pmahend1/PrettyXML/issues/61)
284 |
285 | ### 0.7.1
286 |
287 | - Electron-edge-js updated for NodeJs 12.18.3/Electron 11.2.1
288 | - Fixes [Issue#55: The edge module has not been pre-compiled for node.js version v12.18.3](https://github.com/pmahend1/PrettyXML/issues/55)
289 |
290 | ### 0.6.0
291 |
292 | - New Feature **Format On Save** added.
293 |
294 | ### 0.5.4
295 |
296 | - Yarn upgrade.
297 | - Updated banner color and theme.
298 |
299 | ### 0.5.3
300 |
301 | Typo fix in CI.
302 |
303 | ### 0.5.2
304 |
305 | Updated ReadMe with VSCodium and OpenVsx.
306 |
307 | ### 0.5.1
308 |
309 | Small fix to CI.
310 |
311 | ### 0.5.0
312 |
313 | Publish extension to [Open VSX](https://open-vsx.org/extension/PrateekMahendrakar/prettyxml) for [VSCodium](https://vscodium.com/) as well.
314 |
315 | ### 0.4.4
316 |
317 | Added reference to [PrettyXML.VSMac](https://github.com/pmahend1/PrettyXML.VSMac) in ReadMe.
318 |
319 | ### 0.4.3
320 |
321 | Fixes [Issue 39](https://github.com/pmahend1/PrettyXML/issues/39)
322 |
323 | ### 0.4.2
324 |
325 | Added CIs for PR version check and extension deployment.
326 |
327 | ### 0.3.0
328 |
329 | Added **PrettyXML: Minimize** command.
330 |
331 | ### 0.2.2
332 |
333 | - Updated packages
334 | - Fixes [Issue#20:Issue in formatting tag with no attributes and no childs but has separate end tag](https://github.com/pmahend1/PrettyXML/issues/20)
335 |
336 | ### 0.2.1
337 |
338 | Updated default for `prettyxml.settings.useSelfClosingTag` to `true`.
339 |
340 | ### 0.2.0
341 |
342 | Added Settings
343 |
344 | - Indent Space Length.
345 | - Use Single Quotes.
346 | - Use Self Closing Tags.
347 |
348 | ### 0.1.8
349 |
350 | Fixed Mac native node bindings not found issue.
351 |
352 | ### 0.1.5
353 |
354 | Notification progress bar while formatting.
355 |
356 | ### 0.1.2
357 |
358 | Reverted 0.1.0 & 0.1.1 changes
359 |
360 | ### 0.1.0 - 0.1.1 - Discontinued
361 |
362 | ~~Webpacked extension.
363 | Discontinued due to electron-edge-js native binaries linking issue~~
364 |
365 | ### 0.0.10
366 |
367 | Changed keybinding to **Cmd+K L** for Mac and **Control+K L** for other platforms.
368 |
369 | **Fixes:**
370 |
371 | - [This extension stop native ctrl+p in vscode #7](https://github.com/pmahend1/PrettyXML/issues/7)
372 |
373 | ### 0.0.8 & 0.0.9
374 |
375 | Fixes [Issue 4- Rewrite & to & (Which break legal xml format)](https://github.com/pmahend1/PrettyXML/issues/4)
376 |
377 | ### 0.0.7
378 |
379 | Initial release 0.0.7
380 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Prateek Mahendrakar
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 | # Pretty XML
2 |
3 |
4 |
5 |
6 | [What is it?](#what-is-it)
7 |
8 | [Features](#features)
9 | [1. Prettify XML (XML Formatting)](#1-prettify-xml-xml-formatting)
10 | [2. Pretty XML: Minimize](#2-pretty-xml-minimize)
11 |
12 | [Keyboard Shortcuts](#keyboard-shortcuts)
13 |
14 | [Settings](#settings)
15 |
16 | [Requirements](#requirements)
17 |
18 | [Installation](#installation)
19 |
20 | [Known Issues](#known-issues)
21 |
22 | [Change Log](CHANGELOG.md#change-log)
23 |
24 | [For more information](#for-more-information)
25 |
26 | ## What is it?
27 |
28 | Pretty XML is a XML formatter extension for Visual Studio Code and VSCodium. It formats XML documents just like Visual Studio on Windows.
29 |
30 | **Supported file extensions**:
31 |
32 | - xml
33 | - xaml
34 | - axml
35 | - xsd
36 | - xsl
37 | - plist
38 | - mobileconfig
39 | - config
40 | - csproj
41 | - svg
42 | - resx and all other XML type of files.
43 |
44 | There is also **Visual Studio for Mac** version of this extension. Check it out at [PrettyXML.VSMac](https://github.com/pmahend1/PrettyXML.VSMac)
45 |
46 | Suggestions, improvement PRs are welcome.
47 |
48 | [](https://choosealicense.com/licenses/mit/)
49 |
50 |
51 | [](https://marketplace.visualstudio.com/items?itemName=PrateekMahendrakar.prettyxml)
52 |
53 |
54 | [](https://open-vsx.org/extension/PrateekMahendrakar/prettyxml)
55 |
56 | 
57 |
58 | ---
59 |
60 | ## Features
61 |
62 | ### 1. Prettify XML (XML Formatting)
63 |
64 | Right Click and Select Prettify XML or use [shortcut](#keyboard-shortcuts)
65 |
66 | - Position each attribute on a separate line.
67 | - First attribute on same line as start element start tag.
68 | - All attributes indented aligning with first attribute.
69 | - If no child for an element then close inline end tag.
70 | - No empty lines.
71 | - Supports `'` and whitespace unicodes in attribute value for XAML parser compatibility.
72 |
73 | ### 1.a. Format Entire Document
74 |
75 | - Lets you format entire valid XML document.
76 |
77 | ### 1.b. Format Selection - Beta
78 |
79 | - Lets you format part of an XML document. XML can be partial and invalid. This is in beta, so feel free to submit pull request with improvements.
80 |
81 | 
82 |
83 | Before
84 |
85 | 
86 |
87 | After
88 |
89 | 
90 |
91 | ### 2. Pretty XML: Minimize
92 |
93 | Minimizes XML.
94 |
95 | 
96 |
97 | ---
98 |
99 | ## Keyboard Shortcuts
100 |
101 | | Command | Platform | Shortcut |
102 | | ------------------- | -------------- | ---------------- |
103 | | Prettify XML | Mac | **Cmd+K L** |
104 | | Prettify XML | Windows, Linux | **Control+K L** |
105 | | PrettyXML: Minimize | Mac | **Cmd+K \`** |
106 | | PrettyXML: Minimize | Windows, Linux | **Control+K \`** |
107 |
108 | > **Note**
109 | >
110 | > You can change these in **Preferences → Keyboard Shortcuts** if you want.
111 |
112 | ---
113 |
114 | ## Settings
115 |
116 | These will be for **Prettify XML** command.
117 |
118 | | Setting Key | Default Value | Description |
119 | |-------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|------------------------------------------------------------------------------|
120 | | prettyxml.settings.indentSpaceLength | 4 | No. of spaces for indentation. |
121 | | prettyxml.settings.useSingleQuotes | false | Use ' instead of \" |
122 | | prettyxml.settings.useSelfClosingTag | true | If no child nodes then self closing tag /> |
123 | | prettyxml.settings.formatOnSave | false | Enable format on save |
124 | | prettyxml.settings.allowSingleQuoteInAttributeValue | true | Allows ' in attribute values instead of \' |
125 | | prettyxml.settings.addSpaceBeforeSelfClosingTag | true | Adds space before self closing tag |
126 | | prettyxml.settings.wrapCommentTextWithSpaces | true | Wraps comment text with a single space |
127 | | prettyxml.settings.allowWhiteSpaceUnicodesInAttributeValues | true | Allows white space unicodes in attribute values |
128 | | prettyxml.settings.positionFirstAttributeOnSameLine | true | Position first attribute on same line. |
129 | | prettyxml.settings.positionAllAttributesOnFirstLine | false | Position all attributes on first line |
130 | | prettyxml.settings.preserveWhiteSpacesInComment | false | Preserves whitespaces in a comment. |
131 | | prettyxml.settings.addSpaceBeforeEndOfXmlDeclaration | false | Add space before end of XML declaration. |
132 | | [prettyxml.settings.attributesInNewlineThreshold](#attributes-in-newline-threshold) | 1 | Attributes count threshold to position attributes in newlines. |
133 | | prettyxml.settings.enableLogs | false | Enables logs |
134 | | [prettyxml.settings.wildCardedExceptionsForPositionAllAttributesOnFirstLine](#wild-carded-exceptions-for-position-all-attributes-on-first-line) | Array\ | Wild card exceptions for elements to ignore positionAllAttributesOnFirstLine |
135 | | [prettyxml.settings.addEmptyLineBetweenElements](#add-empty-line-between-elements) | false | Add empty line between elements if the child count is greater than 2 |
136 |
137 | 
138 |
139 | ### Attributes In Newline Threshold
140 |
141 | Example:
142 |
143 | Value = 2
144 |
145 | #### Input#1
146 |
147 | ```xml
148 |
149 | ```
150 |
151 | #### Output#1
152 |
153 | ```xml
154 |
155 | ```
156 |
157 | #### Input#2
158 |
159 | ```xml
160 |
161 | ```
162 |
163 | #### Output#2
164 |
165 | ```xml
166 |
169 | ```
170 |
171 | ### Wild Carded Exceptions For Position All Attributes On First Line
172 |
173 | List of element names to ignore Position All Attributes On First Line setting. Include element names or patterns here.
174 |
175 | Example:
176 |
177 | ```json
178 | "prettyxml.settings.wildCardedExceptionsForPositionAllAttributesOnFirstLine": ["Content*"]
179 | ```
180 |
181 | #### Input
182 |
183 | ```xml
184 |
185 |
187 |
188 |
190 |
191 |
192 | ```
193 |
194 | #### Ouput
195 |
196 | ```xml
197 |
198 |
201 |
202 |
203 |
204 |
205 | ```
206 |
207 | ### Add Empty Line Between Elements
208 |
209 | If enabled, and child elements count is greater than 2 then adds empty line between elements.
210 |
211 | > [!NOTE]
212 | > Please note it wont add empty element before first element and after last element.
213 |
214 | #### Input 1
215 |
216 | ```xml
217 |
218 | Text1
219 | Text2
220 | Text3
221 |
222 | ```
223 |
224 | #### Output 1
225 |
226 | ```xml
227 |
228 | Text1
229 |
230 | Text2
231 |
232 | Text3
233 |
234 | ```
235 |
236 | ---
237 |
238 | ## Requirements
239 |
240 | - [**DotNet 8** or later](https://dotnet.microsoft.com/en-us/download/dotnet) installed on your machine and should be accessible through terminal.
241 | - Install [Muhammad-Sammy C#](https://open-vsx.org/extension/muhammad-sammy/csharp) or [Microsoft C#](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) extension.
242 | - Visual Studio Code/VSCodium 1.59 or higher.
243 |
244 | ---
245 |
246 | ## Installation
247 |
248 | Visual Studio Code - [Visual Studio MarketPlace](https://marketplace.visualstudio.com/items?itemName=PrateekMahendrakar.prettyxml)
249 |
250 | For VSCodium - [open-vsx.org](https://open-vsx.org/extension/PrateekMahendrakar/prettyxml)
251 |
252 | ---
253 |
254 | ## Known Issues
255 |
256 | - Limited DTD support.
257 | - Formats valid XML files only. Syntax errors are displayed.
258 |
259 | Issues can be reported at [issues section](https://github.com/pmahend1/PrettyXML/issues)
260 |
261 | ---
262 |
263 | ### For more information
264 |
265 | - [Source Code](https://github.com/pmahend1/prettyxml)
266 | - If you want to support this project,
267 | [
](https://www.buymeacoffee.com/pmahend1)
268 |
--------------------------------------------------------------------------------
/images/FormatSelection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/images/FormatSelection.png
--------------------------------------------------------------------------------
/images/Minimize.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/images/Minimize.gif
--------------------------------------------------------------------------------
/images/Prettify.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/images/Prettify.gif
--------------------------------------------------------------------------------
/images/after.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/images/after.png
--------------------------------------------------------------------------------
/images/before.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/images/before.png
--------------------------------------------------------------------------------
/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/images/logo.png
--------------------------------------------------------------------------------
/images/old_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/images/old_logo.png
--------------------------------------------------------------------------------
/images/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/images/screenshot.png
--------------------------------------------------------------------------------
/images/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/images/settings.png
--------------------------------------------------------------------------------
/lib/XmlFormatter.CommandLine.deps.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeTarget": {
3 | "name": ".NETCoreApp,Version=v8.0",
4 | "signature": ""
5 | },
6 | "compilationOptions": {},
7 | "targets": {
8 | ".NETCoreApp,Version=v8.0": {
9 | "XmlFormatter.CommandLine/1.0.0": {
10 | "dependencies": {
11 | "XmlFormatter": "1.0.0"
12 | },
13 | "runtime": {
14 | "XmlFormatter.CommandLine.dll": {}
15 | }
16 | },
17 | "XmlFormatter/1.0.0": {
18 | "runtime": {
19 | "XmlFormatter.dll": {
20 | "assemblyVersion": "1.0.0.0",
21 | "fileVersion": "1.0.0.0"
22 | }
23 | }
24 | }
25 | }
26 | },
27 | "libraries": {
28 | "XmlFormatter.CommandLine/1.0.0": {
29 | "type": "project",
30 | "serviceable": false,
31 | "sha512": ""
32 | },
33 | "XmlFormatter/1.0.0": {
34 | "type": "project",
35 | "serviceable": false,
36 | "sha512": ""
37 | }
38 | }
39 | }
--------------------------------------------------------------------------------
/lib/XmlFormatter.CommandLine.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/lib/XmlFormatter.CommandLine.dll
--------------------------------------------------------------------------------
/lib/XmlFormatter.CommandLine.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/lib/XmlFormatter.CommandLine.exe
--------------------------------------------------------------------------------
/lib/XmlFormatter.CommandLine.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/lib/XmlFormatter.CommandLine.pdb
--------------------------------------------------------------------------------
/lib/XmlFormatter.CommandLine.runtimeconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeOptions": {
3 | "tfm": "net8.0",
4 | "framework": {
5 | "name": "Microsoft.NETCore.App",
6 | "version": "8.0.0"
7 | },
8 | "configProperties": {
9 | "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
10 | "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
11 | }
12 | }
13 | }
--------------------------------------------------------------------------------
/lib/XmlFormatter.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/lib/XmlFormatter.dll
--------------------------------------------------------------------------------
/lib/XmlFormatter.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmahend1/PrettyXML/612e1737586fb1da6fc83f627d1e9c8e848426a4/lib/XmlFormatter.pdb
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "prettyxml",
3 | "displayName": "Pretty XML",
4 | "author": {
5 | "name": "Prateek Mahendrakar"
6 | },
7 | "sponsor": {
8 | "url": "https://buymeacoffee.com/pmahend1"
9 | },
10 | "readme": "https://github.com/pmahend1/PrettyXML/blob/main/README.md",
11 | "description": "XML formatter extension for Visual Studio Code. Formats XML documents just like Visual Studio.",
12 | "version": "6.1.0",
13 | "publisher": "PrateekMahendrakar",
14 | "repository": {
15 | "url": "https://github.com/pmahend1/prettyxml.git"
16 | },
17 | "icon": "images/logo.png",
18 | "license": "MIT",
19 | "bugs": "https://github.com/pmahend1/prettyxml/issues",
20 | "preview": false,
21 | "galleryBanner": {
22 | "color": "#445678",
23 | "theme": "dark"
24 | },
25 | "markdown": "standard",
26 | "keywords": [
27 | "xml",
28 | "xaml",
29 | "xsd",
30 | "xsl",
31 | "plist",
32 | "mobileconfig",
33 | "config",
34 | "csproj",
35 | "axml",
36 | "resx",
37 | "formatter"
38 | ],
39 | "engines": {
40 | "vscode": "^1.99.1"
41 | },
42 | "categories": [
43 | "Formatters"
44 | ],
45 | "activationEvents": [
46 | "onLanguage:xml",
47 | "workspaceContains:**/*.xml",
48 | "workspaceContains:**/*.xaml"
49 | ],
50 | "main": "./out/extension.js",
51 | "contributes": {
52 | "commands": [
53 | {
54 | "command": "prettyxml.prettifyxml",
55 | "title": "Prettify XML"
56 | },
57 | {
58 | "command": "prettyxml.minimizexml",
59 | "title": "Pretty XML: Minimize"
60 | }
61 | ],
62 | "keybindings": [
63 | {
64 | "command": "prettyxml.prettifyxml",
65 | "key": "ctrl+k l",
66 | "when": "!isMac"
67 | },
68 | {
69 | "command": "prettyxml.prettifyxml",
70 | "key": "cmd+k l",
71 | "when": "isMac"
72 | },
73 | {
74 | "command": "prettyxml.minimizexml",
75 | "key": "ctrl+k `",
76 | "when": "!isMac"
77 | },
78 | {
79 | "command": "prettyxml.minimizexml",
80 | "key": "cmd+k `",
81 | "when": "isMac"
82 | }
83 | ],
84 | "languages": [
85 | {
86 | "id": "xml",
87 | "extensions": [
88 | ".config",
89 | ".csproj",
90 | ".xml",
91 | ".xsd",
92 | ".xsl",
93 | ".plist",
94 | ".mobileconfig",
95 | ".xaml",
96 | ".axml",
97 | ".axaml",
98 | ".resx",
99 | ".svg"
100 | ]
101 | }
102 | ],
103 | "menus": {
104 | "editor/context": [
105 | {
106 | "command": "prettyxml.prettifyxml",
107 | "group": "1_modification@100",
108 | "when": "editorLangId == 'xml' || editorLangId == 'xaml'"
109 | }
110 | ]
111 | },
112 | "configuration": [
113 | {
114 | "title": "PrettyXML Settings",
115 | "properties": {
116 | "prettyxml.settings.indentSpaceLength": {
117 | "type": "number",
118 | "default": 4,
119 | "enum": [
120 | 2,
121 | 4,
122 | 8
123 | ],
124 | "markdownDescription": "No. of spaces for indentation. *Default* is *4*"
125 | },
126 | "prettyxml.settings.useSingleQuotes": {
127 | "type": "boolean",
128 | "markdownDescription": "Use apostrophe `'` instead of quotes `\"`. *Default* is *Unchecked* \n\n **Checked** : `Attribute='Value'` \n\n **Unchecked** : `Attribute=\"Value\"`",
129 | "default": false
130 | },
131 | "prettyxml.settings.useSelfClosingTag": {
132 | "type": "boolean",
133 | "markdownDescription": "If no child nodes then use self closing tag `/>`. *Default* is *Checked* \n\n **Checked** : `` → `` \n\n **Unchecked** : `` → `` ",
134 | "default": true
135 | },
136 | "prettyxml.settings.formatOnSave": {
137 | "type": "boolean",
138 | "markdownDescription": "Enable format on save. *Default* is *Unchecked*",
139 | "default": false
140 | },
141 | "prettyxml.settings.allowSingleQuoteInAttributeValue": {
142 | "type": "boolean",
143 | "markdownDescription": "Allow single quote in attribute values. Ignored if *Use Single Quotes* is *Checked*. *Default* is *Checked* \n\n **Checked** : `Attribute=\"Value'has'apostrphoes\"` \n\n **Unchecked** : `Attribute=\"Value'has'apostrphoes\"` \n\n ",
144 | "default": true
145 | },
146 | "prettyxml.settings.addSpaceBeforeSelfClosingTag": {
147 | "type": "boolean",
148 | "markdownDescription": "Add space before self closing tag. *Default* is *Checked* \n\n **Checked** : `` \n\n **Unchecked** : `` ",
149 | "default": true
150 | },
151 | "prettyxml.settings.wrapCommentTextWithSpaces": {
152 | "type": "boolean",
153 | "markdownDescription": "Wrap Comment text with spaces. Ignored if *Preserve White Spaces In Comment* is *Checked*. *Default* is *Checked* \n\n **Checked** : `` \n\n **Unchecked** : `` ",
154 | "default": true
155 | },
156 | "prettyxml.settings.allowWhiteSpaceUnicodesInAttributeValues": {
157 | "type": "boolean",
158 | "markdownDescription": "Allow unicode whitespace characters in attribute values. *Default* is *Checked* \n\n **Checked** : \n\n `
` → `
` \n\n ` ` or ` ` → ` ` \n\n `>` → `>` \n\n **Unchecked** :\n\n `
` → new line \n\n ` ` or ` ` → tab \n\n > → `>`",
159 | "default": true
160 | },
161 | "prettyxml.settings.positionFirstAttributeOnSameLine": {
162 | "type": "boolean",
163 | "markdownDescription": "Position first attribute on same line. *Unchecked* on this setting will be ignored if *Position All Attributes On First Line*=*Checked*. *Default* is *Checked* \n\n **Checked** : \n\n `` \n\n **Unchecked** : \n\n ``",
179 | "default": false
180 | },
181 | "prettyxml.settings.addSpaceBeforeEndOfXmlDeclaration": {
182 | "type": "boolean",
183 | "markdownDescription": "Adds space before end of XML declaration. Default is *Unchecked* \n\n **Checked** : \n\n `` \n\n **Unchecked** : \n\n ``",
184 | "default": false
185 | },
186 | "prettyxml.settings.attributesInNewlineThreshold": {
187 | "type": "number",
188 | "default": 1,
189 | "enum": [
190 | 1,
191 | 2,
192 | 3,
193 | 4,
194 | 5,
195 | 6,
196 | 7,
197 | 8,
198 | 9
199 | ],
200 | "markdownDescription": "Attributes count threshold to position attributes in newlines. Default is *1*. This setting only works when **Position first attribute on same line** is enabled.\n\nFor example if threshold=2, all attributes will be on same line if an element has only 2 attributes,\n\notherwise each attribute will be placed on newline.\n\nMore Info: [GitHub](https://github.com/pmahend1/PrettyXML?tab=readme-ov-file#attributes-in-newline-threshold)"
201 | },
202 | "prettyxml.settings.addEmptyLineBetweenElements": {
203 | "type": "boolean",
204 | "markdownDescription": "Add empty line between elements if element count is greater than 2. Default is *Unchecked*",
205 | "default": false
206 | },
207 | "prettyxml.settings.enableLogs": {
208 | "type": "boolean",
209 | "markdownDescription": "Enable console local logs.",
210 | "default": false
211 | }
212 | }
213 | }
214 | ]
215 | },
216 | "scripts": {
217 | "compile": "webpack --mode development",
218 | "watch": "webpack --mode development --watch",
219 | "vscode:prepublish": "npm run package",
220 | "package": "webpack --mode production --devtool hidden-source-map",
221 | "compile-tests": "tsc -p . --outDir out",
222 | "pretest": "npm run compile-tests",
223 | "test": "vscode-test"
224 | },
225 | "devDependencies": {
226 | "@types/glob": "^8.1.0",
227 | "@types/mocha": "^10.0.10",
228 | "@types/node": "^22.14.0",
229 | "@types/vscode": "^1.99.1",
230 | "@typescript-eslint/eslint-plugin": "^8.32.1",
231 | "@typescript-eslint/parser": "8.29.1",
232 | "@vscode/test-electron": "^2.5.2",
233 | "esbuild": "^0.25.4",
234 | "eslint": "^9.27.0",
235 | "glob": "^11.0.2",
236 | "mocha": "^11.4.0",
237 | "ts-loader": "^9.5.2",
238 | "typescript": "^5.8.3",
239 | "webpack": "^5.99.9",
240 | "webpack-cli": "^6.0.1"
241 | },
242 | "dependencies": {
243 | "child_process": "^1.0.2",
244 | "compare-versions": "^6.1.1",
245 | "fs": "0.0.1-security",
246 | "path": "^0.12.7"
247 | }
248 | }
249 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | child_process:
12 | specifier: ^1.0.2
13 | version: 1.0.2
14 | compare-versions:
15 | specifier: ^6.1.1
16 | version: 6.1.1
17 | fs:
18 | specifier: 0.0.1-security
19 | version: 0.0.1-security
20 | path:
21 | specifier: ^0.12.7
22 | version: 0.12.7
23 | devDependencies:
24 | '@types/glob':
25 | specifier: ^8.1.0
26 | version: 8.1.0
27 | '@types/mocha':
28 | specifier: ^10.0.10
29 | version: 10.0.10
30 | '@types/node':
31 | specifier: ^22.14.0
32 | version: 22.14.0
33 | '@types/vscode':
34 | specifier: ^1.99.1
35 | version: 1.99.1
36 | '@typescript-eslint/eslint-plugin':
37 | specifier: ^8.32.1
38 | version: 8.32.1(@typescript-eslint/parser@8.29.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3)
39 | '@typescript-eslint/parser':
40 | specifier: 8.29.1
41 | version: 8.29.1(eslint@9.27.0)(typescript@5.8.3)
42 | '@vscode/test-electron':
43 | specifier: ^2.5.2
44 | version: 2.5.2
45 | esbuild:
46 | specifier: ^0.25.4
47 | version: 0.25.4
48 | eslint:
49 | specifier: ^9.27.0
50 | version: 9.27.0
51 | glob:
52 | specifier: ^11.0.2
53 | version: 11.0.2
54 | mocha:
55 | specifier: ^11.4.0
56 | version: 11.4.0
57 | ts-loader:
58 | specifier: ^9.5.2
59 | version: 9.5.2(typescript@5.8.3)(webpack@5.99.9)
60 | typescript:
61 | specifier: ^5.8.3
62 | version: 5.8.3
63 | webpack:
64 | specifier: ^5.99.9
65 | version: 5.99.9(esbuild@0.25.4)(webpack-cli@6.0.1)
66 | webpack-cli:
67 | specifier: ^6.0.1
68 | version: 6.0.1(webpack@5.99.9)
69 |
70 | packages:
71 |
72 | '@discoveryjs/json-ext@0.6.3':
73 | resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==}
74 | engines: {node: '>=14.17.0'}
75 |
76 | '@esbuild/aix-ppc64@0.25.4':
77 | resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==}
78 | engines: {node: '>=18'}
79 | cpu: [ppc64]
80 | os: [aix]
81 |
82 | '@esbuild/android-arm64@0.25.4':
83 | resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==}
84 | engines: {node: '>=18'}
85 | cpu: [arm64]
86 | os: [android]
87 |
88 | '@esbuild/android-arm@0.25.4':
89 | resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==}
90 | engines: {node: '>=18'}
91 | cpu: [arm]
92 | os: [android]
93 |
94 | '@esbuild/android-x64@0.25.4':
95 | resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==}
96 | engines: {node: '>=18'}
97 | cpu: [x64]
98 | os: [android]
99 |
100 | '@esbuild/darwin-arm64@0.25.4':
101 | resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==}
102 | engines: {node: '>=18'}
103 | cpu: [arm64]
104 | os: [darwin]
105 |
106 | '@esbuild/darwin-x64@0.25.4':
107 | resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==}
108 | engines: {node: '>=18'}
109 | cpu: [x64]
110 | os: [darwin]
111 |
112 | '@esbuild/freebsd-arm64@0.25.4':
113 | resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==}
114 | engines: {node: '>=18'}
115 | cpu: [arm64]
116 | os: [freebsd]
117 |
118 | '@esbuild/freebsd-x64@0.25.4':
119 | resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==}
120 | engines: {node: '>=18'}
121 | cpu: [x64]
122 | os: [freebsd]
123 |
124 | '@esbuild/linux-arm64@0.25.4':
125 | resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==}
126 | engines: {node: '>=18'}
127 | cpu: [arm64]
128 | os: [linux]
129 |
130 | '@esbuild/linux-arm@0.25.4':
131 | resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==}
132 | engines: {node: '>=18'}
133 | cpu: [arm]
134 | os: [linux]
135 |
136 | '@esbuild/linux-ia32@0.25.4':
137 | resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==}
138 | engines: {node: '>=18'}
139 | cpu: [ia32]
140 | os: [linux]
141 |
142 | '@esbuild/linux-loong64@0.25.4':
143 | resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==}
144 | engines: {node: '>=18'}
145 | cpu: [loong64]
146 | os: [linux]
147 |
148 | '@esbuild/linux-mips64el@0.25.4':
149 | resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==}
150 | engines: {node: '>=18'}
151 | cpu: [mips64el]
152 | os: [linux]
153 |
154 | '@esbuild/linux-ppc64@0.25.4':
155 | resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==}
156 | engines: {node: '>=18'}
157 | cpu: [ppc64]
158 | os: [linux]
159 |
160 | '@esbuild/linux-riscv64@0.25.4':
161 | resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==}
162 | engines: {node: '>=18'}
163 | cpu: [riscv64]
164 | os: [linux]
165 |
166 | '@esbuild/linux-s390x@0.25.4':
167 | resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==}
168 | engines: {node: '>=18'}
169 | cpu: [s390x]
170 | os: [linux]
171 |
172 | '@esbuild/linux-x64@0.25.4':
173 | resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==}
174 | engines: {node: '>=18'}
175 | cpu: [x64]
176 | os: [linux]
177 |
178 | '@esbuild/netbsd-arm64@0.25.4':
179 | resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==}
180 | engines: {node: '>=18'}
181 | cpu: [arm64]
182 | os: [netbsd]
183 |
184 | '@esbuild/netbsd-x64@0.25.4':
185 | resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==}
186 | engines: {node: '>=18'}
187 | cpu: [x64]
188 | os: [netbsd]
189 |
190 | '@esbuild/openbsd-arm64@0.25.4':
191 | resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==}
192 | engines: {node: '>=18'}
193 | cpu: [arm64]
194 | os: [openbsd]
195 |
196 | '@esbuild/openbsd-x64@0.25.4':
197 | resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==}
198 | engines: {node: '>=18'}
199 | cpu: [x64]
200 | os: [openbsd]
201 |
202 | '@esbuild/sunos-x64@0.25.4':
203 | resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==}
204 | engines: {node: '>=18'}
205 | cpu: [x64]
206 | os: [sunos]
207 |
208 | '@esbuild/win32-arm64@0.25.4':
209 | resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==}
210 | engines: {node: '>=18'}
211 | cpu: [arm64]
212 | os: [win32]
213 |
214 | '@esbuild/win32-ia32@0.25.4':
215 | resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==}
216 | engines: {node: '>=18'}
217 | cpu: [ia32]
218 | os: [win32]
219 |
220 | '@esbuild/win32-x64@0.25.4':
221 | resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==}
222 | engines: {node: '>=18'}
223 | cpu: [x64]
224 | os: [win32]
225 |
226 | '@eslint-community/eslint-utils@4.5.1':
227 | resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
228 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
229 | peerDependencies:
230 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
231 |
232 | '@eslint-community/eslint-utils@4.7.0':
233 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
234 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
235 | peerDependencies:
236 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
237 |
238 | '@eslint-community/regexpp@4.12.1':
239 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
240 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
241 |
242 | '@eslint/config-array@0.20.0':
243 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
244 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
245 |
246 | '@eslint/config-helpers@0.2.1':
247 | resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==}
248 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
249 |
250 | '@eslint/core@0.14.0':
251 | resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
252 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
253 |
254 | '@eslint/eslintrc@3.3.1':
255 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
256 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
257 |
258 | '@eslint/js@9.27.0':
259 | resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==}
260 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
261 |
262 | '@eslint/object-schema@2.1.6':
263 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
264 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
265 |
266 | '@eslint/plugin-kit@0.3.1':
267 | resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==}
268 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
269 |
270 | '@humanfs/core@0.19.1':
271 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
272 | engines: {node: '>=18.18.0'}
273 |
274 | '@humanfs/node@0.16.6':
275 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
276 | engines: {node: '>=18.18.0'}
277 |
278 | '@humanwhocodes/module-importer@1.0.1':
279 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
280 | engines: {node: '>=12.22'}
281 |
282 | '@humanwhocodes/retry@0.3.1':
283 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
284 | engines: {node: '>=18.18'}
285 |
286 | '@humanwhocodes/retry@0.4.2':
287 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
288 | engines: {node: '>=18.18'}
289 |
290 | '@isaacs/cliui@8.0.2':
291 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
292 | engines: {node: '>=12'}
293 |
294 | '@jridgewell/gen-mapping@0.3.8':
295 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
296 | engines: {node: '>=6.0.0'}
297 |
298 | '@jridgewell/resolve-uri@3.1.2':
299 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
300 | engines: {node: '>=6.0.0'}
301 |
302 | '@jridgewell/set-array@1.2.1':
303 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
304 | engines: {node: '>=6.0.0'}
305 |
306 | '@jridgewell/source-map@0.3.6':
307 | resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
308 |
309 | '@jridgewell/sourcemap-codec@1.5.0':
310 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
311 |
312 | '@jridgewell/trace-mapping@0.3.25':
313 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
314 |
315 | '@nodelib/fs.scandir@2.1.5':
316 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
317 | engines: {node: '>= 8'}
318 |
319 | '@nodelib/fs.stat@2.0.5':
320 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
321 | engines: {node: '>= 8'}
322 |
323 | '@nodelib/fs.walk@1.2.8':
324 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
325 | engines: {node: '>= 8'}
326 |
327 | '@pkgjs/parseargs@0.11.0':
328 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
329 | engines: {node: '>=14'}
330 |
331 | '@types/eslint-scope@3.7.7':
332 | resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
333 |
334 | '@types/eslint@9.6.1':
335 | resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
336 |
337 | '@types/estree@1.0.7':
338 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
339 |
340 | '@types/glob@8.1.0':
341 | resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
342 |
343 | '@types/json-schema@7.0.15':
344 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
345 |
346 | '@types/minimatch@5.1.2':
347 | resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
348 |
349 | '@types/mocha@10.0.10':
350 | resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==}
351 |
352 | '@types/node@22.14.0':
353 | resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==}
354 |
355 | '@types/vscode@1.99.1':
356 | resolution: {integrity: sha512-cQlqxHZ040ta6ovZXnXRxs3fJiTmlurkIWOfZVcLSZPcm9J4ikFpXuB7gihofGn5ng+kDVma5EmJIclfk0trPQ==}
357 |
358 | '@typescript-eslint/eslint-plugin@8.32.1':
359 | resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==}
360 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
361 | peerDependencies:
362 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
363 | eslint: ^8.57.0 || ^9.0.0
364 | typescript: '>=4.8.4 <5.9.0'
365 |
366 | '@typescript-eslint/parser@8.29.1':
367 | resolution: {integrity: sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==}
368 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
369 | peerDependencies:
370 | eslint: ^8.57.0 || ^9.0.0
371 | typescript: '>=4.8.4 <5.9.0'
372 |
373 | '@typescript-eslint/scope-manager@8.29.1':
374 | resolution: {integrity: sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==}
375 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
376 |
377 | '@typescript-eslint/scope-manager@8.32.1':
378 | resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==}
379 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
380 |
381 | '@typescript-eslint/type-utils@8.32.1':
382 | resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==}
383 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
384 | peerDependencies:
385 | eslint: ^8.57.0 || ^9.0.0
386 | typescript: '>=4.8.4 <5.9.0'
387 |
388 | '@typescript-eslint/types@8.29.1':
389 | resolution: {integrity: sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==}
390 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
391 |
392 | '@typescript-eslint/types@8.32.1':
393 | resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==}
394 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
395 |
396 | '@typescript-eslint/typescript-estree@8.29.1':
397 | resolution: {integrity: sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==}
398 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
399 | peerDependencies:
400 | typescript: '>=4.8.4 <5.9.0'
401 |
402 | '@typescript-eslint/typescript-estree@8.32.1':
403 | resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==}
404 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
405 | peerDependencies:
406 | typescript: '>=4.8.4 <5.9.0'
407 |
408 | '@typescript-eslint/utils@8.32.1':
409 | resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==}
410 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
411 | peerDependencies:
412 | eslint: ^8.57.0 || ^9.0.0
413 | typescript: '>=4.8.4 <5.9.0'
414 |
415 | '@typescript-eslint/visitor-keys@8.29.1':
416 | resolution: {integrity: sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==}
417 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
418 |
419 | '@typescript-eslint/visitor-keys@8.32.1':
420 | resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==}
421 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
422 |
423 | '@vscode/test-electron@2.5.2':
424 | resolution: {integrity: sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==}
425 | engines: {node: '>=16'}
426 |
427 | '@webassemblyjs/ast@1.14.1':
428 | resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
429 |
430 | '@webassemblyjs/floating-point-hex-parser@1.13.2':
431 | resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
432 |
433 | '@webassemblyjs/helper-api-error@1.13.2':
434 | resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
435 |
436 | '@webassemblyjs/helper-buffer@1.14.1':
437 | resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
438 |
439 | '@webassemblyjs/helper-numbers@1.13.2':
440 | resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
441 |
442 | '@webassemblyjs/helper-wasm-bytecode@1.13.2':
443 | resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
444 |
445 | '@webassemblyjs/helper-wasm-section@1.14.1':
446 | resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
447 |
448 | '@webassemblyjs/ieee754@1.13.2':
449 | resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
450 |
451 | '@webassemblyjs/leb128@1.13.2':
452 | resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
453 |
454 | '@webassemblyjs/utf8@1.13.2':
455 | resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
456 |
457 | '@webassemblyjs/wasm-edit@1.14.1':
458 | resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
459 |
460 | '@webassemblyjs/wasm-gen@1.14.1':
461 | resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
462 |
463 | '@webassemblyjs/wasm-opt@1.14.1':
464 | resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
465 |
466 | '@webassemblyjs/wasm-parser@1.14.1':
467 | resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
468 |
469 | '@webassemblyjs/wast-printer@1.14.1':
470 | resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
471 |
472 | '@webpack-cli/configtest@3.0.1':
473 | resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==}
474 | engines: {node: '>=18.12.0'}
475 | peerDependencies:
476 | webpack: ^5.82.0
477 | webpack-cli: 6.x.x
478 |
479 | '@webpack-cli/info@3.0.1':
480 | resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==}
481 | engines: {node: '>=18.12.0'}
482 | peerDependencies:
483 | webpack: ^5.82.0
484 | webpack-cli: 6.x.x
485 |
486 | '@webpack-cli/serve@3.0.1':
487 | resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==}
488 | engines: {node: '>=18.12.0'}
489 | peerDependencies:
490 | webpack: ^5.82.0
491 | webpack-cli: 6.x.x
492 | webpack-dev-server: '*'
493 | peerDependenciesMeta:
494 | webpack-dev-server:
495 | optional: true
496 |
497 | '@xtuc/ieee754@1.2.0':
498 | resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
499 |
500 | '@xtuc/long@4.2.2':
501 | resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
502 |
503 | acorn-jsx@5.3.2:
504 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
505 | peerDependencies:
506 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
507 |
508 | acorn@8.14.1:
509 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
510 | engines: {node: '>=0.4.0'}
511 | hasBin: true
512 |
513 | agent-base@7.1.3:
514 | resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
515 | engines: {node: '>= 14'}
516 |
517 | ajv-formats@2.1.1:
518 | resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
519 | peerDependencies:
520 | ajv: ^8.0.0
521 | peerDependenciesMeta:
522 | ajv:
523 | optional: true
524 |
525 | ajv-keywords@5.1.0:
526 | resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
527 | peerDependencies:
528 | ajv: ^8.8.2
529 |
530 | ajv@6.12.6:
531 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
532 |
533 | ajv@8.17.1:
534 | resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
535 |
536 | ansi-regex@5.0.1:
537 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
538 | engines: {node: '>=8'}
539 |
540 | ansi-regex@6.1.0:
541 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
542 | engines: {node: '>=12'}
543 |
544 | ansi-styles@4.3.0:
545 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
546 | engines: {node: '>=8'}
547 |
548 | ansi-styles@6.2.1:
549 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
550 | engines: {node: '>=12'}
551 |
552 | argparse@2.0.1:
553 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
554 |
555 | balanced-match@1.0.2:
556 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
557 |
558 | brace-expansion@1.1.11:
559 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
560 |
561 | brace-expansion@2.0.1:
562 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
563 |
564 | braces@3.0.3:
565 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
566 | engines: {node: '>=8'}
567 |
568 | browser-stdout@1.3.1:
569 | resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
570 |
571 | browserslist@4.24.4:
572 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
573 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
574 | hasBin: true
575 |
576 | buffer-from@1.1.2:
577 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
578 |
579 | callsites@3.1.0:
580 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
581 | engines: {node: '>=6'}
582 |
583 | camelcase@6.3.0:
584 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
585 | engines: {node: '>=10'}
586 |
587 | caniuse-lite@1.0.30001712:
588 | resolution: {integrity: sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==}
589 |
590 | chalk@4.1.2:
591 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
592 | engines: {node: '>=10'}
593 |
594 | chalk@5.4.1:
595 | resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
596 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
597 |
598 | child_process@1.0.2:
599 | resolution: {integrity: sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g==}
600 |
601 | chokidar@4.0.3:
602 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
603 | engines: {node: '>= 14.16.0'}
604 |
605 | chrome-trace-event@1.0.4:
606 | resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
607 | engines: {node: '>=6.0'}
608 |
609 | cli-cursor@5.0.0:
610 | resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
611 | engines: {node: '>=18'}
612 |
613 | cli-spinners@2.9.2:
614 | resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
615 | engines: {node: '>=6'}
616 |
617 | cliui@8.0.1:
618 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
619 | engines: {node: '>=12'}
620 |
621 | clone-deep@4.0.1:
622 | resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
623 | engines: {node: '>=6'}
624 |
625 | color-convert@2.0.1:
626 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
627 | engines: {node: '>=7.0.0'}
628 |
629 | color-name@1.1.4:
630 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
631 |
632 | colorette@2.0.20:
633 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
634 |
635 | commander@12.1.0:
636 | resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
637 | engines: {node: '>=18'}
638 |
639 | commander@2.20.3:
640 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
641 |
642 | compare-versions@6.1.1:
643 | resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
644 |
645 | concat-map@0.0.1:
646 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
647 |
648 | core-util-is@1.0.3:
649 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
650 |
651 | cross-spawn@7.0.6:
652 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
653 | engines: {node: '>= 8'}
654 |
655 | debug@4.4.0:
656 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
657 | engines: {node: '>=6.0'}
658 | peerDependencies:
659 | supports-color: '*'
660 | peerDependenciesMeta:
661 | supports-color:
662 | optional: true
663 |
664 | debug@4.4.1:
665 | resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
666 | engines: {node: '>=6.0'}
667 | peerDependencies:
668 | supports-color: '*'
669 | peerDependenciesMeta:
670 | supports-color:
671 | optional: true
672 |
673 | decamelize@4.0.0:
674 | resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
675 | engines: {node: '>=10'}
676 |
677 | deep-is@0.1.4:
678 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
679 |
680 | diff@7.0.0:
681 | resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==}
682 | engines: {node: '>=0.3.1'}
683 |
684 | eastasianwidth@0.2.0:
685 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
686 |
687 | electron-to-chromium@1.5.135:
688 | resolution: {integrity: sha512-8gXUdEmvb+WCaYUhA0Svr08uSeRjM2w3x5uHOc1QbaEVzJXB8rgm5eptieXzyKoVEtinLvW6MtTcurA65PeS1Q==}
689 |
690 | emoji-regex@10.4.0:
691 | resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
692 |
693 | emoji-regex@8.0.0:
694 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
695 |
696 | emoji-regex@9.2.2:
697 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
698 |
699 | enhanced-resolve@5.18.1:
700 | resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
701 | engines: {node: '>=10.13.0'}
702 |
703 | envinfo@7.14.0:
704 | resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==}
705 | engines: {node: '>=4'}
706 | hasBin: true
707 |
708 | es-module-lexer@1.6.0:
709 | resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==}
710 |
711 | esbuild@0.25.4:
712 | resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==}
713 | engines: {node: '>=18'}
714 | hasBin: true
715 |
716 | escalade@3.2.0:
717 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
718 | engines: {node: '>=6'}
719 |
720 | escape-string-regexp@4.0.0:
721 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
722 | engines: {node: '>=10'}
723 |
724 | eslint-scope@5.1.1:
725 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
726 | engines: {node: '>=8.0.0'}
727 |
728 | eslint-scope@8.3.0:
729 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
730 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
731 |
732 | eslint-visitor-keys@3.4.3:
733 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
734 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
735 |
736 | eslint-visitor-keys@4.2.0:
737 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
738 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
739 |
740 | eslint@9.27.0:
741 | resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==}
742 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
743 | hasBin: true
744 | peerDependencies:
745 | jiti: '*'
746 | peerDependenciesMeta:
747 | jiti:
748 | optional: true
749 |
750 | espree@10.3.0:
751 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
752 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
753 |
754 | esquery@1.6.0:
755 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
756 | engines: {node: '>=0.10'}
757 |
758 | esrecurse@4.3.0:
759 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
760 | engines: {node: '>=4.0'}
761 |
762 | estraverse@4.3.0:
763 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
764 | engines: {node: '>=4.0'}
765 |
766 | estraverse@5.3.0:
767 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
768 | engines: {node: '>=4.0'}
769 |
770 | esutils@2.0.3:
771 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
772 | engines: {node: '>=0.10.0'}
773 |
774 | events@3.3.0:
775 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
776 | engines: {node: '>=0.8.x'}
777 |
778 | fast-deep-equal@3.1.3:
779 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
780 |
781 | fast-glob@3.3.3:
782 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
783 | engines: {node: '>=8.6.0'}
784 |
785 | fast-json-stable-stringify@2.1.0:
786 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
787 |
788 | fast-levenshtein@2.0.6:
789 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
790 |
791 | fast-uri@3.0.6:
792 | resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
793 |
794 | fastest-levenshtein@1.0.16:
795 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
796 | engines: {node: '>= 4.9.1'}
797 |
798 | fastq@1.19.1:
799 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
800 |
801 | file-entry-cache@8.0.0:
802 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
803 | engines: {node: '>=16.0.0'}
804 |
805 | fill-range@7.1.1:
806 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
807 | engines: {node: '>=8'}
808 |
809 | find-up@4.1.0:
810 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
811 | engines: {node: '>=8'}
812 |
813 | find-up@5.0.0:
814 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
815 | engines: {node: '>=10'}
816 |
817 | flat-cache@4.0.1:
818 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
819 | engines: {node: '>=16'}
820 |
821 | flat@5.0.2:
822 | resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
823 | hasBin: true
824 |
825 | flatted@3.3.3:
826 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
827 |
828 | foreground-child@3.3.1:
829 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
830 | engines: {node: '>=14'}
831 |
832 | fs@0.0.1-security:
833 | resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==}
834 |
835 | function-bind@1.1.2:
836 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
837 |
838 | get-caller-file@2.0.5:
839 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
840 | engines: {node: 6.* || 8.* || >= 10.*}
841 |
842 | get-east-asian-width@1.3.0:
843 | resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
844 | engines: {node: '>=18'}
845 |
846 | glob-parent@5.1.2:
847 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
848 | engines: {node: '>= 6'}
849 |
850 | glob-parent@6.0.2:
851 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
852 | engines: {node: '>=10.13.0'}
853 |
854 | glob-to-regexp@0.4.1:
855 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
856 |
857 | glob@10.4.5:
858 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
859 | hasBin: true
860 |
861 | glob@11.0.2:
862 | resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==}
863 | engines: {node: 20 || >=22}
864 | hasBin: true
865 |
866 | globals@14.0.0:
867 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
868 | engines: {node: '>=18'}
869 |
870 | graceful-fs@4.2.11:
871 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
872 |
873 | graphemer@1.4.0:
874 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
875 |
876 | has-flag@4.0.0:
877 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
878 | engines: {node: '>=8'}
879 |
880 | hasown@2.0.2:
881 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
882 | engines: {node: '>= 0.4'}
883 |
884 | he@1.2.0:
885 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
886 | hasBin: true
887 |
888 | http-proxy-agent@7.0.2:
889 | resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
890 | engines: {node: '>= 14'}
891 |
892 | https-proxy-agent@7.0.6:
893 | resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
894 | engines: {node: '>= 14'}
895 |
896 | ignore@5.3.2:
897 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
898 | engines: {node: '>= 4'}
899 |
900 | ignore@7.0.4:
901 | resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==}
902 | engines: {node: '>= 4'}
903 |
904 | immediate@3.0.6:
905 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
906 |
907 | import-fresh@3.3.1:
908 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
909 | engines: {node: '>=6'}
910 |
911 | import-local@3.2.0:
912 | resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
913 | engines: {node: '>=8'}
914 | hasBin: true
915 |
916 | imurmurhash@0.1.4:
917 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
918 | engines: {node: '>=0.8.19'}
919 |
920 | inherits@2.0.3:
921 | resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
922 |
923 | inherits@2.0.4:
924 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
925 |
926 | interpret@3.1.1:
927 | resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
928 | engines: {node: '>=10.13.0'}
929 |
930 | is-core-module@2.16.1:
931 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
932 | engines: {node: '>= 0.4'}
933 |
934 | is-extglob@2.1.1:
935 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
936 | engines: {node: '>=0.10.0'}
937 |
938 | is-fullwidth-code-point@3.0.0:
939 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
940 | engines: {node: '>=8'}
941 |
942 | is-glob@4.0.3:
943 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
944 | engines: {node: '>=0.10.0'}
945 |
946 | is-interactive@2.0.0:
947 | resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
948 | engines: {node: '>=12'}
949 |
950 | is-number@7.0.0:
951 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
952 | engines: {node: '>=0.12.0'}
953 |
954 | is-plain-obj@2.1.0:
955 | resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
956 | engines: {node: '>=8'}
957 |
958 | is-plain-object@2.0.4:
959 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
960 | engines: {node: '>=0.10.0'}
961 |
962 | is-unicode-supported@0.1.0:
963 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
964 | engines: {node: '>=10'}
965 |
966 | is-unicode-supported@1.3.0:
967 | resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
968 | engines: {node: '>=12'}
969 |
970 | is-unicode-supported@2.1.0:
971 | resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
972 | engines: {node: '>=18'}
973 |
974 | isarray@1.0.0:
975 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
976 |
977 | isexe@2.0.0:
978 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
979 |
980 | isobject@3.0.1:
981 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
982 | engines: {node: '>=0.10.0'}
983 |
984 | jackspeak@3.4.3:
985 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
986 |
987 | jackspeak@4.1.0:
988 | resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==}
989 | engines: {node: 20 || >=22}
990 |
991 | jest-worker@27.5.1:
992 | resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
993 | engines: {node: '>= 10.13.0'}
994 |
995 | js-yaml@4.1.0:
996 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
997 | hasBin: true
998 |
999 | json-buffer@3.0.1:
1000 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1001 |
1002 | json-parse-even-better-errors@2.3.1:
1003 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
1004 |
1005 | json-schema-traverse@0.4.1:
1006 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1007 |
1008 | json-schema-traverse@1.0.0:
1009 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
1010 |
1011 | json-stable-stringify-without-jsonify@1.0.1:
1012 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1013 |
1014 | jszip@3.10.1:
1015 | resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
1016 |
1017 | keyv@4.5.4:
1018 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1019 |
1020 | kind-of@6.0.3:
1021 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
1022 | engines: {node: '>=0.10.0'}
1023 |
1024 | levn@0.4.1:
1025 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1026 | engines: {node: '>= 0.8.0'}
1027 |
1028 | lie@3.3.0:
1029 | resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
1030 |
1031 | loader-runner@4.3.0:
1032 | resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
1033 | engines: {node: '>=6.11.5'}
1034 |
1035 | locate-path@5.0.0:
1036 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
1037 | engines: {node: '>=8'}
1038 |
1039 | locate-path@6.0.0:
1040 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1041 | engines: {node: '>=10'}
1042 |
1043 | lodash.merge@4.6.2:
1044 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1045 |
1046 | log-symbols@4.1.0:
1047 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
1048 | engines: {node: '>=10'}
1049 |
1050 | log-symbols@6.0.0:
1051 | resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
1052 | engines: {node: '>=18'}
1053 |
1054 | lru-cache@10.4.3:
1055 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
1056 |
1057 | lru-cache@11.1.0:
1058 | resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
1059 | engines: {node: 20 || >=22}
1060 |
1061 | merge-stream@2.0.0:
1062 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1063 |
1064 | merge2@1.4.1:
1065 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1066 | engines: {node: '>= 8'}
1067 |
1068 | micromatch@4.0.8:
1069 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1070 | engines: {node: '>=8.6'}
1071 |
1072 | mime-db@1.52.0:
1073 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1074 | engines: {node: '>= 0.6'}
1075 |
1076 | mime-types@2.1.35:
1077 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1078 | engines: {node: '>= 0.6'}
1079 |
1080 | mimic-function@5.0.1:
1081 | resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
1082 | engines: {node: '>=18'}
1083 |
1084 | minimatch@10.0.1:
1085 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
1086 | engines: {node: 20 || >=22}
1087 |
1088 | minimatch@3.1.2:
1089 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1090 |
1091 | minimatch@5.1.6:
1092 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
1093 | engines: {node: '>=10'}
1094 |
1095 | minimatch@9.0.5:
1096 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1097 | engines: {node: '>=16 || 14 >=14.17'}
1098 |
1099 | minipass@7.1.2:
1100 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1101 | engines: {node: '>=16 || 14 >=14.17'}
1102 |
1103 | mocha@11.4.0:
1104 | resolution: {integrity: sha512-O6oi5Y9G6uu8f9iqXR6iKNLWHLRex3PKbmHynfpmUnMJJGrdgXh8ZmS85Ei5KR2Gnl+/gQ9s+Ktv5CqKybNw4A==}
1105 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1106 | hasBin: true
1107 |
1108 | ms@2.1.3:
1109 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1110 |
1111 | natural-compare@1.4.0:
1112 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1113 |
1114 | neo-async@2.6.2:
1115 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
1116 |
1117 | node-releases@2.0.19:
1118 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1119 |
1120 | onetime@7.0.0:
1121 | resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
1122 | engines: {node: '>=18'}
1123 |
1124 | optionator@0.9.4:
1125 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1126 | engines: {node: '>= 0.8.0'}
1127 |
1128 | ora@8.2.0:
1129 | resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==}
1130 | engines: {node: '>=18'}
1131 |
1132 | p-limit@2.3.0:
1133 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
1134 | engines: {node: '>=6'}
1135 |
1136 | p-limit@3.1.0:
1137 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1138 | engines: {node: '>=10'}
1139 |
1140 | p-locate@4.1.0:
1141 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
1142 | engines: {node: '>=8'}
1143 |
1144 | p-locate@5.0.0:
1145 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1146 | engines: {node: '>=10'}
1147 |
1148 | p-try@2.2.0:
1149 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
1150 | engines: {node: '>=6'}
1151 |
1152 | package-json-from-dist@1.0.1:
1153 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
1154 |
1155 | pako@1.0.11:
1156 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
1157 |
1158 | parent-module@1.0.1:
1159 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1160 | engines: {node: '>=6'}
1161 |
1162 | path-exists@4.0.0:
1163 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1164 | engines: {node: '>=8'}
1165 |
1166 | path-key@3.1.1:
1167 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1168 | engines: {node: '>=8'}
1169 |
1170 | path-parse@1.0.7:
1171 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1172 |
1173 | path-scurry@1.11.1:
1174 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
1175 | engines: {node: '>=16 || 14 >=14.18'}
1176 |
1177 | path-scurry@2.0.0:
1178 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
1179 | engines: {node: 20 || >=22}
1180 |
1181 | path@0.12.7:
1182 | resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==}
1183 |
1184 | picocolors@1.1.1:
1185 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1186 |
1187 | picomatch@2.3.1:
1188 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1189 | engines: {node: '>=8.6'}
1190 |
1191 | pkg-dir@4.2.0:
1192 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
1193 | engines: {node: '>=8'}
1194 |
1195 | prelude-ls@1.2.1:
1196 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1197 | engines: {node: '>= 0.8.0'}
1198 |
1199 | process-nextick-args@2.0.1:
1200 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1201 |
1202 | process@0.11.10:
1203 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
1204 | engines: {node: '>= 0.6.0'}
1205 |
1206 | punycode@2.3.1:
1207 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1208 | engines: {node: '>=6'}
1209 |
1210 | queue-microtask@1.2.3:
1211 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1212 |
1213 | randombytes@2.1.0:
1214 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
1215 |
1216 | readable-stream@2.3.8:
1217 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
1218 |
1219 | readdirp@4.1.2:
1220 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
1221 | engines: {node: '>= 14.18.0'}
1222 |
1223 | rechoir@0.8.0:
1224 | resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
1225 | engines: {node: '>= 10.13.0'}
1226 |
1227 | require-directory@2.1.1:
1228 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
1229 | engines: {node: '>=0.10.0'}
1230 |
1231 | require-from-string@2.0.2:
1232 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
1233 | engines: {node: '>=0.10.0'}
1234 |
1235 | resolve-cwd@3.0.0:
1236 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
1237 | engines: {node: '>=8'}
1238 |
1239 | resolve-from@4.0.0:
1240 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1241 | engines: {node: '>=4'}
1242 |
1243 | resolve-from@5.0.0:
1244 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1245 | engines: {node: '>=8'}
1246 |
1247 | resolve@1.22.10:
1248 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1249 | engines: {node: '>= 0.4'}
1250 | hasBin: true
1251 |
1252 | restore-cursor@5.1.0:
1253 | resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
1254 | engines: {node: '>=18'}
1255 |
1256 | reusify@1.1.0:
1257 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1258 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1259 |
1260 | run-parallel@1.2.0:
1261 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1262 |
1263 | safe-buffer@5.1.2:
1264 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1265 |
1266 | safe-buffer@5.2.1:
1267 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1268 |
1269 | schema-utils@4.3.2:
1270 | resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==}
1271 | engines: {node: '>= 10.13.0'}
1272 |
1273 | semver@7.7.1:
1274 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
1275 | engines: {node: '>=10'}
1276 | hasBin: true
1277 |
1278 | semver@7.7.2:
1279 | resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
1280 | engines: {node: '>=10'}
1281 | hasBin: true
1282 |
1283 | serialize-javascript@6.0.2:
1284 | resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
1285 |
1286 | setimmediate@1.0.5:
1287 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
1288 |
1289 | shallow-clone@3.0.1:
1290 | resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
1291 | engines: {node: '>=8'}
1292 |
1293 | shebang-command@2.0.0:
1294 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1295 | engines: {node: '>=8'}
1296 |
1297 | shebang-regex@3.0.0:
1298 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1299 | engines: {node: '>=8'}
1300 |
1301 | signal-exit@4.1.0:
1302 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1303 | engines: {node: '>=14'}
1304 |
1305 | source-map-support@0.5.21:
1306 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1307 |
1308 | source-map@0.6.1:
1309 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1310 | engines: {node: '>=0.10.0'}
1311 |
1312 | source-map@0.7.4:
1313 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
1314 | engines: {node: '>= 8'}
1315 |
1316 | stdin-discarder@0.2.2:
1317 | resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
1318 | engines: {node: '>=18'}
1319 |
1320 | string-width@4.2.3:
1321 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1322 | engines: {node: '>=8'}
1323 |
1324 | string-width@5.1.2:
1325 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1326 | engines: {node: '>=12'}
1327 |
1328 | string-width@7.2.0:
1329 | resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
1330 | engines: {node: '>=18'}
1331 |
1332 | string_decoder@1.1.1:
1333 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
1334 |
1335 | strip-ansi@6.0.1:
1336 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1337 | engines: {node: '>=8'}
1338 |
1339 | strip-ansi@7.1.0:
1340 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1341 | engines: {node: '>=12'}
1342 |
1343 | strip-json-comments@3.1.1:
1344 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1345 | engines: {node: '>=8'}
1346 |
1347 | supports-color@7.2.0:
1348 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1349 | engines: {node: '>=8'}
1350 |
1351 | supports-color@8.1.1:
1352 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
1353 | engines: {node: '>=10'}
1354 |
1355 | supports-preserve-symlinks-flag@1.0.0:
1356 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1357 | engines: {node: '>= 0.4'}
1358 |
1359 | tapable@2.2.1:
1360 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
1361 | engines: {node: '>=6'}
1362 |
1363 | terser-webpack-plugin@5.3.14:
1364 | resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
1365 | engines: {node: '>= 10.13.0'}
1366 | peerDependencies:
1367 | '@swc/core': '*'
1368 | esbuild: '*'
1369 | uglify-js: '*'
1370 | webpack: ^5.1.0
1371 | peerDependenciesMeta:
1372 | '@swc/core':
1373 | optional: true
1374 | esbuild:
1375 | optional: true
1376 | uglify-js:
1377 | optional: true
1378 |
1379 | terser@5.39.0:
1380 | resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==}
1381 | engines: {node: '>=10'}
1382 | hasBin: true
1383 |
1384 | to-regex-range@5.0.1:
1385 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1386 | engines: {node: '>=8.0'}
1387 |
1388 | ts-api-utils@2.1.0:
1389 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
1390 | engines: {node: '>=18.12'}
1391 | peerDependencies:
1392 | typescript: '>=4.8.4'
1393 |
1394 | ts-loader@9.5.2:
1395 | resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==}
1396 | engines: {node: '>=12.0.0'}
1397 | peerDependencies:
1398 | typescript: '*'
1399 | webpack: ^5.0.0
1400 |
1401 | type-check@0.4.0:
1402 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1403 | engines: {node: '>= 0.8.0'}
1404 |
1405 | typescript@5.8.3:
1406 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
1407 | engines: {node: '>=14.17'}
1408 | hasBin: true
1409 |
1410 | undici-types@6.21.0:
1411 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
1412 |
1413 | update-browserslist-db@1.1.3:
1414 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
1415 | hasBin: true
1416 | peerDependencies:
1417 | browserslist: '>= 4.21.0'
1418 |
1419 | uri-js@4.4.1:
1420 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1421 |
1422 | util-deprecate@1.0.2:
1423 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1424 |
1425 | util@0.10.4:
1426 | resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==}
1427 |
1428 | watchpack@2.4.2:
1429 | resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==}
1430 | engines: {node: '>=10.13.0'}
1431 |
1432 | webpack-cli@6.0.1:
1433 | resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==}
1434 | engines: {node: '>=18.12.0'}
1435 | hasBin: true
1436 | peerDependencies:
1437 | webpack: ^5.82.0
1438 | webpack-bundle-analyzer: '*'
1439 | webpack-dev-server: '*'
1440 | peerDependenciesMeta:
1441 | webpack-bundle-analyzer:
1442 | optional: true
1443 | webpack-dev-server:
1444 | optional: true
1445 |
1446 | webpack-merge@6.0.1:
1447 | resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==}
1448 | engines: {node: '>=18.0.0'}
1449 |
1450 | webpack-sources@3.2.3:
1451 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
1452 | engines: {node: '>=10.13.0'}
1453 |
1454 | webpack@5.99.9:
1455 | resolution: {integrity: sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==}
1456 | engines: {node: '>=10.13.0'}
1457 | hasBin: true
1458 | peerDependencies:
1459 | webpack-cli: '*'
1460 | peerDependenciesMeta:
1461 | webpack-cli:
1462 | optional: true
1463 |
1464 | which@2.0.2:
1465 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1466 | engines: {node: '>= 8'}
1467 | hasBin: true
1468 |
1469 | wildcard@2.0.1:
1470 | resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
1471 |
1472 | word-wrap@1.2.5:
1473 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1474 | engines: {node: '>=0.10.0'}
1475 |
1476 | workerpool@6.5.1:
1477 | resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==}
1478 |
1479 | wrap-ansi@7.0.0:
1480 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1481 | engines: {node: '>=10'}
1482 |
1483 | wrap-ansi@8.1.0:
1484 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1485 | engines: {node: '>=12'}
1486 |
1487 | y18n@5.0.8:
1488 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
1489 | engines: {node: '>=10'}
1490 |
1491 | yargs-parser@21.1.1:
1492 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
1493 | engines: {node: '>=12'}
1494 |
1495 | yargs-unparser@2.0.0:
1496 | resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
1497 | engines: {node: '>=10'}
1498 |
1499 | yargs@17.7.2:
1500 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
1501 | engines: {node: '>=12'}
1502 |
1503 | yocto-queue@0.1.0:
1504 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1505 | engines: {node: '>=10'}
1506 |
1507 | snapshots:
1508 |
1509 | '@discoveryjs/json-ext@0.6.3': {}
1510 |
1511 | '@esbuild/aix-ppc64@0.25.4':
1512 | optional: true
1513 |
1514 | '@esbuild/android-arm64@0.25.4':
1515 | optional: true
1516 |
1517 | '@esbuild/android-arm@0.25.4':
1518 | optional: true
1519 |
1520 | '@esbuild/android-x64@0.25.4':
1521 | optional: true
1522 |
1523 | '@esbuild/darwin-arm64@0.25.4':
1524 | optional: true
1525 |
1526 | '@esbuild/darwin-x64@0.25.4':
1527 | optional: true
1528 |
1529 | '@esbuild/freebsd-arm64@0.25.4':
1530 | optional: true
1531 |
1532 | '@esbuild/freebsd-x64@0.25.4':
1533 | optional: true
1534 |
1535 | '@esbuild/linux-arm64@0.25.4':
1536 | optional: true
1537 |
1538 | '@esbuild/linux-arm@0.25.4':
1539 | optional: true
1540 |
1541 | '@esbuild/linux-ia32@0.25.4':
1542 | optional: true
1543 |
1544 | '@esbuild/linux-loong64@0.25.4':
1545 | optional: true
1546 |
1547 | '@esbuild/linux-mips64el@0.25.4':
1548 | optional: true
1549 |
1550 | '@esbuild/linux-ppc64@0.25.4':
1551 | optional: true
1552 |
1553 | '@esbuild/linux-riscv64@0.25.4':
1554 | optional: true
1555 |
1556 | '@esbuild/linux-s390x@0.25.4':
1557 | optional: true
1558 |
1559 | '@esbuild/linux-x64@0.25.4':
1560 | optional: true
1561 |
1562 | '@esbuild/netbsd-arm64@0.25.4':
1563 | optional: true
1564 |
1565 | '@esbuild/netbsd-x64@0.25.4':
1566 | optional: true
1567 |
1568 | '@esbuild/openbsd-arm64@0.25.4':
1569 | optional: true
1570 |
1571 | '@esbuild/openbsd-x64@0.25.4':
1572 | optional: true
1573 |
1574 | '@esbuild/sunos-x64@0.25.4':
1575 | optional: true
1576 |
1577 | '@esbuild/win32-arm64@0.25.4':
1578 | optional: true
1579 |
1580 | '@esbuild/win32-ia32@0.25.4':
1581 | optional: true
1582 |
1583 | '@esbuild/win32-x64@0.25.4':
1584 | optional: true
1585 |
1586 | '@eslint-community/eslint-utils@4.5.1(eslint@9.27.0)':
1587 | dependencies:
1588 | eslint: 9.27.0
1589 | eslint-visitor-keys: 3.4.3
1590 |
1591 | '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0)':
1592 | dependencies:
1593 | eslint: 9.27.0
1594 | eslint-visitor-keys: 3.4.3
1595 |
1596 | '@eslint-community/regexpp@4.12.1': {}
1597 |
1598 | '@eslint/config-array@0.20.0':
1599 | dependencies:
1600 | '@eslint/object-schema': 2.1.6
1601 | debug: 4.4.0(supports-color@8.1.1)
1602 | minimatch: 3.1.2
1603 | transitivePeerDependencies:
1604 | - supports-color
1605 |
1606 | '@eslint/config-helpers@0.2.1': {}
1607 |
1608 | '@eslint/core@0.14.0':
1609 | dependencies:
1610 | '@types/json-schema': 7.0.15
1611 |
1612 | '@eslint/eslintrc@3.3.1':
1613 | dependencies:
1614 | ajv: 6.12.6
1615 | debug: 4.4.0(supports-color@8.1.1)
1616 | espree: 10.3.0
1617 | globals: 14.0.0
1618 | ignore: 5.3.2
1619 | import-fresh: 3.3.1
1620 | js-yaml: 4.1.0
1621 | minimatch: 3.1.2
1622 | strip-json-comments: 3.1.1
1623 | transitivePeerDependencies:
1624 | - supports-color
1625 |
1626 | '@eslint/js@9.27.0': {}
1627 |
1628 | '@eslint/object-schema@2.1.6': {}
1629 |
1630 | '@eslint/plugin-kit@0.3.1':
1631 | dependencies:
1632 | '@eslint/core': 0.14.0
1633 | levn: 0.4.1
1634 |
1635 | '@humanfs/core@0.19.1': {}
1636 |
1637 | '@humanfs/node@0.16.6':
1638 | dependencies:
1639 | '@humanfs/core': 0.19.1
1640 | '@humanwhocodes/retry': 0.3.1
1641 |
1642 | '@humanwhocodes/module-importer@1.0.1': {}
1643 |
1644 | '@humanwhocodes/retry@0.3.1': {}
1645 |
1646 | '@humanwhocodes/retry@0.4.2': {}
1647 |
1648 | '@isaacs/cliui@8.0.2':
1649 | dependencies:
1650 | string-width: 5.1.2
1651 | string-width-cjs: string-width@4.2.3
1652 | strip-ansi: 7.1.0
1653 | strip-ansi-cjs: strip-ansi@6.0.1
1654 | wrap-ansi: 8.1.0
1655 | wrap-ansi-cjs: wrap-ansi@7.0.0
1656 |
1657 | '@jridgewell/gen-mapping@0.3.8':
1658 | dependencies:
1659 | '@jridgewell/set-array': 1.2.1
1660 | '@jridgewell/sourcemap-codec': 1.5.0
1661 | '@jridgewell/trace-mapping': 0.3.25
1662 |
1663 | '@jridgewell/resolve-uri@3.1.2': {}
1664 |
1665 | '@jridgewell/set-array@1.2.1': {}
1666 |
1667 | '@jridgewell/source-map@0.3.6':
1668 | dependencies:
1669 | '@jridgewell/gen-mapping': 0.3.8
1670 | '@jridgewell/trace-mapping': 0.3.25
1671 |
1672 | '@jridgewell/sourcemap-codec@1.5.0': {}
1673 |
1674 | '@jridgewell/trace-mapping@0.3.25':
1675 | dependencies:
1676 | '@jridgewell/resolve-uri': 3.1.2
1677 | '@jridgewell/sourcemap-codec': 1.5.0
1678 |
1679 | '@nodelib/fs.scandir@2.1.5':
1680 | dependencies:
1681 | '@nodelib/fs.stat': 2.0.5
1682 | run-parallel: 1.2.0
1683 |
1684 | '@nodelib/fs.stat@2.0.5': {}
1685 |
1686 | '@nodelib/fs.walk@1.2.8':
1687 | dependencies:
1688 | '@nodelib/fs.scandir': 2.1.5
1689 | fastq: 1.19.1
1690 |
1691 | '@pkgjs/parseargs@0.11.0':
1692 | optional: true
1693 |
1694 | '@types/eslint-scope@3.7.7':
1695 | dependencies:
1696 | '@types/eslint': 9.6.1
1697 | '@types/estree': 1.0.7
1698 |
1699 | '@types/eslint@9.6.1':
1700 | dependencies:
1701 | '@types/estree': 1.0.7
1702 | '@types/json-schema': 7.0.15
1703 |
1704 | '@types/estree@1.0.7': {}
1705 |
1706 | '@types/glob@8.1.0':
1707 | dependencies:
1708 | '@types/minimatch': 5.1.2
1709 | '@types/node': 22.14.0
1710 |
1711 | '@types/json-schema@7.0.15': {}
1712 |
1713 | '@types/minimatch@5.1.2': {}
1714 |
1715 | '@types/mocha@10.0.10': {}
1716 |
1717 | '@types/node@22.14.0':
1718 | dependencies:
1719 | undici-types: 6.21.0
1720 |
1721 | '@types/vscode@1.99.1': {}
1722 |
1723 | '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.29.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3)':
1724 | dependencies:
1725 | '@eslint-community/regexpp': 4.12.1
1726 | '@typescript-eslint/parser': 8.29.1(eslint@9.27.0)(typescript@5.8.3)
1727 | '@typescript-eslint/scope-manager': 8.32.1
1728 | '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3)
1729 | '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3)
1730 | '@typescript-eslint/visitor-keys': 8.32.1
1731 | eslint: 9.27.0
1732 | graphemer: 1.4.0
1733 | ignore: 7.0.4
1734 | natural-compare: 1.4.0
1735 | ts-api-utils: 2.1.0(typescript@5.8.3)
1736 | typescript: 5.8.3
1737 | transitivePeerDependencies:
1738 | - supports-color
1739 |
1740 | '@typescript-eslint/parser@8.29.1(eslint@9.27.0)(typescript@5.8.3)':
1741 | dependencies:
1742 | '@typescript-eslint/scope-manager': 8.29.1
1743 | '@typescript-eslint/types': 8.29.1
1744 | '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3)
1745 | '@typescript-eslint/visitor-keys': 8.29.1
1746 | debug: 4.4.0(supports-color@8.1.1)
1747 | eslint: 9.27.0
1748 | typescript: 5.8.3
1749 | transitivePeerDependencies:
1750 | - supports-color
1751 |
1752 | '@typescript-eslint/scope-manager@8.29.1':
1753 | dependencies:
1754 | '@typescript-eslint/types': 8.29.1
1755 | '@typescript-eslint/visitor-keys': 8.29.1
1756 |
1757 | '@typescript-eslint/scope-manager@8.32.1':
1758 | dependencies:
1759 | '@typescript-eslint/types': 8.32.1
1760 | '@typescript-eslint/visitor-keys': 8.32.1
1761 |
1762 | '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0)(typescript@5.8.3)':
1763 | dependencies:
1764 | '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
1765 | '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3)
1766 | debug: 4.4.1
1767 | eslint: 9.27.0
1768 | ts-api-utils: 2.1.0(typescript@5.8.3)
1769 | typescript: 5.8.3
1770 | transitivePeerDependencies:
1771 | - supports-color
1772 |
1773 | '@typescript-eslint/types@8.29.1': {}
1774 |
1775 | '@typescript-eslint/types@8.32.1': {}
1776 |
1777 | '@typescript-eslint/typescript-estree@8.29.1(typescript@5.8.3)':
1778 | dependencies:
1779 | '@typescript-eslint/types': 8.29.1
1780 | '@typescript-eslint/visitor-keys': 8.29.1
1781 | debug: 4.4.0(supports-color@8.1.1)
1782 | fast-glob: 3.3.3
1783 | is-glob: 4.0.3
1784 | minimatch: 9.0.5
1785 | semver: 7.7.1
1786 | ts-api-utils: 2.1.0(typescript@5.8.3)
1787 | typescript: 5.8.3
1788 | transitivePeerDependencies:
1789 | - supports-color
1790 |
1791 | '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)':
1792 | dependencies:
1793 | '@typescript-eslint/types': 8.32.1
1794 | '@typescript-eslint/visitor-keys': 8.32.1
1795 | debug: 4.4.1
1796 | fast-glob: 3.3.3
1797 | is-glob: 4.0.3
1798 | minimatch: 9.0.5
1799 | semver: 7.7.2
1800 | ts-api-utils: 2.1.0(typescript@5.8.3)
1801 | typescript: 5.8.3
1802 | transitivePeerDependencies:
1803 | - supports-color
1804 |
1805 | '@typescript-eslint/utils@8.32.1(eslint@9.27.0)(typescript@5.8.3)':
1806 | dependencies:
1807 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0)
1808 | '@typescript-eslint/scope-manager': 8.32.1
1809 | '@typescript-eslint/types': 8.32.1
1810 | '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
1811 | eslint: 9.27.0
1812 | typescript: 5.8.3
1813 | transitivePeerDependencies:
1814 | - supports-color
1815 |
1816 | '@typescript-eslint/visitor-keys@8.29.1':
1817 | dependencies:
1818 | '@typescript-eslint/types': 8.29.1
1819 | eslint-visitor-keys: 4.2.0
1820 |
1821 | '@typescript-eslint/visitor-keys@8.32.1':
1822 | dependencies:
1823 | '@typescript-eslint/types': 8.32.1
1824 | eslint-visitor-keys: 4.2.0
1825 |
1826 | '@vscode/test-electron@2.5.2':
1827 | dependencies:
1828 | http-proxy-agent: 7.0.2
1829 | https-proxy-agent: 7.0.6
1830 | jszip: 3.10.1
1831 | ora: 8.2.0
1832 | semver: 7.7.1
1833 | transitivePeerDependencies:
1834 | - supports-color
1835 |
1836 | '@webassemblyjs/ast@1.14.1':
1837 | dependencies:
1838 | '@webassemblyjs/helper-numbers': 1.13.2
1839 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
1840 |
1841 | '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
1842 |
1843 | '@webassemblyjs/helper-api-error@1.13.2': {}
1844 |
1845 | '@webassemblyjs/helper-buffer@1.14.1': {}
1846 |
1847 | '@webassemblyjs/helper-numbers@1.13.2':
1848 | dependencies:
1849 | '@webassemblyjs/floating-point-hex-parser': 1.13.2
1850 | '@webassemblyjs/helper-api-error': 1.13.2
1851 | '@xtuc/long': 4.2.2
1852 |
1853 | '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
1854 |
1855 | '@webassemblyjs/helper-wasm-section@1.14.1':
1856 | dependencies:
1857 | '@webassemblyjs/ast': 1.14.1
1858 | '@webassemblyjs/helper-buffer': 1.14.1
1859 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
1860 | '@webassemblyjs/wasm-gen': 1.14.1
1861 |
1862 | '@webassemblyjs/ieee754@1.13.2':
1863 | dependencies:
1864 | '@xtuc/ieee754': 1.2.0
1865 |
1866 | '@webassemblyjs/leb128@1.13.2':
1867 | dependencies:
1868 | '@xtuc/long': 4.2.2
1869 |
1870 | '@webassemblyjs/utf8@1.13.2': {}
1871 |
1872 | '@webassemblyjs/wasm-edit@1.14.1':
1873 | dependencies:
1874 | '@webassemblyjs/ast': 1.14.1
1875 | '@webassemblyjs/helper-buffer': 1.14.1
1876 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
1877 | '@webassemblyjs/helper-wasm-section': 1.14.1
1878 | '@webassemblyjs/wasm-gen': 1.14.1
1879 | '@webassemblyjs/wasm-opt': 1.14.1
1880 | '@webassemblyjs/wasm-parser': 1.14.1
1881 | '@webassemblyjs/wast-printer': 1.14.1
1882 |
1883 | '@webassemblyjs/wasm-gen@1.14.1':
1884 | dependencies:
1885 | '@webassemblyjs/ast': 1.14.1
1886 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
1887 | '@webassemblyjs/ieee754': 1.13.2
1888 | '@webassemblyjs/leb128': 1.13.2
1889 | '@webassemblyjs/utf8': 1.13.2
1890 |
1891 | '@webassemblyjs/wasm-opt@1.14.1':
1892 | dependencies:
1893 | '@webassemblyjs/ast': 1.14.1
1894 | '@webassemblyjs/helper-buffer': 1.14.1
1895 | '@webassemblyjs/wasm-gen': 1.14.1
1896 | '@webassemblyjs/wasm-parser': 1.14.1
1897 |
1898 | '@webassemblyjs/wasm-parser@1.14.1':
1899 | dependencies:
1900 | '@webassemblyjs/ast': 1.14.1
1901 | '@webassemblyjs/helper-api-error': 1.13.2
1902 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
1903 | '@webassemblyjs/ieee754': 1.13.2
1904 | '@webassemblyjs/leb128': 1.13.2
1905 | '@webassemblyjs/utf8': 1.13.2
1906 |
1907 | '@webassemblyjs/wast-printer@1.14.1':
1908 | dependencies:
1909 | '@webassemblyjs/ast': 1.14.1
1910 | '@xtuc/long': 4.2.2
1911 |
1912 | '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)':
1913 | dependencies:
1914 | webpack: 5.99.9(esbuild@0.25.4)(webpack-cli@6.0.1)
1915 | webpack-cli: 6.0.1(webpack@5.99.9)
1916 |
1917 | '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)':
1918 | dependencies:
1919 | webpack: 5.99.9(esbuild@0.25.4)(webpack-cli@6.0.1)
1920 | webpack-cli: 6.0.1(webpack@5.99.9)
1921 |
1922 | '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)':
1923 | dependencies:
1924 | webpack: 5.99.9(esbuild@0.25.4)(webpack-cli@6.0.1)
1925 | webpack-cli: 6.0.1(webpack@5.99.9)
1926 |
1927 | '@xtuc/ieee754@1.2.0': {}
1928 |
1929 | '@xtuc/long@4.2.2': {}
1930 |
1931 | acorn-jsx@5.3.2(acorn@8.14.1):
1932 | dependencies:
1933 | acorn: 8.14.1
1934 |
1935 | acorn@8.14.1: {}
1936 |
1937 | agent-base@7.1.3: {}
1938 |
1939 | ajv-formats@2.1.1(ajv@8.17.1):
1940 | optionalDependencies:
1941 | ajv: 8.17.1
1942 |
1943 | ajv-keywords@5.1.0(ajv@8.17.1):
1944 | dependencies:
1945 | ajv: 8.17.1
1946 | fast-deep-equal: 3.1.3
1947 |
1948 | ajv@6.12.6:
1949 | dependencies:
1950 | fast-deep-equal: 3.1.3
1951 | fast-json-stable-stringify: 2.1.0
1952 | json-schema-traverse: 0.4.1
1953 | uri-js: 4.4.1
1954 |
1955 | ajv@8.17.1:
1956 | dependencies:
1957 | fast-deep-equal: 3.1.3
1958 | fast-uri: 3.0.6
1959 | json-schema-traverse: 1.0.0
1960 | require-from-string: 2.0.2
1961 |
1962 | ansi-regex@5.0.1: {}
1963 |
1964 | ansi-regex@6.1.0: {}
1965 |
1966 | ansi-styles@4.3.0:
1967 | dependencies:
1968 | color-convert: 2.0.1
1969 |
1970 | ansi-styles@6.2.1: {}
1971 |
1972 | argparse@2.0.1: {}
1973 |
1974 | balanced-match@1.0.2: {}
1975 |
1976 | brace-expansion@1.1.11:
1977 | dependencies:
1978 | balanced-match: 1.0.2
1979 | concat-map: 0.0.1
1980 |
1981 | brace-expansion@2.0.1:
1982 | dependencies:
1983 | balanced-match: 1.0.2
1984 |
1985 | braces@3.0.3:
1986 | dependencies:
1987 | fill-range: 7.1.1
1988 |
1989 | browser-stdout@1.3.1: {}
1990 |
1991 | browserslist@4.24.4:
1992 | dependencies:
1993 | caniuse-lite: 1.0.30001712
1994 | electron-to-chromium: 1.5.135
1995 | node-releases: 2.0.19
1996 | update-browserslist-db: 1.1.3(browserslist@4.24.4)
1997 |
1998 | buffer-from@1.1.2: {}
1999 |
2000 | callsites@3.1.0: {}
2001 |
2002 | camelcase@6.3.0: {}
2003 |
2004 | caniuse-lite@1.0.30001712: {}
2005 |
2006 | chalk@4.1.2:
2007 | dependencies:
2008 | ansi-styles: 4.3.0
2009 | supports-color: 7.2.0
2010 |
2011 | chalk@5.4.1: {}
2012 |
2013 | child_process@1.0.2: {}
2014 |
2015 | chokidar@4.0.3:
2016 | dependencies:
2017 | readdirp: 4.1.2
2018 |
2019 | chrome-trace-event@1.0.4: {}
2020 |
2021 | cli-cursor@5.0.0:
2022 | dependencies:
2023 | restore-cursor: 5.1.0
2024 |
2025 | cli-spinners@2.9.2: {}
2026 |
2027 | cliui@8.0.1:
2028 | dependencies:
2029 | string-width: 4.2.3
2030 | strip-ansi: 6.0.1
2031 | wrap-ansi: 7.0.0
2032 |
2033 | clone-deep@4.0.1:
2034 | dependencies:
2035 | is-plain-object: 2.0.4
2036 | kind-of: 6.0.3
2037 | shallow-clone: 3.0.1
2038 |
2039 | color-convert@2.0.1:
2040 | dependencies:
2041 | color-name: 1.1.4
2042 |
2043 | color-name@1.1.4: {}
2044 |
2045 | colorette@2.0.20: {}
2046 |
2047 | commander@12.1.0: {}
2048 |
2049 | commander@2.20.3: {}
2050 |
2051 | compare-versions@6.1.1: {}
2052 |
2053 | concat-map@0.0.1: {}
2054 |
2055 | core-util-is@1.0.3: {}
2056 |
2057 | cross-spawn@7.0.6:
2058 | dependencies:
2059 | path-key: 3.1.1
2060 | shebang-command: 2.0.0
2061 | which: 2.0.2
2062 |
2063 | debug@4.4.0(supports-color@8.1.1):
2064 | dependencies:
2065 | ms: 2.1.3
2066 | optionalDependencies:
2067 | supports-color: 8.1.1
2068 |
2069 | debug@4.4.1:
2070 | dependencies:
2071 | ms: 2.1.3
2072 |
2073 | decamelize@4.0.0: {}
2074 |
2075 | deep-is@0.1.4: {}
2076 |
2077 | diff@7.0.0: {}
2078 |
2079 | eastasianwidth@0.2.0: {}
2080 |
2081 | electron-to-chromium@1.5.135: {}
2082 |
2083 | emoji-regex@10.4.0: {}
2084 |
2085 | emoji-regex@8.0.0: {}
2086 |
2087 | emoji-regex@9.2.2: {}
2088 |
2089 | enhanced-resolve@5.18.1:
2090 | dependencies:
2091 | graceful-fs: 4.2.11
2092 | tapable: 2.2.1
2093 |
2094 | envinfo@7.14.0: {}
2095 |
2096 | es-module-lexer@1.6.0: {}
2097 |
2098 | esbuild@0.25.4:
2099 | optionalDependencies:
2100 | '@esbuild/aix-ppc64': 0.25.4
2101 | '@esbuild/android-arm': 0.25.4
2102 | '@esbuild/android-arm64': 0.25.4
2103 | '@esbuild/android-x64': 0.25.4
2104 | '@esbuild/darwin-arm64': 0.25.4
2105 | '@esbuild/darwin-x64': 0.25.4
2106 | '@esbuild/freebsd-arm64': 0.25.4
2107 | '@esbuild/freebsd-x64': 0.25.4
2108 | '@esbuild/linux-arm': 0.25.4
2109 | '@esbuild/linux-arm64': 0.25.4
2110 | '@esbuild/linux-ia32': 0.25.4
2111 | '@esbuild/linux-loong64': 0.25.4
2112 | '@esbuild/linux-mips64el': 0.25.4
2113 | '@esbuild/linux-ppc64': 0.25.4
2114 | '@esbuild/linux-riscv64': 0.25.4
2115 | '@esbuild/linux-s390x': 0.25.4
2116 | '@esbuild/linux-x64': 0.25.4
2117 | '@esbuild/netbsd-arm64': 0.25.4
2118 | '@esbuild/netbsd-x64': 0.25.4
2119 | '@esbuild/openbsd-arm64': 0.25.4
2120 | '@esbuild/openbsd-x64': 0.25.4
2121 | '@esbuild/sunos-x64': 0.25.4
2122 | '@esbuild/win32-arm64': 0.25.4
2123 | '@esbuild/win32-ia32': 0.25.4
2124 | '@esbuild/win32-x64': 0.25.4
2125 |
2126 | escalade@3.2.0: {}
2127 |
2128 | escape-string-regexp@4.0.0: {}
2129 |
2130 | eslint-scope@5.1.1:
2131 | dependencies:
2132 | esrecurse: 4.3.0
2133 | estraverse: 4.3.0
2134 |
2135 | eslint-scope@8.3.0:
2136 | dependencies:
2137 | esrecurse: 4.3.0
2138 | estraverse: 5.3.0
2139 |
2140 | eslint-visitor-keys@3.4.3: {}
2141 |
2142 | eslint-visitor-keys@4.2.0: {}
2143 |
2144 | eslint@9.27.0:
2145 | dependencies:
2146 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.27.0)
2147 | '@eslint-community/regexpp': 4.12.1
2148 | '@eslint/config-array': 0.20.0
2149 | '@eslint/config-helpers': 0.2.1
2150 | '@eslint/core': 0.14.0
2151 | '@eslint/eslintrc': 3.3.1
2152 | '@eslint/js': 9.27.0
2153 | '@eslint/plugin-kit': 0.3.1
2154 | '@humanfs/node': 0.16.6
2155 | '@humanwhocodes/module-importer': 1.0.1
2156 | '@humanwhocodes/retry': 0.4.2
2157 | '@types/estree': 1.0.7
2158 | '@types/json-schema': 7.0.15
2159 | ajv: 6.12.6
2160 | chalk: 4.1.2
2161 | cross-spawn: 7.0.6
2162 | debug: 4.4.0(supports-color@8.1.1)
2163 | escape-string-regexp: 4.0.0
2164 | eslint-scope: 8.3.0
2165 | eslint-visitor-keys: 4.2.0
2166 | espree: 10.3.0
2167 | esquery: 1.6.0
2168 | esutils: 2.0.3
2169 | fast-deep-equal: 3.1.3
2170 | file-entry-cache: 8.0.0
2171 | find-up: 5.0.0
2172 | glob-parent: 6.0.2
2173 | ignore: 5.3.2
2174 | imurmurhash: 0.1.4
2175 | is-glob: 4.0.3
2176 | json-stable-stringify-without-jsonify: 1.0.1
2177 | lodash.merge: 4.6.2
2178 | minimatch: 3.1.2
2179 | natural-compare: 1.4.0
2180 | optionator: 0.9.4
2181 | transitivePeerDependencies:
2182 | - supports-color
2183 |
2184 | espree@10.3.0:
2185 | dependencies:
2186 | acorn: 8.14.1
2187 | acorn-jsx: 5.3.2(acorn@8.14.1)
2188 | eslint-visitor-keys: 4.2.0
2189 |
2190 | esquery@1.6.0:
2191 | dependencies:
2192 | estraverse: 5.3.0
2193 |
2194 | esrecurse@4.3.0:
2195 | dependencies:
2196 | estraverse: 5.3.0
2197 |
2198 | estraverse@4.3.0: {}
2199 |
2200 | estraverse@5.3.0: {}
2201 |
2202 | esutils@2.0.3: {}
2203 |
2204 | events@3.3.0: {}
2205 |
2206 | fast-deep-equal@3.1.3: {}
2207 |
2208 | fast-glob@3.3.3:
2209 | dependencies:
2210 | '@nodelib/fs.stat': 2.0.5
2211 | '@nodelib/fs.walk': 1.2.8
2212 | glob-parent: 5.1.2
2213 | merge2: 1.4.1
2214 | micromatch: 4.0.8
2215 |
2216 | fast-json-stable-stringify@2.1.0: {}
2217 |
2218 | fast-levenshtein@2.0.6: {}
2219 |
2220 | fast-uri@3.0.6: {}
2221 |
2222 | fastest-levenshtein@1.0.16: {}
2223 |
2224 | fastq@1.19.1:
2225 | dependencies:
2226 | reusify: 1.1.0
2227 |
2228 | file-entry-cache@8.0.0:
2229 | dependencies:
2230 | flat-cache: 4.0.1
2231 |
2232 | fill-range@7.1.1:
2233 | dependencies:
2234 | to-regex-range: 5.0.1
2235 |
2236 | find-up@4.1.0:
2237 | dependencies:
2238 | locate-path: 5.0.0
2239 | path-exists: 4.0.0
2240 |
2241 | find-up@5.0.0:
2242 | dependencies:
2243 | locate-path: 6.0.0
2244 | path-exists: 4.0.0
2245 |
2246 | flat-cache@4.0.1:
2247 | dependencies:
2248 | flatted: 3.3.3
2249 | keyv: 4.5.4
2250 |
2251 | flat@5.0.2: {}
2252 |
2253 | flatted@3.3.3: {}
2254 |
2255 | foreground-child@3.3.1:
2256 | dependencies:
2257 | cross-spawn: 7.0.6
2258 | signal-exit: 4.1.0
2259 |
2260 | fs@0.0.1-security: {}
2261 |
2262 | function-bind@1.1.2: {}
2263 |
2264 | get-caller-file@2.0.5: {}
2265 |
2266 | get-east-asian-width@1.3.0: {}
2267 |
2268 | glob-parent@5.1.2:
2269 | dependencies:
2270 | is-glob: 4.0.3
2271 |
2272 | glob-parent@6.0.2:
2273 | dependencies:
2274 | is-glob: 4.0.3
2275 |
2276 | glob-to-regexp@0.4.1: {}
2277 |
2278 | glob@10.4.5:
2279 | dependencies:
2280 | foreground-child: 3.3.1
2281 | jackspeak: 3.4.3
2282 | minimatch: 9.0.5
2283 | minipass: 7.1.2
2284 | package-json-from-dist: 1.0.1
2285 | path-scurry: 1.11.1
2286 |
2287 | glob@11.0.2:
2288 | dependencies:
2289 | foreground-child: 3.3.1
2290 | jackspeak: 4.1.0
2291 | minimatch: 10.0.1
2292 | minipass: 7.1.2
2293 | package-json-from-dist: 1.0.1
2294 | path-scurry: 2.0.0
2295 |
2296 | globals@14.0.0: {}
2297 |
2298 | graceful-fs@4.2.11: {}
2299 |
2300 | graphemer@1.4.0: {}
2301 |
2302 | has-flag@4.0.0: {}
2303 |
2304 | hasown@2.0.2:
2305 | dependencies:
2306 | function-bind: 1.1.2
2307 |
2308 | he@1.2.0: {}
2309 |
2310 | http-proxy-agent@7.0.2:
2311 | dependencies:
2312 | agent-base: 7.1.3
2313 | debug: 4.4.0(supports-color@8.1.1)
2314 | transitivePeerDependencies:
2315 | - supports-color
2316 |
2317 | https-proxy-agent@7.0.6:
2318 | dependencies:
2319 | agent-base: 7.1.3
2320 | debug: 4.4.0(supports-color@8.1.1)
2321 | transitivePeerDependencies:
2322 | - supports-color
2323 |
2324 | ignore@5.3.2: {}
2325 |
2326 | ignore@7.0.4: {}
2327 |
2328 | immediate@3.0.6: {}
2329 |
2330 | import-fresh@3.3.1:
2331 | dependencies:
2332 | parent-module: 1.0.1
2333 | resolve-from: 4.0.0
2334 |
2335 | import-local@3.2.0:
2336 | dependencies:
2337 | pkg-dir: 4.2.0
2338 | resolve-cwd: 3.0.0
2339 |
2340 | imurmurhash@0.1.4: {}
2341 |
2342 | inherits@2.0.3: {}
2343 |
2344 | inherits@2.0.4: {}
2345 |
2346 | interpret@3.1.1: {}
2347 |
2348 | is-core-module@2.16.1:
2349 | dependencies:
2350 | hasown: 2.0.2
2351 |
2352 | is-extglob@2.1.1: {}
2353 |
2354 | is-fullwidth-code-point@3.0.0: {}
2355 |
2356 | is-glob@4.0.3:
2357 | dependencies:
2358 | is-extglob: 2.1.1
2359 |
2360 | is-interactive@2.0.0: {}
2361 |
2362 | is-number@7.0.0: {}
2363 |
2364 | is-plain-obj@2.1.0: {}
2365 |
2366 | is-plain-object@2.0.4:
2367 | dependencies:
2368 | isobject: 3.0.1
2369 |
2370 | is-unicode-supported@0.1.0: {}
2371 |
2372 | is-unicode-supported@1.3.0: {}
2373 |
2374 | is-unicode-supported@2.1.0: {}
2375 |
2376 | isarray@1.0.0: {}
2377 |
2378 | isexe@2.0.0: {}
2379 |
2380 | isobject@3.0.1: {}
2381 |
2382 | jackspeak@3.4.3:
2383 | dependencies:
2384 | '@isaacs/cliui': 8.0.2
2385 | optionalDependencies:
2386 | '@pkgjs/parseargs': 0.11.0
2387 |
2388 | jackspeak@4.1.0:
2389 | dependencies:
2390 | '@isaacs/cliui': 8.0.2
2391 |
2392 | jest-worker@27.5.1:
2393 | dependencies:
2394 | '@types/node': 22.14.0
2395 | merge-stream: 2.0.0
2396 | supports-color: 8.1.1
2397 |
2398 | js-yaml@4.1.0:
2399 | dependencies:
2400 | argparse: 2.0.1
2401 |
2402 | json-buffer@3.0.1: {}
2403 |
2404 | json-parse-even-better-errors@2.3.1: {}
2405 |
2406 | json-schema-traverse@0.4.1: {}
2407 |
2408 | json-schema-traverse@1.0.0: {}
2409 |
2410 | json-stable-stringify-without-jsonify@1.0.1: {}
2411 |
2412 | jszip@3.10.1:
2413 | dependencies:
2414 | lie: 3.3.0
2415 | pako: 1.0.11
2416 | readable-stream: 2.3.8
2417 | setimmediate: 1.0.5
2418 |
2419 | keyv@4.5.4:
2420 | dependencies:
2421 | json-buffer: 3.0.1
2422 |
2423 | kind-of@6.0.3: {}
2424 |
2425 | levn@0.4.1:
2426 | dependencies:
2427 | prelude-ls: 1.2.1
2428 | type-check: 0.4.0
2429 |
2430 | lie@3.3.0:
2431 | dependencies:
2432 | immediate: 3.0.6
2433 |
2434 | loader-runner@4.3.0: {}
2435 |
2436 | locate-path@5.0.0:
2437 | dependencies:
2438 | p-locate: 4.1.0
2439 |
2440 | locate-path@6.0.0:
2441 | dependencies:
2442 | p-locate: 5.0.0
2443 |
2444 | lodash.merge@4.6.2: {}
2445 |
2446 | log-symbols@4.1.0:
2447 | dependencies:
2448 | chalk: 4.1.2
2449 | is-unicode-supported: 0.1.0
2450 |
2451 | log-symbols@6.0.0:
2452 | dependencies:
2453 | chalk: 5.4.1
2454 | is-unicode-supported: 1.3.0
2455 |
2456 | lru-cache@10.4.3: {}
2457 |
2458 | lru-cache@11.1.0: {}
2459 |
2460 | merge-stream@2.0.0: {}
2461 |
2462 | merge2@1.4.1: {}
2463 |
2464 | micromatch@4.0.8:
2465 | dependencies:
2466 | braces: 3.0.3
2467 | picomatch: 2.3.1
2468 |
2469 | mime-db@1.52.0: {}
2470 |
2471 | mime-types@2.1.35:
2472 | dependencies:
2473 | mime-db: 1.52.0
2474 |
2475 | mimic-function@5.0.1: {}
2476 |
2477 | minimatch@10.0.1:
2478 | dependencies:
2479 | brace-expansion: 2.0.1
2480 |
2481 | minimatch@3.1.2:
2482 | dependencies:
2483 | brace-expansion: 1.1.11
2484 |
2485 | minimatch@5.1.6:
2486 | dependencies:
2487 | brace-expansion: 2.0.1
2488 |
2489 | minimatch@9.0.5:
2490 | dependencies:
2491 | brace-expansion: 2.0.1
2492 |
2493 | minipass@7.1.2: {}
2494 |
2495 | mocha@11.4.0:
2496 | dependencies:
2497 | browser-stdout: 1.3.1
2498 | chokidar: 4.0.3
2499 | debug: 4.4.0(supports-color@8.1.1)
2500 | diff: 7.0.0
2501 | escape-string-regexp: 4.0.0
2502 | find-up: 5.0.0
2503 | glob: 10.4.5
2504 | he: 1.2.0
2505 | js-yaml: 4.1.0
2506 | log-symbols: 4.1.0
2507 | minimatch: 5.1.6
2508 | ms: 2.1.3
2509 | picocolors: 1.1.1
2510 | serialize-javascript: 6.0.2
2511 | strip-json-comments: 3.1.1
2512 | supports-color: 8.1.1
2513 | workerpool: 6.5.1
2514 | yargs: 17.7.2
2515 | yargs-parser: 21.1.1
2516 | yargs-unparser: 2.0.0
2517 |
2518 | ms@2.1.3: {}
2519 |
2520 | natural-compare@1.4.0: {}
2521 |
2522 | neo-async@2.6.2: {}
2523 |
2524 | node-releases@2.0.19: {}
2525 |
2526 | onetime@7.0.0:
2527 | dependencies:
2528 | mimic-function: 5.0.1
2529 |
2530 | optionator@0.9.4:
2531 | dependencies:
2532 | deep-is: 0.1.4
2533 | fast-levenshtein: 2.0.6
2534 | levn: 0.4.1
2535 | prelude-ls: 1.2.1
2536 | type-check: 0.4.0
2537 | word-wrap: 1.2.5
2538 |
2539 | ora@8.2.0:
2540 | dependencies:
2541 | chalk: 5.4.1
2542 | cli-cursor: 5.0.0
2543 | cli-spinners: 2.9.2
2544 | is-interactive: 2.0.0
2545 | is-unicode-supported: 2.1.0
2546 | log-symbols: 6.0.0
2547 | stdin-discarder: 0.2.2
2548 | string-width: 7.2.0
2549 | strip-ansi: 7.1.0
2550 |
2551 | p-limit@2.3.0:
2552 | dependencies:
2553 | p-try: 2.2.0
2554 |
2555 | p-limit@3.1.0:
2556 | dependencies:
2557 | yocto-queue: 0.1.0
2558 |
2559 | p-locate@4.1.0:
2560 | dependencies:
2561 | p-limit: 2.3.0
2562 |
2563 | p-locate@5.0.0:
2564 | dependencies:
2565 | p-limit: 3.1.0
2566 |
2567 | p-try@2.2.0: {}
2568 |
2569 | package-json-from-dist@1.0.1: {}
2570 |
2571 | pako@1.0.11: {}
2572 |
2573 | parent-module@1.0.1:
2574 | dependencies:
2575 | callsites: 3.1.0
2576 |
2577 | path-exists@4.0.0: {}
2578 |
2579 | path-key@3.1.1: {}
2580 |
2581 | path-parse@1.0.7: {}
2582 |
2583 | path-scurry@1.11.1:
2584 | dependencies:
2585 | lru-cache: 10.4.3
2586 | minipass: 7.1.2
2587 |
2588 | path-scurry@2.0.0:
2589 | dependencies:
2590 | lru-cache: 11.1.0
2591 | minipass: 7.1.2
2592 |
2593 | path@0.12.7:
2594 | dependencies:
2595 | process: 0.11.10
2596 | util: 0.10.4
2597 |
2598 | picocolors@1.1.1: {}
2599 |
2600 | picomatch@2.3.1: {}
2601 |
2602 | pkg-dir@4.2.0:
2603 | dependencies:
2604 | find-up: 4.1.0
2605 |
2606 | prelude-ls@1.2.1: {}
2607 |
2608 | process-nextick-args@2.0.1: {}
2609 |
2610 | process@0.11.10: {}
2611 |
2612 | punycode@2.3.1: {}
2613 |
2614 | queue-microtask@1.2.3: {}
2615 |
2616 | randombytes@2.1.0:
2617 | dependencies:
2618 | safe-buffer: 5.2.1
2619 |
2620 | readable-stream@2.3.8:
2621 | dependencies:
2622 | core-util-is: 1.0.3
2623 | inherits: 2.0.4
2624 | isarray: 1.0.0
2625 | process-nextick-args: 2.0.1
2626 | safe-buffer: 5.1.2
2627 | string_decoder: 1.1.1
2628 | util-deprecate: 1.0.2
2629 |
2630 | readdirp@4.1.2: {}
2631 |
2632 | rechoir@0.8.0:
2633 | dependencies:
2634 | resolve: 1.22.10
2635 |
2636 | require-directory@2.1.1: {}
2637 |
2638 | require-from-string@2.0.2: {}
2639 |
2640 | resolve-cwd@3.0.0:
2641 | dependencies:
2642 | resolve-from: 5.0.0
2643 |
2644 | resolve-from@4.0.0: {}
2645 |
2646 | resolve-from@5.0.0: {}
2647 |
2648 | resolve@1.22.10:
2649 | dependencies:
2650 | is-core-module: 2.16.1
2651 | path-parse: 1.0.7
2652 | supports-preserve-symlinks-flag: 1.0.0
2653 |
2654 | restore-cursor@5.1.0:
2655 | dependencies:
2656 | onetime: 7.0.0
2657 | signal-exit: 4.1.0
2658 |
2659 | reusify@1.1.0: {}
2660 |
2661 | run-parallel@1.2.0:
2662 | dependencies:
2663 | queue-microtask: 1.2.3
2664 |
2665 | safe-buffer@5.1.2: {}
2666 |
2667 | safe-buffer@5.2.1: {}
2668 |
2669 | schema-utils@4.3.2:
2670 | dependencies:
2671 | '@types/json-schema': 7.0.15
2672 | ajv: 8.17.1
2673 | ajv-formats: 2.1.1(ajv@8.17.1)
2674 | ajv-keywords: 5.1.0(ajv@8.17.1)
2675 |
2676 | semver@7.7.1: {}
2677 |
2678 | semver@7.7.2: {}
2679 |
2680 | serialize-javascript@6.0.2:
2681 | dependencies:
2682 | randombytes: 2.1.0
2683 |
2684 | setimmediate@1.0.5: {}
2685 |
2686 | shallow-clone@3.0.1:
2687 | dependencies:
2688 | kind-of: 6.0.3
2689 |
2690 | shebang-command@2.0.0:
2691 | dependencies:
2692 | shebang-regex: 3.0.0
2693 |
2694 | shebang-regex@3.0.0: {}
2695 |
2696 | signal-exit@4.1.0: {}
2697 |
2698 | source-map-support@0.5.21:
2699 | dependencies:
2700 | buffer-from: 1.1.2
2701 | source-map: 0.6.1
2702 |
2703 | source-map@0.6.1: {}
2704 |
2705 | source-map@0.7.4: {}
2706 |
2707 | stdin-discarder@0.2.2: {}
2708 |
2709 | string-width@4.2.3:
2710 | dependencies:
2711 | emoji-regex: 8.0.0
2712 | is-fullwidth-code-point: 3.0.0
2713 | strip-ansi: 6.0.1
2714 |
2715 | string-width@5.1.2:
2716 | dependencies:
2717 | eastasianwidth: 0.2.0
2718 | emoji-regex: 9.2.2
2719 | strip-ansi: 7.1.0
2720 |
2721 | string-width@7.2.0:
2722 | dependencies:
2723 | emoji-regex: 10.4.0
2724 | get-east-asian-width: 1.3.0
2725 | strip-ansi: 7.1.0
2726 |
2727 | string_decoder@1.1.1:
2728 | dependencies:
2729 | safe-buffer: 5.1.2
2730 |
2731 | strip-ansi@6.0.1:
2732 | dependencies:
2733 | ansi-regex: 5.0.1
2734 |
2735 | strip-ansi@7.1.0:
2736 | dependencies:
2737 | ansi-regex: 6.1.0
2738 |
2739 | strip-json-comments@3.1.1: {}
2740 |
2741 | supports-color@7.2.0:
2742 | dependencies:
2743 | has-flag: 4.0.0
2744 |
2745 | supports-color@8.1.1:
2746 | dependencies:
2747 | has-flag: 4.0.0
2748 |
2749 | supports-preserve-symlinks-flag@1.0.0: {}
2750 |
2751 | tapable@2.2.1: {}
2752 |
2753 | terser-webpack-plugin@5.3.14(esbuild@0.25.4)(webpack@5.99.9):
2754 | dependencies:
2755 | '@jridgewell/trace-mapping': 0.3.25
2756 | jest-worker: 27.5.1
2757 | schema-utils: 4.3.2
2758 | serialize-javascript: 6.0.2
2759 | terser: 5.39.0
2760 | webpack: 5.99.9(esbuild@0.25.4)(webpack-cli@6.0.1)
2761 | optionalDependencies:
2762 | esbuild: 0.25.4
2763 |
2764 | terser@5.39.0:
2765 | dependencies:
2766 | '@jridgewell/source-map': 0.3.6
2767 | acorn: 8.14.1
2768 | commander: 2.20.3
2769 | source-map-support: 0.5.21
2770 |
2771 | to-regex-range@5.0.1:
2772 | dependencies:
2773 | is-number: 7.0.0
2774 |
2775 | ts-api-utils@2.1.0(typescript@5.8.3):
2776 | dependencies:
2777 | typescript: 5.8.3
2778 |
2779 | ts-loader@9.5.2(typescript@5.8.3)(webpack@5.99.9):
2780 | dependencies:
2781 | chalk: 4.1.2
2782 | enhanced-resolve: 5.18.1
2783 | micromatch: 4.0.8
2784 | semver: 7.7.1
2785 | source-map: 0.7.4
2786 | typescript: 5.8.3
2787 | webpack: 5.99.9(esbuild@0.25.4)(webpack-cli@6.0.1)
2788 |
2789 | type-check@0.4.0:
2790 | dependencies:
2791 | prelude-ls: 1.2.1
2792 |
2793 | typescript@5.8.3: {}
2794 |
2795 | undici-types@6.21.0: {}
2796 |
2797 | update-browserslist-db@1.1.3(browserslist@4.24.4):
2798 | dependencies:
2799 | browserslist: 4.24.4
2800 | escalade: 3.2.0
2801 | picocolors: 1.1.1
2802 |
2803 | uri-js@4.4.1:
2804 | dependencies:
2805 | punycode: 2.3.1
2806 |
2807 | util-deprecate@1.0.2: {}
2808 |
2809 | util@0.10.4:
2810 | dependencies:
2811 | inherits: 2.0.3
2812 |
2813 | watchpack@2.4.2:
2814 | dependencies:
2815 | glob-to-regexp: 0.4.1
2816 | graceful-fs: 4.2.11
2817 |
2818 | webpack-cli@6.0.1(webpack@5.99.9):
2819 | dependencies:
2820 | '@discoveryjs/json-ext': 0.6.3
2821 | '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)
2822 | '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)
2823 | '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)
2824 | colorette: 2.0.20
2825 | commander: 12.1.0
2826 | cross-spawn: 7.0.6
2827 | envinfo: 7.14.0
2828 | fastest-levenshtein: 1.0.16
2829 | import-local: 3.2.0
2830 | interpret: 3.1.1
2831 | rechoir: 0.8.0
2832 | webpack: 5.99.9(esbuild@0.25.4)(webpack-cli@6.0.1)
2833 | webpack-merge: 6.0.1
2834 |
2835 | webpack-merge@6.0.1:
2836 | dependencies:
2837 | clone-deep: 4.0.1
2838 | flat: 5.0.2
2839 | wildcard: 2.0.1
2840 |
2841 | webpack-sources@3.2.3: {}
2842 |
2843 | webpack@5.99.9(esbuild@0.25.4)(webpack-cli@6.0.1):
2844 | dependencies:
2845 | '@types/eslint-scope': 3.7.7
2846 | '@types/estree': 1.0.7
2847 | '@types/json-schema': 7.0.15
2848 | '@webassemblyjs/ast': 1.14.1
2849 | '@webassemblyjs/wasm-edit': 1.14.1
2850 | '@webassemblyjs/wasm-parser': 1.14.1
2851 | acorn: 8.14.1
2852 | browserslist: 4.24.4
2853 | chrome-trace-event: 1.0.4
2854 | enhanced-resolve: 5.18.1
2855 | es-module-lexer: 1.6.0
2856 | eslint-scope: 5.1.1
2857 | events: 3.3.0
2858 | glob-to-regexp: 0.4.1
2859 | graceful-fs: 4.2.11
2860 | json-parse-even-better-errors: 2.3.1
2861 | loader-runner: 4.3.0
2862 | mime-types: 2.1.35
2863 | neo-async: 2.6.2
2864 | schema-utils: 4.3.2
2865 | tapable: 2.2.1
2866 | terser-webpack-plugin: 5.3.14(esbuild@0.25.4)(webpack@5.99.9)
2867 | watchpack: 2.4.2
2868 | webpack-sources: 3.2.3
2869 | optionalDependencies:
2870 | webpack-cli: 6.0.1(webpack@5.99.9)
2871 | transitivePeerDependencies:
2872 | - '@swc/core'
2873 | - esbuild
2874 | - uglify-js
2875 |
2876 | which@2.0.2:
2877 | dependencies:
2878 | isexe: 2.0.0
2879 |
2880 | wildcard@2.0.1: {}
2881 |
2882 | word-wrap@1.2.5: {}
2883 |
2884 | workerpool@6.5.1: {}
2885 |
2886 | wrap-ansi@7.0.0:
2887 | dependencies:
2888 | ansi-styles: 4.3.0
2889 | string-width: 4.2.3
2890 | strip-ansi: 6.0.1
2891 |
2892 | wrap-ansi@8.1.0:
2893 | dependencies:
2894 | ansi-styles: 6.2.1
2895 | string-width: 5.1.2
2896 | strip-ansi: 7.1.0
2897 |
2898 | y18n@5.0.8: {}
2899 |
2900 | yargs-parser@21.1.1: {}
2901 |
2902 | yargs-unparser@2.0.0:
2903 | dependencies:
2904 | camelcase: 6.3.0
2905 | decamelize: 4.0.0
2906 | flat: 5.0.2
2907 | is-plain-obj: 2.1.0
2908 |
2909 | yargs@17.7.2:
2910 | dependencies:
2911 | cliui: 8.0.1
2912 | escalade: 3.2.0
2913 | get-caller-file: 2.0.5
2914 | require-directory: 2.1.1
2915 | string-width: 4.2.3
2916 | y18n: 5.0.8
2917 | yargs-parser: 21.1.1
2918 |
2919 | yocto-queue@0.1.0: {}
2920 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | onlyBuiltDependencies:
2 | - esbuild
3 |
--------------------------------------------------------------------------------
/src/documentFilter.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 | export class DocumentFilter implements vscode.DocumentFilter
3 | {
4 | language?: string;
5 |
6 | scheme?: string;
7 |
8 | pattern?: vscode.GlobPattern;
9 |
10 | constructor(language?: string, scheme?: string, pattern?: vscode.GlobPattern)
11 | {
12 | this.language = language ?? undefined;
13 | this.scheme = scheme ?? undefined;
14 | this.pattern = pattern ?? undefined;
15 | }
16 | }
--------------------------------------------------------------------------------
/src/documentHelper.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/naming-convention */
2 | // imports
3 | import * as vscode from "vscode";
4 | import { DocumentFilter } from "./documentFilter";
5 | import { Logger } from "./logger";
6 |
7 |
8 |
9 | export class DocumentHelper {
10 | constructor() {
11 |
12 | }
13 |
14 |
15 | public static get Editor() {
16 | return vscode.window.activeTextEditor;
17 | }
18 |
19 | //get Range of the active document in editor
20 | public static getEditorRange(): vscode.Range {
21 | Logger.instance.info("getEditorRange start");
22 | if (this.Editor) {
23 | //get editor text
24 | let document = this.Editor.document;
25 | var start = new vscode.Position(0, 0);
26 | var lastButOne = document.lineAt(document.lineCount - 1);
27 | var end = new vscode.Position(document.lineCount, lastButOne.range.end.character);
28 | var ranger = new vscode.Range(start, end);
29 | Logger.instance.info("getEditorRange end");
30 | return ranger;
31 | }
32 | else {
33 | Logger.instance.warning("Editor null. Returning 0 range");
34 | Logger.instance.info("getEditorRange end");
35 | return new vscode.Range(0, 0, 0, 0);
36 | }
37 |
38 | }
39 |
40 | //get Range of a document
41 | public static getDocumentRange(document: vscode.TextDocument): vscode.Range {
42 | Logger.instance.info("getDocumentRange start");
43 | if (document) {
44 | var start = new vscode.Position(0, 0);
45 | var lastButOne = document.lineAt(document.lineCount - 1);
46 | var end = new vscode.Position(document.lineCount, lastButOne.range.end.character);
47 | var ranger = new vscode.Range(start, end);
48 | Logger.instance.info("getDocumentRange end");
49 | return ranger;
50 | }
51 | else {
52 | Logger.instance.warning("document null. Returning empty range");
53 | Logger.instance.info("getDocumentRange end");
54 | return new vscode.Range(0, 0, 0, 0);
55 | }
56 | }
57 |
58 | public static getDocumentText(): string {
59 | if (this.Editor) {
60 | return this.Editor.document.getText();
61 | }
62 | else {
63 | throw new Error("Editor not found!");
64 | }
65 | }
66 |
67 | public static replaceTextForRange(range: vscode.Range, newText: string) {
68 | Logger.instance.info("replaceTextForRange start");
69 | if (this.Editor) {
70 | this.Editor.edit(editBuilder => {
71 | editBuilder.replace(range, newText);
72 | Logger.instance.info("Editor.edit.editBuilder.replace...");
73 | });
74 | } else {
75 | Logger.instance.warning("Editor is null");
76 | }
77 | Logger.instance.info("replaceTextForRange end");
78 | }
79 |
80 | public static replaceDocumentText(newText: string) {
81 | Logger.instance.info("replaceDocumentText start");
82 | if (this.Editor) {
83 | var range = this.getEditorRange();
84 | this.Editor.edit(editBuilder => {
85 | editBuilder.replace(range, newText);
86 | Logger.instance.info("Editor.edit.editBuilder.replace...");
87 | });
88 | } else {
89 | Logger.instance.warning("Editor is null");
90 | }
91 | Logger.instance.info("replaceDocumentText end");
92 | }
93 |
94 | public static createLanguageDocumentFilters(language: string): vscode.DocumentFilter[] {
95 | var filters = [new DocumentFilter(language, 'file'), new DocumentFilter(language, 'untitled')];
96 | return filters;
97 | }
98 | }
--------------------------------------------------------------------------------
/src/extension.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 | import { DocumentHelper } from "./documentHelper";
3 | import { Formatter } from "./formatter";
4 | import { PrettyXmlFormattingEditProvider } from "./prettyXmlFormattingEditProvider";
5 | import { NotificationService } from "./notificationService";
6 | import { replaceDocumentTextWithProgressForCallback } from "./helper";
7 | import { Logger } from "./logger";
8 | import { RangeFormatterProvider } from "./rangeFormatterProvider";
9 |
10 | let formatter: Formatter;
11 | let notificationService: NotificationService;
12 | export const prettyxml = "prettyxml";
13 |
14 | //extension activate
15 | export function activate(context: vscode.ExtensionContext): void {
16 | try {
17 |
18 | formatter = new Formatter(context);
19 | notificationService = new NotificationService(context);
20 |
21 | notificationService.notifyWhatsNewInUpdateAsync();
22 | notificationService.handleReviewPromptAsync();
23 |
24 | vscode.workspace.onDidChangeConfiguration((configChangeEvent: vscode.ConfigurationChangeEvent) => {
25 | Logger.instance.info("workspace.onDidChangeConfiguration start");
26 | formatter.loadSettings();
27 | Logger.instance.info("workspace.onDidChangeConfiguration end");
28 | });
29 |
30 | let prettifyXmlCommand = vscode.commands.registerTextEditorCommand(`${prettyxml}.prettifyxml`, () => replaceDocumentTextWithProgressForCallback("Formatting...", formatter.formatXml()));
31 |
32 | let minimizeXmlCommand = vscode.commands.registerTextEditorCommand(`${prettyxml}.minimizexml`, () => replaceDocumentTextWithProgressForCallback("Minimizing...", formatter.minimizeXml()));
33 |
34 | vscode.workspace.onWillSaveTextDocument(async (willSaveEvent) => {
35 | Logger.instance.info("vscode.workspace.onWillSaveTextDocument start");
36 | try {
37 | var languageId = willSaveEvent?.document?.languageId;
38 | if (languageId) {
39 | if (languageId === "xml" || languageId === "xsd" || languageId === "xaml") {
40 | let prettyXmlConfig = vscode.workspace.getConfiguration(`${prettyxml}.settings`);
41 | let formatOnSave = prettyXmlConfig.get("formatOnSave") ?? false;
42 | if (formatOnSave) {
43 | willSaveEvent.waitUntil(replaceDocumentTextWithProgressForCallback("Formatting...", formatter.formatXml()));
44 | }
45 | }
46 | }
47 | else {
48 | Logger.instance.warning("Invalid languageId");
49 | }
50 | }
51 | catch (error) {
52 | if (error instanceof Error) {
53 | Logger.instance.error(error);
54 | vscode.window.showErrorMessage(error.message);
55 | console.error(error);
56 | }
57 | }
58 | Logger.instance.info("vscode.workspace.onWillSaveTextDocument end");
59 | });
60 |
61 | const xmlXsdDocSelector = [
62 | ...DocumentHelper.createLanguageDocumentFilters("xml"),
63 | ...DocumentHelper.createLanguageDocumentFilters("xsd"),
64 | ...DocumentHelper.createLanguageDocumentFilters("xaml"),
65 | ];
66 | const xmlFormattingEditProvider = new PrettyXmlFormattingEditProvider(formatter);
67 |
68 | let documentFormatterProvider = vscode.languages.registerDocumentFormattingEditProvider(xmlXsdDocSelector, xmlFormattingEditProvider);
69 |
70 | const rangeFormatterProvider = new RangeFormatterProvider(formatter.settings);
71 | const selectionFormatter = vscode.languages.registerDocumentRangeFormattingEditProvider(xmlXsdDocSelector, rangeFormatterProvider);
72 |
73 | //subscribe commands
74 | context.subscriptions.push(prettifyXmlCommand,
75 | minimizeXmlCommand,
76 | documentFormatterProvider,
77 | selectionFormatter);
78 | }
79 | catch (error) {
80 | if (error instanceof Error) {
81 | vscode.window.showErrorMessage(error.message);
82 | Logger.instance.error(error);
83 | }
84 | else if (typeof error === "string") {
85 | vscode.window.showErrorMessage(error);
86 | Logger.instance.warning(error);
87 | }
88 | console.error(error);
89 | }
90 | }
91 |
92 | //extension deactivate
93 | export function deactivate() {
94 | Logger.instance.info("Extension dectivated");
95 | }
96 |
--------------------------------------------------------------------------------
/src/formatter.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 | import { DocumentHelper } from "./documentHelper";
3 | import { defaultSettings, Settings } from "./settings";
4 | import * as childProcess from "child_process";
5 | import * as path from "path";
6 | import { JsonInputDto } from "./jsonInputDto";
7 | import { FormattingActionKind } from "./formattingActionKind";
8 | import { Logger } from "./logger";
9 | import { prettyxml } from "./extension";
10 |
11 | export class Formatter {
12 | private extensionContext: vscode.ExtensionContext;
13 | private dllPath: string = "";
14 |
15 | public settings: Settings = defaultSettings;
16 | constructor(context: vscode.ExtensionContext) {
17 | this.extensionContext = context;
18 | this.initialize();
19 | this.loadSettings();
20 | }
21 |
22 | private initialize() {
23 | try {
24 |
25 | let extPath: string = this.extensionContext.extensionPath;
26 | //extension path was not found
27 | if (extPath === "") {
28 | vscode.window.showErrorMessage('Error in finding extension path');
29 | Logger.instance.warning("Error in finding extension path. Throwing error from initialize");
30 | throw new Error('Error in finding extension path');
31 | }
32 | this.dllPath = path.join(this.extensionContext.extensionPath, "lib", "XmlFormatter.CommandLine.dll");
33 |
34 | Logger.instance.info(`dllPath : ${this.dllPath}`);
35 | }
36 | catch (error) {
37 | if (error instanceof Error) {
38 | Logger.instance.error(error);
39 | throw error;
40 | }
41 | }
42 | }
43 |
44 | public loadSettings() {
45 | //get settings
46 | Logger.instance.info("loadSettings start");
47 | let prettyXmlConfig = vscode.workspace.getConfiguration(`${prettyxml}.settings`);
48 |
49 | let spacelength = prettyXmlConfig.get('indentSpaceLength');
50 | let usesinglequotes = prettyXmlConfig.get('useSingleQuotes');
51 | let useselfclosetag = prettyXmlConfig.get('useSelfClosingTag');
52 | let formatOnSave = prettyXmlConfig.get('formatOnSave');
53 | let allowSingleQuoteInAttributeValue = prettyXmlConfig.get('allowSingleQuoteInAttributeValue');
54 | let addSpaceBeforeSelfClosingTag = prettyXmlConfig.get('addSpaceBeforeSelfClosingTag');
55 | let wrapCommentTextWithSpaces = prettyXmlConfig.get('wrapCommentTextWithSpaces');
56 | let allowWhiteSpaceUnicodesInAttributeValues = prettyXmlConfig.get('allowWhiteSpaceUnicodesInAttributeValues');
57 | let positionFirstAttributeOnSameLine = prettyXmlConfig.get('positionFirstAttributeOnSameLine');
58 | let positionAllAttributesOnFirstLine = prettyXmlConfig.get('positionAllAttributesOnFirstLine');
59 | let preserveWhiteSpacesInComment = prettyXmlConfig.get('preserveWhiteSpacesInComment');
60 | let addSpaceBeforeEndOfXmlDeclaration = prettyXmlConfig.get('addSpaceBeforeEndOfXmlDeclaration');
61 | let attributesInNewlineThreshold = prettyXmlConfig.get("attributesInNewlineThreshold");
62 | let wildCardedExceptionsForPositionAllAttributesOnFirstLine = prettyXmlConfig.get>("wildCardedExceptionsForPositionAllAttributesOnFirstLine");
63 | let addEmptyLineBetweenElements = prettyXmlConfig.get("addEmptyLineBetweenElements");
64 | let enableLogs = prettyXmlConfig.get("enableLogs");
65 | Logger.instance.updateConfiguration(enableLogs);
66 |
67 | this.settings = new Settings(spacelength,
68 | usesinglequotes,
69 | useselfclosetag,
70 | formatOnSave,
71 | allowSingleQuoteInAttributeValue,
72 | addSpaceBeforeSelfClosingTag,
73 | wrapCommentTextWithSpaces,
74 | allowWhiteSpaceUnicodesInAttributeValues,
75 | positionFirstAttributeOnSameLine,
76 | positionAllAttributesOnFirstLine,
77 | preserveWhiteSpacesInComment,
78 | addSpaceBeforeEndOfXmlDeclaration,
79 | attributesInNewlineThreshold,
80 | wildCardedExceptionsForPositionAllAttributesOnFirstLine,
81 | addEmptyLineBetweenElements,
82 | enableLogs);
83 |
84 | Logger.instance.info(`Settings : ${JSON.stringify(this.settings)}`);
85 |
86 | Logger.instance.info("loadSettings end");
87 | }
88 |
89 | public async formatXml(docText: string = ""): Promise {
90 | Logger.instance.info("formatXml start");
91 | let formattedString: string = "";
92 |
93 | if (!docText) {
94 | Logger.instance.warning("docText is null. Fetching from DocumentHelper");
95 | docText = DocumentHelper.getDocumentText();
96 | }
97 |
98 | if (docText) {
99 | formattedString = await this.formatWithCommandLine(docText, FormattingActionKind.format);
100 | Logger.instance.info(`Formatted text: ${formattedString}`);
101 | Logger.instance.info("formatXml end");
102 | return formattedString;
103 | }
104 | else {
105 | Logger.instance.warning("Document text is not valid!. Throwing error from formatXml");
106 | throw new Error("Document text is not valid!");
107 | }
108 | }
109 |
110 | async minimizeXml(): Promise {
111 | Logger.instance.info("minimizeXml start");
112 | let minimizedXmlText: string = "";
113 | var docText = DocumentHelper.getDocumentText();
114 | if (docText) {
115 | minimizedXmlText = await this.formatWithCommandLine(docText, FormattingActionKind.minimize);
116 | Logger.instance.info(`minimizedXmlText: ${minimizedXmlText}`);
117 | return minimizedXmlText;
118 | }
119 | else {
120 | Logger.instance.warning("Document text is invalid!. Throwing error from minimizeXml");
121 | throw new Error('Document text is invalid!');
122 | }
123 | }
124 |
125 | public async formatWithCommandLine(docText: string, actionKind: FormattingActionKind): Promise {
126 | try {
127 | Logger.instance.info("formatWithCommandLine start");
128 | var jsinput: JsonInputDto = new JsonInputDto(docText, actionKind, this.settings);
129 | var inputstr = JSON.stringify(jsinput);
130 | Logger.instance.info(`converted input to json ${inputstr}`);
131 | const cli = childProcess.spawn('dotnet', [this.dllPath], { stdio: ['pipe'] });
132 |
133 | Logger.instance.info(`Starting dotnet childProcess at ${this.dllPath} `);
134 | let stdOutData = "";
135 | let stdErrData = "";
136 |
137 | cli.stdout.setEncoding("utf8");
138 | cli.stdout.on("data", data => {
139 | stdOutData += data;
140 | });
141 |
142 | cli.stderr.setEncoding("utf8");
143 | cli.stderr.on("data", data => {
144 | stdErrData += data;
145 | });
146 |
147 | let promise = new Promise((resolve, reject) => {
148 | cli.on("close", (exitCode: Number) => {
149 | if (exitCode !== 0) {
150 | Logger.instance.warning(`childProcess errored with exitCode ${exitCode}`);
151 | reject(stdErrData);
152 | }
153 | else {
154 | Logger.instance.info(`childProcess stdOutData: ${stdOutData}`);
155 | resolve(stdOutData);
156 | }
157 | });
158 | });
159 |
160 | cli.stdin.end(inputstr, "utf-8");
161 | return promise;
162 | }
163 | catch (error) {
164 | if (error instanceof Error) {
165 | Logger.instance.error(error);
166 | }
167 | else if (typeof error === "string") {
168 | Logger.instance.warning(error);
169 | }
170 | Logger.instance.warning("Error formatting with command line. Make sure you have dotnet 6+ installed and it is added to PATH.");
171 | throw new Error('Error formatting with command line. Make sure you have dotnet 6+ installed and it is added to PATH.');
172 | }
173 | }
174 | }
175 |
--------------------------------------------------------------------------------
/src/formattingActionKind.ts:
--------------------------------------------------------------------------------
1 | export enum FormattingActionKind
2 | {
3 | unsupported = "Unsupported",
4 | format = "Format",
5 | minimize = "Minimize",
6 | }
--------------------------------------------------------------------------------
/src/helper.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 | import { DocumentHelper } from "./documentHelper";
3 | import { Logger } from "./logger";
4 |
5 | export function replaceDocumentTextWithProgressForCallback(progressText: string, task: Thenable): Thenable {
6 | Logger.instance.info("replaceDocumentTextWithProgressForCallback start");
7 | var progressOptions = {
8 | location: vscode.ProgressLocation.Notification,
9 | title: "Pretty XML",
10 | cancellable: false,
11 | };
12 |
13 | var progressPromise = vscode.window.withProgress(progressOptions, (progress) => {
14 | var promise = new Promise((resolve, reject) => {
15 | progress.report({ message: progressText, increment: 0 });
16 |
17 | setTimeout(() => {
18 | progress.report({ message: progressText, increment: 25 });
19 | }, 50);
20 |
21 | setTimeout(async () => {
22 | try {
23 | var newText = await task;
24 | progress.report({ message: progressText, increment: 75 });
25 |
26 | DocumentHelper.replaceDocumentText(newText);
27 | progress.report({ message: progressText, increment: 100 });
28 | resolve();
29 | }
30 | catch (error) {
31 | if (typeof error === "string") {
32 | Logger.instance.warning(`Errored with ${error}`);
33 | if (error.includes("System.Xml.XmlException: Unexpected end of file has occurred.")) {
34 | var userReadableErrorMessage = error.replace("System.Xml.XmlException: Unexpected end of file has occurred.","").replace("Unhandled exception. System.Xml.XmlException: ","").replace("Unhandled exception. ", "");
35 | vscode.window.showErrorMessage(userReadableErrorMessage);
36 | } else {
37 | vscode.window.showErrorMessage(error);
38 | }
39 | }
40 | reject(error);
41 | }
42 | }, 100);
43 | });
44 |
45 | return promise;
46 | });
47 | Logger.instance.info("replaceDocumentTextWithProgressForCallback end");
48 | return progressPromise;
49 | }
50 |
51 |
--------------------------------------------------------------------------------
/src/jsonInputDto.ts:
--------------------------------------------------------------------------------
1 | import { FormattingActionKind } from "./formattingActionKind";
2 | import { Settings } from "./settings";
3 |
4 | export class JsonInputDto {
5 | xmlString: string;
6 | formattingOptions: Settings;
7 | actionKind: FormattingActionKind;
8 |
9 | constructor(xmlString: string, actionKind: FormattingActionKind, formattingOptions?: Settings) {
10 | this.xmlString = xmlString;
11 | this.actionKind = actionKind;
12 | this.formattingOptions = formattingOptions ?? new Settings();
13 | }
14 | }
--------------------------------------------------------------------------------
/src/logger.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from 'vscode';
2 |
3 | export interface ILogger {
4 | info(message: string): void;
5 | error(error: Error): void;
6 | warning(message: string): void;
7 | debug(message: string): void;
8 | outputChannel: vscode.OutputChannel;
9 | updateConfiguration(isEnabled: boolean): void;
10 | }
11 |
12 | enum LogLevel {
13 | error = "ERROR",
14 | warning = "WARNING",
15 | info = "INFO",
16 | debug = "DEBUG",
17 | }
18 |
19 | function isString(value: unknown): value is string {
20 | return Object.prototype.toString.call(value) === '[object String]';
21 | }
22 |
23 | export class Logger implements ILogger {
24 | private static _instance: Logger;
25 |
26 | public static get instance() {
27 | if (!Logger._instance) {
28 | Logger._instance = new Logger();
29 | }
30 |
31 | return Logger._instance;
32 | }
33 |
34 | private constructor() {
35 | this.outputChannel = vscode.window.createOutputChannel("PrettyXML");
36 | this.updateConfiguration();
37 | }
38 |
39 | private enableLogs?: boolean;
40 | public outputChannel: vscode.OutputChannel;
41 |
42 | public error(error: Error): void {
43 | if (error !== null) {
44 | this.log(LogLevel.error, error.stack ?? `${error.name} : ${error.message}`);
45 | }
46 | }
47 |
48 | public info(message: string): void {
49 | this.log(LogLevel.info, message);
50 | }
51 |
52 | public debug(message: string): void {
53 | this.log(LogLevel.debug, message);
54 | }
55 |
56 | public warning(message: string): void {
57 | this.log(LogLevel.warning, message);
58 | }
59 |
60 | private log(logLevel: LogLevel, message: string, data?: unknown): void {
61 | if (this.enableLogs) {
62 | this.appendLine(
63 | `[ ${logLevel} - ${new Date().toLocaleTimeString()}] ${message}`
64 | );
65 | if (data) {
66 | this.appendLine(Logger.data2String(data));
67 | }
68 | }
69 | }
70 |
71 | public updateConfiguration(isEnabled: boolean = false) {
72 | this.enableLogs = isEnabled;
73 | }
74 |
75 | private appendLine(value = '') {
76 | return this.outputChannel.appendLine(value);
77 | }
78 |
79 | private append(value: string) {
80 | return this.outputChannel.append(value);
81 | }
82 |
83 | private show() {
84 | this.outputChannel.show();
85 | }
86 |
87 | private static data2String(data: unknown): string {
88 | if (data instanceof Error) {
89 | if (isString(data.stack)) {
90 | return data.stack;
91 | }
92 | return (data as Error).message;
93 | }
94 | if (isString(data)) {
95 | return data;
96 | }
97 | return JSON.stringify(data, undefined, 2);
98 | }
99 | }
--------------------------------------------------------------------------------
/src/notificationService.ts:
--------------------------------------------------------------------------------
1 | import * as vscode from "vscode";
2 | import * as compareVersions from "compare-versions";
3 | import { Logger } from "./logger";
4 |
5 | export class NotificationService {
6 | private context: vscode.ExtensionContext;
7 | public readonly storageKeyPrefix: string;
8 | private readonly lastRatingPromptDateKey: string;
9 |
10 | private readonly versionKey: string;
11 |
12 | private readonly currentVersion: string;
13 |
14 | constructor(context: vscode.ExtensionContext) {
15 | this.context = context;
16 | this.storageKeyPrefix = this.context.extension.id + ".";
17 | this.lastRatingPromptDateKey = `${this.storageKeyPrefix}lastRatingPromptDate`;
18 | this.versionKey = `${this.storageKeyPrefix}version`;
19 | this.currentVersion = this.context.extension.packageJSON.version;
20 | }
21 |
22 | private checkIfEligibleToShowUpdateNote(): boolean {
23 | Logger.instance.info("checkIfEligibleToShowUpdateNote start");
24 | let shouldDisplay: boolean = true;
25 | try {
26 | var lastVersionShown = this.context.globalState.get(this.versionKey) as string;
27 |
28 | if (lastVersionShown) {
29 | if (compareVersions.compare(this.currentVersion, lastVersionShown, '<=')) {
30 | shouldDisplay = false;
31 | }
32 | }
33 | }
34 | catch (error) {
35 | if (error instanceof Error) {
36 | Logger.instance.error(error);
37 | console.error(error);
38 | }
39 | }
40 | Logger.instance.info("checkIfEligibleToShowUpdateNote end");
41 | return shouldDisplay;
42 | }
43 |
44 | public async notifyWhatsNewInUpdateAsync(): Promise {
45 | Logger.instance.info("notifyWhatsNewInUpdateAsync start");
46 | try {
47 | let shouldDisplay: boolean = this.checkIfEligibleToShowUpdateNote();
48 | if (shouldDisplay) {
49 | let notes: string = `Pretty XML updated to version ${this.currentVersion}.\n [See what's new](https://github.com/pmahend1/PrettyXML/blob/main/CHANGELOG.md)`;
50 | if (notes !== "") {
51 | await vscode.window.showInformationMessage(notes);
52 | this.context.globalState.update(this.versionKey, this.currentVersion);
53 | }
54 | }
55 | }
56 | catch (error) {
57 | if (error instanceof Error) {
58 | Logger.instance.error(error);
59 | console.error(error);
60 | }
61 | }
62 | Logger.instance.info("notifyWhatsNewInUpdateAsync end");
63 | }
64 |
65 | public async promptForReviewAsync(): Promise {
66 | Logger.instance.info("promptForReviewAsync start");
67 | try {
68 | let shouldDisplayPrompt = this.shouldOpenRatingPrompt();
69 | if (shouldDisplayPrompt) {
70 | var text = "Loving Pretty XML extension? Would you like to rate and review?";
71 | var selection = await vscode.window.showInformationMessage(text, "Sure", "Later", "Don't show again");
72 | if (selection) {
73 | if (selection === "Sure") {
74 | var appName = vscode.env.appName.toLowerCase();
75 | let vsCodeReviewUri: vscode.Uri = vscode.Uri.parse("https://marketplace.visualstudio.com/items?itemName=PrateekMahendrakar.prettyxml&ssr=false#review-details");
76 |
77 | if (appName.includes("codium")) {
78 | var codiumReviewUri = vscode.Uri.parse("https://open-vsx.org/extension/PrateekMahendrakar/prettyxml/reviews");
79 | vscode.env.openExternal(codiumReviewUri);
80 | }
81 | else {
82 | vscode.env.openExternal(vsCodeReviewUri);
83 | }
84 | //cant check if they really reviewed
85 | //remind them after 30 days
86 | var plus30days = new Date();
87 | plus30days.setDate(plus30days.getDate() + 30);
88 |
89 | this.context.globalState.update(this.lastRatingPromptDateKey, plus30days);
90 | }
91 | else if (selection === "Later") {
92 | this.context.globalState.update(this.lastRatingPromptDateKey, new Date());
93 | }
94 | else if (selection === "Don't show again") {
95 | var oneYear = new Date();
96 | oneYear.setDate(oneYear.getDate() + 365);
97 |
98 | this.context.globalState.update(this.lastRatingPromptDateKey, oneYear);
99 | }
100 | }
101 | }
102 | }
103 | catch (error) {
104 | if (error instanceof Error) {
105 | Logger.instance.error(error);
106 | console.error(error);
107 | }
108 | }
109 | Logger.instance.info("promptForReviewAsync end");
110 | }
111 |
112 | private shouldOpenRatingPrompt(): boolean {
113 | Logger.instance.info("shouldOpenRatingPrompt start");
114 | var lastPromptDateJunk = this.context.globalState.get(this.lastRatingPromptDateKey) as Date;
115 | var minus15days = new Date();
116 | minus15days.setDate(minus15days.getDate() - 15);
117 |
118 | if (lastPromptDateJunk) {
119 | var lastPromptDate = new Date(lastPromptDateJunk.toString());
120 | Logger.instance.info("shouldOpenRatingPrompt end");
121 | return lastPromptDate < minus15days;
122 | }
123 | else {
124 | Logger.instance.info("shouldOpenRatingPrompt end");
125 | return true;
126 | }
127 |
128 | }
129 |
130 | public async handleReviewPromptAsync() {
131 | Logger.instance.info("handleReviewPromptAsync start");
132 | let lastUsedDateKey = `${this.storageKeyPrefix}.lastUsedDate`;
133 | let lastUsedDate = this.context.globalState.get(lastUsedDateKey) as Date;
134 |
135 | if (lastUsedDate) {
136 | var delayedLastDate = new Date(lastUsedDate);
137 | delayedLastDate.setHours(delayedLastDate.getHours() + 2);
138 | if (new Date() >= delayedLastDate) {
139 | await this.promptForReviewAsync();
140 | }
141 | }
142 | this.context.globalState.update(lastUsedDateKey, new Date());
143 | Logger.instance.info("handleReviewPromptAsync end");
144 | }
145 | }
--------------------------------------------------------------------------------
/src/prettyXmlFormattingEditProvider.ts:
--------------------------------------------------------------------------------
1 | import {
2 | CancellationToken,
3 | DocumentFormattingEditProvider,
4 | FormattingOptions,
5 | ProviderResult,
6 | Range,
7 | TextDocument,
8 | TextEdit
9 | } from "vscode";
10 | import * as vscode from "vscode";
11 | import { DocumentHelper } from "./documentHelper";
12 | import { Formatter } from "./formatter";
13 | import { Logger } from "./logger";
14 |
15 | export class PrettyXmlFormattingEditProvider implements DocumentFormattingEditProvider {
16 | private formatter: Formatter;
17 | constructor(formatter: Formatter) {
18 | this.formatter = formatter;
19 | }
20 |
21 | provideDocumentFormattingEdits(document: TextDocument, options: FormattingOptions, token: CancellationToken): ProviderResult {
22 | Logger.instance.info("provideDocumentFormattingEdits start");
23 | let documentRange: Range = DocumentHelper.getDocumentRange(document);
24 |
25 | let docText = document?.getText();
26 |
27 | if (!docText) {
28 | Logger.instance.warning("docText is null. returning empty []");
29 | return [];
30 | }
31 |
32 | token.onCancellationRequested((e: any, thisArgs?: any, disposables?: any) => {
33 | if (token.isCancellationRequested) {
34 | Logger.instance.warning("token.onCancellationRequested. Returning []");
35 | return [];
36 | }
37 | });
38 | return new Promise(async (resolve) => {
39 | try {
40 | var progressOptions = {
41 | location: vscode.ProgressLocation.Notification,
42 | title: "Pretty XML",
43 | cancellable: true,
44 | };
45 |
46 | var formattedText = await vscode.window.withProgress(progressOptions, (progress, token) => {
47 | token.onCancellationRequested((e: any, thisArgs?: any, disposables?: any) => {
48 | if (token.isCancellationRequested) {
49 | Logger.instance.warning("vscode.window.withProgress.token.onCancellationRequested. Returning []");
50 | return [];
51 | }
52 | });
53 | var promise = new Promise(async (resolve, reject) => {
54 | progress.report({ message: "Formatting...", increment: 0 });
55 |
56 | setTimeout(() => {
57 | progress.report({ message: "Formatting...", increment: 25 });
58 |
59 | }, 50);
60 |
61 | setTimeout(async () => {
62 | try {
63 | var formattedText = await this.formatter.formatXml(docText);
64 | progress.report({ message: "Formatting...", increment: 75 });
65 | resolve(formattedText);
66 |
67 | progress.report({ message: "Formatting...", increment: 100 });
68 | }
69 | catch (error) {
70 | reject(error); //log in outer catch block
71 | }
72 | }, 100);
73 | });
74 |
75 | return promise;
76 | });
77 | const replacer = TextEdit.replace(documentRange, formattedText);
78 | Logger.instance.info("provideDocumentFormattingEdits start");
79 | return resolve([replacer]);
80 | }
81 | catch (error) {
82 | var errorMessage: string = "";
83 | if (typeof error === "string") {
84 | errorMessage = error;
85 | Logger.instance.warning(errorMessage);
86 | }
87 | else if (error instanceof Error) {
88 | Logger.instance.error(error);
89 | errorMessage = error.message;
90 | }
91 | vscode.window.showErrorMessage(errorMessage);
92 |
93 | return resolve([]);
94 | }
95 | });
96 | }
97 | }
--------------------------------------------------------------------------------
/src/rangeFormatterProvider.ts:
--------------------------------------------------------------------------------
1 | import { CancellationToken, DocumentRangeFormattingEditProvider, FormattingOptions, ProviderResult, Range, TextDocument, TextEdit } from "vscode";
2 | import { TextXmlFormatter } from "./regexFormatter";
3 | import { Settings } from "./settings";
4 |
5 | export class RangeFormatterProvider implements DocumentRangeFormattingEditProvider {
6 |
7 | private settings: Settings;
8 | constructor(settings: Settings) {
9 | this.settings = settings;
10 | }
11 | provideDocumentRangeFormattingEdits(document: TextDocument, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult {
12 | if (document) {
13 | var text = document.getText(range);
14 | if (text) {
15 | var regexFormatter = new TextXmlFormatter(this.settings);
16 | var formattedText = regexFormatter.formatXmlPretty(text);
17 | const replacer = TextEdit.replace(range, formattedText);
18 | return [replacer]
19 | }
20 | }
21 | return [];
22 | }
23 | provideDocumentRangesFormattingEdits?(document: TextDocument, ranges: Range[], options: FormattingOptions, token: CancellationToken): ProviderResult {
24 | if (document) {
25 | var edits = new Array();
26 | for (let i = 0; i < ranges.length; i++) {
27 | const range = ranges[i];
28 | var text = document.getText(range);
29 | if (text) {
30 | var regexFormatter = new TextXmlFormatter(this.settings);
31 | var formattedText = regexFormatter.formatXmlPretty(text);
32 | const replacer = TextEdit.replace(range, formattedText);
33 | edits.push(replacer);
34 | }
35 | }
36 | return edits;
37 | }
38 | return [];
39 | }
40 | }
--------------------------------------------------------------------------------
/src/regexFormatter.ts:
--------------------------------------------------------------------------------
1 | import { Settings } from "./settings";
2 |
3 | export class TextXmlFormatter {
4 |
5 | private settings: Settings;
6 | constructor(settings: Settings) {
7 | this.settings = settings;
8 | }
9 | public formatXmlPretty(xml: string): string {
10 | const tagRegex = /(<\?xml[^?>]*\?>|]*>|||<\/?[^>]+?>)/gs;
11 |
12 | let startIndent = 0;
13 | let formatted: string[] = [];
14 |
15 | if (xml.startsWith(" ")) {
16 | const firstTagIndex = xml.indexOf("<");
17 | if (firstTagIndex > 0) {
18 | startIndent = firstTagIndex;
19 | }
20 | }
21 | const indentSize = this.settings.indentLength ?? 4;
22 | let indentLevel = startIndent / indentSize;
23 |
24 | let lastIndex = 0;
25 | const matches = [...xml.matchAll(tagRegex)];
26 | var i = 0;
27 | for (const match of matches) {
28 | const [tag] = match;
29 | const index = match.index ?? 0;
30 |
31 | // Handle text between tags
32 | const text = xml.slice(lastIndex, index).trim();
33 | if (text) {
34 | let n = i === 0 && indentLevel > 0 ? indentLevel - 1 : indentLevel;
35 | formatted.push(' '.repeat(n * indentSize) + text);
36 | }
37 | i++;
38 | if (tag.startsWith('');
45 |
46 | const formattedTag = this.formatTagWithAttributes(tag, indentLevel * indentSize);
47 | formatted.push(' '.repeat(indentLevel * indentSize) + formattedTag);
48 |
49 | if (!isSelfClosing) {
50 | indentLevel++;
51 | }
52 | }
53 |
54 | lastIndex = match.index! + tag.length;
55 | }
56 |
57 | // Remaining text after last tag
58 | const trailing = xml.slice(lastIndex).trim();
59 | if (trailing) {
60 | formatted.push(' '.repeat(indentLevel * indentSize) + trailing);
61 | }
62 |
63 | return formatted.join('\n');
64 | }
65 |
66 | public formatTagWithAttributes(tag: string, baseIndent: number): string {
67 | const tagRegex = /^<([^\s/>]+)((?:\s+[^\s=]+(?:=(?:"[^"]*"|'[^']*'|[^\s"'=<>`]+))?)*)\s*(\/?)>$/;
68 |
69 | const match = tag.match(tagRegex);
70 | if (!match) return tag;
71 |
72 | const [, tagName, attrs, selfClosing] = match;
73 |
74 | const attrRegex = /([^\s=]+(?:=(?:"[^"]*"|'[^']*'|[^\s"'=<>`]+))?)/g;
75 | const childNodeMatches = [...attrs.matchAll(attrRegex)];
76 | if (childNodeMatches.length === 0) {
77 | return `<${tagName}${selfClosing ? ' />' : '>'}`;
78 | }
79 |
80 | const alignIndent = baseIndent + `<${tagName} `.length;
81 | const alignedAttrs: string[] = [];
82 |
83 | alignedAttrs.push(childNodeMatches[0][0]); // first attribute inline
84 |
85 | let isSelfClosing = false;
86 | for (let i = 1; i < childNodeMatches.length; i++) {
87 | if (childNodeMatches[i][0].endsWith('/') === false) {
88 | alignedAttrs.push(' '.repeat(alignIndent) + childNodeMatches[i][0]);
89 | } else {
90 | isSelfClosing = true;
91 | }
92 | }
93 |
94 | // Append closing directly to last line
95 | alignedAttrs[alignedAttrs.length - 1] += isSelfClosing ? '/>' : '>';
96 |
97 | return `<${tagName} ${alignedAttrs.join('\n')}`;
98 | }
99 | }
--------------------------------------------------------------------------------
/src/settings.ts:
--------------------------------------------------------------------------------
1 | export interface ISettings {
2 | indentLength: number;
3 | useSingleQuotes: boolean;
4 | useSelfClosingTags: boolean;
5 | formatOnSave: boolean;
6 | allowSingleQuoteInAttributeValue: boolean;
7 | addSpaceBeforeSelfClosingTag: boolean;
8 | wrapCommentTextWithSpaces: boolean;
9 | allowWhiteSpaceUnicodesInAttributeValues: boolean;
10 | positionFirstAttributeOnSameLine: boolean;
11 | positionAllAttributesOnFirstLine: boolean;
12 | preserveWhiteSpacesInComment: boolean;
13 | addSpaceBeforeEndOfXmlDeclaration: boolean;
14 | attributesInNewlineThreshold: number;
15 | wildCardedExceptionsForPositionAllAttributesOnFirstLine?: [string];
16 | addEmptyLineBetweenElements: boolean;
17 | enableLogs: boolean;
18 | }
19 |
20 | export const defaultSettings: ISettings = {
21 | indentLength: 4,
22 | useSingleQuotes: false,
23 | useSelfClosingTags: true,
24 | formatOnSave: false,
25 | allowSingleQuoteInAttributeValue: true,
26 | addSpaceBeforeSelfClosingTag: true,
27 | wrapCommentTextWithSpaces: true,
28 | allowWhiteSpaceUnicodesInAttributeValues: true,
29 | positionFirstAttributeOnSameLine: true,
30 | positionAllAttributesOnFirstLine: false,
31 | preserveWhiteSpacesInComment: false,
32 | addSpaceBeforeEndOfXmlDeclaration: false,
33 | attributesInNewlineThreshold: 1,
34 | wildCardedExceptionsForPositionAllAttributesOnFirstLine: undefined,
35 | addEmptyLineBetweenElements: false,
36 | enableLogs: false
37 | };
38 |
39 | export class Settings {
40 | indentLength?: number;
41 | useSingleQuotes?: boolean;
42 | useSelfClosingTags?: boolean;
43 | formatOnSave?: boolean;
44 | allowSingleQuoteInAttributeValue?: boolean;
45 | addSpaceBeforeSelfClosingTag?: boolean;
46 | wrapCommentTextWithSpaces?: boolean;
47 | allowWhiteSpaceUnicodesInAttributeValues?: boolean;
48 | positionFirstAttributeOnSameLine?: boolean;
49 | positionAllAttributesOnFirstLine?: boolean;
50 | preserveWhiteSpacesInComment?: boolean;
51 | addSpaceBeforeEndOfXmlDeclaration: boolean;
52 | attributesInNewlineThreshold: number;
53 | wildCardedExceptionsForPositionAllAttributesOnFirstLine?: string[];
54 | addEmptyLineBetweenElements?: boolean;
55 | enableLogs?: boolean;
56 |
57 | constructor(indentLengh?: number,
58 | useSingleQuotes?: boolean,
59 | useSelfClosingTags?: boolean,
60 | formatOnSave?: boolean,
61 | allowSingleQuoteInAttributeValue?: boolean,
62 | addSpaceBeforeSelfClosingTag?: boolean,
63 | wrapCommentTextWithSpaces?: boolean,
64 | allowWhiteSpaceUnicodesInAttributeValues?: boolean,
65 | positionFirstAttributeOnSameLine?: boolean,
66 | positionAllAttributesOnFirstLine?: boolean,
67 | preserveWhiteSpacesInComment?: boolean,
68 | addSpaceBeforeEndOfXmlDeclaration?: boolean,
69 | attributesInNewlineThreshold?: number,
70 | wildCardedExceptionsForPositionAllAttributesOnFirstLine?: string[],
71 | addEmptyLineBetweenElements?: boolean,
72 | enableLogs?: boolean) {
73 | this.indentLength = indentLengh ?? defaultSettings.indentLength;
74 | this.useSingleQuotes = useSingleQuotes ?? defaultSettings.useSingleQuotes;
75 | this.useSelfClosingTags = useSelfClosingTags ?? defaultSettings.useSelfClosingTags;
76 | this.formatOnSave = formatOnSave ?? defaultSettings.formatOnSave;
77 | this.allowSingleQuoteInAttributeValue = allowSingleQuoteInAttributeValue ?? defaultSettings.allowSingleQuoteInAttributeValue;
78 | this.addSpaceBeforeSelfClosingTag = addSpaceBeforeSelfClosingTag ?? defaultSettings.addSpaceBeforeSelfClosingTag;
79 | this.wrapCommentTextWithSpaces = wrapCommentTextWithSpaces ?? defaultSettings.wrapCommentTextWithSpaces;
80 | this.allowWhiteSpaceUnicodesInAttributeValues = allowWhiteSpaceUnicodesInAttributeValues ?? defaultSettings.allowWhiteSpaceUnicodesInAttributeValues;
81 | this.positionFirstAttributeOnSameLine = positionFirstAttributeOnSameLine ?? defaultSettings.positionFirstAttributeOnSameLine;
82 | this.positionAllAttributesOnFirstLine = positionAllAttributesOnFirstLine ?? defaultSettings.positionAllAttributesOnFirstLine;
83 | this.preserveWhiteSpacesInComment = preserveWhiteSpacesInComment ?? defaultSettings.preserveWhiteSpacesInComment;
84 | this.addSpaceBeforeEndOfXmlDeclaration = addSpaceBeforeEndOfXmlDeclaration ?? defaultSettings.addSpaceBeforeEndOfXmlDeclaration;
85 | this.attributesInNewlineThreshold = attributesInNewlineThreshold ?? defaultSettings.attributesInNewlineThreshold;
86 | this.wildCardedExceptionsForPositionAllAttributesOnFirstLine = wildCardedExceptionsForPositionAllAttributesOnFirstLine;
87 | this.addEmptyLineBetweenElements = addEmptyLineBetweenElements ?? defaultSettings.addEmptyLineBetweenElements;
88 | this.enableLogs = enableLogs ?? defaultSettings.enableLogs;
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/src/test/runTest.ts:
--------------------------------------------------------------------------------
1 | import * as path from 'path';
2 | import * as vscodeTest from '@vscode/test-electron'
3 |
4 | async function main() {
5 | try {
6 | // The folder containing the Extension Manifest package.json
7 | // Passed to `--extensionDevelopmentPath`
8 | const extensionDevelopmentPath = path.resolve(__dirname, '../../');
9 |
10 | // The path to test runner
11 | // Passed to --extensionTestsPath
12 | const extensionTestsPath = path.resolve(__dirname, './suite/index');
13 |
14 | // Download VS Code, unzip it and run the integration test
15 | await vscodeTest.runTests({ extensionDevelopmentPath, extensionTestsPath });
16 | } catch (err) {
17 | console.error('Failed to run tests');
18 | process.exit(1);
19 | }
20 | }
21 |
22 | main();
23 |
--------------------------------------------------------------------------------
/src/updateNote.ts:
--------------------------------------------------------------------------------
1 | export class UpdateNote
2 | {
3 | public version: string = "";
4 | public updateNotes: string = "";
5 | }
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "target": "ES2018",
5 | "outDir": "out",
6 | "lib": [
7 | "ES2018"
8 | ],
9 | "sourceMap": true,
10 | "rootDir": "src",
11 | "strict": true /* enable all strict type-checking options */
12 | /* Additional Checks */
13 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
14 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
15 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
16 | },
17 | "exclude": [
18 | "node_modules",
19 | ".vscode-test"
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | //@ts-check
2 |
3 | 'use strict';
4 |
5 | const path = require('path');
6 |
7 | /**@type {import('webpack').Configuration}*/
8 | const config = {
9 | target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/
10 |
11 | entry: {
12 | extension: './src/extension.ts'
13 | },// the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/
14 | output: {
15 | // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/
16 | path: path.resolve(__dirname, 'out'),
17 | filename: '[name].js',
18 | libraryTarget: 'commonjs2',
19 | devtoolModuleFilenameTemplate: '../[resource-path]'
20 | },
21 | devtool: 'source-map',
22 | externals: {
23 | vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/
24 | },
25 | resolve: {
26 | // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader
27 | extensions: ['.ts', '.js']
28 | },
29 | module: {
30 | rules: [{
31 | test: /\.ts$/,
32 | exclude: /node_modules/,
33 | use: [{
34 | loader: 'ts-loader'
35 | }]
36 | }]
37 | }
38 | };
39 | module.exports = config;
--------------------------------------------------------------------------------