diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..9cb8ad9
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,57 @@
+name: Run VSCode Extension Tests
+
+on:
+ push:
+ branches:
+ - superbol-vscode-debug
+ pull_request:
+ branches:
+ - superbol-vscode-debug
+
+jobs:
+ test:
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ - windows-latest
+ node:
+ - 20
+ code-version:
+ - stable
+ - 1.66.0
+ include:
+ - { os: ubuntu-latest, node: 22, code-version: stable }
+ - { os: ubuntu-latest, node: 24, code-version: stable }
+ runs-on: ${{ matrix.os }}
+ name: Test with Node ${{ matrix.node }} and VSCode ${{ matrix.code-version }} on ${{ matrix.os }}
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Setup Node.js environment
+ uses: actions/setup-node@v6
+ with:
+ node-version: ${{ matrix.node }}
+ # node-version-file: 'package.json'
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Compile
+ run: npm run compile
+
+ - name: Cache VSCode test directory
+ uses: actions/cache@v4
+ with:
+ path: .vscode-test
+ key: ${{ runner.os }}-${{ matrix.node }}-${{ matrix.code-version }}-vscode-test-${{ hashFiles('package-lock.json') }}
+
+ - name: Run tests
+ run: xvfb-run -a npm test -- --code-version ${{ matrix.code-version }}
+ if: runner.os == 'Linux'
+
+ - name: Run tests
+ run: npm test -- --code-version ${{ matrix.code-version }}
+ if: runner.os != 'Linux'
diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml
deleted file mode 100644
index 7be86bc..0000000
--- a/.github/workflows/nodejs.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
-# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
-
-name: Node.js CI
-
-on:
- push:
- branches:
- - '*'
-
-jobs:
- build:
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v2
- - name: Use Node.js
- uses: actions/setup-node@v1
- with:
- node-version: '14.x'
- - run: npm install
- - run: npm run build --if-present
- - run: npm test
diff --git a/.gitignore b/.gitignore
index e4224ff..ea4ab8f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,5 @@ hello
hello3
.idea/
.vscode-test/
+.vscode-test-workspace/*
+!.vscode-test-workspace/.dummy
diff --git a/.vscode-test.js b/.vscode-test.js
new file mode 100644
index 0000000..4dcd102
--- /dev/null
+++ b/.vscode-test.js
@@ -0,0 +1,13 @@
+const { defineConfig } = require('@vscode/test-cli');
+
+module.exports = defineConfig([
+ {
+ files: 'out/test/**/*.test.js',
+ extensionDevelopmentPath: __dirname,
+ sourceMap: true,
+ mocha: {
+ ui: 'tdd',
+ timeout: 20000
+ }
+ }
+]);
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 6d9d584..29f7d4f 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -7,32 +7,34 @@
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": [
- "--extensionDevelopmentPath=${workspaceRoot}",
- "--trace-deprecation"
+ "--profile-temp",
+ "--new-window",
+ "--transient",
+ // "--extensions-dir=${workspaceFolder}/.vscode-test/extensions",
+ // "--user-data-dir=${workspaceFolder}/.vscode-test/user-data",
+ "--extensionDevelopmentPath=${workspaceFolder}",
+ "--trace-deprecation",
+ "${workspaceFolder}/test/resources",
],
- "stopOnEntry": false,
+ "autoAttachChildProcesses": true,
"sourceMaps": true,
"outFiles": [
- "${workspaceRoot}/out/**/*.js"
+ "${workspaceFolder}/**/*.(m|c|)js",
+ "!**/node_modules/**"
],
- "preLaunchTask": "npm",
- "internalConsoleOptions": "openOnSessionStart"
+ "preLaunchTask": "npm"
},
{
"name": "Tests",
"type": "extensionHost",
"request": "launch",
- "runtimeExecutable": "${execPath}",
- "args": [
- "--disable-extensions",
- "--extensionDevelopmentPath=${workspaceFolder}",
- "--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
- ],
+ "testConfiguration": "${workspaceFolder}/.vscode-test.js",
+ "sourceMaps": true,
"outFiles": [
- "${workspaceRoot}/out/**/*.js"
+ "${workspaceFolder}/**/*.(m|c|)js",
+ "!**/node_modules/**"
],
- "preLaunchTask": "npm",
- "internalConsoleOptions": "openOnSessionStart"
+ "preLaunchTask": "npm"
}
]
-}
\ No newline at end of file
+}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 54059ed..e255ae1 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -6,8 +6,9 @@
"command": "npm",
"type": "shell",
"presentation": {
- "reveal": "always",
- "panel": "new"
+ "reveal": "silent",
+ "revealProblems": "onProblem",
+ "panel": "dedicated"
},
"args": [
"run",
@@ -15,7 +16,7 @@
"--loglevel",
"silent"
],
- "isBackground": true,
+ "isBackground": false,
"problemMatcher": "$tsc-watch",
"group": {
"kind": "build",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3a81f4e..2492377 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,25 @@
+## Next
+
+* Show global data items in Variables panel [PR #40](https://github.com/ocamlpro/superbol-vscode-debug/pull/40)
+* Fixed a bug that made the extension hang when debugged programs displayed signed numbers [PR #39](https://github.com/ocamlpro/superbol-vscode-debug/pull/39)
+* Show COBOL statements in entries of stackframe summary [PR #38](https://github.com/ocamlpro/superbol-vscode-debug/pull/38)
+* Remove `gdbpath` and `libcobpath` from launch configurations (these are provided in extension settings) [PR #36](https://github.com/ocamlpro/superbol-vscode-debug/pull/36)
+* Fix enforcement of a default `preLaunchTask` that is not available [PR #34](https://github.com/ocamlpro/superbol-vscode-debug/pull/34)
+* Support cases where the COBOL source code and the corresponding C files are in distinct directories [PR #29](https://github.com/ocamlpro/superbol-vscode-debug/pull/29)
+* Remove unneeded fields from auto-generated configurations [PR #27](https://github.com/ocamlpro/superbol-vscode-debug/pull/27) [PR #28](https://github.com/ocamlpro/superbol-vscode-debug/pull/28)
+* Fix evaluation of expressions with binary-typed fields [PR #26](https://github.com/ocamlpro/superbol-vscode-debug/pull/26)
+* Silence some errors due to requests that are handled while the program is running [PR #25](https://github.com/ocamlpro/superbol-vscode-debug/pull/25)
+* Enable specification of directories where COBOL and C source files are to be found (option `sourceDirs`) [PR #20](https://github.com/ocamlpro/superbol-vscode-debug/pull/20)
+* Enable use of `cobcrun` module loaded [PR #19](https://github.com/ocamlpro/superbol-vscode-debug/pull/19)
+* Avoid forcing a prelaunch task on attach mode [PR #23](https://github.com/ocamlpro/superbol-vscode-debug/pull/23)
+* Fix first line of subprograms in source mapping [PR #22](https://github.com/ocamlpro/superbol-vscode-debug/pull/22)
+* Fix detection of attach target that is given as a PID [PR #21](https://github.com/ocamlpro/superbol-vscode-debug/pull/21)
+* Fix handling of nested subprograms [PR #18](https://github.com/ocamlpro/superbol-vscode-debug/pull/18)
+* Add support for dynamically loaded sub-modules (e.g, via CALL + literal) [PR #17](https://github.com/ocamlpro/superbol-vscode-debug/pull/17)
+* Enable launching a debug session outside a workspace [PR #16](https://github.com/ocamlpro/superbol-vscode-debug/pull/16)
+* Set `gdbtty` to `false` by default [PR #15](https://github.com/ocamlpro/superbol-vscode-debug/pull/15)
+* Fix handling of programs with dashes `-` in their name [PR #14](https://github.com/ocamlpro/superbol-vscode-debug/pull/14)
+
## 3.32.0
* Updates [Issue #138](https://github.com/OlegKunitsyn/gnucobol-debug/issues/138) by MARCOS MARTINS DUMA
* Migrate from TSLint to ESLint
diff --git a/README.md b/README.md
index e660ef0..a930da9 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,20 @@
-An extension to debug or execute GnuCOBOL code. Install from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=OlegKunitsyn.gnucobol-debug) or [Open VSX-Registry](https://open-vsx.org/extension/OlegKunitsyn/gnucobol-debug).
+An extension to debug or execute GnuCOBOL code. Forked from [COBOL Degub](https://github.com/OlegKunitsyn/gnucobol-debug).
+
+- [Features](#features)
+- [Requirements](#requirements)
+ - [Binaries](#binaries)
+- [Usage](#usage)
+- [Code coverage](#code-coverage)
+- [Attaching to a running process](#attaching-to-a-running-process)
+ - [Local Process](#local-process)
+ - [Remote Debugger (GDBServer)](#remote-debugger-gdbserver)
+- [Display application output in a separate window](#display-application-output-in-a-separate-window)
+- [Documentation](#documentation)
+- [Troubleshooting](#troubleshooting)
+- [Development](#development)
### Features
* Setting breakpoints
@@ -25,23 +38,15 @@ An extension to debug or execute GnuCOBOL code. Install from [VS Code Marketplac
* Watch pane with expressions
* Code coverage
* No mainframe required
-* GnuCOBOL Docker

### Requirements
-A COBOL-syntax extension i.e. `bitlang.gnucobol` (recommended, note: the previously recommended `bitlang.cobol` was split and now is intended to target MicroFocus products only), or - if you target a mainframe dialect: `broadcommfd.cobol-language-support`, `rechinformatica.rech-editor-cobol` or `ibm.zopeneditor` installed.
-Otherwise, the breakpoints will be unavailable.
+This extension is meant to work in combination with the [SuperBOL Studio](https://github.com/OCamlPro/superbol-vscode-platform) extension for COBOL.
-Now you may choose between *local* and *container* execution environment. Or try both of them :)
-
-#### Local
-* GnuCOBOL `cobc` 2.2+ installed.
-* GNU Debugger `gdb` 6.0+ installed.
-
-#### Container
-* [GnuCOBOL Docker](https://hub.docker.com/r/olegkunitsyn/gnucobol) container up and running.
-The image includes GnuCOBOL, GNU Debugger and all required dependencies needed to debug or execute your code. See an example below.
+#### Binaries
+* GnuCOBOL `cobc` 3.1+ installed.
+* GNU Debugger `gdb` 13.0+ installed.
### Usage
When your `launch.json` config is set up, you can debug or execute your COBOL program. If you debug a Compilation Group (main- and sub- programs), you need to list sub-programs inside `group` property. Here's an example:
@@ -65,7 +70,7 @@ Pick `COBOL debugger` from the dropdown on the Debug pane in VS Code. Press the
The debugger uses C sourcecode generated by the compiler upon each debugging session. If the sourcemap isn't accurate or you see any other issues, please make a bug-report.
### Code coverage
-You can estimate an execution flow of your COBOL program.
+You can estimate an execution flow of your COBOL program.

@@ -87,36 +92,6 @@ Set `coverage` property to `true` in your `launch.json` and start debugging sess
The extension decodes the code-coverage files in `gcov` format generated by the compiler.
-### Docker
-You may debug or execute your COBOL program inside [GnuCOBOL Docker](https://hub.docker.com/r/olegkunitsyn/gnucobol) container. Start the container and share your working directory by `Ctrl+Shift+P` and command `GnuCOBOL Docker: start`, or in the terminal:
-```bash
-docker run -d -i --name gnucobol -w ${workspaceRoot} -v ${workspaceRoot}:${workspaceRoot} olegkunitsyn/gnucobol:3.1-dev
-docker exec -i gnucobol cobc -V
-docker exec -i gnucobol gdb -v
-```
-
-Add `docker` property to your `launch.json` and start debugging session.
-Here's an example:
-```json
-{
- "version": "0.2.0",
- "configurations": [
- {
- "name": "COBOL debugger",
- "type": "gdb",
- "request": "launch",
- "cobcargs": ["-free", "-x"],
- "docker": "olegkunitsyn/gnucobol:3.1-dev"
- }
- ]
-}
-```
-
-Stop the container by `Ctrl+Shift+P` and command `GnuCOBOL Docker: stop`, or in the terminal:
-```bash
-docker rm --force gnucobol
-```
-
### Attaching to a running process
You may debug your COBOL program attaching to a running process. In order to achieve that, you have two options:
@@ -146,7 +121,8 @@ Here's an example:
```
#### Remote Debugger (GDBServer)
-Add `remoteDebugger` property to your `launch.json`.
+Add `remoteDebugger` property to your `launch.json`.
+
Here's an example:
```json
{
@@ -163,7 +139,7 @@ Here's an example:
}
```
-### Displays application output in a separate window
+### Display application output in a separate window
Add `gdbtty` property to your `launch.json`. Here’s an example:
```json
{
@@ -180,13 +156,6 @@ Add `gdbtty` property to your `launch.json`. Here’s an example:
```

-* Linux Requirements: `xterm`
-
-How to install xterm on Ubuntu:
-```
-sudo apt-get install xterm
-```
-
On Linux you can see the output of the application in Vs Code itself. Add `gdbtty` property with `vscode` value to your `launch.json`. Here is an example:
```json
{
@@ -203,11 +172,10 @@ On Linux you can see the output of the application in Vs Code itself. Add `gdbtt
```

-### Roadmap
-- Mac
-- Unit testing
+You can also use these options with `gdbtty`: `xterm`, `gnome-terminal`, `konsole` and `xfce4-terminal`.
-Your contribution is always welcome!
+### Documentation
+For a more in depth documentation please check the [SuperBOL Documentation](https://get-superbol.com/studio/)
### Troubleshooting
Add `verbose` property to your `launch.json` and start debugging session. In `DEBUG CONSOLE` you will see complete communication log between `gdb` and VS Code. Here's an example:
@@ -229,7 +197,7 @@ Add `verbose` property to your `launch.json` and start debugging session. In `DE
### Development
* Fork the repository.
* Clone it to your machine and open with VS Code.
-* Install dependencies by `npm install` command in the terminal.
+* Install dependencies by `yarn install` command in the terminal.
* Pick `Extension` from the dropdown on the Debug pane and press `F5`. This will open new VS Code instance with your cloned extension in debugging mode.
* Follow Requirements and Usage sections above.
* In the first VS Code instance you may put breakpoints to explore the functionality.
diff --git a/package-lock.json b/package-lock.json
index bb2703c..ba0e4e3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,74 +1,99 @@
{
- "name": "gnucobol-debug",
+ "name": "superbol-vscode-debug",
"version": "3.32.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "gnucobol-debug",
+ "name": "superbol-vscode-debug",
"version": "3.32.0",
"license": "GPL-3.0",
"dependencies": {
"@vscode/debugadapter": "^1.51.0",
"@vscode/debugprotocol": "^1.51.0",
- "gcov-parse": "^1.1.2",
- "n-readlines": "^1.0.1",
- "package_name": "^1.0.0"
+ "n-readlines": "^1.0.1"
},
"devDependencies": {
- "@types/mocha": "^10.0.1",
+ "@types/expect": "^1.20.4",
+ "@types/mocha": "^10.0.10",
"@types/node": "^20.6.3",
- "@types/vscode": "^1.44.0",
+ "@types/vscode": "^1.64.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
"@vscode/debugadapter-testsupport": "^1.51.0",
- "@vscode/test-electron": "^2.3.4",
+ "@vscode/test-cli": "^0.0.12",
+ "@vscode/test-electron": "^2.5.2",
"eslint": "^8.50.0",
- "mocha": "^10.2.0",
+ "eslint_d": "^12.2.1",
+ "mocha": "^10.8.2",
+ "ts-mocha": "^11.1.0",
+ "ts-node": "^10.9.2",
+ "tsconfig-paths": "^4.2.0",
"typescript": "^5.2.2"
},
"engines": {
- "vscode": "^1.44.0"
+ "node": ">=20",
+ "vscode": "^1.66.0"
}
},
- "node_modules/@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
+ "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.3"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
"peerDependencies": {
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz",
- "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==",
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
- "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -87,34 +112,86 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/@eslint/js": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz",
- "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==",
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.11.11",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
- "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+ "deprecated": "Use @eslint/config-array instead",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
+ "@humanwhocodes/object-schema": "^2.0.3",
+ "debug": "^4.3.1",
"minimatch": "^3.0.5"
},
"engines": {
"node": ">=10.10.0"
}
},
+ "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=12.22"
},
@@ -124,16 +201,104 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
- "dev": true
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -147,6 +312,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -156,6 +322,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -164,56 +331,109 @@
"node": ">= 8"
}
},
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
"dev": true,
+ "license": "MIT",
+ "optional": true,
"engines": {
- "node": ">= 6"
+ "node": ">=14"
}
},
+ "node_modules/@tsconfig/node10": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz",
+ "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node12": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node14": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tsconfig/node16": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/json-schema": {
- "version": "7.0.13",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz",
- "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==",
- "dev": true
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/mocha": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz",
- "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==",
- "dev": true
+ "version": "10.0.10",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz",
+ "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/node": {
- "version": "20.6.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz",
- "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==",
- "dev": true
+ "version": "20.19.25",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz",
+ "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
},
"node_modules/@types/semver": {
- "version": "7.5.2",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz",
- "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==",
- "dev": true
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/vscode": {
- "version": "1.82.0",
- "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.82.0.tgz",
- "integrity": "sha512-VSHV+VnpF8DEm8LNrn8OJ8VuUNcBzN3tMvKrNpbhhfuVjFm82+6v44AbDhLvVFgCzn6vs94EJNTp7w8S6+Q1Rw==",
- "dev": true
+ "version": "1.106.1",
+ "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.106.1.tgz",
+ "integrity": "sha512-R/HV8u2h8CAddSbX8cjpdd7B8/GnE4UjgjpuGuHcbp1xV6yh4OeqU4L1pKjlwujCrSFS0MOpwJAIs/NexMB1fQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz",
- "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
+ "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.7.2",
- "@typescript-eslint/type-utils": "6.7.2",
- "@typescript-eslint/utils": "6.7.2",
- "@typescript-eslint/visitor-keys": "6.7.2",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/type-utils": "6.21.0",
+ "@typescript-eslint/utils": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
"debug": "^4.3.4",
"graphemer": "^1.4.0",
"ignore": "^5.2.4",
@@ -239,15 +459,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz",
- "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
+ "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "6.7.2",
- "@typescript-eslint/types": "6.7.2",
- "@typescript-eslint/typescript-estree": "6.7.2",
- "@typescript-eslint/visitor-keys": "6.7.2",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
"debug": "^4.3.4"
},
"engines": {
@@ -267,13 +488,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz",
- "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
+ "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "6.7.2",
- "@typescript-eslint/visitor-keys": "6.7.2"
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -284,13 +506,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz",
- "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz",
+ "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "6.7.2",
- "@typescript-eslint/utils": "6.7.2",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "@typescript-eslint/utils": "6.21.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.0.1"
},
@@ -311,10 +534,11 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz",
- "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
+ "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
@@ -324,16 +548,18 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz",
- "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
+ "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "6.7.2",
- "@typescript-eslint/visitor-keys": "6.7.2",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/visitor-keys": "6.21.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
"semver": "^7.5.4",
"ts-api-utils": "^1.0.1"
},
@@ -351,17 +577,18 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz",
- "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+ "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.7.2",
- "@typescript-eslint/types": "6.7.2",
- "@typescript-eslint/typescript-estree": "6.7.2",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
"semver": "^7.5.4"
},
"engines": {
@@ -376,12 +603,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.7.2",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz",
- "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
+ "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "6.7.2",
+ "@typescript-eslint/types": "6.21.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
@@ -392,54 +620,207 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/@vscode/debugadapter": {
- "version": "1.63.0",
- "resolved": "https://registry.npmjs.org/@vscode/debugadapter/-/debugadapter-1.63.0.tgz",
- "integrity": "sha512-d2eAnYCZkKJ0C28gT93KPi5YXFav8VyagcxkJ94LZ8qqgJ27+2ct26MOHGYKB8L25ZdDs8A4YmyJO32J0afhNQ==",
+ "version": "1.68.0",
+ "resolved": "https://registry.npmjs.org/@vscode/debugadapter/-/debugadapter-1.68.0.tgz",
+ "integrity": "sha512-D6gk5Fw2y4FV8oYmltoXpj+VAZexxJFopN/mcZ6YcgzQE9dgq2L45Aj3GLxScJOD6GeLILcxJIaA8l3v11esGg==",
+ "license": "MIT",
"dependencies": {
- "@vscode/debugprotocol": "1.63.0"
+ "@vscode/debugprotocol": "1.68.0"
},
"engines": {
"node": ">=14"
}
},
"node_modules/@vscode/debugadapter-testsupport": {
- "version": "1.63.0",
- "resolved": "https://registry.npmjs.org/@vscode/debugadapter-testsupport/-/debugadapter-testsupport-1.63.0.tgz",
- "integrity": "sha512-K17THT/GoJJNezcIh3HaXDOvsntFkLxmjZ83ihXJHKAbcOnaNOrtzcnVT1bL3CVyRkgG7WzitBeScOi7sjaqZg==",
+ "version": "1.68.0",
+ "resolved": "https://registry.npmjs.org/@vscode/debugadapter-testsupport/-/debugadapter-testsupport-1.68.0.tgz",
+ "integrity": "sha512-UpbaPsCGMKyjIvJFtqFKDD1MVvME50xuOtRBPrqY1WdhAOLjWQN7FcKEoHv3X85twfNL21jW2M54FYwEdEQv4Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@vscode/debugprotocol": "1.63.0"
+ "@vscode/debugprotocol": "1.68.0"
},
"engines": {
"node": ">=14"
}
},
"node_modules/@vscode/debugprotocol": {
- "version": "1.63.0",
- "resolved": "https://registry.npmjs.org/@vscode/debugprotocol/-/debugprotocol-1.63.0.tgz",
- "integrity": "sha512-7gewwv69pA7gcJUhtJsru5YN7E1AwwnlBrF5mJY4R/NGInOUqOYOWHlqQwG+4AXn0nXWbcn26MHgaGI9Q26SqA=="
+ "version": "1.68.0",
+ "resolved": "https://registry.npmjs.org/@vscode/debugprotocol/-/debugprotocol-1.68.0.tgz",
+ "integrity": "sha512-2J27dysaXmvnfuhFGhfeuxfHRXunqNPxtBoR3koiTOA9rdxWNDTa1zIFLCFMSHJ9MPTPKFcBeblsyaCJCIlQxg==",
+ "license": "MIT"
+ },
+ "node_modules/@vscode/test-cli": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.12.tgz",
+ "integrity": "sha512-iYN0fDg29+a2Xelle/Y56Xvv7Nc8Thzq4VwpzAF/SIE6918rDicqfsQxV6w1ttr2+SOm+10laGuY9FG2ptEKsQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mocha": "^10.0.10",
+ "c8": "^10.1.3",
+ "chokidar": "^3.6.0",
+ "enhanced-resolve": "^5.18.3",
+ "glob": "^10.3.10",
+ "minimatch": "^9.0.3",
+ "mocha": "^11.7.4",
+ "supports-color": "^10.2.2",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "vscode-test": "out/bin.mjs"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@vscode/test-cli/node_modules/diff": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz",
+ "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/@vscode/test-cli/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@vscode/test-cli/node_modules/mocha": {
+ "version": "11.7.5",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz",
+ "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browser-stdout": "^1.3.1",
+ "chokidar": "^4.0.1",
+ "debug": "^4.3.5",
+ "diff": "^7.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-up": "^5.0.0",
+ "glob": "^10.4.5",
+ "he": "^1.2.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "log-symbols": "^4.1.0",
+ "minimatch": "^9.0.5",
+ "ms": "^2.1.3",
+ "picocolors": "^1.1.1",
+ "serialize-javascript": "^6.0.2",
+ "strip-json-comments": "^3.1.1",
+ "supports-color": "^8.1.1",
+ "workerpool": "^9.2.0",
+ "yargs": "^17.7.2",
+ "yargs-parser": "^21.1.1",
+ "yargs-unparser": "^2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@vscode/test-cli/node_modules/mocha/node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@vscode/test-cli/node_modules/mocha/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/@vscode/test-cli/node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@vscode/test-cli/node_modules/workerpool": {
+ "version": "9.3.4",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz",
+ "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==",
+ "dev": true,
+ "license": "Apache-2.0"
},
"node_modules/@vscode/test-electron": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.4.tgz",
- "integrity": "sha512-eWzIqXMhvlcoXfEFNWrVu/yYT5w6De+WZXR/bafUQhAp8+8GkQo95Oe14phwiRUPv8L+geAKl/QM2+PoT3YW3g==",
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz",
+ "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
"jszip": "^3.10.1",
- "semver": "^7.5.2"
+ "ora": "^8.1.0",
+ "semver": "^7.6.2"
},
"engines": {
"node": ">=16"
}
},
"node_modules/acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -452,20 +833,32 @@
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "node_modules/acorn-walk": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
+ "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "debug": "4"
+ "acorn": "^8.11.0"
},
"engines": {
- "node": ">= 6.0.0"
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
}
},
"node_modules/ajv": {
@@ -473,6 +866,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -485,10 +879,11 @@
}
},
"node_modules/ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -498,6 +893,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -507,6 +903,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -522,6 +919,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -530,17 +928,26 @@
"node": ">= 8"
}
},
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
+ "dev": true,
+ "license": "Python-2.0"
},
"node_modules/array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -549,34 +956,40 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "balanced-match": "^1.0.0"
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -586,13 +999,49 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/c8": {
+ "version": "10.1.3",
+ "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz",
+ "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@bcoe/v8-coverage": "^1.0.1",
+ "@istanbuljs/schema": "^0.1.3",
+ "find-up": "^5.0.0",
+ "foreground-child": "^3.1.1",
+ "istanbul-lib-coverage": "^3.2.0",
+ "istanbul-lib-report": "^3.0.1",
+ "istanbul-reports": "^3.1.6",
+ "test-exclude": "^7.0.1",
+ "v8-to-istanbul": "^9.0.0",
+ "yargs": "^17.7.2",
+ "yargs-parser": "^21.1.1"
+ },
+ "bin": {
+ "c8": "bin/c8.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "monocart-coverage-reports": "^2"
+ },
+ "peerDependenciesMeta": {
+ "monocart-coverage-reports": {
+ "optional": true
+ }
+ }
},
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -602,6 +1051,7 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -614,6 +1064,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -625,17 +1076,25 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
+ "license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -648,38 +1107,103 @@
"engines": {
"node": ">= 8.10.0"
},
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "node_modules/cli-cursor": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
+ "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-glob": "^4.0.1"
+ "restore-cursor": "^5.0.0"
},
"engines": {
- "node": ">= 6"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
"dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -691,25 +1215,69 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/core_d": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/core_d/-/core_d-5.0.1.tgz",
+ "integrity": "sha512-37lZyhJY1hzgFbfU4LzY4zL09QPwPfV2W/3YBOtN7mkdvVaeP1OVnDZI6zxggtlPwG/BuE5wIr0xptlVJk5EPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "supports-color": "^8.1.0"
+ }
+ },
+ "node_modules/core_d/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -720,12 +1288,13 @@
}
},
"node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@@ -741,6 +1310,7 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -752,13 +1322,15 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/diff": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
- "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
@@ -768,6 +1340,7 @@
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-type": "^4.0.0"
},
@@ -780,6 +1353,7 @@
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"esutils": "^2.0.2"
},
@@ -787,17 +1361,40 @@
"node": ">=6.0.0"
}
},
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.3",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
+ "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
},
"node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -807,6 +1404,7 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -815,18 +1413,21 @@
}
},
"node_modules/eslint": {
- "version": "8.50.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz",
- "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==",
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.2",
- "@eslint/js": "8.50.0",
- "@humanwhocodes/config-array": "^0.11.11",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.1",
+ "@humanwhocodes/config-array": "^0.13.0",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -868,11 +1469,28 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint_d": {
+ "version": "12.2.1",
+ "resolved": "https://registry.npmjs.org/eslint_d/-/eslint_d-12.2.1.tgz",
+ "integrity": "sha512-qOJ9cTi5AaH5bOgEoCkv41DJ637mHgzffbOLojwU4wadwC6qbR+OxVJRvVzH0v2XYmQOvw4eiJK7ivrr5SvzsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core_d": "^5.0.1",
+ "eslint": "^8.12.0",
+ "nanolru": "^1.0.0",
+ "optionator": "^0.9.1"
+ },
+ "bin": {
+ "eslint_d": "bin/eslint_d.js"
+ }
+ },
"node_modules/eslint-scope": {
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -889,6 +1507,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -896,11 +1515,49 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/espree": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
@@ -914,10 +1571,11 @@
}
},
"node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"estraverse": "^5.1.0"
},
@@ -930,6 +1588,7 @@
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
},
@@ -942,6 +1601,7 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
@@ -951,6 +1611,7 @@
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -959,53 +1620,46 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "micromatch": "^4.0.8"
},
"engines": {
"node": ">=8.6.0"
}
},
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
@@ -1015,6 +1669,7 @@
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flat-cache": "^3.0.4"
},
@@ -1023,10 +1678,11 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -1039,6 +1695,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
@@ -1055,42 +1712,70 @@
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
"dev": true,
+ "license": "BSD-3-Clause",
"bin": {
"flat": "cli.js"
}
},
"node_modules/flat-cache": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz",
- "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "flatted": "^3.2.7",
+ "flatted": "^3.2.9",
"keyv": "^4.5.3",
"rimraf": "^3.0.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
- "dev": true
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
- "node_modules/gcov-parse": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/gcov-parse/-/gcov-parse-1.1.2.tgz",
- "integrity": "sha512-Qg737lue7Ojs4EOXJz6tfHhRS6dhWmsQjoiY2Hxh9Gzi03kYEDM63fqlwxDdegKW2yBKgzw3Hukma2RwqYK4YQ==",
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">= 8.0.0"
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/get-caller-file": {
@@ -1098,47 +1783,80 @@
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
+ "node_modules/get-east-asian-width": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
+ "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": "*"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "is-glob": "^4.0.3"
+ "is-glob": "^4.0.1"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/globals": {
- "version": "13.22.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
- "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -1154,6 +1872,7 @@
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
@@ -1169,17 +1888,26 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/graphemer": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -1189,42 +1917,52 @@
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true,
+ "license": "MIT",
"bin": {
"he": "bin/he"
}
},
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "agent-base": "6",
+ "agent-base": "^7.1.2",
"debug": "4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
@@ -1233,13 +1971,15 @@
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -1256,6 +1996,7 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.8.19"
}
@@ -1264,7 +2005,9 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
"dev": true,
+ "license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -1274,13 +2017,15 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -1293,6 +2038,7 @@
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1302,6 +2048,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -1311,6 +2058,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -1318,11 +2066,25 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-interactive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+ "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
@@ -1332,6 +2094,7 @@
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -1341,6 +2104,7 @@
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -1350,6 +2114,7 @@
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -1361,61 +2126,150 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/json-buffer": {
+ "node_modules/istanbul-lib-report": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "node_modules/jszip": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
- "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
- "lie": "~3.3.0",
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jszip": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+ "dev": true,
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "dependencies": {
+ "lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"setimmediate": "^1.0.5"
}
},
"node_modules/keyv": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
- "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"json-buffer": "3.0.1"
}
@@ -1425,6 +2279,7 @@
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -1438,6 +2293,7 @@
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"immediate": "~3.0.5"
}
@@ -1447,6 +2303,7 @@
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
@@ -1461,13 +2318,15 @@
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
"integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
@@ -1480,78 +2339,135 @@
}
},
"node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "yallist": "^4.0.0"
+ "semver": "^7.5.3"
},
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
"node": ">=8.6"
}
},
+ "node_modules/mimic-function": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
+ "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": "*"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
}
},
"node_modules/mocha": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
- "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.3",
- "debug": "4.3.4",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.2.0",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "5.0.1",
- "ms": "2.1.3",
- "nanoid": "3.3.3",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "workerpool": "6.2.1",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
+ "version": "10.8.2",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
+ "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-colors": "^4.1.3",
+ "browser-stdout": "^1.3.1",
+ "chokidar": "^3.5.3",
+ "debug": "^4.3.5",
+ "diff": "^5.2.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-up": "^5.0.0",
+ "glob": "^8.1.0",
+ "he": "^1.2.0",
+ "js-yaml": "^4.1.0",
+ "log-symbols": "^4.1.0",
+ "minimatch": "^5.1.6",
+ "ms": "^2.1.3",
+ "serialize-javascript": "^6.0.2",
+ "strip-json-comments": "^3.1.1",
+ "supports-color": "^8.1.1",
+ "workerpool": "^6.5.1",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.9",
+ "yargs-unparser": "^2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
@@ -1559,26 +2475,54 @@
},
"engines": {
"node": ">= 14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mochajs"
}
},
- "node_modules/mocha/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "node_modules/mocha/node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/mocha/node_modules/minimatch": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
- "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -1586,17 +2530,27 @@
"node": ">=10"
}
},
- "node_modules/mocha/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
+ "node_modules/mocha/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/mocha/node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -1607,43 +2561,92 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/mocha/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/n-readlines": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/n-readlines/-/n-readlines-1.0.1.tgz",
"integrity": "sha512-z4SyAIVgMy7CkgsoNw7YVz40v0g4+WWvvqy8+ZdHrCtgevcEO758WQyrYcw3XPxcLxF+//RszTz/rO48nzD0wQ==",
+ "license": "MIT",
"engines": {
"node": ">=6.x.x"
}
},
- "node_modules/nanoid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "node_modules/nanolru": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/nanolru/-/nanolru-1.0.0.tgz",
+ "integrity": "sha512-GyQkE8M32pULhQk7Sko5raoIbPalAk90ICG+An4fq6fCsFHsP6fB2K46WGXVdoJpy4SGMnZ/EKbo123fZJomWg==",
"dev": true,
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
+ "license": "MIT",
"engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ "node": ">= 0.4.0"
}
},
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1653,32 +2656,185 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
+ "node_modules/onetime": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+ "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-function": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
},
"engines": {
"node": ">= 0.8.0"
}
},
+ "node_modules/ora": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz",
+ "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "cli-cursor": "^5.0.0",
+ "cli-spinners": "^2.9.2",
+ "is-interactive": "^2.0.0",
+ "is-unicode-supported": "^2.0.0",
+ "log-symbols": "^6.0.0",
+ "stdin-discarder": "^0.2.2",
+ "string-width": "^7.2.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ora/node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/ora/node_modules/emoji-regex": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ora/node_modules/is-unicode-supported": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
+ "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/log-symbols": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
+ "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "is-unicode-supported": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
@@ -1694,6 +2850,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
},
@@ -1704,22 +2861,26 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/package_name": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/package_name/-/package_name-1.0.0.tgz",
- "integrity": "sha512-ZaCLuuLgYe6EmhJ7fhrAMbWCksWoviESjbL31J+xGBIIkQM5BbNdLVREqnbIm5PDXhLyj8kfkvCO1OYBHbXrGg=="
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
},
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true
+ "dev": true,
+ "license": "(MIT AND Zlib)"
},
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
},
@@ -1732,6 +2893,7 @@
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -1741,6 +2903,7 @@
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1750,24 +2913,51 @@
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -1780,6 +2970,7 @@
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.8.0"
}
@@ -1788,13 +2979,15 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -1817,13 +3010,15 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"safe-buffer": "^5.1.0"
}
@@ -1833,6 +3028,7 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -1848,6 +3044,7 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -1860,6 +3057,7 @@
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1869,15 +3067,34 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
+ "node_modules/restore-cursor": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
+ "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^7.0.0",
+ "signal-exit": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
"dev": true,
+ "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -1887,15 +3104,63 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
+ "brace-expansion": "^1.1.7"
},
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "engines": {
+ "node": "*"
}
},
"node_modules/run-parallel": {
@@ -1917,6 +3182,7 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
@@ -1925,16 +3191,15 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -1943,10 +3208,11 @@
}
},
"node_modules/serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
@@ -1955,13 +3221,15 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -1974,33 +3242,82 @@
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
+ "node_modules/stdin-discarder": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
+ "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -2010,11 +3327,62 @@
"node": ">=8"
}
},
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -2022,11 +3390,22 @@
"node": ">=8"
}
},
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -2035,28 +3414,76 @@
}
},
"node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz",
+ "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz",
+ "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "has-flag": "^4.0.0"
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^10.4.1",
+ "minimatch": "^9.0.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ }
+ },
+ "node_modules/test-exclude/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -2065,22 +3492,116 @@
}
},
"node_modules/ts-api-utils": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
- "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
+ "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=16.13.0"
+ "node": ">=16"
},
"peerDependencies": {
"typescript": ">=4.2.0"
}
},
+ "node_modules/ts-mocha": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-11.1.0.tgz",
+ "integrity": "sha512-yT7FfzNRCu8ZKkYvAOiH01xNma/vLq6Vit7yINKYFNVP8e5UyrYXSOMIipERTpzVKJQ4Qcos5bQo1tNERNZevQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "ts-mocha": "bin/ts-mocha"
+ },
+ "engines": {
+ "node": ">= 6.X.X"
+ },
+ "peerDependencies": {
+ "mocha": "^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X",
+ "ts-node": "^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X",
+ "tsconfig-paths": "^4.X.X"
+ },
+ "peerDependenciesMeta": {
+ "tsconfig-paths": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ts-node": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@cspotcode/source-map-support": "^0.8.0",
+ "@tsconfig/node10": "^1.0.7",
+ "@tsconfig/node12": "^1.0.7",
+ "@tsconfig/node14": "^1.0.0",
+ "@tsconfig/node16": "^1.0.2",
+ "acorn": "^8.4.1",
+ "acorn-walk": "^8.1.1",
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "v8-compile-cache-lib": "^3.0.1",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-cwd": "dist/bin-cwd.js",
+ "ts-node-esm": "dist/bin-esm.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "peerDependencies": {
+ "@swc/core": ">=1.2.50",
+ "@swc/wasm": ">=1.2.50",
+ "@types/node": "*",
+ "typescript": ">=2.7"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/wasm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ts-node/node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
+ "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json5": "^2.2.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1"
},
@@ -2093,6 +3614,7 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
@@ -2101,10 +3623,11 @@
}
},
"node_modules/typescript": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -2113,11 +3636,19 @@
"node": ">=14.17"
}
},
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
@@ -2126,13 +3657,48 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/v8-compile-cache-lib": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -2143,17 +3709,48 @@
"node": ">= 8"
}
},
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/workerpool": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
- "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
- "dev": true
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
+ "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
+ "dev": true,
+ "license": "Apache-2.0"
},
"node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -2166,52 +3763,114 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=10"
}
},
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.1.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
}
},
"node_modules/yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
+ "license": "ISC",
"engines": {
- "node": ">=10"
+ "node": ">=12"
}
},
"node_modules/yargs-unparser": {
@@ -2219,6 +3878,7 @@
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
"integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
@@ -2229,11 +3889,44 @@
"node": ">=10"
}
},
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
diff --git a/package.json b/package.json
index 52e6542..ddb5cd1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
- "name": "gnucobol-debug",
- "displayName": "COBOL debugger",
+ "name": "superbol-vscode-debug",
+ "displayName": "SuperBOL Debugger for GnuCOBOL",
"description": "Debug or execute COBOL code. No mainframe required.",
"keywords": [
"cobol",
@@ -10,24 +10,34 @@
"code coverage"
],
"version": "3.32.0",
- "publisher": "OlegKunitsyn",
+ "publisher": "OCamlPro SAS",
+ "contributors": [
+ {
+ "name": "Emilien Lemaire",
+ "email": "emilien.lemaire@ocamlpro.com"
+ },
+ {
+ "name": "Olegs Kunicins",
+ "email": "olegs.kunicins@gmail.com"
+ }
+ ],
"license": "GPL-3.0",
"icon": "icon.png",
"engines": {
- "vscode": "^1.44.0"
+ "vscode": "^1.66.0",
+ "node": ">=20"
},
"main": "./out/src/extension",
"activationEvents": [
"onDebugResolve",
- "onCommand:gnucobol-debug.dockerStart",
- "onCommand:gnucobol-debug.dockerStop"
+ "onDebugInitialConfigurations"
],
"categories": [
"Debuggers"
],
"repository": {
"type": "git",
- "url": "https://github.com/OlegKunitsyn/gnucobol-debug.git"
+ "url": "https://github.com/OCamlPro/superbol-vscode-debug.git"
},
"capabilities": {
"untrustedWorkspaces": {
@@ -35,49 +45,39 @@
}
},
"contributes": {
- "commands": [
- {
- "command": "gnucobol-debug.dockerStart",
- "title": "GnuCOBOL Docker: start"
- },
- {
- "command": "gnucobol-debug.dockerStop",
- "title": "GnuCOBOL Docker: stop"
- }
- ],
"breakpoints": [
{
"language": "cobol"
- },
- {
- "language": "COBOL"
- },
- {
- "language": "ACUCOBOL"
- },
- {
- "language": "OpenCOBOL"
- },
- {
- "language": "GnuCOBOL"
- },
+ }
+ ],
+ "languages": [
{
- "language": "entcobol"
+ "id": "cobol",
+ "aliases": [
+ "COBOL"
+ ],
+ "filenamePatterns": [
+ "*.[cC]{ob,OB,bl,BL,py,PY,bx,BX,bsql}"
+ ]
}
],
"debuggers": [
{
- "type": "gdb",
+ "type": "superbol-gdb",
+ "languages": [
+ "cobol",
+ "COBOL"
+ ],
"program": "./out/src/gdb.js",
"runtime": "node",
- "label": "COBOL debugger",
+ "label": "SuperBOL Debugger for GnuCOBOL",
"configurationAttributes": {
"launch": {
"required": [],
"properties": {
"target": {
"type": "string",
- "description": "Path to executable",
+ "description": "Path to the executable, or name of the module to launch",
"default": "${file}"
},
"arguments": {
@@ -88,30 +88,7 @@
"cwd": {
"type": "string",
"description": "Path to project",
- "default": "${workspaceRoot}"
- },
- "gdbpath": {
- "type": "string",
- "description": "Path to gdb",
- "default": "gdb"
- },
- "docker": {
- "type": "string",
- "description": "Docker image",
- "default": "olegkunitsyn/gnucobol:3.1-dev"
- },
- "cobcpath": {
- "type": "string",
- "description": "Path to cobc",
- "default": "cobc"
- },
- "cobcargs": {
- "type": "array",
- "description": "Extra arguments for cobc",
- "default": [
- "-free",
- "-x"
- ]
+ "default": "${workspaceFolder}"
},
"group": {
"type": "array",
@@ -126,11 +103,11 @@
"coverage": {
"type": "boolean",
"description": "Enable code coverage",
- "default": true
+ "default": false
},
"verbose": {
"type": "boolean",
- "description": "Debug GDB",
+ "description": "Debug interactions with gdb",
"default": false
},
"gdbtty": {
@@ -144,8 +121,22 @@
true,
false,
"vscode",
+ "xterm",
+ "gnome-terminal",
+ "xfce4-terminal",
+ "konsole",
"external"
]
+ },
+ "useCobcrun": {
+ "type": "boolean",
+ "markdownDescription": "Debug the target as a module of `cobcrun`",
+ "default": false
+ },
+ "sourceDirs": {
+ "type": "array",
+ "markdownDescription": "Where to find the source code, in addition to the current directory.\n\nExample: `[ \"/usr/share/cobol/sources\" ]`",
+ "default": []
}
}
},
@@ -159,31 +150,13 @@
},
"arguments": {
"type": "string",
- "description": "Extra arguments for executable",
+ "description": "Extra arguments (only used when the program is restarted)",
"default": null
},
"cwd": {
"type": "string",
"description": "Path to project",
- "default": "${workspaceRoot}"
- },
- "gdbpath": {
- "type": "string",
- "description": "Path to gdb",
- "default": "gdb"
- },
- "cobcpath": {
- "type": "string",
- "description": "Path to cobc",
- "default": "cobc"
- },
- "cobcargs": {
- "type": "array",
- "description": "Extra arguments for cobc",
- "default": [
- "-free",
- "-x"
- ]
+ "default": "${workspaceFolder}"
},
"group": {
"type": "array",
@@ -197,7 +170,7 @@
},
"verbose": {
"type": "boolean",
- "description": "Debug GDB",
+ "description": "Debug interactions with gdb",
"default": false
},
"pid": {
@@ -209,78 +182,87 @@
"type": "string",
"description": "GDB Server host:port",
"default": null
+ },
+ "sourceDirs": {
+ "type": "array",
+ "markdownDescription": "Where to find the source code, in addition to the current directory.\n\nExample: `[ \"/usr/share/cobol/sources\" ]`",
+ "default": []
}
}
}
},
- "initialConfigurations": [
+ "configurationSnippets": [
{
- "name": "COBOL debugger",
- "type": "gdb",
- "request": "launch",
- "cobcargs": [
- "-free",
- "-x"
- ],
- "coverage": true,
- "gdbtty": true
+ "label": "SuperBOL: debug launch",
+ "description": "New SuperBOL launch request",
+ "body": {
+ "name": "${2:SuperBOL: debug launch}",
+ "type": "superbol-gdb",
+ "request": "launch",
+ "target": "$${_:{file}}",
+ "arguments": "",
+ "cwd": "$${_:{workspaceRoot}}",
+ "gdbtty": true
+ }
},
{
- "name": "COBOL debugger attach local",
- "type": "gdb",
- "request": "attach",
- "cobcargs": [
- "-free",
- "-x"
- ],
- "pid": "${input:pid}"
+ "label": "SuperBOL: debug attach local",
+ "description": "New SuperBOL attach local request",
+ "body": {
+ "name": "${2:SuperBOL: debug attach local}",
+ "type": "superbol-gdb",
+ "request": "attach",
+ "pid": "${3:0}",
+ "target": "$${_:{file}}",
+ "cwd": "$${_:{workspaceRoot}}"
+ }
},
{
- "name": "COBOL debugger attach remote",
- "type": "gdb",
- "request": "attach",
- "cobcargs": [
- "-free",
- "-x"
- ],
- "remoteDebugger": "${input:remoteDebugger}"
+ "label": "SuperBOL: debug attach remote",
+ "description": "New SuperBOL attach remote request",
+ "body": {
+ "name": "${2:SuperBOL: debug attach remote}",
+ "type": "superbol-gdb",
+ "request": "attach",
+ "remoteDebugger": "${3:host:port}",
+ "target": "$${_:{file}}",
+ "cwd": "$${_:{workspaceRoot}}"
+ }
}
]
}
],
"configuration": {
- "type": "object",
- "title": "COBOL Debugger",
+ "title": "SuperBOL Debugger",
"properties": {
- "Cobol_Debugger.display_variable_attributes": {
+ "superbol-vscode-debug.displayVariableAttributes": {
"type": "boolean",
"default": false,
- "description": "Displaying Data Storages and Fields attributes(e.g. size of Alphanumerics or digits and scale of numerics).",
+ "description": "Displaying Data Storages and Fields attributes (e.g. size of Alphanumerics or digits and scale of numerics).",
"scope": "resource"
},
- "Cobol_Debugger.cwd": {
+ "superbol-vscode-debug.gdbPath": {
"type": "string",
- "default": "${workspaceRoot}",
- "description": "Path to project",
- "scope": "application"
- },
- "Cobol_Debugger.target": {
- "type": "string",
- "description": "Path to source code",
- "default": "${file}",
- "scope": "application"
- },
- "Cobol_Debugger.gdbpath": {
+ "title": "GNU Debugger Executable",
+ "markdownDescription": "Path to the GNU debugger executable.\n",
+ "default": "gdb",
+ "scope": "machine-overridable"
+ },
+ "superbol-vscode-debug.cobcrunPath": {
+ "title": "GnuCOBOL module loader",
+ "markdownDescription": "Path to `cobcrun`, the GnuCOBOL module loader.\n",
"type": "string",
- "description": "Path to gdb",
- "default": "gdb",
- "scope": "application"
+ "default": "cobcrun",
+ "scope": "machine-overridable"
},
- "Cobol_Debugger.cobcpath": {
- "type": "string",
- "description": "Path to cobc",
- "default": "cobc",
- "scope": "application"
+ "superbol-vscode-debug.libcobPath": {
+ "title": "GnuCOBOL Runtime Library",
+ "type": [
+ "string",
+ "null"
+ ],
+ "description": "Path to the GnuCOBOL runtime library file.",
+ "scope": "machine-overridable"
}
}
}
@@ -289,26 +271,36 @@
"prepare": "tsc -p ./",
"compile": "tsc -p ./",
"watch": "tsc -w -p ./",
- "test": "mocha -u tdd ./out/test/",
+ "test": "npm run compile && vscode-test",
"lint": "eslint -c .eslintrc.js --ext .ts ./"
},
"devDependencies": {
- "@types/mocha": "^10.0.1",
+ "@types/expect": "^1.20.4",
+ "@types/mocha": "^10.0.10",
"@types/node": "^20.6.3",
- "@types/vscode": "^1.44.0",
+ "@types/vscode": "^1.64.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "@vscode/test-electron": "^2.3.4",
+ "@vscode/debugadapter-testsupport": "^1.51.0",
+ "@vscode/test-cli": "^0.0.12",
+ "@vscode/test-electron": "^2.5.2",
"eslint": "^8.50.0",
- "mocha": "^10.2.0",
- "typescript": "^5.2.2",
- "@vscode/debugadapter-testsupport": "^1.51.0"
+ "eslint_d": "^12.2.1",
+ "mocha": "^10.8.2",
+ "ts-mocha": "^11.1.0",
+ "ts-node": "^10.9.2",
+ "tsconfig-paths": "^4.2.0",
+ "typescript": "^5.2.2"
},
"dependencies": {
- "gcov-parse": "^1.1.2",
- "n-readlines": "^1.0.1",
- "package_name": "^1.0.0",
+ "@vscode/debugadapter": "^1.51.0",
"@vscode/debugprotocol": "^1.51.0",
- "@vscode/debugadapter": "^1.51.0"
+ "n-readlines": "^1.0.1"
+ },
+ "devEngines": {
+ "packageManager": {
+ "name": "npm",
+ "onFail": "error"
+ }
}
}
diff --git a/src/coverage.ts b/src/coverage.ts
index 62330d2..251c05f 100644
--- a/src/coverage.ts
+++ b/src/coverage.ts
@@ -15,10 +15,10 @@ import * as os from "os";
import * as nativePath from "path";
import * as ChildProcess from "child_process";
import {SourceMap} from "./parser.c";
-import * as gcov from "gcov-parse";
+import {GcovData, loadGcovData} from "./gcov";
export class CoverageStatus implements Disposable {
- private coverages: gcov.Coverage[] = [];
+ private coverages: GcovData[] = [];
private sourceMap: SourceMap;
private statusBar: StatusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 100);
readonly RED: TextEditorDecorationType = window.createTextEditorDecorationType({
@@ -55,17 +55,9 @@ export class CoverageStatus implements Disposable {
this.statusBar.command = this.COMMAND;
}
- public show(gcovFiles: string[], sourceMap: SourceMap, docker: string = undefined) {
- if (docker !== undefined) {
- for (let i = 0; i < gcovFiles.length; i++) {
- const localPath = nativePath.resolve(os.tmpdir(), nativePath.basename(gcovFiles[i]));
- ChildProcess.spawnSync('docker', ['cp', `gnucobol:${gcovFiles[i]}.gcda`, `${localPath}.gcda`]);
- ChildProcess.spawnSync('docker', ['cp', `gnucobol:${gcovFiles[i]}.gcno`, `${localPath}.gcno`]);
- gcovFiles[i] = localPath;
- }
- }
-
- this.coverages = gcov.parse(gcovFiles);
+ public async show(cFiles: string[], sourceMap: SourceMap) {
+ this.highlight = true;
+ this.coverages = await loadGcovData(cFiles);
this.sourceMap = sourceMap;
this.updateStatus();
}
@@ -74,6 +66,15 @@ export class CoverageStatus implements Disposable {
this.statusBar.dispose();
}
+ public setHighlight(highlighted: boolean) {
+ this.highlight = highlighted;
+ }
+
+ public hide() {
+ this.highlight = false;
+ this.updateStatus();
+ }
+
private updateStatus() {
const editor = window.activeTextEditor;
if (editor === undefined) {
@@ -83,17 +84,19 @@ export class CoverageStatus implements Disposable {
const red: Range[] = [];
const green: Range[] = [];
for (const coverage of this.coverages) {
- for (const line of coverage.lines) {
- if (this.sourceMap.hasLineCobol(coverage.file, line.line)) {
- const map = this.sourceMap.getLineCobol(coverage.file, line.line);
- if (editor.document.uri.fsPath !== map.fileCobol) {
- continue;
- }
- const range = new Range(map.lineCobol - 1, 0, map.lineCobol - 1, Number.MAX_VALUE);
- if (line.executed) {
- green.push(range);
- } else {
- red.push(range);
+ for (const file of coverage.files) {
+ for (const line of file.lines) {
+ if (this.sourceMap.hasLineCobol(file.file, line.line_number)) {
+ const map = this.sourceMap.getLineCobol(file.file, line.line_number);
+ if (editor.document.uri.fsPath !== map.fileCobol) {
+ continue;
+ }
+ const range = new Range(map.lineCobol - 1, 0, map.lineCobol - 1, Number.MAX_VALUE);
+ if (line.count > 0) {
+ green.push(range);
+ } else {
+ red.push(range);
+ }
}
}
}
diff --git a/src/debugger.ts b/src/debugger.ts
index fd7b79d..7223b77 100644
--- a/src/debugger.ts
+++ b/src/debugger.ts
@@ -1,7 +1,7 @@
import {MINode} from "./parser.mi2";
import {DebugProtocol} from "@vscode/debugprotocol/lib/debugProtocol";
import {removeLeadingZeroes} from "./functions";
-import {SourceMap} from "./parser.c";
+import {SourceMap, Line} from "./parser.c";
export interface Breakpoint {
file?: string;
@@ -19,11 +19,32 @@ export interface Thread {
export interface Stack {
level: number;
- address: string;
function: string;
- fileName: string;
- file: string;
+ line: Line;
+}
+
+export interface FileSymbols {
+ filename: string;
+ fullname: string;
+ symbols: Symbol[];
+}
+
+export interface Symbol {
line: number;
+ name: string;
+ type: string;
+ description: string;
+}
+
+export interface LocalizedSymbol {
+ symbol: Symbol;
+ filename: string;
+}
+
+export function localizeSymbols(fileSymbols: FileSymbols): LocalizedSymbol[] {
+ return fileSymbols.symbols.map(s => {
+ return { symbol: s, filename: fileSymbols.filename }
+ });
}
const repeatTimeRegex = /(\"\,\s|^)\'(\s|0)\'\s\/i;
@@ -398,18 +419,20 @@ export class Attribute {
export class DebuggerVariable {
- public displayableType: string;
- public details: VariableDetail[];
+ public readonly displayableType: string;
+ public readonly details: VariableDetail[];
public constructor(
- public cobolName: string,
- public cName: string,
- public functionName: string,
- public attribute: Attribute = null,
- public size: number = null,
+ public readonly cobolName: string,
+ public readonly cName: string,
+ public readonly functionName: string,
+ public readonly rootFileC: string,
+ public readonly isField: boolean,
+ public readonly attribute: Attribute = null,
+ public readonly size: number = null,
public value: string = null,
public parent: DebuggerVariable = null,
- public children: Map = new Map()) {
+ public readonly children: Map = new Map()) {
[this.displayableType, this.details] = this.attribute.getDetails(this.size);
}
@@ -501,13 +524,16 @@ export interface IDebugger {
getStackVariables(thread: number, frame: number): Thenable;
- evalExpression(name: string, thread: number, frame: number): Thenable;
+ globalStorageSymbols(): Thenable;
+
+ evalSymbol(s: LocalizedSymbol): Promise;
- evalCobField(name: string, thread: number, frame: number): Promise;
+ evalExpression(name: string, thread: number, frame: number): Promise;
isReady(): boolean;
- changeVariable(name: string, rawValue: string): Promise;
+ changeVariable(name: string, rawValue: string): Promise>;
+ changeGlobalCVariable(cName: string, rawValue: string): Promise>;
examineMemory(from: number, to: number): Thenable;
@@ -515,7 +541,7 @@ export interface IDebugger {
sendUserInput(command: string, threadId: number, frameLevel: number): Thenable;
- getSourceMap(): SourceMap;
+ sourceMap(): SourceMap;
}
export class VariableObject {
diff --git a/src/extension.ts b/src/extension.ts
index a4cc4bb..49b4815 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -4,101 +4,122 @@ import {CoverageStatus} from './coverage';
import {DebuggerSettings} from "./settings";
import { EvaluatableExpressionProvider, TextDocument, Position, EvaluatableExpression, ProviderResult, window, Range } from "vscode";
-const dockerTerminal = vscode.window.createTerminal("GnuCOBOL Docker");
-const dockerMessage = "Property 'docker' is not defined in launch.json";
/** Max column index to retrieve line content */
const MAX_COLUMN_INDEX = 300;
/** Array of COBOL Reserved words */
const COBOL_RESERVED_WORDS = ["perform", "move", "to", "set", "add", "subtract", "call", "inquire", "modify", "invoke", "if", "not", "end-if", "until", "varying", "evaluate", "true", "when", "false", "go", "thru", "zeros", "spaces", "zero", "space", "inspect", "tallying", "exit", "paragraph", "method", "cycle", "from", "by", "and", "or", "of", "length", "function", "program", "synchronized", "end-synchronized", "string", "end-string", "on", "reference", "value", "returning", "giving", "replacing", "goback", "all", "open", "i-o", "input", "output", "close", "compute", "unstring", "using", "delete", "start", "read", "write", "rewrite", "with", "lock", "else", "upper-case", "lower-case", "display", "accept", "at", "clear-screen", "initialize", "line", "col", "key", "is", "self", "null", "stop", "run", "upon", "environment-name", "environment-value"]
-export function activate(context: vscode.ExtensionContext) {
- const dockerStart = vscode.commands.registerCommand('gnucobol-debug.dockerStart', function () {
- let config: vscode.DebugConfiguration;
- let workspaceRoot: string = vscode.workspace.workspaceFolders[0].uri.fsPath;
- for (config of vscode.workspace.getConfiguration('launch', vscode.workspace.workspaceFolders[0].uri).get('configurations') as []) {
- if (config.type !== 'gdb') {
- continue;
- }
- if (config.docker === undefined) {
- vscode.window.showInformationMessage(dockerMessage);
- break;
- }
- if (process.platform === "win32") {
- workspaceRoot = workspaceRoot
- .replace(/.*:/, s => "/" + s.toLowerCase().replace(":", ""))
- .replace(/\\/g, "/");
- }
- vscode.workspace.workspaceFolders[0].uri.fsPath
- .replace(/.*:/, s => "/" + s.toLowerCase().replace(":", "")).replace(/\\/g, "/");
- dockerTerminal.show(true);
- dockerTerminal.sendText(`docker run -d -i --name gnucobol -w ${workspaceRoot} -v ${workspaceRoot}:${workspaceRoot} ${config.docker}`);
- break;
- }
- });
+const superbolConsts = {
+ taskType: "superbol",
+ taskSource: "SuperBOL",
+ debugBuildTaskName: "build (debug)",
+}
+const defaultDebugBuildTask = `${superbolConsts.taskSource}: ${superbolConsts.debugBuildTaskName}`;
- const dockerStop = vscode.commands.registerCommand('gnucobol-debug.dockerStop', function () {
- let config: vscode.DebugConfiguration;
- for (config of vscode.workspace.getConfiguration('launch', vscode.workspace.workspaceFolders[0].uri).get('configurations') as []) {
- if (config.type !== 'gdb') {
- continue;
- }
- if (config.docker === undefined) {
- vscode.window.showInformationMessage(dockerMessage);
- break;
- }
- dockerTerminal.show(true);
- dockerTerminal.sendText(`docker rm --force gnucobol`);
- break;
- }
- });
+async function checkForSuperBOLBuildTask () {
+ return vscode.tasks.fetchTasks({ type: superbolConsts.taskType }).then((tasks) =>
+ tasks.find(task => task.source == superbolConsts.taskSource &&
+ task.name == superbolConsts.debugBuildTaskName) != undefined
+ );
+}
+export function activate(context: vscode.ExtensionContext) {
+ const provider = new GdbConfigurationProvider();
+ const factory = new GdbAdapterDescriptorFactory(new CoverageStatus(), new GDBDebugSession());
context.subscriptions.push(
- dockerStart,
- dockerStop,
- vscode.debug.registerDebugConfigurationProvider('gdb', new GdbConfigurationProvider()),
- vscode.debug.registerDebugAdapterDescriptorFactory('gdb', new GdbAdapterDescriptorFactory(new CoverageStatus(), new GDBDebugSession())),
+ vscode.debug.registerDebugConfigurationProvider('superbol-gdb', provider),
+ vscode.debug.registerDebugAdapterDescriptorFactory('superbol-gdb', factory),
vscode.languages.registerEvaluatableExpressionProvider('GnuCOBOL', new GnuCOBOLEvalExpressionFactory()),
vscode.languages.registerEvaluatableExpressionProvider('GnuCOBOL31', new GnuCOBOLEvalExpressionFactory()),
vscode.languages.registerEvaluatableExpressionProvider('GnuCOBOL3.1', new GnuCOBOLEvalExpressionFactory()),
vscode.languages.registerEvaluatableExpressionProvider('GnuCOBOL32', new GnuCOBOLEvalExpressionFactory()),
vscode.languages.registerEvaluatableExpressionProvider('GnuCOBOL3.2', new GnuCOBOLEvalExpressionFactory()),
- vscode.languages.registerEvaluatableExpressionProvider('COBOL', new GnuCOBOLEvalExpressionFactory()),
- );
+ vscode.languages.registerEvaluatableExpressionProvider('COBOL', new GnuCOBOLEvalExpressionFactory()));
}
export function deactivate() {
- dockerTerminal.dispose();
}
class GdbConfigurationProvider implements vscode.DebugConfigurationProvider {
- resolveDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, token?: vscode.CancellationToken): vscode.ProviderResult {
+ public resolveDebugConfiguration(workspaceFolder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, _token?: vscode.CancellationToken): vscode.ProviderResult {
config.gdbargs = ["-q", "--interpreter=mi2"];
- if (config.docker !== undefined) {
- config.cobcpath = 'docker';
- config.gdbpath = 'docker';
- config.cobcargs = ['exec', '-i', 'gnucobol', 'cobc'].concat(config.cobcargs);
- config.gdbargs = ['exec', '-i', 'gnucobol', 'gdb'].concat(config.gdbargs);
- }
- const settings = new DebuggerSettings();
- if (config.cwd === undefined) {
- config.cwd = settings.cwd;
- }
- if (config.target === undefined) {
- config.target = settings.target;
- }
- if (config.group === undefined) {
- config.group = [];
- }
- if (config.arguments === undefined) {
- config.arguments = "";
- }
- if (config.gdbpath === undefined) {
- config.gdbpath = settings.gdbpath;
- }
- if (config.cobcpath === undefined) {
- config.cobcpath = settings.cobcpath;
- }
- return config;
+ return checkForSuperBOLBuildTask().then(haveSuperBOLBuildTask => {
+ if (config.name === undefined && haveSuperBOLBuildTask) {
+ config.name = "SuperBOL: default debug";
+ }
+ if (config.type === undefined) {
+ config.type = "superbol-gdb";
+ }
+ if (config.request === undefined) {
+ config.request = "launch";
+ }
+ if (haveSuperBOLBuildTask &&
+ workspaceFolder != undefined &&
+ config.request != "attach" &&
+ config.preLaunchTask === undefined) {
+ config.preLaunchTask = defaultDebugBuildTask;
+ } else if (config.preLaunchTask === "") {
+ delete config.preLaunchTask;
+ }
+ if (config.target === undefined) {
+ config.target = "${file}";
+ }
+ if (config.arguments === undefined) {
+ config.arguments = "";
+ }
+ if (config.group === undefined) {
+ config.group = [];
+ }
+ if (config.env === undefined) {
+ config.env = { ["LD_LIBRARY_PATH"]: config.libcobpath };
+ } else {
+ config.env.LD_LIBRARY_PATH = config.libcobpath + ";" + config.env.LD_LIBRARY_PATH;
+ }
+ if (config.coverage === undefined) {
+ config.coverage = false;
+ }
+ if (config.gdbtty === undefined) {
+ config.gdbtty = false;
+ }
+ config.sourceDirs = config.sourceDirs ?? [];
+ return config;
+ });
+ }
+
+ public provideDebugConfigurations(_folder: vscode.WorkspaceFolder, _token?: vscode.CancellationToken)
+ : vscode.ProviderResult {
+ return checkForSuperBOLBuildTask().then(haveSuperBOLBuildTask => {
+ const launchConfigDefault: vscode.DebugConfiguration = {
+ name: "SuperBOL: debug (launch)",
+ type: "superbol-gdb",
+ request: "launch",
+ preLaunchTask: haveSuperBOLBuildTask ? defaultDebugBuildTask : undefined,
+ target: "${file}",
+ arguments: ""
+ };
+
+ const attachLocalConfiguration: vscode.DebugConfiguration = {
+ name: "SuperBOL: debug (attach local)",
+ type: "superbol-gdb",
+ request: "attach",
+ pid: "${input:pid}",
+ target: "${file}"
+ };
+
+ const attachRemoteConfiguration: vscode.DebugConfiguration = {
+ name: "SuperBOL: debug (attach remote)",
+ type: "superbol-gdb",
+ request: "attach",
+ remoteDebugger: "${input:remoteDebugger}",
+ target: "${file}"
+ }
+
+ return [
+ launchConfigDefault,
+ attachLocalConfiguration,
+ attachRemoteConfiguration
+ ];
+ });
}
}
@@ -106,7 +127,7 @@ class GdbAdapterDescriptorFactory implements vscode.DebugAdapterDescriptorFactor
constructor(public coverageBar: CoverageStatus, public debugSession: GDBDebugSession) {
}
- createDebugAdapterDescriptor(session: vscode.DebugSession): vscode.ProviderResult {
+ createDebugAdapterDescriptor(_session: vscode.DebugSession): vscode.ProviderResult {
this.debugSession.coverageStatus = this.coverageBar;
return new vscode.DebugAdapterInlineImplementation(this.debugSession);
}
@@ -134,10 +155,11 @@ class GnuCOBOLEvalExpressionFactory implements EvaluatableExpressionProvider {
return undefined;
}
// TODO: Do not use a global variable
- const variableName = globalThis.varGlobal.filter(it => it.children.toLowerCase() === txtToEval.toLowerCase());
- if(variableName && variableName.length>0){
- return new EvaluatableExpression(wordRange, variableName[0].father);
- }
+ // Disabled for now...
+ // const variableName = globalThis.varGlobal.filter(it => it.children.toLowerCase() === txtToEval.toLowerCase());
+ // if(variableName && variableName.length>0){
+ // return new EvaluatableExpression(wordRange, variableName[0].father);
+ // }
return wordRange ? new EvaluatableExpression(wordRange) : undefined;
}
diff --git a/src/gcov.ts b/src/gcov.ts
new file mode 100644
index 0000000..8a374b3
--- /dev/null
+++ b/src/gcov.ts
@@ -0,0 +1,98 @@
+import * as vscode from "vscode";
+import * as child_process from "child_process";
+
+export interface GcovLineData {
+ count: number;
+ function_name: string;
+ line_number: number;
+ unexecuted_block: boolean;
+}
+
+export interface GcovFunctionData {
+ blocks: number;
+ blocks_executed: number;
+ demangled_name: string;
+ start_column: number;
+ start_line: number;
+ end_column: number;
+ end_line: number;
+ execution_count: number;
+ name: string;
+}
+
+export interface GcovFileData {
+ file: string;
+ lines: GcovLineData[];
+ functions: GcovFunctionData[];
+}
+
+export interface GcovData {
+ files: GcovFileData[];
+ current_working_directory: string;
+ data_file: string;
+}
+
+function getGcovBinary() {
+ return "gcov";
+}
+
+export async function isGcovCompatible() {
+ const gcovBinary = getGcovBinary();
+ const command = `${gcovBinary} --help`;
+ return new Promise((resolve, _reject) => {
+ child_process.exec(command, (err, stdout, _stderr) => {
+ if (err) {
+ void vscode.window.showErrorMessage(
+ `Error while trying to run gcov, try to change the "Gcov Binary" setting. ${err.message}`
+ );
+ resolve(false);
+ return;
+ }
+ const gcovOutput = stdout.toString();
+ const supportsRequiredArgs =
+ gcovOutput.includes("--json-format") && gcovOutput.includes("--stdout");
+ if (!supportsRequiredArgs) {
+ void vscode.window.showErrorMessage(
+ `The gcov version is not compatible. Please use at least version 9.`
+ );
+ }
+ resolve(supportsRequiredArgs);
+ });
+ });
+}
+
+export async function loadGcovData(paths: string[]): Promise {
+ if (paths.length === 0) {
+ return [];
+ }
+
+ const gcovBinary = getGcovBinary();
+
+ let command = `${gcovBinary} --stdout --json-format`;
+ for (const path of paths) {
+ command += ` "${path}"`;
+ }
+ return new Promise((resolve, reject) => {
+ child_process.exec(
+ command,
+ { maxBuffer: 256 * 1024 * 1024 },
+ (err, stdout, _stderr) => {
+ if (err) {
+ console.error(`exec error: ${err.message}`);
+ reject();
+ return;
+ }
+ const gcovOutput = stdout.toString();
+ const output = [];
+ const parts = gcovOutput.split("\n");
+ for (const part of parts) {
+ if (part.length === 0) {
+ continue;
+ }
+ output.push(JSON.parse(part));
+ }
+ resolve(output);
+ }
+ );
+ });
+}
diff --git a/src/gdb.ts b/src/gdb.ts
index f8aeecd..c8b778e 100644
--- a/src/gdb.ts
+++ b/src/gdb.ts
@@ -13,55 +13,68 @@ import {
ThreadEvent
} from '@vscode/debugadapter';
import {DebugProtocol} from '@vscode/debugprotocol';
-import {VariableObject} from './debugger';
+import {Breakpoint, DebuggerVariable, localizeSymbols} from './debugger';
import {MINode} from './parser.mi2';
+import * as path from "path";
import {MI2} from './mi2';
import {CoverageStatus} from './coverage';
import {DebuggerSettings} from './settings';
+import * as log from './log';
const STACK_HANDLES_START = 1000;
const VAR_HANDLES_START = 512 * 256 + 1000;
class ExtendedVariable {
- constructor(public name, public options) {
+ constructor(public _name: string, public _options: unknown) {
}
}
+function stripPathExtensions(p1: string) {
+ const p2 = path.basename(p1, path.extname(p1));
+ return (p2 === p1) ? p1 : stripPathExtensions(p2);
+}
+
export interface LaunchRequestArguments extends DebugProtocol.LaunchRequestArguments {
- cwd: string;
+ cwd: string | null;
target: string;
arguments: string;
- gdbpath: string;
gdbargs: string[];
- cobcpath: string;
- cobcargs: string[];
- env: any;
+ env: NodeJS.ProcessEnv;
group: string[];
verbose: boolean;
coverage: boolean;
- docker: string;
gdbtty: boolean;
+ useCobcrun: boolean;
+ sourceDirs: string[];
}
-export interface AttachRequestArguments extends DebugProtocol.LaunchRequestArguments {
- cwd: string;
+export interface AttachRequestArguments extends DebugProtocol.AttachRequestArguments {
+ cwd: string | null;
target: string;
arguments: string;
- gdbpath: string;
gdbargs: string[];
- cobcpath: string;
- cobcargs: string[];
- env: any;
+ env: NodeJS.ProcessEnv;
group: string[];
verbose: boolean;
pid: string;
remoteDebugger: string;
+ sourceDirs: string[];
+}
+
+const settings = new DebuggerSettings();
+
+function initLogLevel(verbose: boolean) {
+ if (verbose) {
+ log.setLevel(log.Level.Debug);
+ } else {
+ log.setLevel(log.Level.Info);
+ }
}
+enum VarCat { Local, Global };
+
export class GDBDebugSession extends DebugSession {
- protected variableHandles = new Handles(VAR_HANDLES_START);
- protected variableHandlesReverse: { [id: string]: number } = {};
- protected useVarObjects: boolean;
+ protected variableHandles = new Handles<[string, VarCat]>(VAR_HANDLES_START);
protected quit: boolean;
protected needContinue: boolean;
protected started: boolean;
@@ -70,43 +83,43 @@ export class GDBDebugSession extends DebugSession {
protected debugReady: boolean;
protected miDebugger: MI2;
coverageStatus: CoverageStatus;
- private docker: string;
- private showVariableDetails: boolean;
- private settings = new DebuggerSettings();
+ private showCoverage: boolean = true;
+ private readonly showDetails = settings.displayVariableAttributes;
- protected initializeRequest(response: DebugProtocol.InitializeResponse, args: DebugProtocol.InitializeRequestArguments): void {
+ protected initializeRequest(response: DebugProtocol.InitializeResponse, _args: DebugProtocol.InitializeRequestArguments): void {
response.body.supportsSetVariable = true;
this.sendResponse(response);
}
protected launchRequest(response: DebugProtocol.LaunchResponse, args: LaunchRequestArguments): void {
- if (!args.coverage) {
- this.coverageStatus = undefined;
- }
- this.docker = args.docker;
+ initLogLevel(args.verbose);
+
+ this.showCoverage = args.coverage;
this.started = false;
this.attached = false;
- this.miDebugger = new MI2(args.gdbpath, args.gdbargs, args.cobcpath, args.cobcargs, args.env, args.verbose, args.noDebug, args.gdbtty);
- this.miDebugger.on("launcherror", this.launchError.bind(this));
- this.miDebugger.on("quit", this.quitEvent.bind(this));
- this.miDebugger.on("exited-normally", this.quitEvent.bind(this));
- this.miDebugger.on("stopped", this.stopEvent.bind(this));
- this.miDebugger.on("msg", this.handleMsg.bind(this));
- this.miDebugger.on("breakpoint", this.handleBreakpoint.bind(this));
- this.miDebugger.on("step-end", this.handleBreak.bind(this));
- this.miDebugger.on("step-out-end", this.handleBreak.bind(this));
- this.miDebugger.on("step-other", this.handleBreak.bind(this));
- this.miDebugger.on("signal-stop", this.handlePause.bind(this));
- this.miDebugger.on("thread-created", this.threadCreatedEvent.bind(this));
- this.miDebugger.on("thread-exited", this.threadExitedEvent.bind(this));
+ this.miDebugger = new MI2(settings.gdbPath, args.gdbargs, args.env, args.noDebug, args.gdbtty, settings.cobcrunPath, args.useCobcrun, args.sourceDirs);
+ this.miDebugger.on("launcherror", (err: Error) => this.launchError(err));
+ this.miDebugger.on("quit", () => this.quitEvent());
+ this.miDebugger.on("exited-normally", () => this.quitEvent());
+ this.miDebugger.on("stopped", (info: MINode) => this.stopEvent(info));
+ this.miDebugger.on("msg", (type: string, message: string) => this.handleMsg(type, message));
+ this.miDebugger.on("breakpoint", (info: MINode) => this.handleBreakpoint(info));
+ this.miDebugger.on("step-end", (info?: MINode) => this.handleBreak(info));
+ this.miDebugger.on("step-out-end", (info?: MINode) => this.handleBreak(info));
+ this.miDebugger.on("step-other", (info?: MINode) => this.handleBreak(info));
+ this.miDebugger.on("signal-stop", (info: MINode) => this.handlePause(info));
+ this.miDebugger.on("thread-created", (info: MINode) => this.threadCreatedEvent(info));
+ this.miDebugger.on("thread-exited", (info: MINode) => this.threadExitedEvent(info));
this.sendEvent(new InitializedEvent());
this.quit = false;
this.needContinue = false;
this.crashed = false;
this.debugReady = false;
- this.useVarObjects = false;
- this.miDebugger.load(args.cwd, args.target, args.arguments, args.group, args.gdbtty).then(() => {
+ // Run in the target executables' directory, unless specified; becomes '.' if target is a module name.
+ let cwd = args.cwd ?? path.dirname (args.target);
+ this.miDebugger.load(cwd, args.target, args.arguments, args.group, args.gdbtty).then(
+ /*onfulfilled:*/ () => {
setTimeout(() => {
this.miDebugger.emit("ui-break-done");
}, 50);
@@ -115,44 +128,52 @@ export class GDBDebugSession extends DebugSession {
this.started = true;
if (this.crashed)
this.handlePause(undefined);
- }, err => {
+ }, (err: Error) => {
this.sendErrorResponse(response, 100, `Failed to start MI Debugger: ${err.toString()}`);
});
- }, err => {
+ },
+ /*onrejected:*/ (err: Error) => {
this.sendErrorResponse(response, 103, `Failed to load MI Debugger: ${err.toString()}`);
});
}
protected attachRequest(response: DebugProtocol.AttachResponse, args: AttachRequestArguments): void {
+ initLogLevel(args.verbose);
+
if (!args.pid && !args.remoteDebugger) {
- this.sendErrorResponse(response, 100, `Failed to start MI Debugger: pid or remoteDebugger is mandatory`);
+ this.sendErrorResponse(
+ response,
+ 100,
+ `Failed to start MI Debugger: PID or remote-debugger argument required`
+ );
return;
}
- this.coverageStatus = undefined;
+ this.showCoverage = false;
this.attached = true;
this.started = false;
- this.miDebugger = new MI2(args.gdbpath, args.gdbargs, args.cobcpath, args.cobcargs, args.env, args.verbose, false, false);
- this.miDebugger.on("launcherror", this.launchError.bind(this));
- this.miDebugger.on("quit", this.quitEvent.bind(this));
- this.miDebugger.on("exited-normally", this.quitEvent.bind(this));
- this.miDebugger.on("stopped", this.stopEvent.bind(this));
- this.miDebugger.on("msg", this.handleMsg.bind(this));
- this.miDebugger.on("breakpoint", this.handleBreakpoint.bind(this));
- this.miDebugger.on("step-end", this.handleBreak.bind(this));
- this.miDebugger.on("step-out-end", this.handleBreak.bind(this));
- this.miDebugger.on("step-other", this.handleBreak.bind(this));
- this.miDebugger.on("signal-stop", this.handlePause.bind(this));
- this.miDebugger.on("thread-created", this.threadCreatedEvent.bind(this));
- this.miDebugger.on("thread-exited", this.threadExitedEvent.bind(this));
+ this.miDebugger = new MI2(settings.gdbPath, args.gdbargs, args.env, false, false, "", false, args.sourceDirs);
+ this.miDebugger.on("launcherror", (err: Error) => this.launchError(err));
+ this.miDebugger.on("quit", () => this.quitEvent());
+ this.miDebugger.on("exited-normally", () => this.quitEvent());
+ this.miDebugger.on("stopped", (info: MINode) => this.stopEvent(info));
+ this.miDebugger.on("msg", (type: string, message: string) => this.handleMsg(type, message));
+ this.miDebugger.on("breakpoint", (info: MINode) => this.handleBreakpoint(info));
+ this.miDebugger.on("step-end", (info?: MINode) => this.handleBreak(info));
+ this.miDebugger.on("step-out-end", (info?: MINode) => this.handleBreak(info));
+ this.miDebugger.on("step-other", (info?: MINode) => this.handleBreak(info));
+ this.miDebugger.on("signal-stop", (info: MINode) => this.handlePause(info));
+ this.miDebugger.on("thread-created", (info: MINode) => this.threadCreatedEvent(info));
+ this.miDebugger.on("thread-exited", (info: MINode) => this.threadExitedEvent(info));
this.sendEvent(new InitializedEvent());
this.quit = false;
this.needContinue = true;
this.crashed = false;
this.debugReady = false;
- this.useVarObjects = false;
- this.miDebugger.attach(args.cwd, args.target, args.arguments, args.group).then(() => {
+ // Run in the target executables' directory, unless specificed.
+ let cwd = args.cwd ?? path.dirname (args.target);
+ this.miDebugger.attach(cwd, args.target, args.arguments, args.group).then(() => {
setTimeout(() => {
this.miDebugger.emit("ui-break-done");
}, 50);
@@ -161,10 +182,10 @@ export class GDBDebugSession extends DebugSession {
this.attached = true;
if (this.crashed)
this.handlePause(undefined);
- }, err => {
+ }, (err: Error) => {
this.sendErrorResponse(response, 100, `Failed to start MI Debugger: ${err.toString()}`);
});
- }, err => {
+ }, (err: Error) => {
this.sendErrorResponse(response, 103, `Failed to load MI Debugger: ${err.toString()}`);
});
}
@@ -178,20 +199,20 @@ export class GDBDebugSession extends DebugSession {
}
protected handleBreakpoint(info: MINode) {
- const event = new StoppedEvent("breakpoint", parseInt(info.record("thread-id")));
- (event as DebugProtocol.StoppedEvent).body.allThreadsStopped = info.record("stopped-threads") == "all";
+ const event = new StoppedEvent("breakpoint", parseInt(info.record("thread-id")));
+ (event).body.allThreadsStopped = info.record("stopped-threads") == "all";
this.sendEvent(event);
}
protected handleBreak(info?: MINode) {
- const event = new StoppedEvent("step", info ? parseInt(info.record("thread-id")) : 1);
- (event as DebugProtocol.StoppedEvent).body.allThreadsStopped = info ? info.record("stopped-threads") == "all" : true;
+ const event = new StoppedEvent("step", info ? parseInt(info.record("thread-id")) : 1);
+ (event).body.allThreadsStopped = info ? info.record("stopped-threads") == "all" : true;
this.sendEvent(event);
}
protected handlePause(info: MINode) {
- const event = new StoppedEvent("user request", parseInt(info.record("thread-id")));
- (event as DebugProtocol.StoppedEvent).body.allThreadsStopped = info.record("stopped-threads") == "all";
+ const event = new StoppedEvent("user request", parseInt(info.record("thread-id")));
+ (event).body.allThreadsStopped = info.record("stopped-threads") == "all";
this.sendEvent(event);
}
@@ -199,39 +220,41 @@ export class GDBDebugSession extends DebugSession {
if (!this.started)
this.crashed = true;
if (!this.quit) {
- const event = new StoppedEvent("exception", parseInt(info.record("thread-id")));
- (event as DebugProtocol.StoppedEvent).body.allThreadsStopped = info.record("stopped-threads") == "all";
+ const event = new StoppedEvent("exception", parseInt(info.record("thread-id")));
+ (event).body.allThreadsStopped = info.record("stopped-threads") == "all";
this.sendEvent(event);
}
}
protected threadCreatedEvent(info: MINode) {
- this.sendEvent(new ThreadEvent("started", info.record("id")));
+ this.sendEvent(new ThreadEvent("started", info.record("id")));
}
protected threadExitedEvent(info: MINode) {
- this.sendEvent(new ThreadEvent("exited", info.record("id")));
+ this.sendEvent(new ThreadEvent("exited", info.record("id")));
}
protected quitEvent() {
if (this.quit)
return;
- if (this.coverageStatus !== undefined) {
- this.coverageStatus.show(this.miDebugger.getGcovFiles(), this.miDebugger.getSourceMap(), this.docker);
+ if (this.showCoverage) {
+ this.coverageStatus.show(this.miDebugger.getGcovFiles(), this.miDebugger.sourceMap()).catch((err: Error) => console.log(err));
+ } else {
+ this.coverageStatus.hide();
}
this.quit = true;
this.sendEvent(new TerminatedEvent());
}
- protected launchError(err: any) {
+ protected launchError(err: Error) {
this.handleMsg("stderr", "Could not start debugger process\n");
- this.handleMsg("stderr", err.toString() + "\n");
+ this.handleMsg("stderr", err.toString() + "\n" + err.stack + "\n");
this.quitEvent();
}
- protected disconnectRequest(response: DebugProtocol.DisconnectResponse, args: DebugProtocol.DisconnectArguments): void {
+ protected disconnectRequest(response: DebugProtocol.DisconnectResponse, _args: DebugProtocol.DisconnectArguments): void {
if (this.attached)
this.miDebugger.detach();
else
@@ -239,38 +262,10 @@ export class GDBDebugSession extends DebugSession {
this.sendResponse(response);
}
- protected async setVariableRequest(response: DebugProtocol.SetVariableResponse, args: DebugProtocol.SetVariableArguments): Promise {
- try {
- let id: number | string | VariableObject | ExtendedVariable;
- if (args.variablesReference < VAR_HANDLES_START) {
- id = args.variablesReference - STACK_HANDLES_START;
- } else {
- id = this.variableHandles.get(args.variablesReference);
- }
-
- let name = args.name;
- if (typeof id == "string") {
- name = `${id}.${args.name}`;
- if (this.showVariableDetails && args.name === "value") {
- name = id;
- }
- }
- if (!this.showVariableDetails || args.name === "value") {
- await this.miDebugger.changeVariable(name, args.value);
- response.body = {
- value: args.value
- };
- }
- this.sendResponse(response);
- } catch (err) {
- this.sendErrorResponse(response, 11, `Could not continue: ${err}`);
- }
- }
-
protected setFunctionBreakPointsRequest(response: DebugProtocol.SetFunctionBreakpointsResponse, args: DebugProtocol.SetFunctionBreakpointsArguments): void {
- const cb = (() => {
+ const cb = () => {
this.debugReady = true;
- const all = [];
+ const all: Thenable<[boolean, Breakpoint]>[] = [];
args.breakpoints.forEach(brk => {
all.push(this.miDebugger.addBreakPoint({
raw: brk.name,
@@ -279,19 +274,19 @@ export class GDBDebugSession extends DebugSession {
}));
});
Promise.all(all).then(brkpoints => {
- const finalBrks = [];
+ const finalBrks: DebugProtocol.Breakpoint[] = [];
brkpoints.forEach(brkp => {
if (brkp[0])
- finalBrks.push({line: brkp[1].line});
+ finalBrks.push({line: brkp[1].line, verified: brkp[0]});
});
response.body = {
breakpoints: finalBrks
};
this.sendResponse(response);
- }, msg => {
+ }, (msg: Error) => {
this.sendErrorResponse(response, 10, msg.toString());
});
- }).bind(this);
+ };
if (this.debugReady)
cb();
else
@@ -299,7 +294,7 @@ export class GDBDebugSession extends DebugSession {
}
protected setBreakPointsRequest(response: DebugProtocol.SetBreakpointsResponse, args: DebugProtocol.SetBreakpointsArguments): void {
- const cb = (() => {
+ const cb = () => {
this.debugReady = true;
this.miDebugger.clearBreakPoints().then(() => {
const path = args.source.path;
@@ -312,7 +307,7 @@ export class GDBDebugSession extends DebugSession {
});
});
Promise.all(all).then(brkpoints => {
- const finalBrks = [];
+ const finalBrks: DebugAdapter.Breakpoint[] = [];
brkpoints.forEach(brkp => {
if (brkp[0])
finalBrks.push(new DebugAdapter.Breakpoint(true, brkp[1].line));
@@ -321,13 +316,13 @@ export class GDBDebugSession extends DebugSession {
breakpoints: finalBrks
};
this.sendResponse(response);
- }, msg => {
+ }, (msg: Error) => {
this.sendErrorResponse(response, 9, msg.toString());
});
- }, msg => {
+ }, (msg: Error) => {
this.sendErrorResponse(response, 9, msg.toString());
});
- }).bind(this);
+ };
if (this.debugReady)
cb();
else
@@ -352,9 +347,11 @@ export class GDBDebugSession extends DebugSession {
if (threadName === undefined) {
threadName = "";
}
- response.body.threads.push(new Thread(thread.id, thread.id + ":" + threadName));
+ response.body.threads.push(new Thread(thread.id, thread.id.toString() + ":" + threadName));
}
this.sendResponse(response);
+ }, (err: Error) => {
+ this.sendErrorResponse(response, 13, `Could not get threads: ${err.toString()}`)
});
}
@@ -369,126 +366,151 @@ export class GDBDebugSession extends DebugSession {
protected stackTraceRequest(response: DebugProtocol.StackTraceResponse, args: DebugProtocol.StackTraceArguments): void {
this.miDebugger.getStack(args.levels, args.threadId).then(stack => {
- const ret: StackFrame[] = [];
- stack.forEach(element => {
- let source = undefined;
- const file = element.file;
- if (file) {
- source = new Source(element.fileName, file);
- }
-
- ret.push(new StackFrame(
+ const ret = stack.map(element => {
+ const file = element.line.fileCobol;
+ const fileBasename = path.basename(file);
+ const cobolLine = element.line.cobolLine?.trim();
+ const frameDescr = cobolLine
+ ? `${element.function} (${cobolLine})`
+ : `${element.function}`;
+ return new StackFrame(
this.threadAndLevelToFrameId(args.threadId, element.level),
- element.function + "@" + element.address,
- source,
- element.line,
- 0));
+ frameDescr, // + "@" + element.address,
+ file ? new Source(fileBasename, file) : undefined,
+ element.line.lineCobol, 0);
});
response.body = {
- stackFrames: ret
+ stackFrames: Array.from(ret)
};
this.sendResponse(response);
- }, err => {
+ }, (err: Error) => {
this.sendErrorResponse(response, 12, `Failed to get Stack Trace: ${err.toString()}`);
});
}
- protected configurationDoneRequest(response: DebugProtocol.ConfigurationDoneResponse, args: DebugProtocol.ConfigurationDoneArguments): void {
+ protected configurationDoneRequest(response: DebugProtocol.ConfigurationDoneResponse, _args: DebugProtocol.ConfigurationDoneArguments): void {
if (this.needContinue) {
- this.miDebugger.continue().then(done => {
+ this.miDebugger.continue().then(_done => {
this.sendResponse(response);
- }, msg => {
- this.sendErrorResponse(response, 2, `Could not continue: ${msg}`);
+ }, (msg: Error) => {
+ this.sendErrorResponse(response, 2, `Could not continue: ${msg.toString()}`);
});
} else
this.sendResponse(response);
}
- protected scopesRequest(response: DebugProtocol.ScopesResponse, args: DebugProtocol.ScopesArguments): void {
- const scopes = new Array();
- scopes.push(new Scope("Local", STACK_HANDLES_START + (parseInt(args.frameId as any) || 0), false));
+ // TODO: invalidate on some operations?
+ private globalVariables: Map> = new Map();
+
+ protected async scopesRequest(response: DebugProtocol.ScopesResponse, args: DebugProtocol.ScopesArguments) {
+ const scopes = [
+ new Scope("Local", STACK_HANDLES_START + args.frameId, false)
+ ];
+ const filesSymbols = await this.miDebugger.globalStorageSymbols();
+ this.globalVariables.clear();
+ await Promise.all(filesSymbols.flatMap(fileSymbols => {
+ if (fileSymbols.symbols.length > 0) {
+ const base = stripPathExtensions(fileSymbols.filename);
+ const scopeId = scopes.length;
+ const scopeVariables = localizeSymbols(fileSymbols).map(s => this.miDebugger.evalSymbol(s));
+ this.globalVariables.set(scopeId, Promise.all(scopeVariables));
+ scopes.push(new Scope(`Globals (${base})`, scopeId, false));
+ return scopeVariables;
+ } else {
+ return [];
+ }
+ }));
+ response.body = { scopes: scopes };
+ this.sendResponse(response);
+ }
+
+ private debugProtocolVariable(dv: DebuggerVariable, varCat: VarCat) : DebugProtocol.Variable {
+ const reference = (this.showDetails || !!dv.children.size)
+ ? this.variableHandles.create([dv.cName, varCat])
+ : 0;
+ const value = this.showDetails
+ ? `${dv.value || "null"} (${dv.displayableType})`
+ : dv.value || "null";
+ return {
+ name: dv.cobolName,
+ evaluateName: dv.cobolName,
+ value: value,
+ type: dv.displayableType,
+ variablesReference: reference
+ };
+ }
+ private async globalVariableRequest(response: DebugProtocol.VariablesResponse, scopeId: number): Promise {
+ const scopeVariables = await this.globalVariables.get(scopeId);
response.body = {
- scopes: scopes
+ variables: scopeVariables.map(v => this.debugProtocolVariable(v, VarCat.Global))
};
this.sendResponse(response);
}
- protected async variablesRequest(response: DebugProtocol.VariablesResponse, args: DebugProtocol.VariablesArguments): Promise {
- this.showVariableDetails = this.settings.displayVariableAttributes;
+ private async stackVariableRequest(response: DebugProtocol.VariablesResponse, id: number) : Promise {
+ const [threadId, level] = this.frameIdToThreadAndLevel(id);
+ const stackVariables = await this.miDebugger.getStackVariables(threadId, level);
+ response.body = {
+ variables: (stackVariables ?? []).map(v => this.debugProtocolVariable(v, VarCat.Local))
+ };
+ this.sendResponse(response);
+ }
- let id: number | string | VariableObject | ExtendedVariable;
- if (args.variablesReference < VAR_HANDLES_START) {
- id = args.variablesReference - STACK_HANDLES_START;
+ private lookupVariable (ref: number) : [string | number, VarCat] {
+ let id: number | string;
+ let cat: VarCat = VarCat.Local;
+ if (ref < VAR_HANDLES_START) {
+ if (ref >= STACK_HANDLES_START) {
+ cat = VarCat.Local;
+ id = ref - STACK_HANDLES_START;
+ } else {
+ cat = VarCat.Global;
+ id = ref;
+ }
} else {
- id = this.variableHandles.get(args.variablesReference);
+ [id, cat] = this.variableHandles.get(ref);
}
+ return [id, cat];
+ }
- if (typeof id == "number") {
- try {
- const variables: DebugProtocol.Variable[] = [];
- const [threadId, level] = this.frameIdToThreadAndLevel(id);
- const stackVariables = await this.miDebugger.getStackVariables(threadId, level);
- globalThis.varGlobal = [];
- for (const stackVariable of stackVariables) {
- let reference = 0;
- if (this.showVariableDetails || !!stackVariable.children.size) {
- reference = this.variableHandles.create(stackVariable.cobolName);
- }
-
- let value = stackVariable.value || "null";
- if (this.showVariableDetails) {
- value = stackVariable.displayableType;
- }
-
- variables.push({
- name: stackVariable.cobolName,
- evaluateName: stackVariable.cobolName,
- value: value,
- type: stackVariable.displayableType,
- variablesReference: reference
- });
- if(stackVariable.hasChildren){
- const child= stackVariable.children;
- for (var childs of stackVariable.children.entries()) {
- var key = childs[0];
- globalThis.varGlobal.push({
- "children": key,
- "father": stackVariable.cobolName
- })
- }
- }
+ protected async variablesRequest(response: DebugProtocol.VariablesResponse, args: DebugProtocol.VariablesArguments): Promise {
+ const [id, cat] = this.lookupVariable(args.variablesReference);
+ response.body = { variables: [] };
+ try {
+ if (typeof id == "number") {
+ if (cat == VarCat.Local) {
+ this.stackVariableRequest(response, id);
+ } else {
+ this.globalVariableRequest(response, id);
}
-
- response.body = {
- variables: variables
- };
- this.sendResponse(response);
- } catch (err) {
- this.sendErrorResponse(response, 1, `Could not expand variable: ${err}`);
- }
- } else if (typeof id == "string") {
- try {
+ } else if (typeof id == "string") {
// TODO: this evals on an (effectively) unknown thread for multithreaded programs.
- const stackVariable = await this.miDebugger.evalCobField(id, 0, 0);
+ const v = (cat == VarCat.Local)
+ ? await this.miDebugger.evalCVariable(id)
+ : await this.miDebugger.evalCGlobal(id);
+ if (v === undefined) {
+ this.sendResponse(response); // fail early and silently
+ }
let variables: DebugProtocol.Variable[] = [];
- if (this.showVariableDetails) {
- variables = stackVariable.toDebugProtocolVariable(this.showVariableDetails);
+ if (this.showDetails) {
+ variables = v.toDebugProtocolVariable(this.showDetails);
}
- for (const child of stackVariable.children.values()) {
- const childId = `${id}.${child.cobolName}`;
+ for (const child of v.children.values()) {
let reference = 0;
- if (this.showVariableDetails || !!child.children.size) {
- reference = this.variableHandles.create(childId);
+ if (this.showDetails || !!child.children.size) {
+ reference = this.variableHandles.create([`${child.cName}`, cat]);
}
let value = child.displayableType;
- if (!this.showVariableDetails) {
- const evaluatedChild = await this.miDebugger.evalCobField(childId, 0, 0);
- value = evaluatedChild.value || "null";
+ if (!this.showDetails) {
+ const evaluatedChild = (cat == VarCat.Local)
+ ? await this.miDebugger.evalCVariable(child.cName)
+ : await this.miDebugger.evalCGlobal(child.cName);
+ value = evaluatedChild !== undefined ? (evaluatedChild.value || "null") : "?";
}
variables.push({
@@ -503,54 +525,92 @@ export class GDBDebugSession extends DebugSession {
variables: variables
};
this.sendResponse(response);
- } catch (err) {
- this.sendErrorResponse(response, 1, `Could not expand variable: ${err}`);
+ } else {
+ this.sendResponse(response);
+ }
+ } catch (err) {
+ this.sendErrorResponse(response, 1, `Could not expand variable: ${(err).toString()}`);
+ }
+ }
+
+ protected async setVariableRequest(response: DebugProtocol.SetVariableResponse, args: DebugProtocol.SetVariableArguments): Promise {
+ const [id, cat] = this.lookupVariable(args.variablesReference);
+ let invalidatedAreas = [];
+ if (this.showDetails && args.name !== "value") {
+ this.sendErrorResponse(response, 14, `${args.name} cannot be changed`);
+ return;
+ }
+ const editDetails = this.showDetails && args.name === "value";
+ // log.debug("setVartiableRequest", args.name, args.value, args.variablesReference.toString(), id.toString());
+ try {
+ if (cat == VarCat.Local) {
+ invalidatedAreas = editDetails && typeof id == "string"
+ ? await this.miDebugger.changeCVariable(id.toString(), args.value)
+ : await this.miDebugger.changeVariable(args.name, args.value);
+ response.body = { value: args.value };
+ } else if (cat == VarCat.Global) {
+ let cName: string = null;
+ if (typeof id == "number") {
+ // TODO: can we be editing "value" details (ie. can showDetails hold here)?
+ const vars = await this.globalVariables.get(id);
+ cName = vars.find(v => v.cobolName == args.name)?.cName; // TODO: check ambiguous item names?
+ } else if (typeof id == "string" && !editDetails) {
+ cName = this.miDebugger.lookupGlobalCobolByCName(args.name, id)?.cName;
+ } else if (typeof id == "string") {
+ cName = id;
+ }
+ if (cName !== null) {
+ invalidatedAreas = await this.miDebugger.changeGlobalCVariable(cName, args.value);
+ response.body = { value: args.value };
+ }
+ }
+ if (invalidatedAreas.length > 0) {
+ // Trigger an update of invalidated areas.
+ this.sendEvent(new DebugAdapter.InvalidatedEvent(invalidatedAreas));
}
- } else {
- response.body = {
- variables: []
- };
this.sendResponse(response);
+ } catch (err) {
+ this.sendErrorResponse(response, 11, `Could not set ${args.name}: ${err}`);
}
}
- protected pauseRequest(response: DebugProtocol.ContinueResponse, args: DebugProtocol.ContinueArguments): void {
- this.miDebugger.interrupt().then(done => {
+ protected pauseRequest(response: DebugProtocol.ContinueResponse, _args: DebugProtocol.ContinueArguments): void {
+ this.miDebugger.interrupt().then(_done => {
this.sendResponse(response);
- }, msg => {
- this.sendErrorResponse(response, 3, `Could not pause: ${msg}`);
+ }, (msg: Error) => {
+ this.sendErrorResponse(response, 3, `Could not pause: ${msg.toString()}`);
});
}
- protected continueRequest(response: DebugProtocol.ContinueResponse, args: DebugProtocol.ContinueArguments): void {
- this.miDebugger.continue().then(done => {
+ protected continueRequest(response: DebugProtocol.ContinueResponse, _args: DebugProtocol.ContinueArguments): void {
+ this.miDebugger.continue().then(_done => {
this.sendResponse(response);
- }, msg => {
- this.sendErrorResponse(response, 2, `Could not continue: ${msg}`);
+ }, (msg: Error) => {
+ this.sendErrorResponse(response, 2, `Could not continue: ${msg.toString()}`);
});
}
- protected stepInRequest(response: DebugProtocol.NextResponse, args: DebugProtocol.NextArguments): void {
- this.miDebugger.stepInto().then(done => {
+ protected stepInRequest(response: DebugProtocol.NextResponse, _args: DebugProtocol.NextArguments): void {
+ this.miDebugger.stepInto().then(_done => {
this.sendResponse(response);
- }, msg => {
- this.sendErrorResponse(response, 4, `Could not step in: ${msg}`);
+ }, (msg: Error) => {
+ this.sendErrorResponse(response, 4, `Could not step in: ${msg.toString()}`);
});
}
- protected stepOutRequest(response: DebugProtocol.NextResponse, args: DebugProtocol.NextArguments): void {
- this.miDebugger.stepOut().then(done => {
+ protected stepOutRequest(response: DebugProtocol.NextResponse, _args: DebugProtocol.NextArguments): void {
+ this.miDebugger.stepOut().then(_done => {
this.sendResponse(response);
- }, msg => {
- this.sendErrorResponse(response, 5, `Could not step out: ${msg}`);
+ }, (msg: Error) => {
+ this.sendErrorResponse(response, 5, `Could not step out: ${msg.toString()}`);
});
}
- protected nextRequest(response: DebugProtocol.NextResponse, args: DebugProtocol.NextArguments): void {
- this.miDebugger.stepOver().then(done => {
+ protected nextRequest(response: DebugProtocol.NextResponse, _args: DebugProtocol.NextArguments): void {
+ this.miDebugger.stepOver().then(_done => {
this.sendResponse(response);
- }, msg => {
- this.sendErrorResponse(response, 6, `Could not step over: ${msg}`);
+ }, (msg: Error) => {
+ this.sendErrorResponse(response, 6, `Could not step over: ${msg.toString()}`);
});
}
@@ -560,10 +620,11 @@ export class GDBDebugSession extends DebugSession {
this.miDebugger.evalExpression(args.expression, threadId, level).then((res) => {
response.body = {
variablesReference: 0,
- result: !!res ? res : "not available"
+ presentationHint: { kind: 'data' },
+ result: res ?? "not available"
};
this.sendResponse(response);
- }, msg => {
+ }, (msg: Error) => {
this.sendErrorResponse(response, 7, msg.toString());
});
} else {
@@ -576,17 +637,18 @@ export class GDBDebugSession extends DebugSession {
else
response.body = {
result: JSON.stringify(output),
+ // presentationHint: { kind: 'data' },
variablesReference: 0
};
this.sendResponse(response);
- }, msg => {
+ }, (msg: Error) => {
this.sendErrorResponse(response, 8, msg.toString());
});
}
}
protected gotoTargetsRequest(response: DebugProtocol.GotoTargetsResponse, args: DebugProtocol.GotoTargetsArguments): void {
- this.miDebugger.goto(args.source.path, args.line).then(done => {
+ this.miDebugger.goto(args.source.path, args.line).then(_done => {
response.body = {
targets: [{
id: 1,
@@ -596,12 +658,12 @@ export class GDBDebugSession extends DebugSession {
}]
};
this.sendResponse(response);
- }, msg => {
- this.sendErrorResponse(response, 16, `Could not jump: ${msg}`);
+ }, (msg: Error) => {
+ this.sendErrorResponse(response, 16, `Could not jump: ${msg.toString()}`);
});
}
- protected gotoRequest(response: DebugProtocol.GotoResponse, args: DebugProtocol.GotoArguments): void {
+ protected gotoRequest(response: DebugProtocol.GotoResponse, _args: DebugProtocol.GotoArguments): void {
this.sendResponse(response);
}
}
diff --git a/src/log.ts b/src/log.ts
new file mode 100644
index 0000000..d5ba1e8
--- /dev/null
+++ b/src/log.ts
@@ -0,0 +1,33 @@
+import * as vscode from "vscode";
+
+export enum Level { Debug, Info };
+export let level = Level.Info;
+export function setLevel (l: Level): void {
+ level = l;
+}
+
+const channel = vscode.window.createOutputChannel("SuperBOL Debugger");
+
+export function emit(...msg: (string | (() => (string | string[])))[]) {
+ channel.appendLine(msg.flatMap(f => {
+ if (typeof (f) == "string") {
+ return [f];
+ } else {
+ const r = f();
+ return (typeof (r) == "string") ? [r] : r;
+ }
+ }).join(' '));
+}
+
+export const info = emit;
+
+export function debug(...msg: (string | (() => (string | string[])))[]) {
+ if (level == Level.Debug) {
+ emit(...msg);
+ }
+}
+
+export function error(...msg) {
+ emit(...msg);
+ channel.show();
+}
diff --git a/src/mi2-decoder.ts b/src/mi2-decoder.ts
new file mode 100644
index 0000000..aa764a2
--- /dev/null
+++ b/src/mi2-decoder.ts
@@ -0,0 +1,19 @@
+import * as Debugger from './debugger';
+import {MINode} from './parser.mi2';
+
+export function decodeFileSymbols(node: MINode): Debugger.FileSymbols {
+ return {
+ filename: MINode.valueOf(node, "filename"),
+ fullname: MINode.valueOf(node, "fullname"),
+ symbols: MINode.valueOf(node, "symbols").map(decodeSymbol),
+ }
+}
+
+export function decodeSymbol(node: MINode): Debugger.Symbol {
+ return {
+ line: parseInt(MINode.valueOf(node, "line")),
+ name: MINode.valueOf(node, "name"),
+ type: MINode.valueOf(node, "type"),
+ description: MINode.valueOf(node, "description"),
+ }
+}
\ No newline at end of file
diff --git a/src/mi2.ts b/src/mi2.ts
index a932f0b..b15d043 100644
--- a/src/mi2.ts
+++ b/src/mi2.ts
@@ -1,46 +1,20 @@
-import { Breakpoint, IDebugger, MIError, Stack, Thread, DebuggerVariable } from "./debugger";
+import { Breakpoint, IDebugger, MIError, Stack, Thread, DebuggerVariable, FileSymbols, LocalizedSymbol } from "./debugger";
import * as ChildProcess from "child_process";
import { EventEmitter } from "events";
import { MINode, parseMI } from './parser.mi2';
-import * as nativePathFromPath from "path";
+import * as MI2Decoder from './mi2-decoder';
+import * as path from "path";
import * as fs from "fs";
import { SourceMap } from "./parser.c";
import { parseExpression, cleanRawValue } from "./functions";
import * as vscode from 'vscode';
+import {DebugProtocol} from '@vscode/debugprotocol';
+import * as log from './log';
-const nativePath = {
- resolve: function (...args: string[]): string {
- const nat = nativePathFromPath.resolve(...args);
- if (process.platform === "win32" && this.cobcpath === "docker" && this.gdbpath === "docker") {
- return nat.replace(/.*:/, s => "/" + s.toLowerCase().replace(":", "")).replace(/\\/g, "/");
- }
- return nat;
- },
- dirname: function (path: string): string {
- const nat = nativePathFromPath.dirname(path);
- if (process.platform === "win32" && this.cobcpath === "docker" && this.gdbpath === "docker") {
- return nat.replace(/.*:/, s => "/" + s.toLowerCase().replace(":", "")).replace(/\\/g, "/");
- }
- return nat;
- },
- basename: function (path: string): string {
- return nativePathFromPath.basename(path);
- },
- isAbsolute: function (path: string): boolean {
- return nativePathFromPath.isAbsolute(path);
- },
- join: function (...args: string[]) {
- return nativePathFromPath.join(...args);
- },
- normalize: function (path: string) {
- return nativePathFromPath.normalize(path);
- }
-};
-
-const nonOutput = /(^(?:\d*|undefined)[\*\+\-\=\~\@\&\^])([^\*\+\-\=\~\@\&\^]{1,})/;
+const nonOutput = /(^(?:\d*|undefined)[*+\-=~@&^])([^*+\-=~@&]+[a-zA-Z]+)/;
const gdbRegex = /(?:\d*|undefined)\(gdb\)/;
const numRegex = /\d+/;
-const gcovRegex = /\"([0-9a-z_\-\/\s\\:]+\.o)\"/gi;
+const gcovRegex = /"([0-9a-z_\-/\s\\:]+\.o)"/gi;
let NEXT_TERM_ID = 1;
// 002 - stepOver in routines with "perform"
let subroutine = -1;
@@ -54,123 +28,54 @@ export function couldBeOutput(line: string) {
return !nonOutput.exec(line);
}
+enum failure_handling { Report_n_reject, Suppress, Silence }
+
export class MI2 extends EventEmitter implements IDebugger {
private map: SourceMap;
private gcovFiles: Set = new Set();
- public procEnv: any;
- private currentToken: number = 1;
- private handlers: { [index: number]: (info: MINode) => any } = {};
- private breakpoints: Map = new Map();
+ public procEnv: NodeJS.ProcessEnv;
+ private currentToken = 1;
+ private handlers: { [index: number]: (_: MINode) => unknown } = {};
+ private breakpoints: Map = new Map();
+ private ignoredBreakpoints: Set = new Set();
private buffer: string;
private errbuf: string;
private process: ChildProcess.ChildProcess;
- private lastStepCommand: Function;
- private hasCobGetFieldStringFunction: boolean = true;
- private hasCobPutFieldStringFunction: boolean = true;
+ private lastStepCommand: () => Thenable;
+ private hasCobGetFieldStringFunction = true;
+ private hasCobPutFieldStringFunction = true;
- constructor(public gdbpath: string, public gdbArgs: string[], public cobcpath: string, public cobcArgs: string[], procEnv: any, public verbose: boolean, public noDebug: boolean, public gdbtty: boolean) {
+ constructor(public gdbpath: string, public gdbArgs: string[], procEnv: NodeJS.ProcessEnv, public noDebug: boolean, public gdbtty: boolean, public cobcrunPath: string, public useCobcrun: boolean, public sourceDirs: string[]) {
super();
if (procEnv) {
- const env = {};
- // Duplicate process.env so we don't override it
- for (const key in process.env)
- if (process.env.hasOwnProperty(key)) {
- env[key] = process.env[key];
- }
- // Overwrite with user specified variables
- for (const key in procEnv) {
- if (procEnv.hasOwnProperty(key)) {
- if (procEnv === null) {
- delete env[key];
- } else {
- env[key] = procEnv[key];
- }
- }
- }
- this.procEnv = env;
+ this.procEnv = {...process.env, ...procEnv};
}
}
- load(cwd: string, target: string, targetargs: string, group: string[], gdbtty: boolean): Thenable {
- if (!nativePath.isAbsolute(target) || (this.cobcpath === "docker" && this.gdbpath === "docker")) {
- target = nativePath.resolve(cwd, target);
- }
- group.forEach(e => {
- e = nativePath.join(cwd, e);
- });
-
- return new Promise((resolve, reject) => {
+ load(cwd: string, target: string, targetargs: string, group: string[], gdbtty: boolean): Thenable {
+ return new Promise(async (resolve, reject) => {
if (!fs.existsSync(cwd)) {
reject(new Error("cwd does not exist."));
}
- if (!!this.noDebug && !gdbtty) {
- const args = this.cobcArgs
- .concat([target])
- .concat(group)
- .concat(['-job=' + targetargs]);
- this.process = ChildProcess.spawn(this.cobcpath, args, { cwd: cwd, env: this.procEnv });
- this.process.stderr.on("data", ((data) => {
- this.log("stderr", data);
- }).bind(this));
- this.process.stdout.on("data", ((data) => {
- this.log("stdout", data);
- }).bind(this));
- this.process.on("exit", (() => {
- this.emit("quit");
- }).bind(this));
- return;
- }
-
- const args = this.cobcArgs.concat([
- '-g',
- '-fsource-location',
- '-ftraceall',
- '-Q',
- '--coverage',
- '-A',
- '--coverage',
- '-v',
- target
- ]).concat(group);
- const buildProcess = ChildProcess.spawn(this.cobcpath, args, { cwd: cwd, env: this.procEnv });
- buildProcess.stderr.on('data', (data) => {
- if (this.verbose)
- this.log("stderr", data);
- let match;
- do {
- match = gcovRegex.exec(data);
- if (match) {
- this.gcovFiles.add(match[1].split('.').slice(0, -1).join('.'));
- }
- } while (match);
- });
- buildProcess.on('exit', async (code) => {
- if (code !== 0) {
- this.emit("quit");
- return;
- }
-
- if (this.verbose) {
- this.log("stderr", `COBOL file ${target} compiled with exit code: ${code}`);
- }
-
+ let target_no_ext = target.split('.').slice(0, -1).join('.');
+ this.gcovFiles.add(target_no_ext);
try {
- this.map = new SourceMap(cwd, [target].concat(group));
+ this.map = new SourceMap(cwd, [target].concat(group), this.sourceDirs);
} catch (e) {
- this.log('stderr', e);
+ log.error((e).toString());
}
- if (this.verbose) {
- this.log("stderr", this.map.toString());
- }
+ log.debug(() => this.map.toString("created"));
- target = nativePath.resolve(cwd, nativePath.basename(target));
- target = target.split('.').slice(0, -1).join('.');
- // FIXME: the following should prefix "cobcrun.exe" if in "module mode", see #13
- // FIXME: if we need this code twice then add a comment why, otherwise move to a new function
- if (process.platform === "win32" && this.cobcpath !== "docker" && this.gdbpath !== "docker") {
- target = target + '.exe';
+ if (!this.useCobcrun) {
+ target = path.resolve(cwd, path.basename(target));
+ target = target.split('.').slice(0, -1).join('.');
+ // FIXME: the following should prefix "cobcrun.exe" if in "module mode", see #13
+ // FIXME: if we need this code twice then add a comment why, otherwise move to a new function
+ if (process.platform === "win32") {
+ target = target + '.exe';
+ }
}
// 001-gdbtty - Extension for debugging on a separate tty using xterm - start
@@ -181,75 +86,42 @@ export class MI2 extends EventEmitter implements IDebugger {
// 001-gdbtty-End
this.process = ChildProcess.spawn(this.gdbpath, this.gdbArgs, { cwd: cwd, env: this.procEnv });
- this.process.stdout.on("data", this.stdout.bind(this));
- this.process.stderr.on("data", ((data) => {
- this.log("stderr", data);
- }).bind(this));
- this.process.on("exit", (() => {
- this.emit("quit");
- }).bind(this));
- this.process.on("error", ((err) => {
- this.emit("launcherror", err);
- }).bind(this));
- const promises = this.initCommands(target, targetargs, cwd);
+ this.process.stdout.on("data", (data: string) => this.stdout(data));
+ this.process.stderr.on("data", (data: string) => this.stderr(data));
+ this.process.on("exit", (() => { this.emit("quit"); }));
+ this.process.on("error", (err) => { this.emit("launcherror", err); });
+ const promises = this.initCommands(target, targetargs, cwd, this.useCobcrun);
// 001-gdbtty - additional parameters for gdb
for (let item of gdbttyParameters)
- promises.push(this.sendCommand("gdb-set " + item, false));
+ promises.push(this.sendCommand("gdb-set " + item));
//001
Promise.all(promises).then(() => {
this.emit("debug-ready");
resolve(true);
}, reject);
- });
+
});
}
- attach(cwd: string, target: string, targetargs: string, group: string[]): Thenable {
- if (!nativePath.isAbsolute(target)) {
- target = nativePath.join(cwd, target);
+ attach(cwd: string, target: string, targetargs: string, group: string[]): Thenable {
+ if (!path.isAbsolute(target)) {
+ target = path.join(cwd, target);
}
- group.forEach(e => {
- e = nativePath.join(cwd, e);
- });
return new Promise((resolve, reject) => {
if (!fs.existsSync(cwd)) {
reject(new Error("cwd does not exist."));
}
- const args = this.cobcArgs.concat([
- '-g',
- '-fsource-location',
- '-ftraceall',
- '-v',
- target
- ]).concat(group);
- const buildProcess = ChildProcess.spawn(this.cobcpath, args, { cwd: cwd, env: this.procEnv });
- buildProcess.stderr.on('data', (data) => {
- if (this.verbose)
- this.log("stderr", data);
- });
- buildProcess.on('exit', (code) => {
- if (code !== 0) {
- this.emit("quit");
- return;
- }
-
- if (this.verbose) {
- this.log("stderr", `COBOL file ${target} compiled with exit code: ${code}`);
- }
-
try {
- this.map = new SourceMap(cwd, [target].concat(group));
+ this.map = new SourceMap(cwd, [target].concat(group), this.sourceDirs);
} catch (e) {
- this.log('stderr', e);
+ log.error((e).toString());
}
- if (this.verbose) {
- this.log("stderr", this.map.toString());
- }
+ log.debug(() => this.map.toString("created"));
- target = nativePath.resolve(cwd, nativePath.basename(target));
+ target = path.resolve(cwd, path.basename(target));
target = target.split('.').slice(0, -1).join('.');
// FIXME: the following should prefix "cobcrun.exe" if in "module mode", see #13
if (process.platform === "win32") {
@@ -257,57 +129,54 @@ export class MI2 extends EventEmitter implements IDebugger {
}
this.process = ChildProcess.spawn(this.gdbpath, this.gdbArgs, { cwd: cwd, env: this.procEnv });
- this.process.stdout.on("data", this.stdout.bind(this));
- this.process.stderr.on("data", ((data) => {
- this.log("stderr", data);
- }).bind(this));
- this.process.on("exit", (() => {
- this.emit("quit");
- }).bind(this));
- this.process.on("error", ((err) => {
- this.emit("launcherror", err);
- }).bind(this));
- const promises = this.initCommands(target, targetargs, cwd);
+ this.process.stdout.on("data", (data: string) => this.stdout(data));
+ this.process.stderr.on("data", (data: string) => this.stderr(data));
+ this.process.on("exit", () => { this.emit("quit"); });
+ this.process.on("error", (err) => { this.emit("launcherror", err); });
+ const promises = this.initCommands(target, targetargs, cwd, false);
Promise.all(promises).then(() => {
this.emit("debug-ready");
resolve(true);
}, reject);
- });
+
});
}
- protected initCommands(target: string, targetargs: string, cwd: string) {
- if (!nativePath.isAbsolute(target)) {
- target = nativePath.join(cwd, target);
+ protected initCommands(target: string, targetargs: string, cwd: string, useCobcrun: boolean) {
+ if (!path.isAbsolute(target)) {
+ target = path.join(cwd, target);
}
if (process.platform === "win32") {
- cwd = nativePath.dirname(target);
+ cwd = path.dirname(target);
+ }
+
+ let targetExec = escape(target);
+ if (useCobcrun) {
+ targetargs = `-m ${targetExec} ${targetargs}`
+ targetExec = this.cobcrunPath;
}
const cmds = [
- this.sendCommand("gdb-set target-async on", false),
- this.sendCommand("gdb-set print repeats 1000", false),
- this.sendCommand("gdb-set args " + targetargs, false),
- this.sendCommand("gdb-set charset UTF-8", false),
- this.sendCommand("environment-directory \"" + escape(cwd) + "\"", false),
- this.sendCommand("file-exec-and-symbols \"" + escape(target) + "\"", false),
+ this.sendCommand("gdb-set mi-async on"),
+ this.sendCommand("gdb-set print repeats 1000"),
+ this.sendCommand("gdb-set args " + targetargs),
+ this.sendCommand("gdb-set charset UTF-8"),
+ this.sendCommand("environment-directory \"" + escape(cwd) + "\""),
+ this.sendCommand("file-exec-and-symbols \"" + targetExec + "\""),
+ this.sendCommand("gdb-set stop-on-solib-events 1"),
+ this.sendCommand("gdb-set directories \"" + this.map.sourceDirs.join('" "') + "\"")
];
+
return cmds;
}
- stdout(data) {
- if (this.verbose) {
- this.log("stderr", "stdout: " + data);
- }
- if (typeof data == "string") {
- this.buffer += data;
- } else {
- this.buffer += data.toString("utf8");
- }
+ stdout(data: string) {
+ log.debug("stdout: " + data);
+ this.buffer += data;
const end = this.buffer.lastIndexOf('\n');
if (end != -1) {
- this.onOutput(this.buffer.substr(0, end));
- this.buffer = this.buffer.substr(end + 1);
+ this.onOutput(this.buffer.substring(0, end));
+ this.buffer = this.buffer.substring(end + 1);
}
if (this.buffer.length) {
if (this.onOutputPartial(this.buffer)) {
@@ -316,19 +185,13 @@ export class MI2 extends EventEmitter implements IDebugger {
}
}
- stderr(data) {
- if (this.verbose) {
- this.log("stderr", "stderr: " + data);
- }
- if (typeof data == "string") {
- this.errbuf += data;
- } else {
- this.errbuf += data.toString("utf8");
- }
+ stderr(data: string) {
+ log.debug("stderr: " + data);
+ this.errbuf += data;
const end = this.errbuf.lastIndexOf('\n');
if (end != -1) {
- this.onOutputStderr(this.errbuf.substr(0, end));
- this.errbuf = this.errbuf.substr(end + 1);
+ this.onOutputStderr(this.errbuf.substring(0, end));
+ this.errbuf = this.errbuf.substring(end + 1);
}
if (this.errbuf.length) {
this.logNoNewLine("stderr", this.errbuf);
@@ -336,23 +199,21 @@ export class MI2 extends EventEmitter implements IDebugger {
}
}
- stdin(data: string, cb?: any) {
+ stdin(data: string, cb?: (_err: Error) => void) {
if (this.isReady()) {
- if (this.verbose) {
- this.log("stderr", "stdin: " + data);
- }
+ log.debug("stdin: " + data);
this.process.stdin.write(data + "\n", cb);
}
}
- onOutputStderr(lines) {
- lines = lines.split('\n');
- lines.forEach(line => {
+ onOutputStderr(lines: string) {
+ const linesArr = lines.split('\n');
+ linesArr.forEach(line => {
this.log("stderr", line);
});
}
- onOutputPartial(line) {
+ onOutputPartial(line: string) {
if (couldBeOutput(line)) {
this.logNoNewLine("stdout", line);
return true;
@@ -360,118 +221,147 @@ export class MI2 extends EventEmitter implements IDebugger {
return false;
}
- onOutput(linesStr: string) {
- const lines = linesStr.split('\n');
+ private onOutput(linesStr: string) {
+ const lines = linesStr.split('\n');
lines.forEach(line => {
if (couldBeOutput(line)) {
if (!gdbRegex.exec(line)) {
this.log("stdout", line);
}
} else {
- const parsed = parseMI(line);
- if (this.verbose) {
- this.log("stderr", "GDB -> App: " + JSON.stringify(parsed));
- }
- let handled = false;
- if (parsed.token !== undefined) {
- if (this.handlers[parsed.token]) {
- this.handlers[parsed.token](parsed);
- delete this.handlers[parsed.token];
- handled = true;
- }
- }
- if (!handled && parsed.resultRecords && parsed.resultRecords.resultClass == "error") {
- this.log("stderr", parsed.result("msg") || line);
- }
- if (parsed.outOfBandRecord) {
- parsed.outOfBandRecord.forEach(async record => {
- if (record.isStream) {
- this.log(record.type, record.content);
- } else {
- if (record.type == "exec") {
- this.emit("exec-async-output", parsed);
- // 002 - stepOver in routines with "perform"
- subroutine = this.map.hasLineSubroutine(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')));
- // 002
- if (record.asyncClass == "running") {
- this.emit("running", parsed);
- } else if (record.asyncClass == "stopped") {
- const reason = parsed.record("reason");
- if (this.verbose) {
- this.log("stderr", "stop: " + reason);
- }
- if (reason == "breakpoint-hit") {
- if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
- if(this.lastStepCommand==this.continue && parsed.record("disp")=="del")
- this.lastStepCommand();
- else
- this.stepOver(); // 002 - stepInto/stepOut in routines with "perform"
- } else {
- this.emit("step-end", parsed);
- }
- } else if (reason == "location-reached") { // 002 - stepOver in routines with "perform"
- if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
- this.stepOver();
- } else {
- this.emit("step-end", parsed);
- }
- } else if (reason == "end-stepping-range") {
- if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
- this.lastStepCommand();
- } else {
- this.emit("step-end", parsed);
- }
- } else if (reason == "function-finished") {
- if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
- this.lastStepCommand();
- } else {
- this.emit("step-out-end", parsed);
- }
- } else if (reason == "signal-received") {
- this.emit("signal-stop", parsed);
- } else if (reason == "exited-normally") {
- this.emit("exited-normally", parsed);
- } else if (reason == "exited") { // exit with error code != 0
- if (this.verbose) {
- this.log("stderr", "Program exited with code " + parsed.record("exit-code"));
- }
- this.emit("quit", parsed);
- } else {
- if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
- this.continue();
- } else {
- if (this.verbose) {
- this.log("stderr", "Not implemented stop reason (assuming exception): " + reason);
- }
- this.emit("stopped", parsed);
- }
- }
+ this.onMINode(parseMI(line));
+ }
+ });
+ }
+
+ private onMINode(parsed: MINode) {
+ let handled = false;
+ if (parsed && parsed.token !== undefined) {
+ if (this.handlers[parsed.token]) {
+ this.handlers[parsed.token](parsed);
+ delete this.handlers[parsed.token];
+ handled = true;
+ }
+ }
+ if (!handled && parsed.resultRecords && parsed.resultRecords.resultClass == "error") {
+ this.log("stderr", parsed.result("msg"));
+ }
+ if (parsed.outOfBandRecord) {
+ parsed.outOfBandRecord.forEach(async record => {
+ if (record.isStream) {
+ this.log(record.type, record.content);
+ } else {
+ if (record.type == "exec") {
+ this.emit("exec-async-output", parsed);
+ // 002 - stepOver in routines with "perform"
+ subroutine = this.map.hasLineSubroutine(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')));
+ // 002
+ if (record.asyncClass == "running") {
+ this.emit("running", parsed);
+ } else if (record.asyncClass == "stopped") {
+ const reason = parsed.record("reason");
+ log.debug("stop:", reason);
+ if (reason == "breakpoint-hit") {
+ if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
+ if (this.lastStepCommand == this.continue && parsed.record("disp") == "del")
+ void this.lastStepCommand();
+ else
+ this.stepOver(); // 002 - stepInto/stepOut in routines with "perform"
+ } else {
+ this.emit("step-end", parsed);
+ }
+ } else if (reason == "location-reached") { // 002 - stepOver in routines with "perform"
+ if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
+ this.stepOver();
+ } else {
+ this.emit("step-end", parsed);
+ }
+ } else if (reason == "end-stepping-range") {
+ if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
+ void this.lastStepCommand().then();
+ } else {
+ this.emit("step-end", parsed);
+ }
+ } else if (reason == "function-finished") {
+ if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
+ void this.lastStepCommand();
} else {
- if (this.verbose) {
- this.log("stderr", JSON.stringify(parsed));
- }
+ this.emit("step-out-end", parsed);
}
- } else if (record.type == "notify") {
- if (record.asyncClass == "thread-created") {
- this.emit("thread-created", parsed);
- } else if (record.asyncClass == "thread-exited") {
- this.emit("thread-exited", parsed);
+ } else if (reason == "signal-received") {
+ this.emit("signal-stop", parsed);
+ } else if (reason == "exited-normally") {
+ this.emit("exited-normally", parsed);
+ } else if (reason == "exited") { // exit with error code != 0
+ log.info("Program exited with code " + parsed.record("exit-code"));
+ this.emit("quit", parsed);
+ } else if (reason == "solib-event") {
+ this.onSolibEvent(parsed);
+ this.resume();
+ } else {
+ if (!this.map.hasLineCobol(parsed.record('frame.fullname'), parseInt(parsed.record('frame.line')))) {
+ void this.continue();
+ } else {
+ log.error("Not implemented stop reason (assuming exception):", reason);
+ this.emit("stopped", parsed);
}
}
+ } else {
+ log.debug(() => JSON.stringify(parsed));
+ }
+ } else if (record.type == "notify") {
+ if (record.asyncClass == "thread-created") {
+ this.emit("thread-created", parsed);
+ } else if (record.asyncClass == "thread-exited") {
+ this.emit("thread-exited", parsed);
+ } else if (record.asyncClass == "library-loaded") {
+ // Possibly unreachable if `stop-on-solib-events` is on; still handle in case.
+ let libname = record.output.find((e) => e[0] == "target-name")?.[1];
+ if (this.map.addLib(libname)) {
+ log.debug(() => `Added library to map: ${libname}`);
+ log.debug(() => this.map.toString("updated"));
+ this.reloadBreakPoints();
+ }
+ } else if (record.asyncClass == "library-unloaded") {
+ // Ditto: possibly unreachable if `stop-on-solib-events` is on; still handle in case.
+ let libname = record.output.find((e) => e[0] == "target-name")?.[1];
+ if (this.map.remLib(libname)) {
+ log.debug(() => this.map.toString("updated"));
+ this.reloadBreakPoints();
+ }
+ } else {
+ log.debug(() => JSON.stringify(parsed));
}
- });
- handled = true;
- }
- if (parsed.token == undefined && parsed.resultRecords == undefined && parsed.outOfBandRecord.length == 0) {
- handled = true;
- }
- if (!handled) {
- if (this.verbose) {
- this.log("stderr", "Unhandled: " + JSON.stringify(parsed));
}
}
- }
- });
+ });
+ handled = true;
+ }
+ if (parsed.token == undefined && parsed.resultRecords == undefined && parsed.outOfBandRecord.length == 0) {
+ handled = true;
+ }
+ if (!handled) {
+ log.error("Unhandled: " + JSON.stringify(parsed));
+ }
+ }
+
+ private onSolibEvent(node: MINode): void {
+ const added: [string, any][] = node.record("added") ?? [];
+ const removed: [string, any][] = node.record("removed") ?? [];
+ const isLib = (lib: [string, any]) => lib[0] == "library";
+ let libsChanged = false;
+ libsChanged = added.filter(isLib).reduce((libsChanged, lib) => {
+ log.debug("loaded library:", lib[1]);
+ return this.map.addLib(lib[1]) || libsChanged;
+ }, libsChanged);
+ libsChanged = removed.filter(isLib).reduce((libsChanged, lib) => {
+ log.debug("unloaded library:", lib[1]);
+ return this.map.remLib(lib[1]) || libsChanged;
+ }, libsChanged);
+ if (libsChanged) {
+ log.debug (() => this.map.toString ("updated"));
+ this.reloadBreakPoints ();
+ }
}
start(attachTarget?: string): Thenable {
@@ -490,7 +380,7 @@ export class MI2 extends EventEmitter implements IDebugger {
}
this.once("ui-break-done", () => {
if (!!attachTarget) {
- if (/^d+$/.test(attachTarget)) {
+ if (/^\d+$/.test(attachTarget)) {
command = `target-attach ${attachTarget}`;
expectingResultClass = "done";
} else {
@@ -498,6 +388,7 @@ export class MI2 extends EventEmitter implements IDebugger {
expectingResultClass = "connected";
}
}
+
this.sendCommand(command).then((info) => {
if (info.resultRecords.resultClass == expectingResultClass) {
resolve(false);
@@ -511,30 +402,32 @@ export class MI2 extends EventEmitter implements IDebugger {
stop() {
const proc = this.process;
- const to = setTimeout(() => {
- process.kill(-proc.pid);
- }, 1000);
- this.process.on("exit", function (code) {
- clearTimeout(to);
- });
- this.sendCommand("gdb-exit");
+ if (proc) {
+ const to = setTimeout(() => {
+ process.kill(-proc.pid);
+ }, 1000);
+ this.process.on("exit", function (_code) {
+ clearTimeout(to);
+ });
+ }
+ void this.sendCommand("gdb-exit");
}
detach() {
const proc = this.process;
- const to = setTimeout(() => {
- process.kill(-proc.pid);
- }, 1000);
- this.process.on("exit", function (code) {
- clearTimeout(to);
- });
- this.sendCommand("target-detach");
+ if (proc) {
+ const to = setTimeout(() => {
+ process.kill(-proc.pid);
+ }, 1000);
+ this.process.on("exit", function (_code) {
+ clearTimeout(to);
+ });
+ }
+ void this.sendCommand("target-detach");
}
interrupt(): Thenable {
- if (this.verbose) {
- this.log("stderr", "interrupt");
- }
+ log.debug("interrupt");
return new Promise((resolve, reject) => {
this.sendCommand("exec-interrupt").then((info) => {
resolve(info.resultRecords.resultClass == "done");
@@ -543,10 +436,8 @@ export class MI2 extends EventEmitter implements IDebugger {
}
continue(): Thenable {
- this.lastStepCommand = this.continue;
- if (this.verbose) {
- this.log("stderr", "continue");
- }
+ this.lastStepCommand = () => this.continue();
+ log.debug("continue");
return new Promise((resolve, reject) => {
this.sendCommand("exec-continue").then((info) => {
resolve(info.resultRecords.resultClass == "running");
@@ -554,6 +445,14 @@ export class MI2 extends EventEmitter implements IDebugger {
});
}
+ private resume () {
+ if (this.lastStepCommand != undefined) {
+ void this.lastStepCommand ();
+ } else {
+ void this.continue ();
+ }
+ }
+
/**
* The command executes the line, then pauses at the next line.
* The underlying function executes entirely.
@@ -561,10 +460,8 @@ export class MI2 extends EventEmitter implements IDebugger {
*/
// 002 - stepOver in routines with "perform"
stepOver(): Thenable {
- this.lastStepCommand = this.stepOver;
- if (this.verbose) {
- this.log("stderr", "stepOver");
- }
+ this.lastStepCommand = () => this.stepOver();
+ log.debug("stepOver");
if (subroutine >= 0) {
return new Promise((resolve, reject) => {
this.sendCommand("exec-until " + subroutine).then((info) => {
@@ -586,10 +483,8 @@ export class MI2 extends EventEmitter implements IDebugger {
* The command goes into the underlying function, then pauses at the first line.
*/
stepInto(): Thenable {
- this.lastStepCommand = this.stepInto;
- if (this.verbose) {
- this.log("stderr", "stepInto");
- }
+ this.lastStepCommand = () => this.stepInto() ;
+ log.debug("stepInto");
// 002 - stepInto/setpOut in routines with "perform"
if (subroutine >= 0) {
return new Promise((resolve, reject) => {
@@ -613,10 +508,8 @@ export class MI2 extends EventEmitter implements IDebugger {
* The comand executes the function, then pauses at the next line outside.
*/
stepOut(): Thenable {
- this.lastStepCommand = this.stepOut;
- if (this.verbose) {
- this.log("stderr", "stepOut");
- }
+ this.lastStepCommand = () => this.stepOut() ;
+ log.debug("stepOut");
return new Promise((resolve, reject) => {
this.sendCommand("exec-finish").then((info) => {
resolve(info.resultRecords.resultClass == "running");
@@ -624,12 +517,10 @@ export class MI2 extends EventEmitter implements IDebugger {
});
}
- goto(filename: string, line: number): Thenable {
- if (this.verbose) {
- this.log("stderr", "goto");
- }
+ goto(filename: string, line: number): Thenable {
+ log.debug("goto");
return new Promise((resolve, reject) => {
- const target: string = '"' + (filename ? escape(filename) + ":" : "") + line + '"';
+ const target: string = '"' + (filename ? escape(filename) + ":" : "") + line.toString() + '"';
this.sendCommand("break-insert -t " + target).then(() => {
this.sendCommand("exec-jump " + target).then((info) => {
resolve(info.resultRecords.resultClass == "running");
@@ -638,45 +529,72 @@ export class MI2 extends EventEmitter implements IDebugger {
});
}
- async changeVariable(name: string, rawValue: string): Promise {
- if (this.verbose) {
- this.log("stderr", "changeVariable");
+ async changeVariable(name: string, rawValue: string): Promise> {
+ log.debug("changeVariable");
+ const functionName = await this.getCurrentFunctionName();
+ try {
+ const v = this.map.findVariableByCobol(functionName, name);
+ return this.setDebuggerVariable(v, rawValue);
+ } catch (e) {
+ this.log("stderr", `Failed to set cob field value on ${functionName}.${name}`);
+ this.log("stderr", (e).message);
+ throw e;
}
+ }
+ async changeCVariable(cName: string, rawValue: string): Promise> {
+ log.debug("changeCVariable");
const functionName = await this.getCurrentFunctionName();
+ try {
+ const v = this.map.findVariableByC(functionName, cName);
+ return this.setDebuggerVariable(v, rawValue);
+ } catch (e) {
+ this.log("stderr", `Failed to set cob field value on ${functionName}.${cName}`);
+ this.log("stderr", (e).message);
+ throw e;
+ }
+ }
- const cleanedRawValue = cleanRawValue(rawValue);
-
+ async changeGlobalCVariable(cName: string, rawValue: string): Promise> {
+ log.debug("changeGobalVariable");
try {
- const variable = this.map.getVariableByCobol(`${functionName}.${name.toUpperCase()}`);
+ const v = this.map.findGlobalByC(cName);
+ return this.setDebuggerVariable(v, rawValue);
+ } catch (e) {
+ this.log("stderr", `Failed to set cob field value on ${cName} (global)`);
+ this.log("stderr", (e).message);
+ throw e;
+ }
+ }
- if (variable.attribute.type === "integer") {
- await this.sendCommand(`gdb-set var ${variable.cName}=${cleanedRawValue}`);
- } else if (this.hasCobPutFieldStringFunction && variable.cName.startsWith("f_")) {
- await this.sendCommand(`data-evaluate-expression "(int)cob_put_field_str(&${variable.cName}, \\"${cleanedRawValue}\\")"`);
+ private async setDebuggerVariable(v: DebuggerVariable, rawValue: string) : Promise> {
+ const cleanedRawValue = cleanRawValue(rawValue);
+ try {
+ if (v.attribute.type === "integer") {
+ await this.sendCommand(`gdb-set var ${v.cName}=${cleanedRawValue}`);
+ } else if (this.hasCobPutFieldStringFunction && v.isField) {
+ await this.sendCommand(`data-evaluate-expression "(int)cob_put_field_str(&${v.cName}, \\"${cleanedRawValue}\\")"`);
} else {
- const finalValue = variable.formatValue(cleanedRawValue);
- let cName = variable.cName;
- if (variable.cName.startsWith("f_")) {
+ const finalValue = v.formatValue(cleanedRawValue);
+ let cName = v.cName;
+ if (v.isField) {
cName += ".data";
}
- await this.sendCommand(`data-evaluate-expression "(void)strncpy(${cName}, \\"${finalValue}\\", ${variable.size})"`);
+ await this.sendCommand(`data-evaluate-expression "(void)strncpy(${cName}, \\"${finalValue}\\", ${v.size})"`);
}
} catch (e) {
- if (e.message.includes("No symbol \"cob_put_field_str\"")) {
+ if ((e).message.includes("No symbol \"cob_put_field_str\"")) {
this.hasCobPutFieldStringFunction = false;
- return this.changeVariable(name, rawValue);
+ return this.setDebuggerVariable(v, rawValue);
}
- this.log("stderr", `Failed to set cob field value on ${functionName}.${name}`);
- this.log("stderr", e.message);
+ this.log("stderr", `Failed to set cob field value on ${v.cName}`);
throw e;
}
+ return v.parent != null || v.hasChildren() ? ['variables'] : [];
}
loadBreakPoints(breakpoints: Breakpoint[]): Thenable<[boolean, Breakpoint][]> {
- if (this.verbose) {
- this.log("stderr", "loadBreakPoints");
- }
+ log.debug("loadBreakPoints");
const promisses = [];
breakpoints.forEach(breakpoint => {
promisses.push(this.addBreakPoint(breakpoint));
@@ -684,17 +602,22 @@ export class MI2 extends EventEmitter implements IDebugger {
return Promise.all(promisses);
}
- setBreakPointCondition(bkptNum, condition): Thenable {
- if (this.verbose) {
- this.log("stderr", "setBreakPointCondition");
- }
- return this.sendCommand("break-condition " + bkptNum + " " + condition);
+ private reloadBreakPoints(): Thenable<[boolean, Breakpoint][]> {
+ // TODO: ignore previously set breakpoints after library unloading?
+ // Library unloading should mostly happen at the end of executions,
+ // so we can probaly let gdb deal with those (and live with the warnings).
+ let breakpoints = Array.from (this.ignoredBreakpoints);
+ this.ignoredBreakpoints.clear ();
+ return this.loadBreakPoints (breakpoints);
+ }
+
+ setBreakPointCondition(bkptNum: number, condition: string): Thenable {
+ log.debug("setBreakPointCondition");
+ return this.sendCommand("break-condition " + bkptNum.toString() + " " + condition);
}
addBreakPoint(breakpoint: Breakpoint): Thenable<[boolean, Breakpoint]> {
- if (this.verbose) {
- this.log("stderr", "addBreakPoint ");
- }
+ log.debug("addBreakPoint");
return new Promise((resolve, reject) => {
if (this.breakpoints.has(breakpoint)) {
@@ -703,40 +626,46 @@ export class MI2 extends EventEmitter implements IDebugger {
let location = "";
if (breakpoint.countCondition) {
if (breakpoint.countCondition[0] == ">") {
- location += "-i " + numRegex.exec(breakpoint.countCondition.substr(1))[0] + " ";
+ location += "-i " + numRegex.exec(breakpoint.countCondition.substring(1))[0] + " ";
} else {
const match = numRegex.exec(breakpoint.countCondition)[0];
if (match.length != breakpoint.countCondition.length) {
this.log("stderr", "Unsupported break count expression: '" + breakpoint.countCondition + "'. Only supports 'X' for breaking once after X times or '>X' for ignoring the first X breaks");
location += "-t ";
} else if (parseInt(match) != 0) {
- location += "-t -i " + parseInt(match) + " ";
+ location += "-t -i " + parseInt(match).toString() + " ";
}
}
}
const map = this.map.getLineC(breakpoint.file, breakpoint.line);
if (map.fileC === '' && map.lineC === 0) {
+ log.debug (() => [
+ "addBreakPoint: ignoring breakpoint for unknown source file:",
+ JSON.stringify(breakpoint)
+ ]);
+ this.ignoredBreakpoints.add(breakpoint);
return;
}
if (breakpoint.raw) {
location += '"' + escape(breakpoint.raw) + '"';
} else {
- location += '"' + escape(map.fileC) + ":" + map.lineC + '"';
+ location += '"' + escape(map.fileC) + ":" + map.lineC.toString() + '"';
}
this.sendCommand("break-insert -f " + location).then((result) => {
if (result.resultRecords.resultClass == "done") {
- const bkptNum = parseInt(result.result("bkpt.number"));
- const map = this.map.getLineCobol(result.result("bkpt.file"), parseInt(result.result("bkpt.line")));
+ const bkptNum = parseInt(result.result("bkpt.number"));
+ const bkptlocation = (result.result("bkpt.original-location")).split(':');
+ const map = this.map.getLineCobol(bkptlocation[0], parseInt(bkptlocation[1]));
const newBrk = {
file: map.fileCobol,
line: map.lineCobol,
condition: breakpoint.condition
};
if (breakpoint.condition) {
- this.setBreakPointCondition(bkptNum, breakpoint.condition).then((result) => {
+ this.setBreakPointCondition(bkptNum, breakpoint.condition).then((result: MINode) => {
if (result.resultRecords.resultClass == "done") {
this.breakpoints.set(newBrk, bkptNum);
resolve([true, newBrk]);
@@ -756,32 +685,36 @@ export class MI2 extends EventEmitter implements IDebugger {
}
removeBreakPoint(breakpoint: Breakpoint): Thenable {
- if (this.verbose) {
- this.log("stderr", "removeBreakPoint");
- }
- return new Promise((resolve, reject) => {
+ log.debug("removeBreakPoint");
+ return new Promise((resolve, _reject) => {
if (!this.breakpoints.has(breakpoint)) {
- return resolve(false);
+ if (this.ignoredBreakpoints.has(breakpoint)) {
+ this.ignoredBreakpoints.delete(breakpoint);
+ return resolve(true);
+ } else {
+ return resolve(false);
+ }
}
- this.sendCommand("break-delete " + this.breakpoints.get(breakpoint)).then((result) => {
+ this.sendCommand("break-delete " + this.breakpoints.get(breakpoint).toString()).then((result: MINode) => {
if (result.resultRecords.resultClass == "done") {
this.breakpoints.delete(breakpoint);
resolve(true);
} else resolve(false);
- });
+ }, (err: Error) => console.log(err));
});
}
- clearBreakPoints(): Thenable {
- if (this.verbose) {
- this.log("stderr", "clearBreakPoints");
- }
- return new Promise((resolve, reject) => {
+ clearBreakPoints(): Thenable {
+ log.debug("clearBreakPoints");
+ return new Promise((resolve, _reject) => {
this.sendCommand("break-delete").then((result) => {
if (result.resultRecords.resultClass == "done") {
+ this.ignoredBreakpoints.clear ();
this.breakpoints.clear();
resolve(true);
- } else resolve(false);
+ } else {
+ resolve(false);
+ }
}, () => {
resolve(false);
});
@@ -789,20 +722,18 @@ export class MI2 extends EventEmitter implements IDebugger {
}
async getThreads(): Promise {
- if (this.verbose) {
- this.log("stderr", "getThreads");
- }
+ log.debug("getThreads");
return new Promise((resolve, reject) => {
if (!!this.noDebug) {
return;
}
this.sendCommand("thread-info").then((result) => {
- resolve(result.result("threads").map(element => {
+ resolve((result.result("threads")).map(element => {
const ret: Thread = {
- id: parseInt(MINode.valueOf(element, "id")),
- targetId: MINode.valueOf(element, "target-id")
+ id: parseInt(MINode.valueOf(element, "id")),
+ targetId: MINode.valueOf(element, "target-id")
};
- const name = MINode.valueOf(element, "name");
+ const name = MINode.valueOf(element, "name");
if (name) {
ret.name = name;
}
@@ -813,27 +744,24 @@ export class MI2 extends EventEmitter implements IDebugger {
}
async getStack(maxLevels: number, thread: number): Promise {
- if (this.verbose) {
- this.log("stderr", "getStack");
- }
+ log.debug("getStack");
let command = "stack-list-frames";
if (thread != 0) {
command += ` --thread ${thread}`;
}
if (maxLevels) {
- command += " 0 " + maxLevels;
+ command += " 0 " + maxLevels.toString();
}
- const result = await this.sendCommand(command);
- const stack = result.result("stack");
- const ret: Stack[] = [];
+ const result = await this.sendCommand(command, failure_handling.Silence);
+ if (result === undefined)
+ return;
+ const stack = result.result("stack");
return stack.map(element => {
const level = MINode.valueOf(element, "@frame.level");
- const addr = MINode.valueOf(element, "@frame.addr");
const func = MINode.valueOf(element, "@frame.func");
- const filename = MINode.valueOf(element, "@frame.file");
let file: string = MINode.valueOf(element, "@frame.fullname");
if (file) {
- file = nativePath.normalize(file);
+ file = path.normalize(file);
}
const from = parseInt(MINode.valueOf(element, "@frame.from"));
@@ -843,44 +771,61 @@ export class MI2 extends EventEmitter implements IDebugger {
line = parseInt(lnstr);
}
- const map = this.map.getLineCobol(file, line);
return {
- address: addr,
- fileName: nativePath.basename(map.fileCobol),
- file: map.fileCobol,
function: func || from,
level: level,
- line: map.lineCobol
+ line: this.map.getLineCobol(file, line)
};
});
}
+ async globalStorageSymbols(): Promise {
+ const resp = await this.sendCommand(`symbol-info-variables --name "^b_[0-9]*$"`,
+ failure_handling.Silence);
+ if (resp?.resultRecords.resultClass !== "done")
+ return [];
+ return (resp.result("symbols.debug")).map(MI2Decoder.decodeFileSymbols);
+ }
+
+ async evalSymbol(s: LocalizedSymbol): Promise {
+ const v = this.map.getGlobalByC(s.filename, s.symbol.name);
+ await this.updateVariable(v);
+ return v;
+ }
+
+ public lookupGlobalCobolByCName(cobolName: string, cName: string): DebuggerVariable {
+ const cFileMatch = /^'([^']+)'::.*$/.exec(cName);
+ let cFile = cFileMatch ? cFileMatch[1] : undefined;
+ return this.map.findGlobalByCobol(cobolName, cFile);
+ }
+
async getCurrentFunctionName(): Promise {
- if (this.verbose) {
- this.log("stderr", "getCurrentFunctionName");
- }
- const response = await this.sendCommand("stack-info-frame");
- return response.result("frame.func").toLowerCase();
+ log.debug("getCurrentFunctionName");
+ const response = await this.sendCommand("stack-info-frame", failure_handling.Silence);
+ if (response === undefined)
+ return;
+ return response.result("frame.func")?.toLowerCase();
}
async getStackVariables(thread: number, frame: number): Promise {
- if (this.verbose) {
- this.log("stderr", "getStackVariables");
- }
+ log.debug("getStackVariables");
const functionName = await this.getCurrentFunctionName();
+ if (functionName === undefined)
+ return;
+
+ const variablesResponse = await this.sendCommand(`stack-list-variables --thread ${thread} --frame ${frame} --all-values`, failure_handling.Silence);
+ if (variablesResponse === undefined)
+ return;
- const variablesResponse = await this.sendCommand(`stack-list-variables --thread ${thread} --frame ${frame} --all-values`);
const variables = variablesResponse.result("variables");
const currentFrameVariables = new Set();
for (const element of variables) {
const key = MINode.valueOf(element, "name");
const value = MINode.valueOf(element, "value");
- //console.log("Key="+key);
- //console.log("Value="+value);
- if (key.startsWith("b_")) {
+ if (key.startsWith("b_")) { // ok for stack variables
const cobolVariable = this.map.getVariableByC(`${functionName}.${key}`);
if (cobolVariable) {
@@ -899,9 +844,7 @@ export class MI2 extends EventEmitter implements IDebugger {
}
examineMemory(from: number, length: number): Thenable {
- if (this.verbose) {
- this.log("stderr", "examineMemory");
- }
+ log.debug("examineMemory");
return new Promise((resolve, reject) => {
this.sendCommand("data-read-memory-bytes 0x" + from.toString(16) + " " + length).then((result) => {
resolve(result.result("memory[0].contents"));
@@ -910,45 +853,44 @@ export class MI2 extends EventEmitter implements IDebugger {
}
async evalExpression(expression: string, thread: number, frame: number): Promise {
- const functionName = await this.getCurrentFunctionName();
+ log.debug("evalExpression", expression);
- if (this.verbose) {
- this.log("stderr", "evalExpression");
- }
+ const functionName = await this.getCurrentFunctionName();
+ if (functionName === undefined)
+ return;
let [finalExpression, variableNames] = parseExpression(expression, functionName, this.map);
+ finalExpression = `return ${finalExpression};`;
for (const variableName of variableNames) {
const variable = this.map.getVariableByC(`${functionName}.${variableName}`);
if (variable) {
- await this.evalVariable(variable, thread, frame);
+ await this.updateVariable(variable, thread, frame);
const value = variable.value;
finalExpression = `const ${variableName}=${value};` + finalExpression;
}
}
try {
- const result = `${eval(finalExpression)}`;
- if (/[^0-9.\-+]/g.test(result)) {
- return `"${result}"`;
- }
- return result;
+ const result = Function(`"use strict"; ${finalExpression}`)();
+ return JSON.stringify(result); // deals with escapes.
} catch (e) {
- this.log("stderr", e.message);
+ log.debug(e.message);
return `Failed to evaluate ${expression}`;
}
}
- async evalCobField(name: string, thread: number, frame: number): Promise {
- const functionName = await this.getCurrentFunctionName();
+ async evalCVariable(cName: string, thread: number = 0, frame: number = 0): Promise {
+ log.debug("evalCVariable", cName);
- if (this.verbose) {
- this.log("stderr", "evalCobField");
- }
+ const functionName = await this.getCurrentFunctionName();
+ if (functionName === undefined)
+ return;
try {
- const variable = this.map.getVariableByCobol(`${functionName}.${name.toUpperCase()}`);
- return await this.evalVariable(variable, thread, frame);
+ const variable = this.map.findVariableByC(functionName, cName);
+ await this.updateVariable(variable, thread, frame);
+ return variable;
} catch (e) {
this.log("stderr", `Failed to eval cob field value on ${functionName}.${name}`);
this.log("stderr", e.message);
@@ -956,36 +898,50 @@ export class MI2 extends EventEmitter implements IDebugger {
}
}
- private async evalVariable(variable: DebuggerVariable, thread: number, frame: number): Promise {
- if (this.verbose) {
- this.log("stderr", "evalVariable");
+ async evalCGlobal(cName: string): Promise {
+ log.debug("evalCGlobal", cName);
+
+ try {
+ const variable = this.map.findGlobalByC(cName);
+ await this.updateVariable(variable);
+ return variable;
+ } catch (e) {
+ this.log("stderr", `Failed to eval cob field value on ${cName}`);
+ this.log("stderr", e.message);
+ throw e;
}
+ }
+
+ private async updateVariable(variable: DebuggerVariable, thread: number = 0, frame: number = 0): Promise {
+ log.debug("updateVariable", (() => `${variable.cName} (${variable.cobolName})`));
let command = "data-evaluate-expression ";
if (thread != 0) {
command += `--thread ${thread} --frame ${frame} `;
}
- if (this.hasCobGetFieldStringFunction && variable.cName.startsWith("f_")) {
+ if (this.hasCobGetFieldStringFunction && variable.isField) {
command += `"(char *)cob_get_field_str_buffered(&${variable.cName})"`;
- } else if (variable.cName.startsWith("f_")) {
+ } else if (variable.isField) {
command += `${variable.cName}.data`;
} else {
command += variable.cName;
}
- let dataResponse;
let value = null;
try {
- dataResponse = await this.sendCommand(command);
- value = dataResponse.result("value");
- if (value === "0x0") {
- value = null;
+ let dataResponse = await this.sendCommand(command, failure_handling.Silence);
+ if (dataResponse !== undefined) {
+ value = dataResponse.result("value");
+ if (value === "0x0") {
+ value = null;
+ }
}
} catch (error) {
if (error.message.includes("No symbol \"cob_get_field_str_buffered\"")) {
this.hasCobGetFieldStringFunction = false;
- return this.evalVariable(variable, thread, frame);
+ this.updateVariable(variable, thread, frame);
+ return;
}
this.log("stderr", error.message);
}
@@ -995,8 +951,6 @@ export class MI2 extends EventEmitter implements IDebugger {
} else {
variable.setValue(value);
}
-
- return variable;
}
private logNoNewLine(type: string, msg: string): void {
@@ -1013,16 +967,24 @@ export class MI2 extends EventEmitter implements IDebugger {
});
}
- private sendCommand(command: string, suppressFailure: boolean = false): Thenable {
+ private sendCommand(command: string, on_failure: failure_handling = undefined): Thenable {
return new Promise((resolve, reject) => {
const sel = this.currentToken++;
this.handlers[sel] = (node: MINode) => {
if (node && node.resultRecords && node.resultRecords.resultClass === "error") {
- if (suppressFailure) {
- this.log("stderr", `WARNING: Error executing command '${command}'`);
- resolve(node);
- } else
- reject(new MIError(node.result("msg") || "Internal error", command));
+ switch (on_failure) {
+ case failure_handling.Suppress:
+ this.log("stderr", `WARNING: Error executing command '${command}'`);
+ resolve(node);
+ break;
+ case failure_handling.Silence:
+ resolve(undefined);
+ break;
+ default:
+ case failure_handling.Report_n_reject:
+ reject(new MIError(node.result("msg") || "Internal error", command));
+ break;
+ }
} else
resolve(node);
};
@@ -1038,7 +1000,7 @@ export class MI2 extends EventEmitter implements IDebugger {
return Array.from(this.gcovFiles);
}
- getSourceMap(): SourceMap {
+ sourceMap(): SourceMap {
return this.map;
}
@@ -1051,7 +1013,7 @@ export class MI2 extends EventEmitter implements IDebugger {
if (xterm_device === "") {
let sleepVal = this.hashCode(target);
this.log('stdio', 'TTY: sleep ' + sleepVal + ';');
- // wls - const wsl_process = ChildProcess.exec("cmd.exe /c start bash -c 'sleep "+sleepVal+"'");
+ // wls - const wsl_process = ChildProcess.exec("cmd.exe /c start bash -c 'sleep "+sleepVal+"'");
if (isWslSsh) {
this.createTerminal("vscode", sleepVal, target);
} else
@@ -1066,7 +1028,7 @@ export class MI2 extends EventEmitter implements IDebugger {
try_find++;
if (xterm_device != "") break;
}
- if (xterm_device === "") this.log("stderr", "tty: Install 'xterm' to use gdb's tty option\n");
+ if (xterm_device === "") this.log("stderr", "tty: Install a terminal to use gdb's tty option\n");
}
if (xterm_device.includes("pts")) {
this.gdbArgs.push("--tty=" + xterm_device);
@@ -1114,24 +1076,113 @@ export class MI2 extends EventEmitter implements IDebugger {
return strCode;
}
+ isTerminalInstalled(terminalCommand: string): boolean {
+ try {
+ ChildProcess.execSync(`command -v ${terminalCommand}`);
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+
+ createXFCETerminal(sleepVal, target) {
+ let dispTarget = (target.length > 50) ? "..." + target.substr(target.length - 50, target.length) : target;
+ let param = "bash -c 'echo \"GnuCOBOL DEBUG\"; sleep " + sleepVal + ";'";
+ const xfce4_terminal_args = [
+ "--title", "GnuCOBOL Debug - " + dispTarget,
+ "--font=DejaVu Sans Mono 14",
+ "--command", param
+ ]
+ const xfce_process = ChildProcess.spawn("xfce4-terminal", xfce4_terminal_args, {
+ detached: true,
+ stdio: 'ignore'
+ });
+ xfce_process.unref();
+ }
+
+ createKDETerminal(sleepVal, target) {
+ let dispTarget = (target.length > 50) ? "..." + target.substr(target.length - 50, target.length) : target;
+ let param = "bash -c 'echo \"GnuCOBOL DEBUG\"; sleep " + sleepVal + ";'";
+ const konsole_args = [
+ "--title", "GnuCOBOL Debug - " + dispTarget,
+ "--separate",
+ "--nofork",
+ "--hold",
+ "-e",
+ param
+ ]
+ const kde_process = ChildProcess.spawn("konsole", konsole_args, {
+ detached: true,
+ stdio: 'ignore'
+ });
+ kde_process.unref();
+ }
+
+ createGNOMETerminal(sleepVal, target) {
+ let dispTarget = (target.length > 50) ? "..." + target.substr(target.length - 50, target.length) : target;
+ const gnome_terminal_args = [
+ "--title", "GnuCOBOL Debug - " + dispTarget,
+ "--",
+ "bash", "-c","echo 'GnuCOBOL DEBUG';" + "sleep " + sleepVal + ";"
+ ]
+ const gnome_process = ChildProcess.spawn("gnome-terminal", gnome_terminal_args, {
+ detached: true,
+ stdio: 'ignore',
+ });
+ gnome_process.unref();
+ }
+
+ createXtermTerminal(sleepVal, target) {
+ let dispTarget = (target.length > 50) ? "..." + target.substr(target.length - 50, target.length) : target;
+ const xterm_args = [
+ "-title", "GnuCOBOL Debug - " + dispTarget,
+ "-fa", "DejaVu Sans Mono",
+ "-fs", "14",
+ "-e", "/usr/bin/tty;" +
+ "echo 'GnuCOBOL DEBUG';" +
+ "sleep " + sleepVal + ";"
+ ]
+ const xterm_process = ChildProcess.spawn("xterm", xterm_args, {
+ detached: true,
+ stdio: 'ignore',
+ });
+ xterm_process.unref();
+ }
+
// Opens a terminal to show the application screen - gdbtty
createTerminal(gdbtty, sleepVal, target) {
+ let findTerminal = true;
if (gdbtty != "vscode") {
- let dispTarget = (target.length > 50) ? "..." + target.substr(target.length - 50, target.length) : target;
- const xterm_args = [
- "-title", "GnuCOBOL Debug - " + dispTarget,
- "-fa", "DejaVu Sans Mono",
- "-fs", "14",
- "-e", "/usr/bin/tty;" +
- "echo 'GnuCOBOL DEBUG';" +
- "sleep " + sleepVal + ";"
- ]
-
- const xterm_process = ChildProcess.spawn("xterm", xterm_args, {
- detached: true,
- stdio: 'ignore',
- });
- xterm_process.unref();
+ if (typeof gdbtty === 'string' && gdbtty!="external") {
+ if(this.isTerminalInstalled(gdbtty)){
+ findTerminal = false;
+ switch (gdbtty) {
+ case "xterm":
+ this.createXtermTerminal(sleepVal, target);
+ break;
+ case "gnome-terminal":
+ this.createGNOMETerminal(sleepVal, target);
+ break;
+ case "konsole":
+ this.createKDETerminal(sleepVal, target);
+ break;
+ case "xfce4-terminal":
+ this.createXFCETerminal(sleepVal, target);
+ break;
+ }
+ }
+ }
+ if(findTerminal){
+ if(this.isTerminalInstalled("xterm")){
+ this.createXtermTerminal(sleepVal, target);
+ }else if(this.isTerminalInstalled("gnome-terminal")){
+ this.createGNOMETerminal(sleepVal, target);
+ }else if(this.isTerminalInstalled("xfce4-terminal")){
+ this.createXFCETerminal(sleepVal, target);
+ }else if(this.isTerminalInstalled("konsole")){
+ this.createKDETerminal(sleepVal, target);
+ }
+ }
} else {
let terminal = this.selectTerminal();
if (!terminal) {
diff --git a/src/parser.c.ts b/src/parser.c.ts
index 1c93e86..ffe1bef 100644
--- a/src/parser.c.ts
+++ b/src/parser.c.ts
@@ -1,26 +1,21 @@
-import * as readline from "n-readlines";
-import * as nativePathFromPath from "path";
+import readline from "n-readlines";
+import * as path from "path";
import * as fs from "fs";
import {DebuggerVariable, Attribute, VariableType} from "./debugger";
+import * as log from './log';
-const nativePath = {
- resolve: function (...args: string[]): string {
- const nat = nativePathFromPath.resolve(...args);
- if (process.platform === "win32" && this.cobcpath === "docker" && this.gdbpath === "docker") {
- return nat.replace(/.*:/, s => "/" + s.toLowerCase().replace(":", "")).replace(/\\/g, "/");
- }
- return nat;
- },
- basename: function (path: string): string {
- return nativePathFromPath.basename(path);
- },
- isAbsolute: function (path: string): boolean {
- return nativePathFromPath.isAbsolute(path);
- },
- join: function (...args: string[]) {
- return nativePathFromPath.join(...args);
- }
-};
+function normalizeExistingFileName(f: string): string {
+ if (f != undefined && process.platform === "win32") {
+ const lc = f.toLowerCase();
+ const uc = f.toUpperCase();
+ return (!fs.existsSync(lc) || !fs.existsSync(uc)) ? f : lc;
+ }
+ return f;
+}
+
+function cFile (filename: string) : string {
+ return path.basename(filename.split('.').slice(0, -1).join('.') + '.c');
+}
const procedureRegex = /\/\*\sLine:\s([0-9]+)(\s+:\sEntry\s)?/i;
const procedureFixRegex = /#line\s([0-9]+)\s".*\.c"/i;
@@ -35,95 +30,222 @@ const subroutineRegex = /\sPerform\s/i;
const frame_ptrFindRegex = /frame\_ptr\-\-\;/;
const fixOlderFormat = /cob\_trace\_stmt/;
-globalThis.varOccurs = [];
+function cobEncodeInvalidChars (s: string): string {
+ // TODO: properly mimick `libcob:cob_encode_invalid_chars`
+ // Meaning: Also replace any character in /[^a-zA-Z0-9-]/ into "_XX", where
+ // XX is the hexadecimal ascii code of the characher being replaced
+ return s.replace("-","__");
+}
+
+// Minimalistic one-entry cache.
+let currentCOBOLFileName: string = null;
+let currentCOBOLFileContents: string[] = [];
+
+function lookupLineInCobolFile(fileCobol: string, lineCobol: number) : string | undefined {
+ if (fileCobol && currentCOBOLFileName != fileCobol) {
+ currentCOBOLFileName = fileCobol;
+ try {
+ currentCOBOLFileContents = fs.readFileSync(fileCobol).toString().split('\n');
+ } catch (e) {
+ log.debug(e.message);
+ currentCOBOLFileContents = [];
+ }
+ }
+ if (currentCOBOLFileContents) {
+ return currentCOBOLFileContents[lineCobol - 1];
+ }
+ return undefined;
+}
+
+const globalNamespace = ""
+const globalNamespacePrefix = `${globalNamespace}.`
export class Line {
- fileCobol: string;
- fileC: string;
- lineCobol: number;
- lineC: number;
endPerformLine: number; // 002 - stepOver in routines with "perform"
-
- public constructor(filePathCobol: string, lineCobol: number, filePathC: string, lineC: number) {
- this.fileCobol = filePathCobol;
- this.lineCobol = lineCobol;
- this.fileC = filePathC;
- this.lineC = lineC;
+ public cobolLine: string | undefined;
+
+ public constructor
+ (public fileCobol: string,
+ public lineCobol: number,
+ public fileC: string,
+ public rootFileC: string,
+ public lineC: number,
+ public functionName: string) {
this.endPerformLine = -1; // 002 - stepOver in routines with "perform"
+ this.cobolLine = lookupLineInCobolFile (fileCobol, lineCobol);
}
public toString(): string {
- return `${this.fileCobol}:${this.lineCobol} > ${this.fileC}:${this.lineC}`;
+ return `${this.fileCobol}:${this.lineCobol} > ${this.fileC}:${this.lineC} | (${this.functionName})`;
}
}
+const dummyLine = new Line('', 0, '', '', 0, '');
+
export class SourceMap {
private cwd: string;
+ public sourceDirs: string[] = [];
private lines: Line[] = new Array();
private variablesByCobol = new Map();
private variablesByC = new Map();
private attributes = new Map();
private dataStorages = new Map();
+ private loadedLibs = new Set();
private version: string;
- private lineBefore: string = "";
- private performLine: number = -1; // 002 - stepOver in routines with "perform"
+ private performLine: number = -1; // 002 - stepOver in routines with "perform"
private isVersion2_2_or_3_1_1: boolean = false;
- constructor(cwd: string, filesCobol: string[]) {
- this.cwd = fs.realpathSync(nativePathFromPath.resolve(cwd));
+ constructor(cwd: string, filesCobol: string[], sourceDirs: string[] = []) {
+ this.cwd = fs.realpathSync(path.resolve(cwd));
+ log.debug(`Source dirs: ${sourceDirs}`);
+ for (const cSourceDir of sourceDirs) {
+ log.debug(`Trying to resolve ${cSourceDir}`);
+ let resolved_path = path.resolve(this.cwd, cSourceDir);
+ log.debug(`Checking for ${resolved_path}`);
+ if (fs.existsSync(resolved_path)) {
+ this.sourceDirs.push(normalizeExistingFileName(fs.realpathSync(resolved_path)));
+ }
+ }
+
+ this.sourceDirs.push(this.cwd);
+
filesCobol.forEach(e => {
- this.parse(nativePath.basename(e.split('.').slice(0, -1).join('.') + '.c'));
+ let c_file = this.lookupSourceFile (cFile (e));
+ if (c_file) {
+ this.register (c_file);
+ }
});
+
+ log.info(`Resolved source dirs: ${this.sourceDirs}`);
+ }
+
+ private lookupSourceFile (file: string) : string | undefined {
+ for (const dir of this.sourceDirs) {
+ const filePath = path.join (dir, file);
+ if (fs.existsSync (filePath)) {
+ return normalizeExistingFileName (filePath);
+ }
+ }
+ return;
+ }
+
+ public addLib (libFile: string) : boolean {
+ if (this.loadedLibs.has (libFile)) {
+ return false;
+ }
+ this.loadedLibs.add (libFile);
+ log.info(`Loading ${libFile}`);
+ const c = this.lookupSourceFile (cFile (libFile));
+ if (c) {
+ this.register (c);
+ return true;
+ }
+ return false;
}
- private parse(fileC: string): void {
+ public remLib (libFile: string) : boolean {
+ if (!this.loadedLibs.has (libFile)) {
+ return false;
+ }
+ this.loadedLibs.delete (libFile);
+ log.info(`Unloading ${libFile}`);
+ // Note: assumes there was no FS changes in the meantime.
+ // Cleaner way would be to record a mapping between libs and source files.
+ const c = this.lookupSourceFile (cFile (libFile));
+ if (c) {
+ this.unregister (c);
+ return true;
+ }
+ return false;
+ }
+
+ private unregister (givenFileC: string) : void {
+ const [fileC, cleanedFile] = this.ensureAbsolute (givenFileC);
+ this.lines = this.lines.filter (line => line.rootFileC != fileC) ?? [];
+ for (const [k, v] of this.variablesByC) {
+ if (v.rootFileC == fileC) this.variablesByC.delete(k);
+ }
+ for (const [k, v] of this.variablesByCobol) {
+ if (v.rootFileC == fileC) this.variablesByCobol.delete(k);
+ }
+ }
+
+ private ensureAbsolute (fileC: string) : [string, string] {
let nat = fileC;
- if (!nativePath.isAbsolute(fileC)) {
- nat = nativePathFromPath.resolve(this.cwd, fileC);
- fileC = nativePath.resolve(this.cwd, fileC);
+ if (!path.isAbsolute(fileC)) {
+ fileC = path.resolve(this.cwd, fileC);
}
- const basename = nativePath.basename(fileC);
+ const basename = path.basename(fileC);
const cleanedFile = basename.substring(0, basename.lastIndexOf(".c"));
- let lineNumber = 0;
+ return [normalizeExistingFileName(fileC), cleanedFile];
+ }
+
+ private register (givenFileC: string) : void {
+ void this.parse (givenFileC); // just parse the file.
+ }
+
+ private parse (givenFileC: string,
+ prevLine: string | undefined = undefined,
+ rootFileC: string | undefined = undefined,
+ functionName: string | undefined = undefined) : string {
+ log.debug(`Parsing ${givenFileC}`);
+
+ const [fileC, cleanedFile] = this.ensureAbsolute (givenFileC);
+ rootFileC = rootFileC ?? fileC;
- const reader = new readline(process.platform === "win32" ? nat : fileC);
+ let lineNumber = 0;
let row: false | Buffer;
let fileCobol: string;
- let functionName: string;
+
+ const reader = new readline(fileC);
while (row = reader.next()) {
const line = row.toString();
let match = fileCobolRegex.exec(line);
if (match) {
- if (!nativePath.isAbsolute(match[1])) {
- fileCobol = nativePath.resolve(this.cwd, match[1]);
+ const filename = match[1];
+ const filebase = path.basename (filename);
+ if (!path.isAbsolute(filename)) {
+ fileCobol = path.resolve(path.dirname (fileC), filename);
+ if (!fs.existsSync(fileCobol)) {
+ fileCobol = path.resolve(path.dirname (fileC), filebase);
+ }
+ if (!fs.existsSync(fileCobol)) {
+ fileCobol = this.lookupSourceFile (filename);
+ }
} else {
- fileCobol = match[1];
+ fileCobol = filename;
}
+ if (!fs.existsSync(fileCobol)) {
+ fileCobol = this.lookupSourceFile (filebase);
+ }
+ fileCobol = normalizeExistingFileName (fileCobol);
}
match = functionRegex.exec(line);
if (match) {
- functionName = match[1].toLowerCase() + "_";
+ functionName = cobEncodeInvalidChars(match[1]).toLowerCase() + "_";
}
match = procedureRegex.exec(line);
if (match && !match[2]) {
- if (this.lines.length > 0 && fileNameCompare(this.lines[this.lines.length - 1].fileCobol, fileCobol) && this.lines[this.lines.length - 1].lineCobol === parseInt(match[1])) {
+ if (this.lines.length > 0 && this.lines[this.lines.length - 1].fileCobol === fileCobol && this.lines[this.lines.length - 1].lineCobol === parseInt(match[1])) {
this.lines.pop();
}
- if(subroutineRegex.exec(line))
+ if(subroutineRegex.exec(line))
this.performLine=-2; // must find line of frame_ptr
- else
- this.performLine=-1;
- this.lines.push(new Line(fileCobol, parseInt(match[1]), fileC, lineNumber + 2));
+ else
+ this.performLine=-1;
+ this.lines.push(new Line(fileCobol, parseInt(match[1]), fileC, rootFileC, lineNumber + 2, functionName));
}
// fix new codegen
match = procedureFixRegex.exec(line);
- if (match && this.lines.length > 0) {
- let isOldFormat = fixOlderFormat.exec(this.lineBefore);
- if(this.isVersion2_2_or_3_1_1 || !isOldFormat){ // Is it in the old format?
+ if (match && this.lines.length > 0 && this.lines[this.lines.length - 1].functionName == functionName) {
+ let isOldFormat = fixOlderFormat.exec(prevLine);
+ if(this.lines[this.lines.length - 1].fileCobol === fileCobol && (this.isVersion2_2_or_3_1_1 || !isOldFormat)){ // Is it in the old format?
let line = this.lines.pop();
+ // this.log (`Fixing line: ${line.toString ()}`);
line.lineC = parseInt(match[1]);
+ // this.log (`New line: ${line.toString ()}`);
this.lines.push(line);
}
}
@@ -138,29 +260,44 @@ export class SourceMap {
if (match[3].startsWith("[")) {
size = parseInt(match[3].substring(1, match[3].length - 1));
}
- const dataStorage = new DebuggerVariable(match[4], match[2], functionName, new Attribute(null, VariableType[match[1]], 0, 0), size);
- this.dataStorages.set(`${functionName}.${dataStorage.cName}`, dataStorage);
- this.variablesByC.set(`${functionName}.${dataStorage.cName}`, dataStorage);
- this.variablesByCobol.set(`${functionName}.${dataStorage.cobolName.toUpperCase()}`, dataStorage);
+ const global = functionName === undefined;
+ const namespace = functionName ?? globalNamespace;
+ const cName = global ? `'${fileC}'::${match[2]}` : match[2];
+ const cobolName = match[4];
+ const cobolNAME = cobolName.toUpperCase();
+ const dataStorage = new DebuggerVariable(cobolName, cName, namespace, rootFileC, false, new Attribute(null, VariableType[match[1]], 0, 0), size);
+ this.dataStorages.set(`${namespace}.${dataStorage.cName}`, dataStorage);
+ this.variablesByC.set(`${namespace}.${dataStorage.cName}`, dataStorage);
+ const fullCobolName = global ? `'${fileC}'.${cobolNAME}` : cobolNAME;
+ this.variablesByCobol.set(`${namespace}.${fullCobolName}`, dataStorage);
}
match = fieldRegex.exec(line);
if (match) {
+ const global = functionName === undefined;
+ const namespace = functionName ?? globalNamespace;
+ const cName = global ? `'${fileC}'::${match[1]}` : match[1];
+ const cRecord = global ? `'${fileC}'::${match[3]}` : match[3];
const attribute = this.attributes.get(`${cleanedFile}.${match[4]}`);
- const dataStorage = this.dataStorages.get(`${functionName}.${match[3]}`);
- const field = new DebuggerVariable(match[5], match[1], functionName, attribute, parseInt(match[2]));
+ const dataStorage = this.dataStorages.get(`${namespace}.${cRecord}`);
+ const cobolName = match[5];
+ const field = new DebuggerVariable(cobolName, cName, namespace, rootFileC, true, attribute, parseInt(match[2]));
- this.variablesByC.set(`${functionName}.${field.cName}`, field);
+ this.variablesByC.set(`${namespace}.${field.cName}`, field);
+ let storageKey = namespace;
if (dataStorage) {
dataStorage.addChild(field);
- this.variablesByCobol.set(`${functionName}.${dataStorage.cobolName.toUpperCase()}.${field.cobolName.toUpperCase()}`, field);
- } else {
- this.variablesByCobol.set(`${functionName}.${field.cobolName.toUpperCase()}`, field);
+ const cobolNAME = dataStorage.cobolName.toUpperCase();
+ const fullCobolStorage = global ? `'${fileC}'.${cobolNAME}` : cobolNAME;
+ storageKey = `${namespace}.${fullCobolStorage}`;
}
+ this.variablesByCobol.set(`${storageKey}.${field.cobolName.toUpperCase()}`, field);
}
match = fileIncludeRegex.exec(line);
if (match) {
- this.parse(match[1]);
+ // Note: we assume the included file is in the same dir as the current file.
+ const filename = path.resolve (path.dirname (rootFileC), match[1]);
+ functionName = this.parse(filename, prevLine, rootFileC, functionName);
}
match = versionRegex.exec(line);
if (match) {
@@ -174,10 +311,12 @@ export class SourceMap {
line.endPerformLine = lineNumber+1;
this.lines.push(line);
}
- }
- this.lineBefore = line;
+ }
lineNumber++;
+ prevLine = line;
}
+
+ return functionName;
}
public getVariablesByC(): IterableIterator {
@@ -196,6 +335,34 @@ export class SourceMap {
return this.variablesByC.size;
}
+ public findVariableByC(functionName: string, cName: string): DebuggerVariable {
+ for (const key of this.variablesByC.keys()) {
+ if (key.startsWith(`${functionName}.`) && key.endsWith(`.${cName}`)) {
+ return this.variablesByC.get(key);
+ }
+ }
+ return null;
+ }
+
+ public findGlobalByC(cName: string): DebuggerVariable {
+ for (const key of this.variablesByC.keys()) {
+ if (key.startsWith(globalNamespacePrefix) && key.endsWith(`.${cName}`)) {
+ return this.variablesByC.get(key);
+ }
+ }
+ return null;
+ }
+
+ public globalCVariables() {
+ return Array.from(this.variablesByC.entries())
+ .filter(([k,_]) => k.startsWith(globalNamespacePrefix))
+ .map(([_,v]) => v);
+ }
+
+ public getGlobalByC(fileC: string, varC: string): DebuggerVariable {
+ return this.getVariableByC(`${globalNamespacePrefix}'${fileC}'::${varC}`);
+ }
+
public getVariableByC(varC: string): DebuggerVariable {
if (this.variablesByC.has(varC)) {
return this.variablesByC.get(varC);
@@ -205,7 +372,19 @@ export class SourceMap {
public findVariableByCobol(functionName: string, name: string): DebuggerVariable {
for (const key of this.variablesByCobol.keys()) {
- if (key.startsWith(functionName) && key.endsWith(`.${name.toUpperCase()}`)) {
+ if (key.startsWith(`${functionName}.`) && key.endsWith(`.${name.toUpperCase()}`)) {
+ return this.variablesByCobol.get(key);
+ }
+ }
+ return null;
+ }
+
+ public findGlobalByCobol(name: string, cFile: string = undefined): DebuggerVariable {
+ const prefix = cFile === undefined
+ ? globalNamespacePrefix
+ : `${globalNamespacePrefix}'${cFile}'.`;
+ for (const key of this.variablesByCobol.keys()) {
+ if (key.startsWith(prefix) && key.endsWith(`.${name.toUpperCase()}`)) {
return this.variablesByCobol.get(key);
}
}
@@ -218,8 +397,8 @@ export class SourceMap {
public hasLineCobol(fileC: string, lineC: number): boolean {
if(!fileC || !lineC) return false;
- if (!nativePath.isAbsolute(fileC)) {
- fileC = nativePath.join(this.cwd, fileC);
+ if (!path.isAbsolute(fileC)) {
+ fileC = path.join(this.cwd, fileC);
}
return this.lines.some(e => e.fileC === fileC && e.lineC === lineC);
}
@@ -227,41 +406,43 @@ export class SourceMap {
// 002 - stepOver in routines with "perform"
public hasLineSubroutine(fileC: string, lineC: number): number {
if(!fileC || !lineC) return -1;
- if (!nativePath.isAbsolute(fileC)) {
- fileC = nativePath.join(this.cwd, fileC);
+ if (!path.isAbsolute(fileC)) {
+ fileC = path.join(this.cwd, fileC);
}
- let line = this.lines.find(e => e.fileC === fileC && e.lineC === lineC) ?? new Line('', 0, '', 0);
- return line.endPerformLine;
+ return this.lines.find(e => e.fileC === fileC && e.lineC === lineC)?.endPerformLine ?? -1;
}
// 002
public hasLineC(fileCobol: string, lineCobol: number): boolean {
- if (!nativePath.isAbsolute(fileCobol)) {
- fileCobol = nativePath.join(this.cwd, fileCobol);
+ if (!path.isAbsolute(fileCobol)) {
+ fileCobol = path.join(this.cwd, fileCobol);
}
- return this.lines.some(e => fileNameCompare(e.fileCobol, fileCobol) && e.lineCobol === lineCobol);
+ return this.lines.some(e => e.fileCobol === fileCobol && e.lineCobol === lineCobol);
}
public getLineC(fileCobol: string, lineCobol: number): Line {
- if (!nativePath.isAbsolute(fileCobol)) {
- fileCobol = nativePath.join(this.cwd, fileCobol);
+ if (!path.isAbsolute(fileCobol)) {
+ fileCobol = path.join(this.cwd, fileCobol);
}
- return this.lines.find(e => fileNameCompare(e.fileCobol, fileCobol) && e.lineCobol === lineCobol) ?? new Line('', 0, '', 0);
+ return this.lines.find(e => e.fileCobol === fileCobol && e.lineCobol === lineCobol) ?? dummyLine;
}
public getLineCobol(fileC: string, lineC: number): Line {
- if (!nativePath.isAbsolute(fileC)) {
- fileC = nativePath.join(this.cwd, fileC);
+ if (!fileC) {
+ return dummyLine;
}
- return this.lines.find(e => e.fileC === fileC && e.lineC === lineC) ?? new Line('', 0, '', 0);
+ if (!path.isAbsolute(fileC)) {
+ fileC = path.join(this.cwd, fileC);
+ }
+ return this.lines.find(e => e.fileC === fileC && e.lineC === lineC) ?? dummyLine;
}
public getVersion(): string {
return this.version;
}
- public toString(): string {
- let out = `SourceMap created: lines ${this.lines.length}, vars ${this.variablesByC.size}\n`;
+ public toString(event = "created"): string {
+ let out = `SourceMap ${event}: lines ${this.lines.length}, vars ${this.variablesByC.size}\n`;
this.lines.forEach(e => {
out += e.toString() + "\n";
@@ -279,10 +460,3 @@ export class SourceMap {
}
}
-
-function fileNameCompare(fileNameOne: string, fileNameTwo: string): boolean {
- if(process.platform === "win32")
- return fileNameOne.toUpperCase() === fileNameTwo.toUpperCase();
- else
- return fileNameOne === fileNameTwo;
-}
diff --git a/src/parser.mi2.ts b/src/parser.mi2.ts
index 876005c..fbf7ddc 100644
--- a/src/parser.mi2.ts
+++ b/src/parser.mi2.ts
@@ -42,7 +42,7 @@ function parseString(str: string): string {
bufIndex += ret.write('\v', bufIndex);
else if (str[i] == '0')
bufIndex += ret.write('\0', bufIndex);
- else if (m = octalMatch.exec(str.substr(i))) {
+ else if (m = octalMatch.exec(str.substring(i))) {
ret.writeUInt8(parseInt(m[0], 8), bufIndex++);
i += 2;
} else
@@ -60,10 +60,15 @@ function parseString(str: string): string {
return ret.slice(0, bufIndex).toString("utf8");
}
+export type ResultRecords = {
+ resultClass: string;
+ results: [string, unknown][]
+}
+
export class MINode implements MIInfo {
token: number;
outOfBandRecord: { isStream: boolean, type: string, asyncClass: string, output: [string, any][], content: string }[];
- resultRecords: { resultClass: string, results: [string, any][] };
+ resultRecords: ResultRecords;
constructor(token: number, info: { isStream: boolean, type: string, asyncClass: string, output: [string, any][], content: string }[], result: { resultClass: string, results: [string, any][] }) {
this.token = token;
@@ -95,7 +100,7 @@ export class MINode implements MIInfo {
do {
let target = pathRegex.exec(path);
if (target) {
- path = path.substr(target[0].length);
+ path = path.substring(target[0].length);
if (current.length && typeof current != "string") {
const found = [];
for (const element of current) {
@@ -111,11 +116,11 @@ export class MINode implements MIInfo {
} else return undefined;
} else if (path[0] == '@') {
current = [current];
- path = path.substr(1);
+ path = path.substring(1);
} else {
target = indexRegex.exec(path);
if (target) {
- path = path.substr(target[0].length);
+ path = path.substring(target[0].length);
const i = parseInt(target[1]);
if (current.length && typeof current != "string" && i >= 0 && i < current.length) {
current = current[i];
@@ -166,7 +171,7 @@ export function parseMI(output: string): MINode {
return "";
let stringEnd = 1;
let inString = true;
- let remaining = output.substr(1);
+ let remaining = output.substring(1);
let escaped = false;
while (inString) {
if (escaped)
@@ -176,16 +181,16 @@ export function parseMI(output: string): MINode {
else if (remaining[0] == '"')
inString = false;
- remaining = remaining.substr(1);
+ remaining = remaining.substring(1);
stringEnd++;
}
let str;
try {
- str = parseString(output.substr(0, stringEnd));
+ str = parseString(output.substring(0, stringEnd));
} catch (e) {
- str = output.substr(0, stringEnd);
+ str = output.substring(0, stringEnd);
}
- output = output.substr(stringEnd);
+ output = output.substring(stringEnd);
return str;
};
@@ -196,9 +201,9 @@ export function parseMI(output: string): MINode {
return undefined;
const oldContent = output;
const canBeValueList = output[0] == '[';
- output = output.substr(1);
+ output = output.substring(1);
if (output[0] == '}' || output[0] == ']') {
- output = output.substr(1); // ] or }
+ output = output.substring(1); // ] or }
return [];
}
if (canBeValueList) {
@@ -209,7 +214,7 @@ export function parseMI(output: string): MINode {
const remaining = output;
while ((value = parseCommaValue()) !== undefined)
values.push(value);
- output = output.substr(1); // ]
+ output = output.substring(1); // ]
return values;
}
}
@@ -219,7 +224,7 @@ export function parseMI(output: string): MINode {
results.push(result);
while (result = parseCommaResult())
results.push(result);
- output = output.substr(1); // }
+ output = output.substring(1); // }
return results;
}
output = (canBeValueList ? '[' : '{') + output;
@@ -239,7 +244,7 @@ export function parseMI(output: string): MINode {
const variableMatch = variableRegex.exec(output);
if (!variableMatch)
return undefined;
- output = output.substr(variableMatch[0].length + 1);
+ output = output.substring(variableMatch[0].length + 1);
const variable = variableMatch[1];
return [variable, parseValue()];
};
@@ -247,28 +252,28 @@ export function parseMI(output: string): MINode {
parseCommaValue = () => {
if (output[0] != ',')
return undefined;
- output = output.substr(1);
+ output = output.substring(1);
return parseValue();
};
parseCommaResult = () => {
if (output[0] != ',')
return undefined;
- output = output.substr(1);
+ output = output.substring(1);
return parseResult();
};
let match = undefined;
while (match = outOfBandRecordRegex.exec(output)) {
- output = output.substr(match[0].length);
+ output = output.substring(match[0].length);
if (match[1] && token === undefined && match[1] !== "undefined") {
token = parseInt(match[1]);
}
if (match[2]) {
const classMatch = asyncClassRegex.exec(output);
- output = output.substr(classMatch[1].length);
+ output = output.substring(classMatch[1].length);
const asyncRecord = {
isStream: false,
type: asyncRecordType[match[2]],
@@ -292,7 +297,7 @@ export function parseMI(output: string): MINode {
}
if (match = resultRecordRegex.exec(output)) {
- output = output.substr(match[0].length);
+ output = output.substring(match[0].length);
if (match[1] && token === undefined) {
token = parseInt(match[1]);
}
diff --git a/src/settings.ts b/src/settings.ts
index 39e9099..55b66bd 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -1,46 +1,29 @@
import * as vscode from 'vscode';
export class DebuggerSettings {
- private readonly extensionSettings: vscode.WorkspaceConfiguration;
+ private readonly debugSettings: vscode.WorkspaceConfiguration;
constructor() {
- this.extensionSettings = vscode.workspace.getConfiguration("Cobol_Debugger");
- }
-
- private getWithFallback(settings: vscode.WorkspaceConfiguration, section: string): T {
- const info: any = settings.inspect(section);
- if (info.workspaceFolderValue !== undefined) {
- return info.workspaceFolderValue;
- } else if (info.workspaceValue !== undefined) {
- return info.workspaceValue;
- } else if (info.globalValue !== undefined) {
- return info.globalValue;
+ this.debugSettings = vscode.workspace.getConfiguration("superbol.debugger");
+ if (!this.debugSettings.has("gdbPath")) {
+ this.debugSettings = vscode.workspace.getConfiguration("superbol-vscode-debug");
}
- return info.defaultValue;
}
public get displayVariableAttributes(): boolean {
- return this.getWithFallback(this.extensionSettings, "display_variable_attributes");
- }
-
- public get cwd(): string {
- return this.getWithFallback(this.extensionSettings, "cwd");
- }
-
- public get target(): string {
- return this.getWithFallback(this.extensionSettings, "target");
+ return this.debugSettings.get("displayVariableAttributes");
}
- public get gdbpath(): string {
- return this.getWithFallback(this.extensionSettings, "gdbpath");
+ public get gdbPath(): string {
+ return this.debugSettings.get("gdbPath");
}
- public get cobcpath(): string {
- return this.getWithFallback(this.extensionSettings, "cobcpath");
+ public get libcobPath(): string {
+ return this.debugSettings.get("libcobPath");
}
- public get gdbtty(): string {
- return this.getWithFallback(this.extensionSettings, "gdbtty");
+ public get cobcrunPath(): string {
+ return this.debugSettings.get("cobcrunPath");
}
}
diff --git a/test/resources/distinct-sources/c/subsubsample.c b/test/resources/distinct-sources/c/subsubsample.c
new file mode 100644
index 0000000..6356571
--- /dev/null
+++ b/test/resources/distinct-sources/c/subsubsample.c
@@ -0,0 +1,232 @@
+/* Generated by cobc 3.2.0 */
+/* Generated from distinct-sources/cbl/subsubsample.cbl */
+/* Generated at Nov 27 2025 11:03:15 */
+/* GnuCOBOL build date Sep 23 2025 17:57:37 */
+/* GnuCOBOL package date Jul 28 2023 17:02:56 UTC */
+/* Compile command cobc -x -g -save-temps=distinct-sources/c distinct-sources/cbl/subsubsample.cbl */
+
+#include /* for memcpy, memcmp and friends */
+#define COB_KEYWORD_INLINE __inline
+#include
+
+#define COB_SOURCE_FILE "distinct-sources/cbl/subsubsample.cbl"
+#define COB_PACKAGE_VERSION "3.2"
+#define COB_PATCH_LEVEL 0
+#define COB_MODULE_FORMATTED_DATE "Nov 27 2025 11:03:15"
+#define COB_MODULE_DATE 20251127
+#define COB_MODULE_TIME 110315
+
+/* Global variables */
+#include "subsubsample.c.h"
+
+/* Function prototypes */
+
+static int subsubsample ();
+static int subsubsample_ (const int);
+static void subsubsample_module_init (cob_module *module);
+
+/* Main function */
+int
+main (int argc, char **argv)
+{
+ cob_init (argc, argv);
+ cob_stop_run (subsubsample ());
+}
+
+/* Functions */
+
+static void gc_module_so_init () __attribute__ ((constructor));
+static void gc_module_so_init ()
+{
+ cob_check_version (COB_SOURCE_FILE, COB_PACKAGE_VERSION, COB_PATCH_LEVEL);
+}
+
+/* PROGRAM-ID 'subsubsample' */
+
+/* ENTRY 'subsubsample' */
+
+static int
+subsubsample ()
+{
+ return subsubsample_ (0);
+}
+
+static int
+subsubsample_ (const int entry)
+{
+ /* Program local variables */
+ #include "subsubsample.c.l.h"
+
+ /* Start of function code */
+
+ /* CANCEL callback */
+ if (unlikely(entry < 0)) {
+ if (entry == -10)
+ goto P_dump;
+ if (entry == -20)
+ goto P_clear_decimal;
+ goto P_cancel;
+ }
+
+ /* Check initialized, check module allocated, */
+ /* set global pointer, */
+ /* push module stack, save call parameter count */
+ if (cob_module_global_enter (&module, &cob_glob_ptr, 0, entry, 0))
+ return -1;
+
+ /* Set address of module parameter list */
+ module->cob_procedure_params = cob_procedure_params;
+
+ /* Set frame stack pointer */
+ frame_ptr = frame_stack;
+ frame_ptr->perform_through = 0;
+ frame_ptr->return_address_ptr = &&P_cgerror;
+ frame_overflow = frame_ptr + 255 - 1;
+
+ /* Initialize rest of program */
+ if (unlikely(initialized == 0)) {
+ goto P_initialize;
+ }
+ P_ret_initialize:
+
+ /* Increment module active */
+ module->module_active++;
+
+ /* Entry dispatch */
+ goto l_2;
+
+ /* PROCEDURE DIVISION */
+
+ /* Line: 13 : Entry subsubsample : distinct-sources/cbl/subsubsample.cbl */
+ l_2:;
+#line 13 "distinct-sources/cbl/subsubsample.cbl"
+ ENTRY_SUBSUBSAMPLE: cob_nop ();
+#line 105 "subsubsample.c"
+
+ /* Line: 13 : DISPLAY : distinct-sources/cbl/subsubsample.cbl */
+#line 13 "distinct-sources/cbl/subsubsample.cbl"
+ cob_nop ();
+#line 110 "subsubsample.c"
+ cob_display (0, 1, 1, &f_22);
+
+ /* Program exit */
+
+ exit_program:
+
+ /* Decrement module active count */
+ if (module->module_active) {
+ module->module_active--;
+ }
+
+ /* Pop module stack */
+ cob_module_leave (module);
+
+ /* Program return */
+ return b_2;
+ P_cgerror:
+ cob_fatal_error (COB_FERROR_CODEGEN);
+
+
+ /* Program initialization */
+ P_initialize:
+
+ cob_module_path = cob_glob_ptr->cob_main_argv0;
+
+ subsubsample_module_init (module);
+
+ module->collating_sequence = NULL;
+ module->crt_status = NULL;
+ module->cursor_pos = NULL;
+ module->xml_code = NULL;
+ module->xml_event = NULL;
+ module->xml_information = NULL;
+ module->xml_namespace = NULL;
+ module->xml_namespace_prefix = NULL;
+ module->xml_nnamespace = NULL;
+ module->xml_nnamespace_prefix = NULL;
+ module->xml_ntext = NULL;
+ module->xml_text = NULL;
+ module->json_code = NULL;
+ module->json_status = NULL;
+
+ /* Initialize cancel callback */
+ cob_set_cancel (module);
+
+ /* Initialize WORKING-STORAGE */
+ /* initialize field RETURN-CODE */
+ b_2 = 0;
+
+ /* initialize field WS-GROUP-NUMERIC */
+#line 7 "distinct-sources/cbl/subsubsample.cbl"
+ cob_nop ();
+#line 163 "subsubsample.c"
+ memset (b_17, (unsigned char)'0', 12);
+ /* initialize field WS-GROUP-ALPHABETIC */
+#line 10 "distinct-sources/cbl/subsubsample.cbl"
+ cob_nop ();
+#line 168 "subsubsample.c"
+ memset (b_17 + 12, (unsigned char)' ', 11);
+
+
+ if (0 == 1) goto P_cgerror;
+ initialized = 1;
+ goto P_ret_initialize;
+
+ P_dump:
+ return 0;
+
+
+ /* CANCEL callback handling */
+ P_cancel:
+
+ if (!initialized)
+ return 0;
+ if (module && module->module_active)
+ cob_fatal_error (COB_FERROR_CANCEL);
+
+ initialized = 0;
+
+ P_clear_decimal:
+ return 0;
+
+}
+
+/* End PROGRAM-ID 'subsubsample' */
+
+/* Initialize module structure for subsubsample */
+static void subsubsample_module_init (cob_module *module)
+{
+ module->module_name = "subsubsample";
+ module->module_formatted_date = COB_MODULE_FORMATTED_DATE;
+ module->module_source = COB_SOURCE_FILE;
+ module->gc_version = COB_PACKAGE_VERSION;
+ module->module_entry.funcptr = (void *(*)())subsubsample;
+ module->module_cancel.funcptr = (void *(*)())subsubsample_;
+ module->module_ref_count = NULL;
+ module->module_path = &cob_module_path;
+ module->module_active = 0;
+ module->module_date = COB_MODULE_DATE;
+ module->module_time = COB_MODULE_TIME;
+ module->module_type = 0;
+ module->module_param_cnt = 0;
+ module->ebcdic_sign = 0;
+ module->decimal_point = '.';
+ module->currency_symbol = '$';
+ module->numeric_separator = ',';
+ module->flag_filename_mapping = 1;
+ module->flag_binary_truncate = 1;
+ module->flag_pretty_display = 1;
+ module->flag_host_sign = 0;
+ module->flag_no_phys_canc = 1;
+ module->flag_main = 1;
+ module->flag_fold_call = 0;
+ module->flag_exit_program = 0;
+ module->flag_debug_trace = 0;
+ module->flag_dump_ready = 0;
+ module->xml_mode = 1;
+ module->module_stmt = 0;
+ module->module_sources = NULL;
+}
+
+/* End functions */
+
diff --git a/test/resources/distinct-sources/c/subsubsample.c.h b/test/resources/distinct-sources/c/subsubsample.c.h
new file mode 100644
index 0000000..53680ba
--- /dev/null
+++ b/test/resources/distinct-sources/c/subsubsample.c.h
@@ -0,0 +1,21 @@
+/* Generated by cobc 3.2.0 */
+/* Generated from distinct-sources/cbl/subsubsample.cbl */
+/* Generated at Nov 27 2025 11:03:15 */
+/* GnuCOBOL build date Sep 23 2025 17:57:37 */
+/* GnuCOBOL package date Jul 28 2023 17:02:56 UTC */
+/* Compile command cobc -x -g -save-temps=distinct-sources/c distinct-sources/cbl/subsubsample.cbl */
+
+
+/* Module path */
+static const char *cob_module_path = NULL;
+
+/* Number of call parameters */
+static int cob_call_params = 0;
+
+/* Attributes */
+
+static const cob_field_attr a_1 = {0x21, 0, 0, 0x0000, NULL};
+
+
+#define cob_nop if (!module) cob_nop
+
diff --git a/test/resources/distinct-sources/c/subsubsample.c.l.h b/test/resources/distinct-sources/c/subsubsample.c.l.h
new file mode 100644
index 0000000..6564b87
--- /dev/null
+++ b/test/resources/distinct-sources/c/subsubsample.c.l.h
@@ -0,0 +1,49 @@
+/* Generated by cobc 3.2.0 */
+/* Generated from distinct-sources/cbl/subsubsample.cbl */
+/* Generated at Nov 27 2025 11:03:15 */
+/* GnuCOBOL build date Sep 23 2025 17:57:37 */
+/* GnuCOBOL package date Jul 28 2023 17:02:56 UTC */
+/* Compile command cobc -x -g -save-temps=distinct-sources/c distinct-sources/cbl/subsubsample.cbl */
+
+/* Program local variables for 'subsubsample' */
+
+/* Module initialization indicator */
+static unsigned int initialized = 0;
+
+/* Module structure pointer */
+static cob_module *module = NULL;
+
+/* Global variable pointer */
+cob_global *cob_glob_ptr;
+
+
+/* LINKAGE SECTION (Items not referenced by USING clause) */
+static unsigned char *b_9 = NULL; /* XML-NAMESPACE */
+static unsigned char *b_10 = NULL; /* XML-NAMESPACE-PREFIX */
+static unsigned char *b_11 = NULL; /* XML-NNAMESPACE */
+static unsigned char *b_12 = NULL; /* XML-NNAMESPACE-PREFIX */
+static unsigned char *b_13 = NULL; /* XML-NTEXT */
+static unsigned char *b_14 = NULL; /* XML-TEXT */
+
+
+/* Call parameters */
+cob_field *cob_procedure_params[1];
+
+/* Perform frame stack */
+struct cob_frame *frame_overflow;
+struct cob_frame *frame_ptr;
+struct cob_frame frame_stack[255];
+
+
+/* Data storage */
+static int b_2; /* RETURN-CODE */
+static cob_u8_t b_17[23] __attribute__((aligned)); /* WS-GROUP */
+
+/* End of local data storage */
+
+
+/* Fields (local) */
+static cob_field f_22 = {5, b_17 + 18, &a_1}; /* WS-GROUP-ALPHANUMERIC */
+
+/* End of fields */
+
diff --git a/test/resources/distinct-sources/c/subsubsample.i b/test/resources/distinct-sources/c/subsubsample.i
new file mode 100644
index 0000000..c8277bf
--- /dev/null
+++ b/test/resources/distinct-sources/c/subsubsample.i
@@ -0,0 +1,15 @@
+#line 1 "distinct-sources/cbl/subsubsample.cbl"
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. subsubsample.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 WS-GROUP.
+ 05 WS-GROUP-NUMERIC PIC 9(2).
+ 05 WS-GROUP-SIGNED-DECIMAL PIC S9(3)V9(2).
+ 05 WS-GROUP-UNSIGNED-DECIMAL PIC 9(3)V9(2).
+ 05 WS-GROUP-ALPHABETIC PIC A(6).
+ 05 WS-GROUP-ALPHANUMERIC PIC X(5).
+ PROCEDURE DIVISION.
+ DISPLAY WS-GROUP-ALPHANUMERIC.
+ END PROGRAM subsubsample.
diff --git a/test/resources/distinct-sources/c/subsubsample.o b/test/resources/distinct-sources/c/subsubsample.o
new file mode 100644
index 0000000..01687d8
Binary files /dev/null and b/test/resources/distinct-sources/c/subsubsample.o differ
diff --git a/test/resources/distinct-sources/cbl/subsubsample.cbl b/test/resources/distinct-sources/cbl/subsubsample.cbl
new file mode 100644
index 0000000..b831948
--- /dev/null
+++ b/test/resources/distinct-sources/cbl/subsubsample.cbl
@@ -0,0 +1,14 @@
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. subsubsample.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 WS-GROUP.
+ 05 WS-GROUP-NUMERIC PIC 9(2).
+ 05 WS-GROUP-SIGNED-DECIMAL PIC S9(3)V9(2).
+ 05 WS-GROUP-UNSIGNED-DECIMAL PIC 9(3)V9(2).
+ 05 WS-GROUP-ALPHABETIC PIC A(6).
+ 05 WS-GROUP-ALPHANUMERIC PIC X(5).
+ PROCEDURE DIVISION.
+ DISPLAY WS-GROUP-ALPHANUMERIC.
+ END PROGRAM subsubsample.
diff --git a/test/resources/globals.c b/test/resources/globals.c
new file mode 100644
index 0000000..c3bfcd0
--- /dev/null
+++ b/test/resources/globals.c
@@ -0,0 +1,310 @@
+/* Generated by cobc 3.2.0 */
+/* Generated from globals.cbl */
+/* Generated at Dec 09 2025 15:02:41 */
+/* GnuCOBOL build date Sep 23 2025 17:57:37 */
+/* GnuCOBOL package date Jul 28 2023 17:02:56 UTC */
+/* Compile command cobc -x -g globals.cbl */
+
+#include /* for memcpy, memcmp and friends */
+#define COB_KEYWORD_INLINE __inline
+#include
+
+#define COB_SOURCE_FILE "globals.cbl"
+#define COB_PACKAGE_VERSION "3.2"
+#define COB_PATCH_LEVEL 0
+#define COB_MODULE_FORMATTED_DATE "Dec 09 2025 15:02:41"
+#define COB_MODULE_DATE 20251209
+#define COB_MODULE_TIME 150241
+
+/* Global variables */
+#include "globals.c.h"
+
+/* Function prototypes */
+
+static int globals ();
+static int globals_ (const int);
+static void globals_module_init (cob_module *module);
+
+/* Main function */
+int
+main (int argc, char **argv)
+{
+ cob_init (argc, argv);
+ cob_stop_run (globals ());
+}
+
+/* Functions */
+
+static void gc_module_so_init () __attribute__ ((constructor));
+static void gc_module_so_init ()
+{
+ cob_check_version (COB_SOURCE_FILE, COB_PACKAGE_VERSION, COB_PATCH_LEVEL);
+}
+
+/* PROGRAM-ID 'globals' */
+
+/* ENTRY 'globals' */
+
+static int
+globals ()
+{
+ return globals_ (0);
+}
+
+static int
+globals_ (const int entry)
+{
+ /* Program local variables */
+ #include "globals.c.l.h"
+
+ /* Start of function code */
+
+ /* CANCEL callback */
+ if (unlikely(entry < 0)) {
+ if (entry == -10)
+ goto P_dump;
+ if (entry == -20)
+ goto P_clear_decimal;
+ goto P_cancel;
+ }
+
+ /* Check initialized, check module allocated, */
+ /* set global pointer, */
+ /* push module stack, save call parameter count */
+ if (cob_module_global_enter (&module, &cob_glob_ptr, 0, entry, 0))
+ return -1;
+
+ /* Set address of module parameter list */
+ module->cob_procedure_params = cob_procedure_params;
+
+ /* Set frame stack pointer */
+ frame_ptr = frame_stack;
+ frame_ptr->perform_through = 0;
+ frame_ptr->return_address_ptr = &&P_cgerror;
+ frame_overflow = frame_ptr + 255 - 1;
+
+ /* Initialize rest of program */
+ if (unlikely(initialized == 0)) {
+ goto P_initialize;
+ }
+ P_ret_initialize:
+
+ /* Increment module active */
+ module->module_active++;
+
+ /* Entry dispatch */
+ goto l_2;
+
+ /* PROCEDURE DIVISION */
+
+ /* Line: 14 : Entry globals : globals.cbl */
+ l_2:;
+#line 14 "globals.cbl"
+ ENTRY_GLOBALS: cob_nop ();
+#line 105 "globals.c"
+
+ /* Line: 14 : MOVE : globals.cbl */
+#line 14 "globals.cbl"
+ cob_nop ();
+#line 110 "globals.c"
+ *(b_18) = 51;
+
+ /* Line: 15 : DISPLAY : globals.cbl */
+#line 15 "globals.cbl"
+ cob_nop ();
+#line 116 "globals.c"
+ cob_display (0, 1, 1, &f_17);
+
+ /* Line: 16 : DISPLAY : globals.cbl */
+#line 16 "globals.cbl"
+ cob_nop ();
+#line 122 "globals.c"
+ cob_display (0, 1, 1, &f_23);
+
+ /* Line: 17 : DISPLAY : globals.cbl */
+#line 17 "globals.cbl"
+ cob_nop ();
+#line 128 "globals.c"
+ cob_display (0, 1, 1, &f_19);
+
+ /* Line: 18 : DISPLAY : globals.cbl */
+#line 18 "globals.cbl"
+ cob_nop ();
+#line 134 "globals.c"
+ cob_display (0, 1, 1, &f_20);
+
+ /* Line: 19 : DISPLAY : globals.cbl */
+#line 19 "globals.cbl"
+ cob_nop ();
+#line 140 "globals.c"
+ cob_display (0, 1, 1, &f_22);
+
+ /* Line: 20 : DISPLAY : globals.cbl */
+#line 20 "globals.cbl"
+ cob_nop ();
+#line 146 "globals.c"
+ cob_display (0, 1, 1, &f_24);
+
+ /* Line: 21 : CALL : globals.cbl */
+#line 21 "globals.cbl"
+ cob_nop ();
+#line 152 "globals.c"
+ cob_glob_ptr->cob_call_params = 0;
+ cob_glob_ptr->cob_stmt_exception = 0;
+ if (unlikely((cob_glob_ptr->cob_exception_code & 0x0b00) == 0x0b00)) cob_glob_ptr->cob_exception_code = 0;
+ if (unlikely(call_globals2.funcvoid == NULL || cob_glob_ptr->cob_physical_cancel == 1))
+ {
+ call_globals2.funcvoid = cob_resolve_cobol ("globals2", 0, 1);
+ }
+ b_2 = ((int (*)(void))call_globals2.funcint) ();
+
+ /* Line: 22 : GOBACK : globals.cbl */
+#line 22 "globals.cbl"
+ cob_nop ();
+#line 165 "globals.c"
+ goto exit_program;
+
+ /* Program exit */
+
+ exit_program:
+
+ /* Decrement module active count */
+ if (module->module_active) {
+ module->module_active--;
+ }
+
+ /* Pop module stack */
+ cob_module_leave (module);
+
+ /* Program return */
+ return b_2;
+ P_cgerror:
+ cob_fatal_error (COB_FERROR_CODEGEN);
+
+
+ /* Program initialization */
+ P_initialize:
+
+ cob_module_path = cob_glob_ptr->cob_main_argv0;
+
+ globals_module_init (module);
+
+ module->collating_sequence = NULL;
+ module->crt_status = NULL;
+ module->cursor_pos = NULL;
+ module->xml_code = NULL;
+ module->xml_event = NULL;
+ module->xml_information = NULL;
+ module->xml_namespace = NULL;
+ module->xml_namespace_prefix = NULL;
+ module->xml_nnamespace = NULL;
+ module->xml_nnamespace_prefix = NULL;
+ module->xml_ntext = NULL;
+ module->xml_text = NULL;
+ module->json_code = NULL;
+ module->json_status = NULL;
+
+ /* Initialize cancel callback */
+ cob_set_cancel (module);
+
+ /* Initialize WORKING-STORAGE */
+ /* initialize field RETURN-CODE */
+ b_2 = 0;
+
+ /* initialize field FOO */
+#line 5 "globals.cbl"
+ cob_nop ();
+#line 218 "globals.c"
+ memset (b_17, (unsigned char)'0', 3);
+
+ /* initialize field BAR-1 */
+#line 7 "globals.cbl"
+ cob_nop ();
+#line 224 "globals.c"
+ *(cob_u8_ptr)(b_18) = (unsigned char)'0';
+ /* initialize field BAR-2 */
+#line 8 "globals.cbl"
+ cob_nop ();
+#line 229 "globals.c"
+ memset (b_18 + 1, (unsigned char)' ', 3);
+
+ /* initialize field BAZ-1 */
+#line 10 "globals.cbl"
+ cob_nop ();
+#line 235 "globals.c"
+ *(cob_u8_ptr)(b_21) = (unsigned char)' ';
+ /* initialize field BAZ-2 */
+#line 11 "globals.cbl"
+ cob_nop ();
+#line 240 "globals.c"
+ memset (b_21 + 1, 0x0, 2);
+
+ /* initialize field FXX */
+#line 12 "globals.cbl"
+ cob_nop ();
+#line 246 "globals.c"
+ memset (b_24, (unsigned char)'0', 3);
+
+
+ if (0 == 1) goto P_cgerror;
+ initialized = 1;
+ goto P_ret_initialize;
+
+ P_dump:
+ return 0;
+
+
+ /* CANCEL callback handling */
+ P_cancel:
+
+ if (!initialized)
+ return 0;
+ if (module && module->module_active)
+ cob_fatal_error (COB_FERROR_CANCEL);
+
+ initialized = 0;
+
+ P_clear_decimal:
+ return 0;
+
+}
+
+/* End PROGRAM-ID 'globals' */
+
+/* Initialize module structure for globals */
+static void globals_module_init (cob_module *module)
+{
+ module->module_name = "globals";
+ module->module_formatted_date = COB_MODULE_FORMATTED_DATE;
+ module->module_source = COB_SOURCE_FILE;
+ module->gc_version = COB_PACKAGE_VERSION;
+ module->module_entry.funcptr = (void *(*)())globals;
+ module->module_cancel.funcptr = (void *(*)())globals_;
+ module->module_ref_count = NULL;
+ module->module_path = &cob_module_path;
+ module->module_active = 0;
+ module->module_date = COB_MODULE_DATE;
+ module->module_time = COB_MODULE_TIME;
+ module->module_type = 0;
+ module->module_param_cnt = 0;
+ module->ebcdic_sign = 0;
+ module->decimal_point = '.';
+ module->currency_symbol = '$';
+ module->numeric_separator = ',';
+ module->flag_filename_mapping = 1;
+ module->flag_binary_truncate = 1;
+ module->flag_pretty_display = 1;
+ module->flag_host_sign = 0;
+ module->flag_no_phys_canc = 1;
+ module->flag_main = 1;
+ module->flag_fold_call = 0;
+ module->flag_exit_program = 0;
+ module->flag_debug_trace = 0;
+ module->flag_dump_ready = 0;
+ module->xml_mode = 1;
+ module->module_stmt = 0;
+ module->module_sources = NULL;
+}
+
+/* End functions */
+
diff --git a/test/resources/globals.c.h b/test/resources/globals.c.h
new file mode 100644
index 0000000..b970dee
--- /dev/null
+++ b/test/resources/globals.c.h
@@ -0,0 +1,43 @@
+/* Generated by cobc 3.2.0 */
+/* Generated from globals.cbl */
+/* Generated at Dec 09 2025 15:02:41 */
+/* GnuCOBOL build date Sep 23 2025 17:57:37 */
+/* GnuCOBOL package date Jul 28 2023 17:02:56 UTC */
+/* Compile command cobc -x -g globals.cbl */
+
+
+/* Module path */
+static const char *cob_module_path = NULL;
+
+/* Number of call parameters */
+static int cob_call_params = 0;
+
+/* Data storage */
+
+/* PROGRAM-ID : globals */
+static cob_u8_t b_17[3] __attribute__((aligned)); /* FOO */
+static cob_u8_t b_18[4] __attribute__((aligned)); /* BAR */
+
+/* End of data storage */
+
+
+/* Attributes */
+
+static const cob_field_attr a_1 = {0x10, 3, 0, 0x0000, NULL};
+static const cob_field_attr a_2 = {0x11, 4, 0, 0x0041, NULL};
+static const cob_field_attr a_3 = {0x10, 1, 0, 0x0000, NULL};
+static const cob_field_attr a_4 = {0x21, 0, 0, 0x0000, NULL};
+
+
+/* Fields */
+
+/* PROGRAM-ID : globals */
+static cob_field f_17 = {3, b_17, &a_1}; /* FOO */
+static cob_field f_19 = {1, b_18, &a_3}; /* BAR-1 */
+static cob_field f_20 = {3, b_18 + 1, &a_4}; /* BAR-2 */
+
+/* End of fields */
+
+
+#define cob_nop if (!module) cob_nop
+
diff --git a/test/resources/globals.c.l.h b/test/resources/globals.c.l.h
new file mode 100644
index 0000000..aa2b927
--- /dev/null
+++ b/test/resources/globals.c.l.h
@@ -0,0 +1,55 @@
+/* Generated by cobc 3.2.0 */
+/* Generated from globals.cbl */
+/* Generated at Dec 09 2025 15:02:41 */
+/* GnuCOBOL build date Sep 23 2025 17:57:37 */
+/* GnuCOBOL package date Jul 28 2023 17:02:56 UTC */
+/* Compile command cobc -x -g globals.cbl */
+
+/* Program local variables for 'globals' */
+
+/* Module initialization indicator */
+static unsigned int initialized = 0;
+
+/* Module structure pointer */
+static cob_module *module = NULL;
+
+/* Global variable pointer */
+cob_global *cob_glob_ptr;
+
+
+/* LINKAGE SECTION (Items not referenced by USING clause) */
+static unsigned char *b_9 = NULL; /* XML-NAMESPACE */
+static unsigned char *b_10 = NULL; /* XML-NAMESPACE-PREFIX */
+static unsigned char *b_11 = NULL; /* XML-NNAMESPACE */
+static unsigned char *b_12 = NULL; /* XML-NNAMESPACE-PREFIX */
+static unsigned char *b_13 = NULL; /* XML-NTEXT */
+static unsigned char *b_14 = NULL; /* XML-TEXT */
+
+
+/* Call pointers */
+static cob_call_union call_globals2;
+
+/* Call parameters */
+cob_field *cob_procedure_params[1];
+
+/* Perform frame stack */
+struct cob_frame *frame_overflow;
+struct cob_frame *frame_ptr;
+struct cob_frame frame_stack[255];
+
+
+/* Data storage */
+static int b_2; /* RETURN-CODE */
+static cob_u8_t b_21[3] __attribute__((aligned)); /* BAZ */
+static cob_u8_t b_24[3] __attribute__((aligned)); /* FXX */
+
+/* End of local data storage */
+
+
+/* Fields (local) */
+static cob_field f_22 = {1, b_21, &a_4}; /* BAZ-1 */
+static cob_field f_23 = {2, b_21 + 1, &a_2}; /* BAZ-2 */
+static cob_field f_24 = {3, b_24, &a_1}; /* FXX */
+
+/* End of fields */
+
diff --git a/test/resources/globals.cbl b/test/resources/globals.cbl
new file mode 100644
index 0000000..1369f6b
--- /dev/null
+++ b/test/resources/globals.cbl
@@ -0,0 +1,22 @@
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. globals.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 FOO PIC 999 GLOBAL.
+ 01 BAR GLOBAL.
+ 02 BAR-1 PIC 9.
+ 02 BAR-2 PIC XXX.
+ 01 BAZ.
+ 02 BAZ-1 PIC X.
+ 02 BAZ-2 BINARY-SHORT.
+ 77 FXX PIC 999.
+ PROCEDURE DIVISION.
+ MOVE 3 TO BAR-1
+ DISPLAY FOO
+ DISPLAY BAZ-2
+ DISPLAY BAR-1
+ DISPLAY BAR-2
+ DISPLAY BAZ-1
+ DISPLAY FXX
+ CALL "globals2"
+ GOBACK.
diff --git a/test/resources/globals.i b/test/resources/globals.i
new file mode 100644
index 0000000..4fae0f7
--- /dev/null
+++ b/test/resources/globals.i
@@ -0,0 +1,23 @@
+#line 1 "globals.cbl"
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. globals.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 FOO PIC 999 GLOBAL.
+ 01 BAR GLOBAL.
+ 02 BAR-1 PIC 9.
+ 02 BAR-2 PIC XXX.
+ 01 BAZ.
+ 02 BAZ-1 PIC X.
+ 02 BAZ-2 BINARY-SHORT.
+ 77 FXX PIC 999.
+ PROCEDURE DIVISION.
+ MOVE 3 TO BAR-1
+ DISPLAY FOO
+ DISPLAY BAZ-2
+ DISPLAY BAR-1
+ DISPLAY BAR-2
+ DISPLAY BAZ-1
+ DISPLAY FXX
+ CALL "globals2"
+ GOBACK.
diff --git a/test/resources/globals2.c b/test/resources/globals2.c
new file mode 100644
index 0000000..c48567d
--- /dev/null
+++ b/test/resources/globals2.c
@@ -0,0 +1,232 @@
+/* Generated by cobc 3.2.0 */
+/* Generated from globals2.cbl */
+/* Generated at Dec 09 2025 15:02:39 */
+/* GnuCOBOL build date Sep 23 2025 17:57:37 */
+/* GnuCOBOL package date Jul 28 2023 17:02:56 UTC */
+/* Compile command cobc -m -g globals2.cbl */
+
+#include /* for memcpy, memcmp and friends */
+#define COB_KEYWORD_INLINE __inline
+#include
+
+#define COB_SOURCE_FILE "globals2.cbl"
+#define COB_PACKAGE_VERSION "3.2"
+#define COB_PATCH_LEVEL 0
+#define COB_MODULE_FORMATTED_DATE "Dec 09 2025 15:02:39"
+#define COB_MODULE_DATE 20251209
+#define COB_MODULE_TIME 150239
+
+/* Global variables */
+#include "globals2.c.h"
+
+/* Function prototypes */
+
+COB_EXT_EXPORT int globals2 (void);
+static int globals2_ (const int);
+static void globals2_module_init (cob_module *module);
+
+/* Functions */
+
+static void gc_module_so_init () __attribute__ ((constructor));
+static void gc_module_so_init ()
+{
+ cob_check_version (COB_SOURCE_FILE, COB_PACKAGE_VERSION, COB_PATCH_LEVEL);
+}
+
+/* PROGRAM-ID 'globals2' */
+
+/* ENTRY 'globals2' */
+
+int
+globals2 ()
+{
+ return globals2_ (0);
+}
+
+static int
+globals2_ (const int entry)
+{
+ /* Program local variables */
+ #include "globals2.c.l.h"
+
+ /* Start of function code */
+
+ /* CANCEL callback */
+ if (unlikely(entry < 0)) {
+ if (entry == -10)
+ goto P_dump;
+ if (entry == -20)
+ goto P_clear_decimal;
+ goto P_cancel;
+ }
+
+ /* Check initialized, check module allocated, */
+ /* set global pointer, */
+ /* push module stack, save call parameter count */
+ if (cob_module_global_enter (&module, &cob_glob_ptr, 0, entry, 0))
+ return -1;
+
+ /* Set address of module parameter list */
+ module->cob_procedure_params = cob_procedure_params;
+
+ /* Set frame stack pointer */
+ frame_ptr = frame_stack;
+ frame_ptr->perform_through = 0;
+ frame_ptr->return_address_ptr = &&P_cgerror;
+ frame_overflow = frame_ptr + 255 - 1;
+
+ /* Initialize rest of program */
+ if (unlikely(initialized == 0)) {
+ goto P_initialize;
+ }
+ P_ret_initialize:
+
+ /* Increment module active */
+ module->module_active++;
+
+ /* Entry dispatch */
+ goto l_2;
+
+ /* PROCEDURE DIVISION */
+
+ /* Line: 7 : Entry globals2 : globals2.cbl */
+ l_2:;
+#line 7 "globals2.cbl"
+ ENTRY_GLOBALS2: cob_nop ();
+#line 97 "globals2.c"
+
+ /* Line: 7 : MOVE : globals2.cbl */
+#line 7 "globals2.cbl"
+ cob_nop ();
+#line 102 "globals2.c"
+ memcpy (b_17, "042", 3);
+
+ /* Line: 8 : DISPLAY : globals2.cbl */
+#line 8 "globals2.cbl"
+ cob_nop ();
+#line 108 "globals2.c"
+ cob_display (0, 1, 1, &f_17);
+
+ /* Line: 9 : GOBACK : globals2.cbl */
+#line 9 "globals2.cbl"
+ cob_nop ();
+#line 114 "globals2.c"
+ goto exit_program;
+
+ /* Program exit */
+
+ exit_program:
+
+ /* Decrement module active count */
+ if (module->module_active) {
+ module->module_active--;
+ }
+
+ /* Pop module stack */
+ cob_module_leave (module);
+
+ /* Program return */
+ return b_2;
+ P_cgerror:
+ cob_fatal_error (COB_FERROR_CODEGEN);
+
+
+ /* Program initialization */
+ P_initialize:
+
+ globals2_module_init (module);
+
+ module->collating_sequence = NULL;
+ module->crt_status = NULL;
+ module->cursor_pos = NULL;
+ module->xml_code = NULL;
+ module->xml_event = NULL;
+ module->xml_information = NULL;
+ module->xml_namespace = NULL;
+ module->xml_namespace_prefix = NULL;
+ module->xml_nnamespace = NULL;
+ module->xml_nnamespace_prefix = NULL;
+ module->xml_ntext = NULL;
+ module->xml_text = NULL;
+ module->json_code = NULL;
+ module->json_status = NULL;
+
+ /* Initialize cancel callback */
+ cob_set_cancel (module);
+
+ /* Initialize WORKING-STORAGE */
+ /* initialize field RETURN-CODE */
+ b_2 = 0;
+
+ /* initialize field FOO */
+#line 5 "globals2.cbl"
+ cob_nop ();
+#line 165 "globals2.c"
+ memset (b_17, (unsigned char)'0', 3);
+
+
+ if (0 == 1) goto P_cgerror;
+ initialized = 1;
+ goto P_ret_initialize;
+
+ P_dump:
+ return 0;
+
+
+ /* CANCEL callback handling */
+ P_cancel:
+
+ if (!initialized)
+ return 0;
+ if (module && module->module_active)
+ cob_fatal_error (COB_FERROR_CANCEL);
+
+ b_2 = 0;
+ cob_module_free (&module);
+
+ initialized = 0;
+
+ P_clear_decimal:
+ return 0;
+
+}
+
+/* End PROGRAM-ID 'globals2' */
+
+/* Initialize module structure for globals2 */
+static void globals2_module_init (cob_module *module)
+{
+ module->module_name = "globals2";
+ module->module_formatted_date = COB_MODULE_FORMATTED_DATE;
+ module->module_source = COB_SOURCE_FILE;
+ module->gc_version = COB_PACKAGE_VERSION;
+ module->module_entry.funcptr = (void *(*)())globals2;
+ module->module_cancel.funcptr = (void *(*)())globals2_;
+ module->module_ref_count = NULL;
+ module->module_path = &cob_module_path;
+ module->module_active = 0;
+ module->module_date = COB_MODULE_DATE;
+ module->module_time = COB_MODULE_TIME;
+ module->module_type = 0;
+ module->module_param_cnt = 0;
+ module->ebcdic_sign = 0;
+ module->decimal_point = '.';
+ module->currency_symbol = '$';
+ module->numeric_separator = ',';
+ module->flag_filename_mapping = 1;
+ module->flag_binary_truncate = 1;
+ module->flag_pretty_display = 1;
+ module->flag_host_sign = 0;
+ module->flag_no_phys_canc = 0;
+ module->flag_main = 0;
+ module->flag_fold_call = 0;
+ module->flag_exit_program = 0;
+ module->flag_debug_trace = 0;
+ module->flag_dump_ready = 0;
+ module->xml_mode = 1;
+ module->module_stmt = 0;
+ module->module_sources = NULL;
+}
+
+/* End functions */
+
diff --git a/test/resources/globals2.c.h b/test/resources/globals2.c.h
new file mode 100644
index 0000000..af71219
--- /dev/null
+++ b/test/resources/globals2.c.h
@@ -0,0 +1,37 @@
+/* Generated by cobc 3.2.0 */
+/* Generated from globals2.cbl */
+/* Generated at Dec 09 2025 15:02:39 */
+/* GnuCOBOL build date Sep 23 2025 17:57:37 */
+/* GnuCOBOL package date Jul 28 2023 17:02:56 UTC */
+/* Compile command cobc -m -g globals2.cbl */
+
+
+/* Module path */
+static const char *cob_module_path = NULL;
+
+/* Number of call parameters */
+static int cob_call_params = 0;
+
+/* Data storage */
+
+/* PROGRAM-ID : globals2 */
+static cob_u8_t b_17[3] __attribute__((aligned)); /* FOO */
+
+/* End of data storage */
+
+
+/* Attributes */
+
+static const cob_field_attr a_1 = {0x10, 3, 0, 0x0000, NULL};
+
+
+/* Fields */
+
+/* PROGRAM-ID : globals2 */
+static cob_field f_17 = {3, b_17, &a_1}; /* FOO */
+
+/* End of fields */
+
+
+#define cob_nop if (!module) cob_nop
+
diff --git a/test/resources/globals2.c.l.h b/test/resources/globals2.c.l.h
new file mode 100644
index 0000000..4c4c6b5
--- /dev/null
+++ b/test/resources/globals2.c.l.h
@@ -0,0 +1,42 @@
+/* Generated by cobc 3.2.0 */
+/* Generated from globals2.cbl */
+/* Generated at Dec 09 2025 15:02:39 */
+/* GnuCOBOL build date Sep 23 2025 17:57:37 */
+/* GnuCOBOL package date Jul 28 2023 17:02:56 UTC */
+/* Compile command cobc -m -g globals2.cbl */
+
+/* Program local variables for 'globals2' */
+
+/* Module initialization indicator */
+static unsigned int initialized = 0;
+
+/* Module structure pointer */
+static cob_module *module = NULL;
+
+/* Global variable pointer */
+cob_global *cob_glob_ptr;
+
+
+/* LINKAGE SECTION (Items not referenced by USING clause) */
+static unsigned char *b_9 = NULL; /* XML-NAMESPACE */
+static unsigned char *b_10 = NULL; /* XML-NAMESPACE-PREFIX */
+static unsigned char *b_11 = NULL; /* XML-NNAMESPACE */
+static unsigned char *b_12 = NULL; /* XML-NNAMESPACE-PREFIX */
+static unsigned char *b_13 = NULL; /* XML-NTEXT */
+static unsigned char *b_14 = NULL; /* XML-TEXT */
+
+
+/* Call parameters */
+cob_field *cob_procedure_params[1];
+
+/* Perform frame stack */
+struct cob_frame *frame_overflow;
+struct cob_frame *frame_ptr;
+struct cob_frame frame_stack[255];
+
+
+/* Data storage */
+static int b_2; /* RETURN-CODE */
+
+/* End of local data storage */
+
diff --git a/test/resources/globals2.cbl b/test/resources/globals2.cbl
new file mode 100644
index 0000000..725ea41
--- /dev/null
+++ b/test/resources/globals2.cbl
@@ -0,0 +1,9 @@
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. globals2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 FOO PIC 999 GLOBAL.
+ PROCEDURE DIVISION.
+ MOVE 42 TO FOO
+ DISPLAY FOO
+ GOBACK.
diff --git a/test/resources/globals2.i b/test/resources/globals2.i
new file mode 100644
index 0000000..22b7613
--- /dev/null
+++ b/test/resources/globals2.i
@@ -0,0 +1,10 @@
+#line 1 "globals2.cbl"
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. globals2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 77 FOO PIC 999 GLOBAL.
+ PROCEDURE DIVISION.
+ MOVE 42 TO FOO
+ DISPLAY FOO
+ GOBACK.
diff --git a/test/suite/functions.test.ts b/test/suite/functions.test.ts
index 4805c71..a87999f 100644
--- a/test/suite/functions.test.ts
+++ b/test/suite/functions.test.ts
@@ -6,8 +6,8 @@ import { parseExpression, cleanRawValue } from '../../src/functions';
suite("Useful functions", () => {
const cwd = nativePath.resolve(__dirname, '../../../test/resources');
const c = nativePath.resolve(cwd, 'petstore.c');
- const parsed = new SourceMap(cwd, [c]);
- console.log(parsed.toString());
+ const parsed = new SourceMap(cwd, [c], [cwd]);
+ //console.log(parsed.toString());
const functionName = "petstore_";
test("it can parse expressions", () => {
diff --git a/test/suite/index.ts b/test/suite/index.ts
deleted file mode 100644
index b1df30c..0000000
--- a/test/suite/index.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import * as path from 'path';
-import * as Mocha from 'mocha';
-import * as glob from 'glob';
-
-export function run(): Promise {
- // Create the mocha test
- const mocha = new Mocha({
- ui: 'tdd'
- });
-
- const testsRoot = path.resolve(__dirname, '..');
-
- return new Promise((c, e) => {
- glob('**/**.test.js', { cwd: testsRoot }, (err, files) => {
- if (err) {
- return e(err);
- }
-
- // Add files to the test suite
- files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
-
- try {
- // Run the mocha test
- mocha.run(failures => {
- if (failures > 0) {
- e(new Error(`${failures} tests failed.`));
- } else {
- c();
- }
- });
- } catch (err) {
- console.error(err);
- e(err);
- }
- });
- });
-}
diff --git a/test/suite/mi2.test.ts b/test/suite/mi2.test.ts
index 51bbc24..bfc66d9 100644
--- a/test/suite/mi2.test.ts
+++ b/test/suite/mi2.test.ts
@@ -26,6 +26,9 @@ suite("GDB output", () => {
test("++", () => {
assert.equal(true, couldBeOutput('++'));
});
+ test("+0000", () => {
+ assert.equal(true, couldBeOutput('+0000'));
+ });
test("GDB done", () => {
assert.equal(false, couldBeOutput('2^done'));
});
diff --git a/test/suite/parser.c.test.ts b/test/suite/parser.c.test.ts
index 3f5a621..7124caf 100644
--- a/test/suite/parser.c.test.ts
+++ b/test/suite/parser.c.test.ts
@@ -6,13 +6,14 @@ suite("C code parse", () => {
const cwd = nativePath.resolve(__dirname, '../../../test/resources');
test("Minimal", () => {
const c = nativePath.resolve(cwd, 'hello.c');
- const cobol = '/home/olegs/projects/gnucobol-debug/test/resources/hello.cbl';
- const parsed = new SourceMap(cwd, [c]);
+ const cobol = nativePath.resolve(cwd, 'hello.cbl');
+ const parsed = new SourceMap(cwd, [cobol]);
assert.equal(3, parsed.getLinesCount());
assert.equal(3, parsed.getVariablesCount());
assert.equal('b_6', parsed.getVariableByCobol('hello_.MYVAR').cName);
assert.equal('f_6', parsed.getVariableByCobol('hello_.MYVAR.MYVAR').cName);
+ assert.equal('hello_', parsed.getVariableByCobol('hello_.MYVAR').functionName);
assert.equal('MYVAR', parsed.getVariableByC('hello_.b_6').cobolName);
assert.equal('MYVAR', parsed.getVariableByC('hello_.f_6').cobolName);
assert.equal(105, parsed.getLineC(cobol, 8).lineC);
@@ -24,8 +25,8 @@ suite("C code parse", () => {
});
test("GnuCOBOL 3.1.1", () => {
const c = nativePath.resolve(cwd, 'hello3.c');
- const cobol = '/home/olegs/projects/gnucobol-debug/test/resources/hello3.cbl';
- const parsed = new SourceMap(cwd, [c]);
+ const cobol = nativePath.resolve(cwd, 'hello3.cbl');
+ const parsed = new SourceMap(cwd, [cobol]);
assert.equal(3, parsed.getLinesCount());
assert.equal(3, parsed.getVariablesCount());
@@ -44,10 +45,7 @@ suite("C code parse", () => {
assert.equal('3.1.1.0', parsed.getVersion());
});
test("Compilation Group", () => {
- const cSample = nativePath.resolve(cwd, 'sample.c');
- const cSubSample = nativePath.resolve(cwd, 'subsample.c');
- const cSubSubSample = nativePath.resolve(cwd, 'subsubsample.c');
- const parsed = new SourceMap(cwd, [cSample, cSubSample, cSubSubSample]);
+ const parsed = new SourceMap(cwd, ['sample.cbl', 'subsample.cbl', 'subsubsample.cbl']);
assert.equal(7, parsed.getLinesCount());
assert.equal(14, parsed.getVariablesCount());
@@ -64,8 +62,7 @@ suite("C code parse", () => {
assert.equal('2.2.0', parsed.getVersion());
});
test("Variables Hierarchy", () => {
- const c = nativePath.resolve(cwd, 'petstore.c');
- const parsed = new SourceMap(cwd, [c]);
+ const parsed = new SourceMap(cwd, ['petstore.cbl']);
assert.equal('b_14', parsed.getVariableByCobol('petstore_.WS-BILL').cName);
assert.equal('f_15', parsed.getVariableByCobol('petstore_.WS-BILL.TOTAL-QUANTITY').cName);
@@ -73,8 +70,7 @@ suite("C code parse", () => {
assert.equal('TOTAL-QUANTITY', parsed.getVariableByC('petstore_.f_15').cobolName);
});
test("Find variables by function and COBOL name", () => {
- const c = nativePath.resolve(cwd, 'petstore.c');
- const parsed = new SourceMap(cwd, [c]);
+ const parsed = new SourceMap(cwd, ['petstore.cbl']);
assert.equal('f_15', parsed.findVariableByCobol('petstore_', 'TOTAL-QUANTITY').cName);
assert.equal('f_15', parsed.findVariableByCobol('petstore_', 'WS-BILL.TOTAL-QUANTITY').cName);
@@ -84,8 +80,7 @@ suite("C code parse", () => {
assert.equal('3.1-dev.0', parsed.getVersion());
});
test("Attributes", () => {
- const c = nativePath.resolve(cwd, 'datatypes.c');
- const parsed = new SourceMap(cwd, [c]);
+ const parsed = new SourceMap(cwd, ['datatypes.cbl']);
for (let variable of parsed.getVariablesByCobol()) {
assert.notEqual(variable.attribute, null);
@@ -107,8 +102,7 @@ suite("C code parse", () => {
assert.equal('3.1-dev.0', parsed.getVersion());
});
test("Multiple Functions", () => {
- const c = nativePath.resolve(cwd, 'func.c');
- const parsed = new SourceMap(cwd, [c]);
+ const parsed = new SourceMap(cwd, ['func.cbl']);
const f_6 = parsed.getVariableByC('func_.f_6');
assert.equal('argA', f_6.cobolName);
@@ -133,4 +127,47 @@ suite("C code parse", () => {
assert.equal('2.2.0', parsed.getVersion());
});
+ test("Split Sources", () => {
+ const srcDirs = nativePath.resolve(cwd, 'distinct-sources');
+ const cDirs = nativePath.resolve(srcDirs, 'c');
+ const cblDirs = nativePath.resolve(srcDirs, 'cbl');
+ const parsed = new SourceMap(cwd, ['subsubsample.cbl'], [cDirs, cblDirs]);
+
+ assert.equal(1, parsed.getLinesCount());
+ assert.equal(3, parsed.getVariablesCount());
+
+ const alnumGroup = parsed.findVariableByCobol('subsubsample_', 'WS-GROUP-ALPHANUMERIC');
+ assert.equal('WS-GROUP-ALPHANUMERIC', alnumGroup.cobolName);
+
+ const alnumGroup_ = parsed.findVariableByC('subsubsample_', alnumGroup.cName);
+ assert.equal(alnumGroup_.cobolName, alnumGroup.cobolName);
+ assert.equal(alnumGroup_.rootFileC, alnumGroup.rootFileC);
+ });
+ test("Globals", () => {
+ const parsed = new SourceMap(cwd, ['globals.cbl']);
+ assert.equal(9, parsed.getLinesCount());
+ assert.equal(11, parsed.getVariablesCount());
+ console.log(parsed.toString());
+
+ const fooVar = parsed.findGlobalByCobol('FOO');
+ assert.ok(fooVar.cobolName.endsWith('FOO'));
+ assert.ok(parsed.findGlobalByC(fooVar.cName).cobolName.endsWith('FOO'));
+ const barVar = parsed.findGlobalByCobol('BAR');
+ assert.equal(4, barVar.size);
+ const bar1Var = parsed.findGlobalByCobol('BAR.BAR-2');
+ assert.equal(3, bar1Var.size);
+ assert.equal('alphanumeric', bar1Var.displayableType);
+
+ parsed.addLib('globals2.so');
+ assert.equal(12, parsed.getLinesCount());
+ assert.equal(14, parsed.getVariablesCount());
+
+ const fooVar_ = parsed.findGlobalByCobol('FOO');
+ assert.ok(parsed.findGlobalByC(fooVar_.cName).cobolName.endsWith('FOO'));
+ assert.notEqual(parsed.findGlobalByCobol('FOO', nativePath.join(cwd, 'globals.c.h')),
+ parsed.findGlobalByCobol('FOO', nativePath.join(cwd, 'globals2.c.h')));
+ assert.equal(parsed.findGlobalByCobol('FOO', nativePath.join(cwd, 'globals2.c.h')),
+ parsed.findGlobalByCobol('foo', nativePath.join(cwd, 'globals2.c.h')));
+ assert.ok(parsed.findGlobalByCobol('BAR-2', nativePath.join(cwd, 'globals.c.h')));
+ });
});
diff --git a/tsconfig.json b/tsconfig.json
index eaf29ab..d8793b8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,21 +1,15 @@
{
"compilerOptions": {
"module": "commonjs",
- "target": "es6",
+ "target": "es2020",
"outDir": "out",
- "lib": [
- "es6"
- ],
"sourceMap": true,
"rootDir": ".",
- "plugins": [
- {
- "name": "tslint-language-service"
- }
- ]
+ "esModuleInterop": true,
},
+ "include": ["src", "test"],
"exclude": [
"node_modules",
".vscode-test"
]
-}
\ No newline at end of file
+}
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..7452e69
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,1963 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@bcoe/v8-coverage@^1.0.1":
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz"
+ integrity sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==
+
+"@cspotcode/source-map-support@^0.8.0":
+ version "0.8.1"
+ resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz"
+ integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
+ dependencies:
+ "@jridgewell/trace-mapping" "0.3.9"
+
+"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
+ version "4.9.0"
+ resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz"
+ integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==
+ dependencies:
+ eslint-visitor-keys "^3.4.3"
+
+"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1":
+ version "4.12.2"
+ resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz"
+ integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==
+
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@8.57.1":
+ version "8.57.1"
+ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz"
+ integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
+
+"@humanwhocodes/config-array@^0.13.0":
+ version "0.13.0"
+ resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz"
+ integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.3"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz"
+ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
+
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz"
+ integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+
+"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+ version "1.5.5"
+ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz"
+ integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
+
+"@jridgewell/trace-mapping@^0.3.12":
+ version "0.3.31"
+ resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz"
+ integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@jridgewell/trace-mapping@0.3.9":
+ version "0.3.9"
+ resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz"
+ integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.0.3"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@tsconfig/node10@^1.0.7":
+ version "1.0.12"
+ resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz"
+ integrity sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==
+
+"@tsconfig/node12@^1.0.7":
+ version "1.0.11"
+ resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz"
+ integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
+
+"@tsconfig/node14@^1.0.0":
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz"
+ integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
+
+"@tsconfig/node16@^1.0.2":
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz"
+ integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
+
+"@types/expect@^1.20.4":
+ version "1.20.4"
+ resolved "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz"
+ integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==
+
+"@types/istanbul-lib-coverage@^2.0.1":
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz"
+ integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
+
+"@types/json-schema@^7.0.12":
+ version "7.0.15"
+ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz"
+ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
+
+"@types/mocha@^10.0.10":
+ version "10.0.10"
+ resolved "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz"
+ integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==
+
+"@types/node@*", "@types/node@^20.6.3":
+ version "20.19.25"
+ resolved "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz"
+ integrity sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==
+ dependencies:
+ undici-types "~6.21.0"
+
+"@types/semver@^7.5.0":
+ version "7.7.1"
+ resolved "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz"
+ integrity sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==
+
+"@types/vscode@^1.64.0":
+ version "1.106.1"
+ resolved "https://registry.npmjs.org/@types/vscode/-/vscode-1.106.1.tgz"
+ integrity sha512-R/HV8u2h8CAddSbX8cjpdd7B8/GnE4UjgjpuGuHcbp1xV6yh4OeqU4L1pKjlwujCrSFS0MOpwJAIs/NexMB1fQ==
+
+"@typescript-eslint/eslint-plugin@^6.7.2":
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz"
+ integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==
+ dependencies:
+ "@eslint-community/regexpp" "^4.5.1"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/type-utils" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+ graphemer "^1.4.0"
+ ignore "^5.2.4"
+ natural-compare "^1.4.0"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.7.2":
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz"
+ integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz"
+ integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+
+"@typescript-eslint/type-utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz"
+ integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
+ debug "^4.3.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/types@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz"
+ integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
+
+"@typescript-eslint/typescript-estree@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz"
+ integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ minimatch "9.0.3"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz"
+ integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@types/json-schema" "^7.0.12"
+ "@types/semver" "^7.5.0"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ semver "^7.5.4"
+
+"@typescript-eslint/visitor-keys@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz"
+ integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ eslint-visitor-keys "^3.4.1"
+
+"@ungap/structured-clone@^1.2.0":
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz"
+ integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
+
+"@vscode/debugadapter-testsupport@^1.51.0":
+ version "1.68.0"
+ resolved "https://registry.npmjs.org/@vscode/debugadapter-testsupport/-/debugadapter-testsupport-1.68.0.tgz"
+ integrity sha512-UpbaPsCGMKyjIvJFtqFKDD1MVvME50xuOtRBPrqY1WdhAOLjWQN7FcKEoHv3X85twfNL21jW2M54FYwEdEQv4Q==
+ dependencies:
+ "@vscode/debugprotocol" "1.68.0"
+
+"@vscode/debugadapter@^1.51.0":
+ version "1.68.0"
+ resolved "https://registry.npmjs.org/@vscode/debugadapter/-/debugadapter-1.68.0.tgz"
+ integrity sha512-D6gk5Fw2y4FV8oYmltoXpj+VAZexxJFopN/mcZ6YcgzQE9dgq2L45Aj3GLxScJOD6GeLILcxJIaA8l3v11esGg==
+ dependencies:
+ "@vscode/debugprotocol" "1.68.0"
+
+"@vscode/debugprotocol@^1.51.0", "@vscode/debugprotocol@1.68.0":
+ version "1.68.0"
+ resolved "https://registry.npmjs.org/@vscode/debugprotocol/-/debugprotocol-1.68.0.tgz"
+ integrity sha512-2J27dysaXmvnfuhFGhfeuxfHRXunqNPxtBoR3koiTOA9rdxWNDTa1zIFLCFMSHJ9MPTPKFcBeblsyaCJCIlQxg==
+
+"@vscode/test-cli@^0.0.12":
+ version "0.0.12"
+ resolved "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.12.tgz"
+ integrity sha512-iYN0fDg29+a2Xelle/Y56Xvv7Nc8Thzq4VwpzAF/SIE6918rDicqfsQxV6w1ttr2+SOm+10laGuY9FG2ptEKsQ==
+ dependencies:
+ "@types/mocha" "^10.0.10"
+ c8 "^10.1.3"
+ chokidar "^3.6.0"
+ enhanced-resolve "^5.18.3"
+ glob "^10.3.10"
+ minimatch "^9.0.3"
+ mocha "^11.7.4"
+ supports-color "^10.2.2"
+ yargs "^17.7.2"
+
+"@vscode/test-electron@^2.5.2":
+ version "2.5.2"
+ resolved "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz"
+ integrity sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==
+ dependencies:
+ http-proxy-agent "^7.0.2"
+ https-proxy-agent "^7.0.5"
+ jszip "^3.10.1"
+ ora "^8.1.0"
+ semver "^7.6.2"
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn-walk@^8.1.1:
+ version "8.3.4"
+ resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz"
+ integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==
+ dependencies:
+ acorn "^8.11.0"
+
+"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.11.0, acorn@^8.4.1, acorn@^8.9.0:
+ version "8.15.0"
+ resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz"
+ integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
+
+agent-base@^7.1.0, agent-base@^7.1.2:
+ version "7.1.4"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz"
+ integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-colors@^4.1.3:
+ version "4.1.3"
+ resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz"
+ integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+ version "6.2.2"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz"
+ integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^6.1.0:
+ version "6.2.3"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz"
+ integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+arg@^4.1.0:
+ version "4.1.3"
+ resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz"
+ integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+binary-extensions@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz"
+ integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+
+brace-expansion@^1.1.7:
+ version "1.1.12"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz"
+ integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz"
+ integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.3, braces@~3.0.2:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
+ dependencies:
+ fill-range "^7.1.1"
+
+browser-stdout@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz"
+ integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
+
+c8@^10.1.3:
+ version "10.1.3"
+ resolved "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz"
+ integrity sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==
+ dependencies:
+ "@bcoe/v8-coverage" "^1.0.1"
+ "@istanbuljs/schema" "^0.1.3"
+ find-up "^5.0.0"
+ foreground-child "^3.1.1"
+ istanbul-lib-coverage "^3.2.0"
+ istanbul-lib-report "^3.0.1"
+ istanbul-reports "^3.1.6"
+ test-exclude "^7.0.1"
+ v8-to-istanbul "^9.0.0"
+ yargs "^17.7.2"
+ yargs-parser "^21.1.1"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase@^6.0.0:
+ version "6.3.0"
+ resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+chalk@^4.0.0, chalk@^4.1.0:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chalk@^5.3.0:
+ version "5.6.2"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz"
+ integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==
+
+chokidar@^3.5.3, chokidar@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+chokidar@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz"
+ integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
+ dependencies:
+ readdirp "^4.0.1"
+
+cli-cursor@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz"
+ integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==
+ dependencies:
+ restore-cursor "^5.0.0"
+
+cli-spinners@^2.9.2:
+ version "2.9.2"
+ resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz"
+ integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+cliui@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz"
+ integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^7.0.0"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+core_d@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/core_d/-/core_d-5.0.1.tgz"
+ integrity sha512-37lZyhJY1hzgFbfU4LzY4zL09QPwPfV2W/3YBOtN7mkdvVaeP1OVnDZI6zxggtlPwG/BuE5wIr0xptlVJk5EPA==
+ dependencies:
+ supports-color "^8.1.0"
+
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+create-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz"
+ integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+
+cross-spawn@^7.0.2, cross-spawn@^7.0.6:
+ version "7.0.6"
+ resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@4:
+ version "4.4.3"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
+ integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+ dependencies:
+ ms "^2.1.3"
+
+decamelize@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz"
+ integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
+
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+diff@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+diff@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz"
+ integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==
+
+diff@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz"
+ integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+emoji-regex@^10.3.0:
+ version "10.6.0"
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz"
+ integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+enhanced-resolve@^5.18.3:
+ version "5.18.3"
+ resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz"
+ integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==
+ dependencies:
+ graceful-fs "^4.2.4"
+ tapable "^2.2.0"
+
+escalade@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz"
+ integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint_d@^12.2.1:
+ version "12.2.1"
+ resolved "https://registry.npmjs.org/eslint_d/-/eslint_d-12.2.1.tgz"
+ integrity sha512-qOJ9cTi5AaH5bOgEoCkv41DJ637mHgzffbOLojwU4wadwC6qbR+OxVJRvVzH0v2XYmQOvw4eiJK7ivrr5SvzsA==
+ dependencies:
+ core_d "^5.0.1"
+ eslint "^8.12.0"
+ nanolru "^1.0.0"
+ optionator "^0.9.1"
+
+eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
+"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.12.0, eslint@^8.50.0:
+ version "8.57.1"
+ resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz"
+ integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.57.1"
+ "@humanwhocodes/config-array" "^0.13.0"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+ dependencies:
+ acorn "^8.9.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
+
+esquery@^1.4.2:
+ version "1.6.0"
+ resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz"
+ integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.9:
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz"
+ integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.8"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.19.1"
+ resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz"
+ integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
+ dependencies:
+ reusify "^1.0.4"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.3"
+ rimraf "^3.0.2"
+
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+flatted@^3.2.9:
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz"
+ integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
+
+foreground-child@^3.1.0, foreground-child@^3.1.1:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz"
+ integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==
+ dependencies:
+ cross-spawn "^7.0.6"
+ signal-exit "^4.0.1"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-east-asian-width@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz"
+ integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@^10.3.10, glob@^10.4.1, glob@^10.4.5:
+ version "10.5.0"
+ resolved "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz"
+ integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^3.1.2"
+ minimatch "^9.0.4"
+ minipass "^7.1.2"
+ package-json-from-dist "^1.0.0"
+ path-scurry "^1.11.1"
+
+glob@^7.1.3:
+ version "7.2.3"
+ resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz"
+ integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^5.0.1"
+ once "^1.3.0"
+
+globals@^13.19.0:
+ version "13.24.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
+ dependencies:
+ type-fest "^0.20.2"
+
+globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
+graceful-fs@^4.2.4:
+ version "4.2.11"
+ resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+he@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
+http-proxy-agent@^7.0.2:
+ version "7.0.2"
+ resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz"
+ integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
+ dependencies:
+ agent-base "^7.1.0"
+ debug "^4.3.4"
+
+https-proxy-agent@^7.0.5:
+ version "7.0.6"
+ resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz"
+ integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
+ dependencies:
+ agent-base "^7.1.2"
+ debug "4"
+
+ignore@^5.2.0, ignore@^5.2.4:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
+ integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
+
+immediate@~3.0.5:
+ version "3.0.6"
+ resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz"
+ integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
+
+import-fresh@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz"
+ integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@~2.0.3, inherits@2:
+ version "2.0.4"
+ resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-interactive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz"
+ integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-plain-obj@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-unicode-supported@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz"
+ integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==
+
+is-unicode-supported@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz"
+ integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz"
+ integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
+
+istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz"
+ integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^4.0.0"
+ supports-color "^7.1.0"
+
+istanbul-reports@^3.1.6:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz"
+ integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
+jackspeak@^3.1.2:
+ version "3.4.3"
+ resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz"
+ integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
+js-yaml@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz"
+ integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==
+ dependencies:
+ argparse "^2.0.1"
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jszip@^3.10.1:
+ version "3.10.1"
+ resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz"
+ integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==
+ dependencies:
+ lie "~3.3.0"
+ pako "~1.0.2"
+ readable-stream "~2.3.6"
+ setimmediate "^1.0.5"
+
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+lie@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz"
+ integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
+ dependencies:
+ immediate "~3.0.5"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+log-symbols@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+log-symbols@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz"
+ integrity sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==
+ dependencies:
+ chalk "^5.3.0"
+ is-unicode-supported "^1.3.0"
+
+lru-cache@^10.2.0:
+ version "10.4.3"
+ resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz"
+ integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
+
+make-dir@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz"
+ integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==
+ dependencies:
+ semver "^7.5.3"
+
+make-error@^1.1.1:
+ version "1.3.6"
+ resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz"
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
+ dependencies:
+ braces "^3.0.3"
+ picomatch "^2.3.1"
+
+mimic-function@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz"
+ integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==
+
+minimatch@^3.0.5:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^5.0.1, minimatch@^5.1.6:
+ version "5.1.6"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz"
+ integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^9.0.3, minimatch@^9.0.5:
+ version "9.0.5"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz"
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^9.0.4:
+ version "9.0.5"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz"
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz"
+ integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
+
+mocha@^10.8.2, "mocha@^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X":
+ version "10.8.2"
+ resolved "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz"
+ integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==
+ dependencies:
+ ansi-colors "^4.1.3"
+ browser-stdout "^1.3.1"
+ chokidar "^3.5.3"
+ debug "^4.3.5"
+ diff "^5.2.0"
+ escape-string-regexp "^4.0.0"
+ find-up "^5.0.0"
+ glob "^8.1.0"
+ he "^1.2.0"
+ js-yaml "^4.1.0"
+ log-symbols "^4.1.0"
+ minimatch "^5.1.6"
+ ms "^2.1.3"
+ serialize-javascript "^6.0.2"
+ strip-json-comments "^3.1.1"
+ supports-color "^8.1.1"
+ workerpool "^6.5.1"
+ yargs "^16.2.0"
+ yargs-parser "^20.2.9"
+ yargs-unparser "^2.0.0"
+
+mocha@^11.7.4:
+ version "11.7.5"
+ resolved "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz"
+ integrity sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==
+ dependencies:
+ browser-stdout "^1.3.1"
+ chokidar "^4.0.1"
+ debug "^4.3.5"
+ diff "^7.0.0"
+ escape-string-regexp "^4.0.0"
+ find-up "^5.0.0"
+ glob "^10.4.5"
+ he "^1.2.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ log-symbols "^4.1.0"
+ minimatch "^9.0.5"
+ ms "^2.1.3"
+ picocolors "^1.1.1"
+ serialize-javascript "^6.0.2"
+ strip-json-comments "^3.1.1"
+ supports-color "^8.1.1"
+ workerpool "^9.2.0"
+ yargs "^17.7.2"
+ yargs-parser "^21.1.1"
+ yargs-unparser "^2.0.0"
+
+ms@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+n-readlines@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/n-readlines/-/n-readlines-1.0.1.tgz"
+ integrity sha512-z4SyAIVgMy7CkgsoNw7YVz40v0g4+WWvvqy8+ZdHrCtgevcEO758WQyrYcw3XPxcLxF+//RszTz/rO48nzD0wQ==
+
+nanolru@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/nanolru/-/nanolru-1.0.0.tgz"
+ integrity sha512-GyQkE8M32pULhQk7Sko5raoIbPalAk90ICG+An4fq6fCsFHsP6fB2K46WGXVdoJpy4SGMnZ/EKbo123fZJomWg==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+onetime@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz"
+ integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==
+ dependencies:
+ mimic-function "^5.0.0"
+
+optionator@^0.9.1, optionator@^0.9.3:
+ version "0.9.4"
+ resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz"
+ integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.5"
+
+ora@^8.1.0:
+ version "8.2.0"
+ resolved "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz"
+ integrity sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==
+ dependencies:
+ chalk "^5.3.0"
+ cli-cursor "^5.0.0"
+ cli-spinners "^2.9.2"
+ is-interactive "^2.0.0"
+ is-unicode-supported "^2.0.0"
+ log-symbols "^6.0.0"
+ stdin-discarder "^0.2.2"
+ string-width "^7.2.0"
+ strip-ansi "^7.1.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+package-json-from-dist@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz"
+ integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
+
+pako@~1.0.2:
+ version "1.0.11"
+ resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-scurry@^1.11.1:
+ version "1.11.1"
+ resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz"
+ integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
+ dependencies:
+ lru-cache "^10.2.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+picocolors@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
+ integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+readable-stream@~2.3.6:
+ version "2.3.8"
+ resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
+ integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readdirp@^4.0.1:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz"
+ integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+restore-cursor@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz"
+ integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==
+ dependencies:
+ onetime "^7.0.0"
+ signal-exit "^4.1.0"
+
+reusify@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz"
+ integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+semver@^7.5.3, semver@^7.5.4, semver@^7.6.2:
+ version "7.7.3"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz"
+ integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==
+
+serialize-javascript@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz"
+ integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
+ dependencies:
+ randombytes "^2.1.0"
+
+setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz"
+ integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^4.0.1, signal-exit@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+stdin-discarder@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz"
+ integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
+string-width@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz"
+ integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==
+ dependencies:
+ emoji-regex "^10.3.0"
+ get-east-asian-width "^1.0.0"
+ strip-ansi "^7.1.0"
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+ version "7.1.2"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz"
+ integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-ansi@^7.1.0:
+ version "7.1.2"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz"
+ integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
+ integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+supports-color@^10.2.2:
+ version "10.2.2"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz"
+ integrity sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^8.1.0:
+ version "8.1.1"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^8.1.1:
+ version "8.1.1"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+tapable@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz"
+ integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==
+
+test-exclude@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz"
+ integrity sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^10.4.1"
+ minimatch "^9.0.4"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+ts-api-utils@^1.0.1:
+ version "1.4.3"
+ resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz"
+ integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
+
+ts-mocha@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.npmjs.org/ts-mocha/-/ts-mocha-11.1.0.tgz"
+ integrity sha512-yT7FfzNRCu8ZKkYvAOiH01xNma/vLq6Vit7yINKYFNVP8e5UyrYXSOMIipERTpzVKJQ4Qcos5bQo1tNERNZevQ==
+
+ts-node@^10.9.2, "ts-node@^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X":
+ version "10.9.2"
+ resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz"
+ integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
+ dependencies:
+ "@cspotcode/source-map-support" "^0.8.0"
+ "@tsconfig/node10" "^1.0.7"
+ "@tsconfig/node12" "^1.0.7"
+ "@tsconfig/node14" "^1.0.0"
+ "@tsconfig/node16" "^1.0.2"
+ acorn "^8.4.1"
+ acorn-walk "^8.1.1"
+ arg "^4.1.0"
+ create-require "^1.1.0"
+ diff "^4.0.1"
+ make-error "^1.1.1"
+ v8-compile-cache-lib "^3.0.1"
+ yn "3.1.1"
+
+tsconfig-paths@^4.2.0, tsconfig-paths@^4.X.X:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz"
+ integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==
+ dependencies:
+ json5 "^2.2.2"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+typescript@^5.2.2, typescript@>=2.7, typescript@>=4.2.0:
+ version "5.9.3"
+ resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz"
+ integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
+
+undici-types@~6.21.0:
+ version "6.21.0"
+ resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz"
+ integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+v8-compile-cache-lib@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz"
+ integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
+
+v8-to-istanbul@^9.0.0:
+ version "9.3.0"
+ resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz"
+ integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==
+ dependencies:
+ "@jridgewell/trace-mapping" "^0.3.12"
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+word-wrap@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz"
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
+workerpool@^6.5.1:
+ version "6.5.1"
+ resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz"
+ integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==
+
+workerpool@^9.2.0:
+ version "9.3.4"
+ resolved "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz"
+ integrity sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yargs-parser@^20.2.2, yargs-parser@^20.2.9:
+ version "20.2.9"
+ resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz"
+ integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs-parser@^21.1.1:
+ version "21.1.1"
+ resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"
+ integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs-unparser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz"
+ integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
+ dependencies:
+ camelcase "^6.0.0"
+ decamelize "^4.0.0"
+ flat "^5.0.2"
+ is-plain-obj "^2.1.0"
+
+yargs@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+yargs@^17.7.2:
+ version "17.7.2"
+ resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
+ integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
+
+yn@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz"
+ integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==