diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 644b9569..de8d1f2a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: - node-version: 12 + node-version: 16 - run: npm ci # - name: Publish to Open VSX Registry # uses: HaaLeo/publish-vscode-extension@v0 diff --git a/.gitignore b/.gitignore index a2288741..061fd869 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ out +dist node_modules .vscode-test *.vsix diff --git a/.vscode/launch.json b/.vscode/launch.json index 22af117e..512959c0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,8 +9,8 @@ "type": "extensionHost", "request": "launch", "args": ["--extensionDevelopmentPath=${workspaceFolder}"], - "outFiles": ["${workspaceFolder}/out/src/**/*.js"], - "preLaunchTask": "npm: watch-dev" + "outFiles": ["${workspaceFolder}/dist/**/*.js"], + "preLaunchTask": "npm: compile-dev" }, { "name": "Launch Tests", @@ -21,8 +21,8 @@ "--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=${workspaceFolder}/out/test" ], - "outFiles": ["${workspaceFolder}/out/test/**/*.js"], - "preLaunchTask": "npm: pretest setup" + "outFiles": ["${workspaceFolder}/dist/**/*.js"], + "preLaunchTask": "npm: pretest" } ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index a78a2918..e576c636 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -29,5 +29,35 @@ "[markdown]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "prettier.configPath": ".prettierrc" + "prettier.configPath": ".prettierrc", + + "files.associations": { + "*.fd": "FortranFixedForm" + }, + + // *************************************************************************** + // Fortran Options + // *************************************************************************** + // Fortran providers + "fortran.provide.hover": "fortls", + "fortran.provide.symbols": "fortls", + "fortran.provide.autocomplete": "fortls", + // // Linter options + "fortran.linter.compiler": "gfortran", + "fortran.linter.includePaths": ["/usr/include/", "/usr/include/*"], + // Add arguments used in compilation + "fortran.linter.extraArgs": [ + "-fdefault-real-8", + "-fdefault-double-8", + "-Wunused-variable", + "-Wunused-dummy-argument" + ], + // Formatting options + "fortran.formatting.formatter": "findent", + "fortran.formatting.findentArgs": ["-Cn", "--align-paren=1"], + // Fortran-Language-Server specific options + "fortran.fortls.incrementalSync": true, + "fortran.fortls.preserveKeywordOrder": true, + // Other Fortran options + "fortran.preferredCase": "lowercase" } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 2cf8f969..88a24b47 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -11,7 +11,7 @@ }, "isBackground": true, "problemMatcher": "$tsc-watch", - "detail": "tsc -watch -p tsconfig.json" + "detail": "webpack --mode development --watch --progress" }, { "label": "npm: compile-dev", @@ -19,7 +19,7 @@ "script": "compile-dev", "group": "build", "problemMatcher": "$tsc", - "detail": "tsc -p tsconfig.json" + "detail": "webpack --mode development" }, { "label": "npm: pretest", @@ -27,18 +27,7 @@ "script": "pretest", "group": "test", "problemMatcher": "$tsc", - "detail": "tsc -p tsconfig.test.json" - }, - { - "label": "npm: pretest setup", - "type": "shell", - "dependsOn": ["npm: compile-dev", "npm: pretest"], - "dependsOrder": "sequence", - "group": { - "kind": "test", - "isDefault": true - }, - "detail": "setup for test launch" + "detail": "npm run compile-dev && tsc -p tsconfig.test.json" }, { "type": "npm", diff --git a/.vscodeignore b/.vscodeignore index 5ff3c193..711184dc 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,9 +1,20 @@ .vscode/** .vscode-test/** -out/test/** +out/** +node_modules/** +tools/** test/** src/** **/*.map +**/*.ts .gitignore -tsconfig.json +**/tsconfig*.json +**/.eslintrc.json +.husky/ +.github/ +.editorconfig +.prettierrc +.prettierignore vsc-extension-quickstart.md +CONTRIBUTING.md +coverconfig.json diff --git a/CHANGELOG.md b/CHANGELOG.md index bfa13791..df7e173b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,46 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [3.0.0] + +### Fixed + +- Fixes linting regex to capture a wider spectrum of errors + ([#295](https://github.com/krvajal/vscode-fortran-support/issues/295)) +- Fixes linter activation from `Disabled` to some compiler `X` without having + to restart the extension + ([#296](https://github.com/krvajal/vscode-fortran-support/issues/296)) +- Fixes nopass pointer erroneous syntax highlighting + ([#318](https://github.com/krvajal/vscode-fortran-support/issues/318)) +- Fixes `%` accessor highlighting for type-bound subroutines + ([#325](https://github.com/krvajal/vscode-fortran-support/issues/325)) +- Fixes `fortls` not spawning when `ignoreWarning` was set to true + ([#365](https://github.com/krvajal/vscode-fortran-support/issues/365)) +- Fixes formatting on Windows (needed .exe extension) + ([#354](https://github.com/krvajal/vscode-fortran-support/issues/354)) +- Fixes `onSave` formatting errors + ([#364](https://github.com/krvajal/vscode-fortran-support/issues/364)) + +### Changed + +- Updates `README` text and animations, changes `SECURITY` and updates `package.json` +- Changes the interface of the extension to accommodate for the newest features + ([#292](https://github.com/krvajal/vscode-fortran-support/issues/292)) +- Changes main parts of the extension to being asynchronous + ([#285](https://github.com/krvajal/vscode-fortran-support/issues/285)) +- Changes Language Server prompt from `fortran-language-server` to `fortls` +- Updates VS Code engine to handle `vsce --pre-release` + +### Added + +- Adds support for Intel (ifort) and LLVM (flang) compilers + ([#291](https://github.com/krvajal/vscode-fortran-support/issues/291)) +- Adds native support for the fortran-language-server (`fortls`) making + unnecessary the usage of Fortran Intellisense extension + ([#290](https://github.com/krvajal/vscode-fortran-support/issues/290)) +- Adds commands for re/starting/stopping the Language Server +- Added more options for configuring the `fortls` settings through the UI + ## [2.6.2] ### Added @@ -344,7 +384,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Initial release -[unreleased]: https://github.com/krvajal/vscode-fortran-support/compare/v2.6.2...HEAD +[unreleased]: https://github.com/krvajal/vscode-fortran-support/compare/v3.0....HEAD +[3.0.0]: https://github.com/krvajal/vscode-fortran-support/compare/v2.6.2...v3.0.0 [2.6.2]: https://github.com/krvajal/vscode-fortran-support/compare/v2.6.1...v2.6.2 [2.6.1]: https://github.com/krvajal/vscode-fortran-support/compare/v2.6.0...v2.6.1 [2.6.0]: https://github.com/krvajal/vscode-fortran-support/compare/v2.5.0...v2.6.0 diff --git a/README.md b/README.md index c05b0264..7ef15160 100644 --- a/README.md +++ b/README.md @@ -1,108 +1,135 @@ -# Modern Fortran language support for VSCode +![alt](assets/modern-fortran-logo.png) -[![GitHub Actions](https://github.com/krvajal/vscode-fortran-support/actions/workflows/main.yaml/badge.svg)](https://github.com/krvajal/vscode-fortran-support/actions) +[![GitHub Actions](https://github.com/fortran-lang/vscode-fortran-support/actions/workflows/main.yaml/badge.svg)](https://github.com/fortran-lang/vscode-fortran-support/actions) [![Downloads](https://vsmarketplacebadge.apphb.com/downloads-short/krvajalm.linter-gfortran.svg)](https://marketplace.visualstudio.com/items?itemName=krvajalm.linter-gfortran) [![Installs](https://vsmarketplacebadge.apphb.com/installs/krvajalm.linter-gfortran.svg)](https://marketplace.visualstudio.com/items?itemName=krvajalm.linter-gfortran) [![VS Marketplace](https://vsmarketplacebadge.apphb.com/version-short/krvajalm.linter-gfortran.svg)](https://marketplace.visualstudio.com/items?itemName=krvajalm.linter-gfortran) [![MIT License](https://img.shields.io/npm/l/stack-overflow-copy-paste.svg?)](http://opensource.org/licenses/MIT) -> This extension provides support for the Fortran programming language. It includes syntax highlighting, debugging, code snippets and a linting based on `gfortran`. You can download the Visual Studio Code editor from [here](https://code.visualstudio.com/download). +![alt](assets/intro-demo.gif) -## Features +## Key Features -- Syntax highlighting -- Code Snippets -- Documentation on hover for intrinsic functions -- Code linting based on `gfortran` to show errors wiggles in your code -- Code autocompletion (beta) -- Symbols provider -- Debugger, uses Microsoft's [C/C++ extension](https://github.com/Microsoft/vscode-cpptools) +- Syntax highlighting (Free and Fixed forms) +- Hover support, Signature help and Auto-completion +- GoTo/Peek implementation and Find/Peek references +- Project-wide and Document symbol detection and Renaming +- Native Language Server integration with [`fortls`](https://github.com/gnikit/fortls) +- Linting support for `gfortran`, `flang` and `ifort` +- Debugger [C/C++ extension](https://github.com/Microsoft/vscode-cpptools) - Formatting with [findent](https://github.com/gnikit/findent-pypi) or [fprettify](https://github.com/pseewald/fprettify) +- Code snippets (more can be defined by the user [see](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-own-snippets)) -![symbol_nav](./doc/symbol_nav.png) +## Language Server integration -## Settings +The Fortran Language Server [`fortls`](https://github.com/gnikit/fortls) is responsible +for providing a lot of the higher level, IDE functionality. By default, +`Modern Fortran` will attempt to use it for hover, autocompletion, symbols and Go to & Peeking into definitions. -You can control the include paths to be used by the linter with the `fortran.includePaths` setting. +Allow for `fortls` to be automatically installed with `pip` or `Anaconda` and +if the location where `fortls` is installed is not in your `PATH` point VS Code +to the `fortls` location by setting -```jsonc +```json { - "fortran.includePaths": ["/usr/local/include", "/usr/local"] + "fortran.fortls.path": "/custom/path/to/fortls" } ``` -By default the `gfortran` executable is assumed to be found in the path. In order to use a different one or if it can't be found in the path you can point the extension to use a custom one with the `fortran.gfortranExecutable` setting. +For more about the Language Server's capabilities please refer to the +[documentation](https://gnikit.github.io/fortls/) of `fortls`. -```jsonc -{ - "fortran.gfortranExecutable": "/usr/local/bin/gfortran-4.7" -} -``` +## Linting -If you want to pass extra options to the `gfortran` executable or override the default one, you can use the setting `fortran.linterExtraArgs`. By default `-Wall` is the only option. +Linting allows for compiler error and warning detection while coding +without the user having to compile. -```jsonc -{ - "fortran.linterExtraArgs": ["-Wall"] -} -``` +Using an invalid if expression + +![alt](assets/lint-demo.gif) + +Using incorrect type and rank as function argument + +![alt](assets/lint-demo2.gif) + +| :memo: Note | +| ------------------------------------------ | +| Save your file to generate linting results | + +Linting results can be improved by providing additional options to the compiler. + +### Including directories + +You can control the include paths to be used by the linter with the `fortran.linter.includePaths` option. -You can configure what kind of symbols will appear in the symbol list by using +| :exclamation: Important | +| ------------------------------------------------------------------------------------------------------------------ | +| For the best linting results `linter.includePaths` should match the included paths for your project's compilation. | ```jsonc { - "fortran.symbols": ["function", "subroutine"] + "fortran.linter.includePaths": ["/usr/include/**", "${workspaceFolder}/include/**"] } ``` -The available options are +| :exclamation: Important | +| -------------------------------------------------------------------------------- | +| If a glob pattern is used only directories matching the pattern will be included | -- "function" -- "subroutine" -- "variable" -- "module" (not supported yet) -- "program" (not supported yet) +### Additional linting options -and by default only functions and subroutines are shown - -You can also configure the case for fortran intrinsics auto-complete by using +More options can be passed to the linter via ```jsonc { - "fortran.preferredCase": "lowercase" | "uppercase" + "fortran.linter.extraArgs": [ + "-fdefault-real-8", + "-fdefault-double-8", + "-Wunused-variable", + "-Wunused-dummy-argument" + ] } ``` -## Snippets +Default value is `-Wall` (or `-warn all` for ifort). -This is a list of some of the snippets included, if you like to include additional snippets please let me know and I will add them. +### Changing linting compiler -### Program skeleton - -![program snippet](https://media.giphy.com/media/OYdq9BKYMOOdy/giphy.gif) +By default, the linter used is `gfortran`, Intel's `ifort` and LLVM's `flang` are also supported. +One can use a different linter compiler via the option -#### Module skeleton - -![module snippet](https://media.giphy.com/media/3ohzdUNRuio5FfyF1u/giphy.gif) +```jsonc +{ + "fortran.linter.compiler": "ifort" | "gfortran" | "flang" | "Disabled" +} +``` -## Error wiggles +The linter executable is assumed to be found in the `PATH`. +In order to use a different executable or if the executable can't be found in the `PATH` +you can point the extension to another linter with the `fortran.linter.compilerPath` option. -To trigger code validations you must save the file first. +```jsonc +{ + "fortran.linter.compilerPath": "/opt/oneapi/compiler/2022.0.2/linux/bin/intel64/ifort" +} +``` ## Debugging +![alt](assets/gdb_ani.gif) + The extension uses the debugger from Microsoft's [C/C++ extension](https://github.com/Microsoft/vscode-cpptools) for Visual Studio Code. This allows this extension to use the full functionality of the C/C++ extension for debugging applications: -(un)conditional breaking points, expression evaluation, multi-threaded debugging, +(un)conditional breaking points, expression evaluation, multithreaded debugging, call stack, stepping, watch window. A minimal `launch.json` script, responsible for controlling the debugger, is provided below. However, Visual Studio Code is also capable of autogenerating a `launch.json` file and the configurations inside the file. -More details about how to setup the debugger can be found in Microsoft's website: +More details about how to set up the debugger can be found in Microsoft's website: - General information about debugging in VS Code: - C/C++ extension debugger information: @@ -144,15 +171,15 @@ Two formatters are supported [`findent`](https://github.com/gnikit/findent-pypi) and [`fprettify`](https://github.com/pseewald/fprettify). Both of them can be installed with `pip` automatically through the extension. -| findent | fprettify | -| :----------------------------: | :------------------------------: | -| ![](./images/findent-demo.gif) | ![](./images/fprettify-demo.gif) | +| findent | fprettify | +| :-------------------------------: | :---------------------------------: | +| ![alt](./assets/findent-demo.gif) | ![alt](./assets/fprettify-demo.gif) | The formatter is controlled by the user option -```json +```jsonc { - "fortran.formatting.formatter": "Disabled" | "findent" | "fprettify", + "fortran.formatting.formatter": "findent" | "fprettify" | "Disabled" } ``` @@ -160,7 +187,8 @@ Additional arguments to the formatter can be input using ```json { - "fortran.formatting.args":, ["-Cn", "--align-paren=1"] + "fortran.formatting.findentArgs": ["-Cn", "-Rr"], + "fortran.formatting.fprettifyArgs": ["--whitespace-comma", "--enable-decl"] } ``` @@ -172,13 +200,78 @@ If the formatter is not present in the `PATH` its location can be input with } ``` -### NOTE: About `findent` +| :memo: Note | +| ---------------------------------------------------------------------- | +| `findent` can also be used to generate dependency files for a project. | -`findent` can also be used to generate dependency files for a project. +## Snippets -## Requirements +Snippets are included by both `fortls` Language Server and the Modern Fortran VS Code extension. +Some available snippets can be seen below. Users can define their own snippets +by following these VS Code [instructions](https://code.visualstudio.com/docs/editor/userdefinedsnippets). + +If you think a snippet should be shipped by with the extension feel free to +submit a [feature request](https://github.com/fortran-lang/vscode-fortran-support/issues/new?assignees=&labels=feature-request&template=feature_request.md&title=) + +### Program skeleton + +![program snippet](https://media.giphy.com/media/OYdq9BKYMOOdy/giphy.gif) + +#### Module skeleton + +![module snippet](https://media.giphy.com/media/3ohzdUNRuio5FfyF1u/giphy.gif) + +## Advanced options -For the linter to work you need to have `gfortran` on your path, or wherever you configure it to be. +To show the symbols in the file outline enable `provide.symbols`. Symbols can be +served by the fortls, the built-in, both or none. By default +`fortls` is used. + +```jsonc +{ + "fortran.provide.symbols": "fortls" | "Built-in" | "Both" | "Disable" +} +``` + +You can also configure the case for fortran intrinsics auto-complete by using + +```jsonc +{ + "fortran.preferredCase": "lowercase" | "uppercase" +} +``` + +## All options + +A summary of all the options + +| Setting | Possible values | Default | Description | +| ---------------------------------- | ---------------------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `provide.hover` | `fortls`, `Built-in`, `Both`, `Disabled` | `fortls` | Enables hover support, by default it uses fortls | +| `provide.autocomplete` | `fortls`, `Built-in`, `Disabled` | `fortls` | Enables code autocompletion, by default it uses fortls | +| `provide.symbols` | `fortls`, `Both` | `fortls` | Outline of modules, functions, subroutines, etc. in the document, by default it uses fortls, `Both` will use `fortls` and the `Built-in` functionality (not recommended) | +| `linter.compiler` | `gfortran`, `flang`, `ifort`, `Disabled` | `gfortran` | Compiler used for linting support | +| `linter.includePaths` | String Array | `[]` | Specifies folder paths to be used as include paths during linting. Can handle globs | +| `linter.compilerPath` | String | `''` | Specifies the path to the linter executable | +| `linter.extraArgs` | String Array | `[-Wall]` | Pass additional options to the linter compiler | +| `linter.modOutput` | String | `''` | Global output directory for .mod files generated due to linting | +| `formatting.formatter` | `findent`, `fprettify`, `Disabled` | `findent` | Fortran formatter, currently supports findent and fprettify | +| `fortran.formatting.findentArgs` | String Array | `[]` | Additional arguments for the findent formatter | +| `fortran.formatting.fprettifyArgs` | String Array | `[]` | Additional arguments for the fprettify formatter | +| `formatting.path` | String | `''` | If the formatter is not in the $PATH specify the full path to its location | +| `fortls.path` | String | `fortls` | Path to the Fortran language server (fortls) | +| `fortls.preserveKeywordOrder` | Boolean | `true` | Display variable keywords information when hovering in original order (default: sort to consistent ordering) | +| `fortls.disableDiagnostics` | Boolean | `false` | Disable additional diagnostics from fortls e.g. multiple variable definitions, unknown modules in use statement (requires v1.12.0+) | +| `fortls.incrementalSync` | Boolean | `true` | Use incremental synchronization for file changes | +| `fortls.symbolTypes` | Boolean | `trues` | Include derived types in the symbols outline. If false it adds the `--symbol_skip_mem` argument to fortls. | +| `fortls.notifyInit` | Boolean | `false` | Notify when workspace initialization is complete (requires v1.7.0+) | +| `fortls.maxLineLength` | Number | -1 | Maximum line length (fortls requires v1.8.0+). For `gfortran` and `flang` this also sets the linting compiler flag `-ffree-line-length-` and `-ffixed-line-length-`. Default value is `none` | +| `fortls.maxCommentLineLength` | Number | -1 | Maximum comment line length (fortls requires v1.8.0+). | +| `fortls.extraArgs` | String Array | `[]` | Additional arguments for the fortls | +| `fortls.disabled` | Boolean | `false` | Disable the Language Server. If true, it will limit the extension's functionality substantially (should be avoid!) | +| `preferredCase` | `lowercase`, `uppercase` | `lowercase` | Specify the word case to use when suggesting autocomplete options | + +## Requirements For debugging you need to have one of the following debuggers installed: diff --git a/SECURITY.md b/SECURITY.md index 034e8480..d246faed 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,20 +2,16 @@ ## Supported Versions -Use this section to tell people about which versions of your project are -currently being supported with security updates. +Only the latest version of the extension is actively supported. Out publisher +ID in the VS Codes store changed with version `v3.0.0`, therefore older versions +are no longer available for download. | Version | Supported | | ------- | ------------------ | -| 5.1.x | :white_check_mark: | -| 5.0.x | :x: | -| 4.0.x | :white_check_mark: | -| < 4.0 | :x: | +| >= 3.0 | :white_check_mark: | +| < 3.0 | :x: | ## Reporting a Vulnerability -Use this section to tell people how to report a vulnerability. - -Tell them where to go, how often they can expect to get an update on a -reported vulnerability, what to expect if the vulnerability is accepted or -declined, etc. +If a security vulnerability is found that is not already being tracked please open a +[bug report](https://github.com/fortran-lang/vscode-fortran-support/issues/new?assignees=&labels=bug&template=bug_report.md&title=). diff --git a/assets/README.md b/assets/README.md new file mode 100644 index 00000000..f8874cfe --- /dev/null +++ b/assets/README.md @@ -0,0 +1,37 @@ +# Creating High Quality GIF animations + +Two scripts have been included inside the `tools` folder for ease of use, but the following instructions should allow for more custom-made GIFs + +## Steps + +1. Use a screen capturing software to record the animation +2. Use `ffmpeg` to convert the animation into `.png` frames + + > **Note:** this is also the step to add any additional editing to the original animation + > like padded boarders + + ```sh + ffmpeg -i animation.mp4 frame%05d.png + ``` + + or adding additional options like a border + + ```sh + ffmpeg -i animation.mp4 -vf "pad=width=900:height=550:x=5:y=5:color=734f96" frame%05d.png + ``` + +3. Download [Gifski](https://gif.ski) to merge the frames into a `.gif` and run + + > **Note:** gifski produces the most color-accurate GIFs + + ```sh + gifski --width 888 -o output.gif frame*.png + ``` + +Alternatively to step **3.** one can use `ffmpeg`, but the final animation will be +considerably less sharp and artifact-free. + +```sh +ffmpeg -i animation.mp4 -vf palettegen palette.png +ffmpeg -i animation.mp4 -i palette.png -filter_complex "fps=15,scale=-1:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif +``` diff --git a/images/findent-demo.gif b/assets/findent-demo.gif similarity index 100% rename from images/findent-demo.gif rename to assets/findent-demo.gif diff --git a/assets/fortran-logo.svg b/assets/fortran-logo.svg new file mode 100644 index 00000000..8cb9dc71 --- /dev/null +++ b/assets/fortran-logo.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/images/fprettify-demo.gif b/assets/fprettify-demo.gif similarity index 100% rename from images/fprettify-demo.gif rename to assets/fprettify-demo.gif diff --git a/assets/gdb_ani.gif b/assets/gdb_ani.gif new file mode 100644 index 00000000..12a08a4c Binary files /dev/null and b/assets/gdb_ani.gif differ diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 00000000..eef9ecbd Binary files /dev/null and b/assets/icon.png differ diff --git a/assets/intro-demo.gif b/assets/intro-demo.gif new file mode 100644 index 00000000..84c5ab6b Binary files /dev/null and b/assets/intro-demo.gif differ diff --git a/assets/lint-demo.gif b/assets/lint-demo.gif new file mode 100644 index 00000000..546aa3c9 Binary files /dev/null and b/assets/lint-demo.gif differ diff --git a/assets/lint-demo2.gif b/assets/lint-demo2.gif new file mode 100644 index 00000000..58cea7d6 Binary files /dev/null and b/assets/lint-demo2.gif differ diff --git a/assets/modern-fortran-logo.png b/assets/modern-fortran-logo.png new file mode 100644 index 00000000..5180f999 Binary files /dev/null and b/assets/modern-fortran-logo.png differ diff --git a/assets/modern-fortran-logo.svg b/assets/modern-fortran-logo.svg new file mode 100644 index 00000000..eb4c99dd --- /dev/null +++ b/assets/modern-fortran-logo.svg @@ -0,0 +1,139 @@ + + + + + + + + + Fortran + + Modern + + Fortran + Modern + + diff --git a/assets/tools/ffmpeg-mp4-to-gif.sh b/assets/tools/ffmpeg-mp4-to-gif.sh new file mode 100755 index 00000000..8e3ee54c --- /dev/null +++ b/assets/tools/ffmpeg-mp4-to-gif.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if [[ -z "$1" ]]; then + echo "No video file specified" + exit 1 +fi + +# get everything after last / +video=${1##*/} +# remove everything after . +fname=${video%.*} + +FPS=10 + +ffmpeg -i ${video} -vf palettegen ${fname}-palette.png +ffmpeg -i ${video} -i ${fname}-palette.png -filter_complex "fps=${FPS},scale=-1:-1:flags=lanczos[x];[x][1:v]paletteuse" ${fname}.gif +rm ${fname}-palette.png + diff --git a/assets/tools/gifski-mp4-to-gif.sh b/assets/tools/gifski-mp4-to-gif.sh new file mode 100755 index 00000000..12278932 --- /dev/null +++ b/assets/tools/gifski-mp4-to-gif.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [[ -z "$1" ]]; then + echo "No video file specified" + exit 1 +fi + +# get everything after last / +video=${1##*/} +# remove everything after . +fname=${video%.*} + +mkdir __tmp__ +# TODO: pass additional options to ffmpeg -vf ""... +ffmpeg -i ${video} __tmp__/frame_%05d.png -hide_banner +# TODO: pass additional options to gifski -W 888 --fps=15 ... +gifski -o ${fname}.gif __tmp__/frame_*.png +rm -rf __tmp__ + diff --git a/assets/videos/gdb_ani.mp4 b/assets/videos/gdb_ani.mp4 new file mode 100644 index 00000000..c2b51133 Binary files /dev/null and b/assets/videos/gdb_ani.mp4 differ diff --git a/assets/videos/intro-demo.mp4 b/assets/videos/intro-demo.mp4 new file mode 100644 index 00000000..b654fecb Binary files /dev/null and b/assets/videos/intro-demo.mp4 differ diff --git a/assets/videos/lint-demo.mp4 b/assets/videos/lint-demo.mp4 new file mode 100644 index 00000000..ac4aca55 Binary files /dev/null and b/assets/videos/lint-demo.mp4 differ diff --git a/assets/videos/lint-demo2.mp4 b/assets/videos/lint-demo2.mp4 new file mode 100644 index 00000000..d4de5cd0 Binary files /dev/null and b/assets/videos/lint-demo2.mp4 differ diff --git a/src/docs/ABORT.json b/doc/intrinsics/ABORT.json similarity index 100% rename from src/docs/ABORT.json rename to doc/intrinsics/ABORT.json diff --git a/src/docs/ABS.json b/doc/intrinsics/ABS.json similarity index 100% rename from src/docs/ABS.json rename to doc/intrinsics/ABS.json diff --git a/src/docs/ACCESS.json b/doc/intrinsics/ACCESS.json similarity index 100% rename from src/docs/ACCESS.json rename to doc/intrinsics/ACCESS.json diff --git a/src/docs/ACHAR.json b/doc/intrinsics/ACHAR.json similarity index 100% rename from src/docs/ACHAR.json rename to doc/intrinsics/ACHAR.json diff --git a/src/docs/ACOS.json b/doc/intrinsics/ACOS.json similarity index 100% rename from src/docs/ACOS.json rename to doc/intrinsics/ACOS.json diff --git a/src/docs/ACOSD.json b/doc/intrinsics/ACOSD.json similarity index 100% rename from src/docs/ACOSD.json rename to doc/intrinsics/ACOSD.json diff --git a/src/docs/ACOSH.json b/doc/intrinsics/ACOSH.json similarity index 100% rename from src/docs/ACOSH.json rename to doc/intrinsics/ACOSH.json diff --git a/src/docs/ADJUSTL.json b/doc/intrinsics/ADJUSTL.json similarity index 100% rename from src/docs/ADJUSTL.json rename to doc/intrinsics/ADJUSTL.json diff --git a/src/docs/ADJUSTR.json b/doc/intrinsics/ADJUSTR.json similarity index 100% rename from src/docs/ADJUSTR.json rename to doc/intrinsics/ADJUSTR.json diff --git a/src/docs/AIMAG.json b/doc/intrinsics/AIMAG.json similarity index 100% rename from src/docs/AIMAG.json rename to doc/intrinsics/AIMAG.json diff --git a/src/docs/AINT.json b/doc/intrinsics/AINT.json similarity index 100% rename from src/docs/AINT.json rename to doc/intrinsics/AINT.json diff --git a/src/docs/ALARM.json b/doc/intrinsics/ALARM.json similarity index 100% rename from src/docs/ALARM.json rename to doc/intrinsics/ALARM.json diff --git a/src/docs/ALL.json b/doc/intrinsics/ALL.json similarity index 100% rename from src/docs/ALL.json rename to doc/intrinsics/ALL.json diff --git a/src/docs/ALLOCATED.json b/doc/intrinsics/ALLOCATED.json similarity index 100% rename from src/docs/ALLOCATED.json rename to doc/intrinsics/ALLOCATED.json diff --git a/src/docs/AND.json b/doc/intrinsics/AND.json similarity index 100% rename from src/docs/AND.json rename to doc/intrinsics/AND.json diff --git a/src/docs/ANINT.json b/doc/intrinsics/ANINT.json similarity index 100% rename from src/docs/ANINT.json rename to doc/intrinsics/ANINT.json diff --git a/src/docs/ANY.json b/doc/intrinsics/ANY.json similarity index 100% rename from src/docs/ANY.json rename to doc/intrinsics/ANY.json diff --git a/src/docs/ASIN.json b/doc/intrinsics/ASIN.json similarity index 100% rename from src/docs/ASIN.json rename to doc/intrinsics/ASIN.json diff --git a/src/docs/ASIND.json b/doc/intrinsics/ASIND.json similarity index 100% rename from src/docs/ASIND.json rename to doc/intrinsics/ASIND.json diff --git a/src/docs/ASINH.json b/doc/intrinsics/ASINH.json similarity index 100% rename from src/docs/ASINH.json rename to doc/intrinsics/ASINH.json diff --git a/src/docs/ASSOCIATED.json b/doc/intrinsics/ASSOCIATED.json similarity index 100% rename from src/docs/ASSOCIATED.json rename to doc/intrinsics/ASSOCIATED.json diff --git a/src/docs/ATAN.json b/doc/intrinsics/ATAN.json similarity index 100% rename from src/docs/ATAN.json rename to doc/intrinsics/ATAN.json diff --git a/src/docs/ATAN2.json b/doc/intrinsics/ATAN2.json similarity index 100% rename from src/docs/ATAN2.json rename to doc/intrinsics/ATAN2.json diff --git a/src/docs/ATAN2D.json b/doc/intrinsics/ATAN2D.json similarity index 100% rename from src/docs/ATAN2D.json rename to doc/intrinsics/ATAN2D.json diff --git a/src/docs/ATAND.json b/doc/intrinsics/ATAND.json similarity index 100% rename from src/docs/ATAND.json rename to doc/intrinsics/ATAND.json diff --git a/src/docs/ATANH.json b/doc/intrinsics/ATANH.json similarity index 100% rename from src/docs/ATANH.json rename to doc/intrinsics/ATANH.json diff --git a/src/docs/ATOMIC_ADD.json b/doc/intrinsics/ATOMIC_ADD.json similarity index 100% rename from src/docs/ATOMIC_ADD.json rename to doc/intrinsics/ATOMIC_ADD.json diff --git a/src/docs/ATOMIC_AND.json b/doc/intrinsics/ATOMIC_AND.json similarity index 100% rename from src/docs/ATOMIC_AND.json rename to doc/intrinsics/ATOMIC_AND.json diff --git a/src/docs/ATOMIC_CAS.json b/doc/intrinsics/ATOMIC_CAS.json similarity index 100% rename from src/docs/ATOMIC_CAS.json rename to doc/intrinsics/ATOMIC_CAS.json diff --git a/src/docs/ATOMIC_DEFINE.json b/doc/intrinsics/ATOMIC_DEFINE.json similarity index 100% rename from src/docs/ATOMIC_DEFINE.json rename to doc/intrinsics/ATOMIC_DEFINE.json diff --git a/src/docs/ATOMIC_FETCH_ADD.json b/doc/intrinsics/ATOMIC_FETCH_ADD.json similarity index 100% rename from src/docs/ATOMIC_FETCH_ADD.json rename to doc/intrinsics/ATOMIC_FETCH_ADD.json diff --git a/src/docs/ATOMIC_FETCH_AND.json b/doc/intrinsics/ATOMIC_FETCH_AND.json similarity index 100% rename from src/docs/ATOMIC_FETCH_AND.json rename to doc/intrinsics/ATOMIC_FETCH_AND.json diff --git a/src/docs/ATOMIC_FETCH_OR.json b/doc/intrinsics/ATOMIC_FETCH_OR.json similarity index 100% rename from src/docs/ATOMIC_FETCH_OR.json rename to doc/intrinsics/ATOMIC_FETCH_OR.json diff --git a/src/docs/ATOMIC_FETCH_XOR.json b/doc/intrinsics/ATOMIC_FETCH_XOR.json similarity index 100% rename from src/docs/ATOMIC_FETCH_XOR.json rename to doc/intrinsics/ATOMIC_FETCH_XOR.json diff --git a/src/docs/ATOMIC_OR.json b/doc/intrinsics/ATOMIC_OR.json similarity index 100% rename from src/docs/ATOMIC_OR.json rename to doc/intrinsics/ATOMIC_OR.json diff --git a/src/docs/ATOMIC_REF.json b/doc/intrinsics/ATOMIC_REF.json similarity index 100% rename from src/docs/ATOMIC_REF.json rename to doc/intrinsics/ATOMIC_REF.json diff --git a/src/docs/ATOMIC_XOR.json b/doc/intrinsics/ATOMIC_XOR.json similarity index 100% rename from src/docs/ATOMIC_XOR.json rename to doc/intrinsics/ATOMIC_XOR.json diff --git a/src/docs/BACKTRACE.json b/doc/intrinsics/BACKTRACE.json similarity index 100% rename from src/docs/BACKTRACE.json rename to doc/intrinsics/BACKTRACE.json diff --git a/src/docs/BESSEL_J0.json b/doc/intrinsics/BESSEL_J0.json similarity index 100% rename from src/docs/BESSEL_J0.json rename to doc/intrinsics/BESSEL_J0.json diff --git a/src/docs/BESSEL_J1.json b/doc/intrinsics/BESSEL_J1.json similarity index 100% rename from src/docs/BESSEL_J1.json rename to doc/intrinsics/BESSEL_J1.json diff --git a/src/docs/BESSEL_JN.json b/doc/intrinsics/BESSEL_JN.json similarity index 100% rename from src/docs/BESSEL_JN.json rename to doc/intrinsics/BESSEL_JN.json diff --git a/src/docs/BESSEL_Y0.json b/doc/intrinsics/BESSEL_Y0.json similarity index 100% rename from src/docs/BESSEL_Y0.json rename to doc/intrinsics/BESSEL_Y0.json diff --git a/src/docs/BESSEL_Y1.json b/doc/intrinsics/BESSEL_Y1.json similarity index 100% rename from src/docs/BESSEL_Y1.json rename to doc/intrinsics/BESSEL_Y1.json diff --git a/src/docs/BESSEL_YN.json b/doc/intrinsics/BESSEL_YN.json similarity index 100% rename from src/docs/BESSEL_YN.json rename to doc/intrinsics/BESSEL_YN.json diff --git a/src/docs/BGE.json b/doc/intrinsics/BGE.json similarity index 100% rename from src/docs/BGE.json rename to doc/intrinsics/BGE.json diff --git a/src/docs/BGT.json b/doc/intrinsics/BGT.json similarity index 100% rename from src/docs/BGT.json rename to doc/intrinsics/BGT.json diff --git a/src/docs/BIT_SIZE.json b/doc/intrinsics/BIT_SIZE.json similarity index 100% rename from src/docs/BIT_SIZE.json rename to doc/intrinsics/BIT_SIZE.json diff --git a/src/docs/BLE.json b/doc/intrinsics/BLE.json similarity index 100% rename from src/docs/BLE.json rename to doc/intrinsics/BLE.json diff --git a/src/docs/BLT.json b/doc/intrinsics/BLT.json similarity index 100% rename from src/docs/BLT.json rename to doc/intrinsics/BLT.json diff --git a/src/docs/BTEST.json b/doc/intrinsics/BTEST.json similarity index 100% rename from src/docs/BTEST.json rename to doc/intrinsics/BTEST.json diff --git a/src/docs/CEILING.json b/doc/intrinsics/CEILING.json similarity index 100% rename from src/docs/CEILING.json rename to doc/intrinsics/CEILING.json diff --git a/src/docs/CHAR.json b/doc/intrinsics/CHAR.json similarity index 100% rename from src/docs/CHAR.json rename to doc/intrinsics/CHAR.json diff --git a/src/docs/CHDIR.json b/doc/intrinsics/CHDIR.json similarity index 100% rename from src/docs/CHDIR.json rename to doc/intrinsics/CHDIR.json diff --git a/src/docs/CHMOD.json b/doc/intrinsics/CHMOD.json similarity index 100% rename from src/docs/CHMOD.json rename to doc/intrinsics/CHMOD.json diff --git a/src/docs/CMPLX.json b/doc/intrinsics/CMPLX.json similarity index 100% rename from src/docs/CMPLX.json rename to doc/intrinsics/CMPLX.json diff --git a/src/docs/COMMAND_ARGUMENT_COUNT.json b/doc/intrinsics/COMMAND_ARGUMENT_COUNT.json similarity index 100% rename from src/docs/COMMAND_ARGUMENT_COUNT.json rename to doc/intrinsics/COMMAND_ARGUMENT_COUNT.json diff --git a/src/docs/COMPILER_OPTIONS.json b/doc/intrinsics/COMPILER_OPTIONS.json similarity index 100% rename from src/docs/COMPILER_OPTIONS.json rename to doc/intrinsics/COMPILER_OPTIONS.json diff --git a/src/docs/COMPILER_VERSION.json b/doc/intrinsics/COMPILER_VERSION.json similarity index 100% rename from src/docs/COMPILER_VERSION.json rename to doc/intrinsics/COMPILER_VERSION.json diff --git a/src/docs/COMPLEX.json b/doc/intrinsics/COMPLEX.json similarity index 100% rename from src/docs/COMPLEX.json rename to doc/intrinsics/COMPLEX.json diff --git a/src/docs/CONJG.json b/doc/intrinsics/CONJG.json similarity index 100% rename from src/docs/CONJG.json rename to doc/intrinsics/CONJG.json diff --git a/src/docs/COS.json b/doc/intrinsics/COS.json similarity index 100% rename from src/docs/COS.json rename to doc/intrinsics/COS.json diff --git a/src/docs/COSD.json b/doc/intrinsics/COSD.json similarity index 100% rename from src/docs/COSD.json rename to doc/intrinsics/COSD.json diff --git a/src/docs/COSH.json b/doc/intrinsics/COSH.json similarity index 100% rename from src/docs/COSH.json rename to doc/intrinsics/COSH.json diff --git a/src/docs/COTAN.json b/doc/intrinsics/COTAN.json similarity index 100% rename from src/docs/COTAN.json rename to doc/intrinsics/COTAN.json diff --git a/src/docs/COTAND.json b/doc/intrinsics/COTAND.json similarity index 100% rename from src/docs/COTAND.json rename to doc/intrinsics/COTAND.json diff --git a/src/docs/COUNT.json b/doc/intrinsics/COUNT.json similarity index 100% rename from src/docs/COUNT.json rename to doc/intrinsics/COUNT.json diff --git a/src/docs/CO_BROADCAST.json b/doc/intrinsics/CO_BROADCAST.json similarity index 100% rename from src/docs/CO_BROADCAST.json rename to doc/intrinsics/CO_BROADCAST.json diff --git a/src/docs/CO_MAX.json b/doc/intrinsics/CO_MAX.json similarity index 100% rename from src/docs/CO_MAX.json rename to doc/intrinsics/CO_MAX.json diff --git a/src/docs/CO_MIN.json b/doc/intrinsics/CO_MIN.json similarity index 100% rename from src/docs/CO_MIN.json rename to doc/intrinsics/CO_MIN.json diff --git a/src/docs/CO_REDUCE.json b/doc/intrinsics/CO_REDUCE.json similarity index 100% rename from src/docs/CO_REDUCE.json rename to doc/intrinsics/CO_REDUCE.json diff --git a/src/docs/CO_SUM.json b/doc/intrinsics/CO_SUM.json similarity index 100% rename from src/docs/CO_SUM.json rename to doc/intrinsics/CO_SUM.json diff --git a/src/docs/CPU_TIME.json b/doc/intrinsics/CPU_TIME.json similarity index 100% rename from src/docs/CPU_TIME.json rename to doc/intrinsics/CPU_TIME.json diff --git a/src/docs/CSHIFT.json b/doc/intrinsics/CSHIFT.json similarity index 100% rename from src/docs/CSHIFT.json rename to doc/intrinsics/CSHIFT.json diff --git a/src/docs/CTIME.json b/doc/intrinsics/CTIME.json similarity index 100% rename from src/docs/CTIME.json rename to doc/intrinsics/CTIME.json diff --git a/src/docs/C_ASSOCIATED.json b/doc/intrinsics/C_ASSOCIATED.json similarity index 100% rename from src/docs/C_ASSOCIATED.json rename to doc/intrinsics/C_ASSOCIATED.json diff --git a/src/docs/C_FUNLOC.json b/doc/intrinsics/C_FUNLOC.json similarity index 100% rename from src/docs/C_FUNLOC.json rename to doc/intrinsics/C_FUNLOC.json diff --git a/src/docs/C_F_POINTER.json b/doc/intrinsics/C_F_POINTER.json similarity index 100% rename from src/docs/C_F_POINTER.json rename to doc/intrinsics/C_F_POINTER.json diff --git a/src/docs/C_F_PROCPOINTER.json b/doc/intrinsics/C_F_PROCPOINTER.json similarity index 100% rename from src/docs/C_F_PROCPOINTER.json rename to doc/intrinsics/C_F_PROCPOINTER.json diff --git a/src/docs/C_LOC.json b/doc/intrinsics/C_LOC.json similarity index 100% rename from src/docs/C_LOC.json rename to doc/intrinsics/C_LOC.json diff --git a/src/docs/C_SIZEOF.json b/doc/intrinsics/C_SIZEOF.json similarity index 100% rename from src/docs/C_SIZEOF.json rename to doc/intrinsics/C_SIZEOF.json diff --git a/src/docs/DATE_AND_TIME.json b/doc/intrinsics/DATE_AND_TIME.json similarity index 100% rename from src/docs/DATE_AND_TIME.json rename to doc/intrinsics/DATE_AND_TIME.json diff --git a/src/docs/DBLE.json b/doc/intrinsics/DBLE.json similarity index 100% rename from src/docs/DBLE.json rename to doc/intrinsics/DBLE.json diff --git a/src/docs/DCMPLX.json b/doc/intrinsics/DCMPLX.json similarity index 100% rename from src/docs/DCMPLX.json rename to doc/intrinsics/DCMPLX.json diff --git a/src/docs/DIGITS.json b/doc/intrinsics/DIGITS.json similarity index 100% rename from src/docs/DIGITS.json rename to doc/intrinsics/DIGITS.json diff --git a/src/docs/DIM.json b/doc/intrinsics/DIM.json similarity index 100% rename from src/docs/DIM.json rename to doc/intrinsics/DIM.json diff --git a/src/docs/DOT_PRODUCT.json b/doc/intrinsics/DOT_PRODUCT.json similarity index 100% rename from src/docs/DOT_PRODUCT.json rename to doc/intrinsics/DOT_PRODUCT.json diff --git a/src/docs/DPROD.json b/doc/intrinsics/DPROD.json similarity index 100% rename from src/docs/DPROD.json rename to doc/intrinsics/DPROD.json diff --git a/src/docs/DREAL.json b/doc/intrinsics/DREAL.json similarity index 100% rename from src/docs/DREAL.json rename to doc/intrinsics/DREAL.json diff --git a/src/docs/DSHIFTL.json b/doc/intrinsics/DSHIFTL.json similarity index 100% rename from src/docs/DSHIFTL.json rename to doc/intrinsics/DSHIFTL.json diff --git a/src/docs/DSHIFTR.json b/doc/intrinsics/DSHIFTR.json similarity index 100% rename from src/docs/DSHIFTR.json rename to doc/intrinsics/DSHIFTR.json diff --git a/src/docs/DTIME.json b/doc/intrinsics/DTIME.json similarity index 100% rename from src/docs/DTIME.json rename to doc/intrinsics/DTIME.json diff --git a/src/docs/EOSHIFT.json b/doc/intrinsics/EOSHIFT.json similarity index 100% rename from src/docs/EOSHIFT.json rename to doc/intrinsics/EOSHIFT.json diff --git a/src/docs/EPSILON.json b/doc/intrinsics/EPSILON.json similarity index 100% rename from src/docs/EPSILON.json rename to doc/intrinsics/EPSILON.json diff --git a/src/docs/ERF.json b/doc/intrinsics/ERF.json similarity index 100% rename from src/docs/ERF.json rename to doc/intrinsics/ERF.json diff --git a/src/docs/ERFC.json b/doc/intrinsics/ERFC.json similarity index 100% rename from src/docs/ERFC.json rename to doc/intrinsics/ERFC.json diff --git a/src/docs/ERFC_SCALED.json b/doc/intrinsics/ERFC_SCALED.json similarity index 100% rename from src/docs/ERFC_SCALED.json rename to doc/intrinsics/ERFC_SCALED.json diff --git a/src/docs/ETIME.json b/doc/intrinsics/ETIME.json similarity index 100% rename from src/docs/ETIME.json rename to doc/intrinsics/ETIME.json diff --git a/src/docs/EVENT_QUERY.json b/doc/intrinsics/EVENT_QUERY.json similarity index 100% rename from src/docs/EVENT_QUERY.json rename to doc/intrinsics/EVENT_QUERY.json diff --git a/src/docs/EXECUTE_COMMAND_LINE.json b/doc/intrinsics/EXECUTE_COMMAND_LINE.json similarity index 100% rename from src/docs/EXECUTE_COMMAND_LINE.json rename to doc/intrinsics/EXECUTE_COMMAND_LINE.json diff --git a/src/docs/EXIT.json b/doc/intrinsics/EXIT.json similarity index 100% rename from src/docs/EXIT.json rename to doc/intrinsics/EXIT.json diff --git a/src/docs/EXP.json b/doc/intrinsics/EXP.json similarity index 100% rename from src/docs/EXP.json rename to doc/intrinsics/EXP.json diff --git a/src/docs/EXPONENT.json b/doc/intrinsics/EXPONENT.json similarity index 100% rename from src/docs/EXPONENT.json rename to doc/intrinsics/EXPONENT.json diff --git a/src/docs/EXTENDS_TYPE_OF.json b/doc/intrinsics/EXTENDS_TYPE_OF.json similarity index 100% rename from src/docs/EXTENDS_TYPE_OF.json rename to doc/intrinsics/EXTENDS_TYPE_OF.json diff --git a/src/docs/FDATE.json b/doc/intrinsics/FDATE.json similarity index 100% rename from src/docs/FDATE.json rename to doc/intrinsics/FDATE.json diff --git a/src/docs/FGET.json b/doc/intrinsics/FGET.json similarity index 100% rename from src/docs/FGET.json rename to doc/intrinsics/FGET.json diff --git a/src/docs/FGETC.json b/doc/intrinsics/FGETC.json similarity index 100% rename from src/docs/FGETC.json rename to doc/intrinsics/FGETC.json diff --git a/src/docs/FINDLOC.json b/doc/intrinsics/FINDLOC.json similarity index 100% rename from src/docs/FINDLOC.json rename to doc/intrinsics/FINDLOC.json diff --git a/src/docs/FLOOR.json b/doc/intrinsics/FLOOR.json similarity index 100% rename from src/docs/FLOOR.json rename to doc/intrinsics/FLOOR.json diff --git a/src/docs/FLUSH.json b/doc/intrinsics/FLUSH.json similarity index 100% rename from src/docs/FLUSH.json rename to doc/intrinsics/FLUSH.json diff --git a/src/docs/FNUM.json b/doc/intrinsics/FNUM.json similarity index 100% rename from src/docs/FNUM.json rename to doc/intrinsics/FNUM.json diff --git a/src/docs/FPUT.json b/doc/intrinsics/FPUT.json similarity index 100% rename from src/docs/FPUT.json rename to doc/intrinsics/FPUT.json diff --git a/src/docs/FPUTC.json b/doc/intrinsics/FPUTC.json similarity index 100% rename from src/docs/FPUTC.json rename to doc/intrinsics/FPUTC.json diff --git a/src/docs/FRACTION.json b/doc/intrinsics/FRACTION.json similarity index 100% rename from src/docs/FRACTION.json rename to doc/intrinsics/FRACTION.json diff --git a/src/docs/FREE.json b/doc/intrinsics/FREE.json similarity index 100% rename from src/docs/FREE.json rename to doc/intrinsics/FREE.json diff --git a/src/docs/FSEEK.json b/doc/intrinsics/FSEEK.json similarity index 100% rename from src/docs/FSEEK.json rename to doc/intrinsics/FSEEK.json diff --git a/src/docs/FSTAT.json b/doc/intrinsics/FSTAT.json similarity index 100% rename from src/docs/FSTAT.json rename to doc/intrinsics/FSTAT.json diff --git a/src/docs/FTELL.json b/doc/intrinsics/FTELL.json similarity index 100% rename from src/docs/FTELL.json rename to doc/intrinsics/FTELL.json diff --git a/src/docs/GAMMA.json b/doc/intrinsics/GAMMA.json similarity index 100% rename from src/docs/GAMMA.json rename to doc/intrinsics/GAMMA.json diff --git a/src/docs/GERROR.json b/doc/intrinsics/GERROR.json similarity index 100% rename from src/docs/GERROR.json rename to doc/intrinsics/GERROR.json diff --git a/src/docs/GETARG.json b/doc/intrinsics/GETARG.json similarity index 100% rename from src/docs/GETARG.json rename to doc/intrinsics/GETARG.json diff --git a/src/docs/GETCWD.json b/doc/intrinsics/GETCWD.json similarity index 100% rename from src/docs/GETCWD.json rename to doc/intrinsics/GETCWD.json diff --git a/src/docs/GETENV.json b/doc/intrinsics/GETENV.json similarity index 100% rename from src/docs/GETENV.json rename to doc/intrinsics/GETENV.json diff --git a/src/docs/GETGID.json b/doc/intrinsics/GETGID.json similarity index 100% rename from src/docs/GETGID.json rename to doc/intrinsics/GETGID.json diff --git a/src/docs/GETLOG.json b/doc/intrinsics/GETLOG.json similarity index 100% rename from src/docs/GETLOG.json rename to doc/intrinsics/GETLOG.json diff --git a/src/docs/GETPID.json b/doc/intrinsics/GETPID.json similarity index 100% rename from src/docs/GETPID.json rename to doc/intrinsics/GETPID.json diff --git a/src/docs/GETUID.json b/doc/intrinsics/GETUID.json similarity index 100% rename from src/docs/GETUID.json rename to doc/intrinsics/GETUID.json diff --git a/src/docs/GET_COMMAND.json b/doc/intrinsics/GET_COMMAND.json similarity index 100% rename from src/docs/GET_COMMAND.json rename to doc/intrinsics/GET_COMMAND.json diff --git a/src/docs/GET_COMMAND_ARGUMENT.json b/doc/intrinsics/GET_COMMAND_ARGUMENT.json similarity index 100% rename from src/docs/GET_COMMAND_ARGUMENT.json rename to doc/intrinsics/GET_COMMAND_ARGUMENT.json diff --git a/src/docs/GET_ENVIRONMENT_VARIABLE.json b/doc/intrinsics/GET_ENVIRONMENT_VARIABLE.json similarity index 100% rename from src/docs/GET_ENVIRONMENT_VARIABLE.json rename to doc/intrinsics/GET_ENVIRONMENT_VARIABLE.json diff --git a/src/docs/GMTIME.json b/doc/intrinsics/GMTIME.json similarity index 100% rename from src/docs/GMTIME.json rename to doc/intrinsics/GMTIME.json diff --git a/src/docs/HOSTNM.json b/doc/intrinsics/HOSTNM.json similarity index 100% rename from src/docs/HOSTNM.json rename to doc/intrinsics/HOSTNM.json diff --git a/src/docs/HUGE.json b/doc/intrinsics/HUGE.json similarity index 100% rename from src/docs/HUGE.json rename to doc/intrinsics/HUGE.json diff --git a/src/docs/HYPOT.json b/doc/intrinsics/HYPOT.json similarity index 100% rename from src/docs/HYPOT.json rename to doc/intrinsics/HYPOT.json diff --git a/src/docs/IACHAR.json b/doc/intrinsics/IACHAR.json similarity index 100% rename from src/docs/IACHAR.json rename to doc/intrinsics/IACHAR.json diff --git a/src/docs/IALL.json b/doc/intrinsics/IALL.json similarity index 100% rename from src/docs/IALL.json rename to doc/intrinsics/IALL.json diff --git a/src/docs/IAND.json b/doc/intrinsics/IAND.json similarity index 100% rename from src/docs/IAND.json rename to doc/intrinsics/IAND.json diff --git a/src/docs/IANY.json b/doc/intrinsics/IANY.json similarity index 100% rename from src/docs/IANY.json rename to doc/intrinsics/IANY.json diff --git a/src/docs/IARGC.json b/doc/intrinsics/IARGC.json similarity index 100% rename from src/docs/IARGC.json rename to doc/intrinsics/IARGC.json diff --git a/src/docs/IBCLR.json b/doc/intrinsics/IBCLR.json similarity index 100% rename from src/docs/IBCLR.json rename to doc/intrinsics/IBCLR.json diff --git a/src/docs/IBITS.json b/doc/intrinsics/IBITS.json similarity index 100% rename from src/docs/IBITS.json rename to doc/intrinsics/IBITS.json diff --git a/src/docs/IBSET.json b/doc/intrinsics/IBSET.json similarity index 100% rename from src/docs/IBSET.json rename to doc/intrinsics/IBSET.json diff --git a/src/docs/ICHAR.json b/doc/intrinsics/ICHAR.json similarity index 100% rename from src/docs/ICHAR.json rename to doc/intrinsics/ICHAR.json diff --git a/src/docs/IDATE.json b/doc/intrinsics/IDATE.json similarity index 100% rename from src/docs/IDATE.json rename to doc/intrinsics/IDATE.json diff --git a/src/docs/IEOR.json b/doc/intrinsics/IEOR.json similarity index 100% rename from src/docs/IEOR.json rename to doc/intrinsics/IEOR.json diff --git a/src/docs/IERRNO.json b/doc/intrinsics/IERRNO.json similarity index 100% rename from src/docs/IERRNO.json rename to doc/intrinsics/IERRNO.json diff --git a/src/docs/IMAGE_INDEX.json b/doc/intrinsics/IMAGE_INDEX.json similarity index 100% rename from src/docs/IMAGE_INDEX.json rename to doc/intrinsics/IMAGE_INDEX.json diff --git a/src/docs/INDEX.json b/doc/intrinsics/INDEX.json similarity index 100% rename from src/docs/INDEX.json rename to doc/intrinsics/INDEX.json diff --git a/src/docs/INT.json b/doc/intrinsics/INT.json similarity index 100% rename from src/docs/INT.json rename to doc/intrinsics/INT.json diff --git a/src/docs/INT2.json b/doc/intrinsics/INT2.json similarity index 100% rename from src/docs/INT2.json rename to doc/intrinsics/INT2.json diff --git a/src/docs/INT8.json b/doc/intrinsics/INT8.json similarity index 100% rename from src/docs/INT8.json rename to doc/intrinsics/INT8.json diff --git a/src/docs/IOR.json b/doc/intrinsics/IOR.json similarity index 100% rename from src/docs/IOR.json rename to doc/intrinsics/IOR.json diff --git a/src/docs/IPARITY.json b/doc/intrinsics/IPARITY.json similarity index 100% rename from src/docs/IPARITY.json rename to doc/intrinsics/IPARITY.json diff --git a/src/docs/IRAND.json b/doc/intrinsics/IRAND.json similarity index 100% rename from src/docs/IRAND.json rename to doc/intrinsics/IRAND.json diff --git a/src/docs/ISATTY.json b/doc/intrinsics/ISATTY.json similarity index 100% rename from src/docs/ISATTY.json rename to doc/intrinsics/ISATTY.json diff --git a/src/docs/ISHFT.json b/doc/intrinsics/ISHFT.json similarity index 100% rename from src/docs/ISHFT.json rename to doc/intrinsics/ISHFT.json diff --git a/src/docs/ISHFTC.json b/doc/intrinsics/ISHFTC.json similarity index 100% rename from src/docs/ISHFTC.json rename to doc/intrinsics/ISHFTC.json diff --git a/src/docs/ISNAN.json b/doc/intrinsics/ISNAN.json similarity index 100% rename from src/docs/ISNAN.json rename to doc/intrinsics/ISNAN.json diff --git a/src/docs/IS_CONTIGUOUS.json b/doc/intrinsics/IS_CONTIGUOUS.json similarity index 100% rename from src/docs/IS_CONTIGUOUS.json rename to doc/intrinsics/IS_CONTIGUOUS.json diff --git a/src/docs/IS_IOSTAT_END.json b/doc/intrinsics/IS_IOSTAT_END.json similarity index 100% rename from src/docs/IS_IOSTAT_END.json rename to doc/intrinsics/IS_IOSTAT_END.json diff --git a/src/docs/IS_IOSTAT_EOR.json b/doc/intrinsics/IS_IOSTAT_EOR.json similarity index 100% rename from src/docs/IS_IOSTAT_EOR.json rename to doc/intrinsics/IS_IOSTAT_EOR.json diff --git a/src/docs/ITIME.json b/doc/intrinsics/ITIME.json similarity index 100% rename from src/docs/ITIME.json rename to doc/intrinsics/ITIME.json diff --git a/src/docs/KILL.json b/doc/intrinsics/KILL.json similarity index 100% rename from src/docs/KILL.json rename to doc/intrinsics/KILL.json diff --git a/src/docs/KIND.json b/doc/intrinsics/KIND.json similarity index 100% rename from src/docs/KIND.json rename to doc/intrinsics/KIND.json diff --git a/src/docs/LBOUND.json b/doc/intrinsics/LBOUND.json similarity index 100% rename from src/docs/LBOUND.json rename to doc/intrinsics/LBOUND.json diff --git a/src/docs/LCOBOUND.json b/doc/intrinsics/LCOBOUND.json similarity index 100% rename from src/docs/LCOBOUND.json rename to doc/intrinsics/LCOBOUND.json diff --git a/src/docs/LEADZ.json b/doc/intrinsics/LEADZ.json similarity index 100% rename from src/docs/LEADZ.json rename to doc/intrinsics/LEADZ.json diff --git a/src/docs/LEN.json b/doc/intrinsics/LEN.json similarity index 100% rename from src/docs/LEN.json rename to doc/intrinsics/LEN.json diff --git a/src/docs/LEN_TRIM.json b/doc/intrinsics/LEN_TRIM.json similarity index 100% rename from src/docs/LEN_TRIM.json rename to doc/intrinsics/LEN_TRIM.json diff --git a/src/docs/LGE.json b/doc/intrinsics/LGE.json similarity index 100% rename from src/docs/LGE.json rename to doc/intrinsics/LGE.json diff --git a/src/docs/LGT.json b/doc/intrinsics/LGT.json similarity index 100% rename from src/docs/LGT.json rename to doc/intrinsics/LGT.json diff --git a/src/docs/LINK.json b/doc/intrinsics/LINK.json similarity index 100% rename from src/docs/LINK.json rename to doc/intrinsics/LINK.json diff --git a/src/docs/LLE.json b/doc/intrinsics/LLE.json similarity index 100% rename from src/docs/LLE.json rename to doc/intrinsics/LLE.json diff --git a/src/docs/LLT.json b/doc/intrinsics/LLT.json similarity index 100% rename from src/docs/LLT.json rename to doc/intrinsics/LLT.json diff --git a/src/docs/LNBLNK.json b/doc/intrinsics/LNBLNK.json similarity index 100% rename from src/docs/LNBLNK.json rename to doc/intrinsics/LNBLNK.json diff --git a/src/docs/LOC.json b/doc/intrinsics/LOC.json similarity index 100% rename from src/docs/LOC.json rename to doc/intrinsics/LOC.json diff --git a/src/docs/LOG.json b/doc/intrinsics/LOG.json similarity index 100% rename from src/docs/LOG.json rename to doc/intrinsics/LOG.json diff --git a/src/docs/LOG10.json b/doc/intrinsics/LOG10.json similarity index 100% rename from src/docs/LOG10.json rename to doc/intrinsics/LOG10.json diff --git a/src/docs/LOGICAL.json b/doc/intrinsics/LOGICAL.json similarity index 100% rename from src/docs/LOGICAL.json rename to doc/intrinsics/LOGICAL.json diff --git a/src/docs/LOG_GAMMA.json b/doc/intrinsics/LOG_GAMMA.json similarity index 100% rename from src/docs/LOG_GAMMA.json rename to doc/intrinsics/LOG_GAMMA.json diff --git a/src/docs/LONG.json b/doc/intrinsics/LONG.json similarity index 100% rename from src/docs/LONG.json rename to doc/intrinsics/LONG.json diff --git a/src/docs/LSHIFT.json b/doc/intrinsics/LSHIFT.json similarity index 100% rename from src/docs/LSHIFT.json rename to doc/intrinsics/LSHIFT.json diff --git a/src/docs/LSTAT.json b/doc/intrinsics/LSTAT.json similarity index 100% rename from src/docs/LSTAT.json rename to doc/intrinsics/LSTAT.json diff --git a/src/docs/LTIME.json b/doc/intrinsics/LTIME.json similarity index 100% rename from src/docs/LTIME.json rename to doc/intrinsics/LTIME.json diff --git a/src/docs/MALLOC.json b/doc/intrinsics/MALLOC.json similarity index 100% rename from src/docs/MALLOC.json rename to doc/intrinsics/MALLOC.json diff --git a/src/docs/MASKL.json b/doc/intrinsics/MASKL.json similarity index 100% rename from src/docs/MASKL.json rename to doc/intrinsics/MASKL.json diff --git a/src/docs/MASKR.json b/doc/intrinsics/MASKR.json similarity index 100% rename from src/docs/MASKR.json rename to doc/intrinsics/MASKR.json diff --git a/src/docs/MATMUL.json b/doc/intrinsics/MATMUL.json similarity index 100% rename from src/docs/MATMUL.json rename to doc/intrinsics/MATMUL.json diff --git a/src/docs/MAX.json b/doc/intrinsics/MAX.json similarity index 100% rename from src/docs/MAX.json rename to doc/intrinsics/MAX.json diff --git a/src/docs/MAXEXPONENT.json b/doc/intrinsics/MAXEXPONENT.json similarity index 100% rename from src/docs/MAXEXPONENT.json rename to doc/intrinsics/MAXEXPONENT.json diff --git a/src/docs/MAXLOC.json b/doc/intrinsics/MAXLOC.json similarity index 100% rename from src/docs/MAXLOC.json rename to doc/intrinsics/MAXLOC.json diff --git a/src/docs/MAXVAL.json b/doc/intrinsics/MAXVAL.json similarity index 100% rename from src/docs/MAXVAL.json rename to doc/intrinsics/MAXVAL.json diff --git a/src/docs/MCLOCK.json b/doc/intrinsics/MCLOCK.json similarity index 100% rename from src/docs/MCLOCK.json rename to doc/intrinsics/MCLOCK.json diff --git a/src/docs/MCLOCK8.json b/doc/intrinsics/MCLOCK8.json similarity index 100% rename from src/docs/MCLOCK8.json rename to doc/intrinsics/MCLOCK8.json diff --git a/src/docs/MERGE.json b/doc/intrinsics/MERGE.json similarity index 100% rename from src/docs/MERGE.json rename to doc/intrinsics/MERGE.json diff --git a/src/docs/MERGE_BITS.json b/doc/intrinsics/MERGE_BITS.json similarity index 100% rename from src/docs/MERGE_BITS.json rename to doc/intrinsics/MERGE_BITS.json diff --git a/src/docs/MIN.json b/doc/intrinsics/MIN.json similarity index 100% rename from src/docs/MIN.json rename to doc/intrinsics/MIN.json diff --git a/src/docs/MINEXPONENT.json b/doc/intrinsics/MINEXPONENT.json similarity index 100% rename from src/docs/MINEXPONENT.json rename to doc/intrinsics/MINEXPONENT.json diff --git a/src/docs/MINLOC.json b/doc/intrinsics/MINLOC.json similarity index 100% rename from src/docs/MINLOC.json rename to doc/intrinsics/MINLOC.json diff --git a/src/docs/MINVAL.json b/doc/intrinsics/MINVAL.json similarity index 100% rename from src/docs/MINVAL.json rename to doc/intrinsics/MINVAL.json diff --git a/src/docs/MOD.json b/doc/intrinsics/MOD.json similarity index 100% rename from src/docs/MOD.json rename to doc/intrinsics/MOD.json diff --git a/src/docs/MODULO.json b/doc/intrinsics/MODULO.json similarity index 100% rename from src/docs/MODULO.json rename to doc/intrinsics/MODULO.json diff --git a/src/docs/MOVE_ALLOC.json b/doc/intrinsics/MOVE_ALLOC.json similarity index 100% rename from src/docs/MOVE_ALLOC.json rename to doc/intrinsics/MOVE_ALLOC.json diff --git a/src/docs/MVBITS.json b/doc/intrinsics/MVBITS.json similarity index 100% rename from src/docs/MVBITS.json rename to doc/intrinsics/MVBITS.json diff --git a/src/docs/NEAREST.json b/doc/intrinsics/NEAREST.json similarity index 100% rename from src/docs/NEAREST.json rename to doc/intrinsics/NEAREST.json diff --git a/src/docs/NEW_LINE.json b/doc/intrinsics/NEW_LINE.json similarity index 100% rename from src/docs/NEW_LINE.json rename to doc/intrinsics/NEW_LINE.json diff --git a/src/docs/NINT.json b/doc/intrinsics/NINT.json similarity index 100% rename from src/docs/NINT.json rename to doc/intrinsics/NINT.json diff --git a/src/docs/NORM2.json b/doc/intrinsics/NORM2.json similarity index 100% rename from src/docs/NORM2.json rename to doc/intrinsics/NORM2.json diff --git a/src/docs/NOT.json b/doc/intrinsics/NOT.json similarity index 100% rename from src/docs/NOT.json rename to doc/intrinsics/NOT.json diff --git a/src/docs/NULL.json b/doc/intrinsics/NULL.json similarity index 100% rename from src/docs/NULL.json rename to doc/intrinsics/NULL.json diff --git a/src/docs/NUM_IMAGES.json b/doc/intrinsics/NUM_IMAGES.json similarity index 100% rename from src/docs/NUM_IMAGES.json rename to doc/intrinsics/NUM_IMAGES.json diff --git a/src/docs/OR.json b/doc/intrinsics/OR.json similarity index 100% rename from src/docs/OR.json rename to doc/intrinsics/OR.json diff --git a/src/docs/PACK.json b/doc/intrinsics/PACK.json similarity index 100% rename from src/docs/PACK.json rename to doc/intrinsics/PACK.json diff --git a/src/docs/PARITY.json b/doc/intrinsics/PARITY.json similarity index 100% rename from src/docs/PARITY.json rename to doc/intrinsics/PARITY.json diff --git a/src/docs/PERROR.json b/doc/intrinsics/PERROR.json similarity index 100% rename from src/docs/PERROR.json rename to doc/intrinsics/PERROR.json diff --git a/src/docs/POPCNT.json b/doc/intrinsics/POPCNT.json similarity index 100% rename from src/docs/POPCNT.json rename to doc/intrinsics/POPCNT.json diff --git a/src/docs/POPPAR.json b/doc/intrinsics/POPPAR.json similarity index 100% rename from src/docs/POPPAR.json rename to doc/intrinsics/POPPAR.json diff --git a/src/docs/PRECISION.json b/doc/intrinsics/PRECISION.json similarity index 100% rename from src/docs/PRECISION.json rename to doc/intrinsics/PRECISION.json diff --git a/src/docs/PRESENT.json b/doc/intrinsics/PRESENT.json similarity index 100% rename from src/docs/PRESENT.json rename to doc/intrinsics/PRESENT.json diff --git a/src/docs/PRODUCT.json b/doc/intrinsics/PRODUCT.json similarity index 100% rename from src/docs/PRODUCT.json rename to doc/intrinsics/PRODUCT.json diff --git a/src/docs/RADIX.json b/doc/intrinsics/RADIX.json similarity index 100% rename from src/docs/RADIX.json rename to doc/intrinsics/RADIX.json diff --git a/src/docs/RAN.json b/doc/intrinsics/RAN.json similarity index 100% rename from src/docs/RAN.json rename to doc/intrinsics/RAN.json diff --git a/src/docs/RAND.json b/doc/intrinsics/RAND.json similarity index 100% rename from src/docs/RAND.json rename to doc/intrinsics/RAND.json diff --git a/src/docs/RANDOM_INIT.json b/doc/intrinsics/RANDOM_INIT.json similarity index 100% rename from src/docs/RANDOM_INIT.json rename to doc/intrinsics/RANDOM_INIT.json diff --git a/src/docs/RANDOM_NUMBER.json b/doc/intrinsics/RANDOM_NUMBER.json similarity index 100% rename from src/docs/RANDOM_NUMBER.json rename to doc/intrinsics/RANDOM_NUMBER.json diff --git a/src/docs/RANDOM_SEED.json b/doc/intrinsics/RANDOM_SEED.json similarity index 100% rename from src/docs/RANDOM_SEED.json rename to doc/intrinsics/RANDOM_SEED.json diff --git a/src/docs/RANGE.json b/doc/intrinsics/RANGE.json similarity index 100% rename from src/docs/RANGE.json rename to doc/intrinsics/RANGE.json diff --git a/src/docs/RANK.json b/doc/intrinsics/RANK.json similarity index 100% rename from src/docs/RANK.json rename to doc/intrinsics/RANK.json diff --git a/src/docs/REAL.json b/doc/intrinsics/REAL.json similarity index 100% rename from src/docs/REAL.json rename to doc/intrinsics/REAL.json diff --git a/src/docs/RENAME.json b/doc/intrinsics/RENAME.json similarity index 100% rename from src/docs/RENAME.json rename to doc/intrinsics/RENAME.json diff --git a/src/docs/REPEAT.json b/doc/intrinsics/REPEAT.json similarity index 100% rename from src/docs/REPEAT.json rename to doc/intrinsics/REPEAT.json diff --git a/src/docs/RESHAPE.json b/doc/intrinsics/RESHAPE.json similarity index 100% rename from src/docs/RESHAPE.json rename to doc/intrinsics/RESHAPE.json diff --git a/src/docs/RRSPACING.json b/doc/intrinsics/RRSPACING.json similarity index 100% rename from src/docs/RRSPACING.json rename to doc/intrinsics/RRSPACING.json diff --git a/src/docs/RSHIFT.json b/doc/intrinsics/RSHIFT.json similarity index 100% rename from src/docs/RSHIFT.json rename to doc/intrinsics/RSHIFT.json diff --git a/src/docs/SAME_TYPE_AS.json b/doc/intrinsics/SAME_TYPE_AS.json similarity index 100% rename from src/docs/SAME_TYPE_AS.json rename to doc/intrinsics/SAME_TYPE_AS.json diff --git a/src/docs/SCALE.json b/doc/intrinsics/SCALE.json similarity index 100% rename from src/docs/SCALE.json rename to doc/intrinsics/SCALE.json diff --git a/src/docs/SCAN.json b/doc/intrinsics/SCAN.json similarity index 100% rename from src/docs/SCAN.json rename to doc/intrinsics/SCAN.json diff --git a/src/docs/SECNDS.json b/doc/intrinsics/SECNDS.json similarity index 100% rename from src/docs/SECNDS.json rename to doc/intrinsics/SECNDS.json diff --git a/src/docs/SECOND.json b/doc/intrinsics/SECOND.json similarity index 100% rename from src/docs/SECOND.json rename to doc/intrinsics/SECOND.json diff --git a/src/docs/SELECTED_CHAR_KIND.json b/doc/intrinsics/SELECTED_CHAR_KIND.json similarity index 100% rename from src/docs/SELECTED_CHAR_KIND.json rename to doc/intrinsics/SELECTED_CHAR_KIND.json diff --git a/src/docs/SELECTED_INT_KIND.json b/doc/intrinsics/SELECTED_INT_KIND.json similarity index 100% rename from src/docs/SELECTED_INT_KIND.json rename to doc/intrinsics/SELECTED_INT_KIND.json diff --git a/src/docs/SELECTED_REAL_KIND.json b/doc/intrinsics/SELECTED_REAL_KIND.json similarity index 100% rename from src/docs/SELECTED_REAL_KIND.json rename to doc/intrinsics/SELECTED_REAL_KIND.json diff --git a/src/docs/SET_EXPONENT.json b/doc/intrinsics/SET_EXPONENT.json similarity index 100% rename from src/docs/SET_EXPONENT.json rename to doc/intrinsics/SET_EXPONENT.json diff --git a/src/docs/SHAPE.json b/doc/intrinsics/SHAPE.json similarity index 100% rename from src/docs/SHAPE.json rename to doc/intrinsics/SHAPE.json diff --git a/src/docs/SHIFTA.json b/doc/intrinsics/SHIFTA.json similarity index 100% rename from src/docs/SHIFTA.json rename to doc/intrinsics/SHIFTA.json diff --git a/src/docs/SHIFTL.json b/doc/intrinsics/SHIFTL.json similarity index 100% rename from src/docs/SHIFTL.json rename to doc/intrinsics/SHIFTL.json diff --git a/src/docs/SHIFTR.json b/doc/intrinsics/SHIFTR.json similarity index 100% rename from src/docs/SHIFTR.json rename to doc/intrinsics/SHIFTR.json diff --git a/src/docs/SIGN.json b/doc/intrinsics/SIGN.json similarity index 100% rename from src/docs/SIGN.json rename to doc/intrinsics/SIGN.json diff --git a/src/docs/SIGNAL.json b/doc/intrinsics/SIGNAL.json similarity index 100% rename from src/docs/SIGNAL.json rename to doc/intrinsics/SIGNAL.json diff --git a/src/docs/SIN.json b/doc/intrinsics/SIN.json similarity index 100% rename from src/docs/SIN.json rename to doc/intrinsics/SIN.json diff --git a/src/docs/SIND.json b/doc/intrinsics/SIND.json similarity index 100% rename from src/docs/SIND.json rename to doc/intrinsics/SIND.json diff --git a/src/docs/SINH.json b/doc/intrinsics/SINH.json similarity index 100% rename from src/docs/SINH.json rename to doc/intrinsics/SINH.json diff --git a/src/docs/SIZE.json b/doc/intrinsics/SIZE.json similarity index 100% rename from src/docs/SIZE.json rename to doc/intrinsics/SIZE.json diff --git a/src/docs/SIZEOF.json b/doc/intrinsics/SIZEOF.json similarity index 100% rename from src/docs/SIZEOF.json rename to doc/intrinsics/SIZEOF.json diff --git a/src/docs/SLEEP.json b/doc/intrinsics/SLEEP.json similarity index 100% rename from src/docs/SLEEP.json rename to doc/intrinsics/SLEEP.json diff --git a/src/docs/SPACING.json b/doc/intrinsics/SPACING.json similarity index 100% rename from src/docs/SPACING.json rename to doc/intrinsics/SPACING.json diff --git a/src/docs/SPREAD.json b/doc/intrinsics/SPREAD.json similarity index 100% rename from src/docs/SPREAD.json rename to doc/intrinsics/SPREAD.json diff --git a/src/docs/SQRT.json b/doc/intrinsics/SQRT.json similarity index 100% rename from src/docs/SQRT.json rename to doc/intrinsics/SQRT.json diff --git a/src/docs/SRAND.json b/doc/intrinsics/SRAND.json similarity index 100% rename from src/docs/SRAND.json rename to doc/intrinsics/SRAND.json diff --git a/src/docs/STAT.json b/doc/intrinsics/STAT.json similarity index 100% rename from src/docs/STAT.json rename to doc/intrinsics/STAT.json diff --git a/src/docs/STORAGE_SIZE.json b/doc/intrinsics/STORAGE_SIZE.json similarity index 100% rename from src/docs/STORAGE_SIZE.json rename to doc/intrinsics/STORAGE_SIZE.json diff --git a/src/docs/SUM.json b/doc/intrinsics/SUM.json similarity index 100% rename from src/docs/SUM.json rename to doc/intrinsics/SUM.json diff --git a/src/docs/SYMLNK.json b/doc/intrinsics/SYMLNK.json similarity index 100% rename from src/docs/SYMLNK.json rename to doc/intrinsics/SYMLNK.json diff --git a/src/docs/SYSTEM.json b/doc/intrinsics/SYSTEM.json similarity index 100% rename from src/docs/SYSTEM.json rename to doc/intrinsics/SYSTEM.json diff --git a/src/docs/SYSTEM_CLOCK.json b/doc/intrinsics/SYSTEM_CLOCK.json similarity index 100% rename from src/docs/SYSTEM_CLOCK.json rename to doc/intrinsics/SYSTEM_CLOCK.json diff --git a/src/docs/TAN.json b/doc/intrinsics/TAN.json similarity index 100% rename from src/docs/TAN.json rename to doc/intrinsics/TAN.json diff --git a/src/docs/TAND.json b/doc/intrinsics/TAND.json similarity index 100% rename from src/docs/TAND.json rename to doc/intrinsics/TAND.json diff --git a/src/docs/TANH.json b/doc/intrinsics/TANH.json similarity index 100% rename from src/docs/TANH.json rename to doc/intrinsics/TANH.json diff --git a/src/docs/THIS_IMAGE.json b/doc/intrinsics/THIS_IMAGE.json similarity index 100% rename from src/docs/THIS_IMAGE.json rename to doc/intrinsics/THIS_IMAGE.json diff --git a/src/docs/TIME.json b/doc/intrinsics/TIME.json similarity index 100% rename from src/docs/TIME.json rename to doc/intrinsics/TIME.json diff --git a/src/docs/TIME8.json b/doc/intrinsics/TIME8.json similarity index 100% rename from src/docs/TIME8.json rename to doc/intrinsics/TIME8.json diff --git a/src/docs/TINY.json b/doc/intrinsics/TINY.json similarity index 100% rename from src/docs/TINY.json rename to doc/intrinsics/TINY.json diff --git a/src/docs/TRAILZ.json b/doc/intrinsics/TRAILZ.json similarity index 100% rename from src/docs/TRAILZ.json rename to doc/intrinsics/TRAILZ.json diff --git a/src/docs/TRANSFER.json b/doc/intrinsics/TRANSFER.json similarity index 100% rename from src/docs/TRANSFER.json rename to doc/intrinsics/TRANSFER.json diff --git a/src/docs/TRANSPOSE.json b/doc/intrinsics/TRANSPOSE.json similarity index 100% rename from src/docs/TRANSPOSE.json rename to doc/intrinsics/TRANSPOSE.json diff --git a/src/docs/TRIM.json b/doc/intrinsics/TRIM.json similarity index 100% rename from src/docs/TRIM.json rename to doc/intrinsics/TRIM.json diff --git a/src/docs/TTYNAM.json b/doc/intrinsics/TTYNAM.json similarity index 100% rename from src/docs/TTYNAM.json rename to doc/intrinsics/TTYNAM.json diff --git a/src/docs/UBOUND.json b/doc/intrinsics/UBOUND.json similarity index 100% rename from src/docs/UBOUND.json rename to doc/intrinsics/UBOUND.json diff --git a/src/docs/UCOBOUND.json b/doc/intrinsics/UCOBOUND.json similarity index 100% rename from src/docs/UCOBOUND.json rename to doc/intrinsics/UCOBOUND.json diff --git a/src/docs/UMASK.json b/doc/intrinsics/UMASK.json similarity index 100% rename from src/docs/UMASK.json rename to doc/intrinsics/UMASK.json diff --git a/src/docs/UNLINK.json b/doc/intrinsics/UNLINK.json similarity index 100% rename from src/docs/UNLINK.json rename to doc/intrinsics/UNLINK.json diff --git a/src/docs/UNPACK.json b/doc/intrinsics/UNPACK.json similarity index 100% rename from src/docs/UNPACK.json rename to doc/intrinsics/UNPACK.json diff --git a/src/docs/VERIFY.json b/doc/intrinsics/VERIFY.json similarity index 100% rename from src/docs/VERIFY.json rename to doc/intrinsics/VERIFY.json diff --git a/src/docs/XOR.json b/doc/intrinsics/XOR.json similarity index 100% rename from src/docs/XOR.json rename to doc/intrinsics/XOR.json diff --git a/images/icon.png b/images/icon.png deleted file mode 100644 index d860a9d5..00000000 Binary files a/images/icon.png and /dev/null differ diff --git a/package-lock.json b/package-lock.json index 07a2bcba..e4b574f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "linter-gfortran", - "version": "2.6.2", + "version": "3.0.2022021000", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "linter-gfortran", - "version": "2.6.2", + "version": "3.0.2022021000", "license": "MIT", "dependencies": { "fast-glob": "^3.2.11", @@ -18,7 +18,7 @@ "@types/glob": "^7.2.0", "@types/mocha": "^9.1.0", "@types/node": "^16.11.21", - "@types/vscode": "^1.30.0", + "@types/vscode": "^1.63.0", "@types/which": "^2.0.1", "@typescript-eslint/eslint-plugin": "^5.11.0", "@typescript-eslint/parser": "^5.10.2", @@ -31,38 +31,50 @@ "lint-staged": "^12.3.2", "mocha": "^9.2.0", "prettier": "^2.5.1", + "ts-loader": "^9.2.6", "typescript": "^4.5.5", - "vscode-tmgrammar-test": "^0.0.11" + "vscode-tmgrammar-test": "^0.0.11", + "webpack": "^5.65.0", + "webpack-cli": "^4.9.1" }, "engines": { - "vscode": "^1.30.x" + "vscode": "^1.63.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.18.0.tgz", - "integrity": "sha512-TjT8KJULV4I6ZiwIoKr6eMs+XpRejqwJ/VA+QPDeFGe9j6bZFKmMJ81EeFsGm6JNZhnzm37aoxVROmTh2PZoyA==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", + "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", "dev": true, "dependencies": { "comment-parser": "1.3.0", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.2" + "jsdoc-type-pratt-parser": "~2.2.3" }, "engines": { "node": "^12 || ^14 || ^16 || ^17" } }, "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", + "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -72,19 +84,10 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -142,6 +145,32 @@ "node": ">= 6" } }, + "node_modules/@types/eslint": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, "node_modules/@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", @@ -153,9 +182,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "node_modules/@types/json5": { @@ -171,21 +200,21 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true }, "node_modules/@types/node": { - "version": "16.11.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.21.tgz", - "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==", + "version": "16.11.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.27.tgz", + "integrity": "sha512-C1pD3kgLoZ56Uuy5lhfOxie4aZlA3UMGLX9rXteq4WitEZH6Rl80mwactt9QG0w0gLFlN/kLBTFnGXtDVWvWQw==", "dev": true }, "node_modules/@types/vscode": { - "version": "1.62.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.62.0.tgz", - "integrity": "sha512-iGlQJ1w5e3qPUryroO6v4lxg3ql1ztdTCwQW3xEwFawdyPLoeUSv48SYfMwc7kQA7h6ThUqflZIjgKAykeF9oA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", + "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==", "dev": true }, "node_modules/@types/which": { @@ -195,14 +224,14 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz", - "integrity": "sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.20.0.tgz", + "integrity": "sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.11.0", - "@typescript-eslint/type-utils": "5.11.0", - "@typescript-eslint/utils": "5.11.0", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/type-utils": "5.20.0", + "@typescript-eslint/utils": "5.20.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -228,14 +257,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", - "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.20.0.tgz", + "integrity": "sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/typescript-estree": "5.20.0", "debug": "^4.3.2" }, "engines": { @@ -254,88 +283,14 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", - "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", - "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", - "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", - "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.10.2", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz", - "integrity": "sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.20.0.tgz", + "integrity": "sha512-h9KtuPZ4D/JuX7rpp1iKg3zOH0WNEa+ZIXwpW/KWmEFDxlA/HSfCMhiyF1HS/drTICjIbpA6OqkAhrP/zkCStg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/visitor-keys": "5.11.0" + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/visitor-keys": "5.20.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -346,12 +301,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz", - "integrity": "sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.20.0.tgz", + "integrity": "sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.11.0", + "@typescript-eslint/utils": "5.20.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -372,9 +327,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz", - "integrity": "sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz", + "integrity": "sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -385,13 +340,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz", - "integrity": "sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.20.0.tgz", + "integrity": "sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/visitor-keys": "5.11.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/visitor-keys": "5.20.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -412,15 +367,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz", - "integrity": "sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.20.0.tgz", + "integrity": "sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.11.0", - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/typescript-estree": "5.11.0", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/typescript-estree": "5.20.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -436,12 +391,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz", - "integrity": "sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.20.0.tgz", + "integrity": "sha512-1flRpNF+0CAQkMNlTJ6L/Z5jiODG/e5+7mk6XwtPOUS3UrTz3UOiAg9jG2VtKsWI6rZQfy4C6a232QNRZTRGlg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.11.0", + "@typescript-eslint/types": "5.20.0", "eslint-visitor-keys": "^3.0.0" }, "engines": { @@ -459,9 +414,9 @@ "dev": true }, "node_modules/@vscode/test-electron": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.2.tgz", - "integrity": "sha512-INjJ0YA9RgR1B/xBl8P4sxww4Dy2996f4Xn5oGTFfC0c2Mm45y/1Id8xmfuoba6tR5i8zZaUIHfEYWe7Rt4uZA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.3.tgz", + "integrity": "sha512-ps/yJ/9ToUZtR1dHfWi1mDXtep1VoyyrmGKC3UnIbScToRQvbUjyy1VMqnMEW3EpMmC3g7+pyThIPtPyCLHyow==", "dev": true, "dependencies": { "http-proxy-agent": "^4.0.1", @@ -473,6 +428,200 @@ "node": ">=8.9.3" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "node_modules/acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", @@ -485,6 +634,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -535,6 +693,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -643,14 +810,15 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -736,6 +904,41 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "node_modules/browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "node_modules/buffer-indexof-polyfill": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", @@ -777,9 +980,9 @@ } }, "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" @@ -788,6 +991,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001332", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, "node_modules/chainsaw": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", @@ -855,6 +1074,15 @@ "node": ">= 6" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -877,16 +1105,16 @@ } }, "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -903,6 +1131,49 @@ "wrap-ansi": "^7.0.0" } }, + "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 + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -971,9 +1242,9 @@ } }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -1006,15 +1277,19 @@ "dev": true }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/diff": { @@ -1059,16 +1334,53 @@ "readable-stream": "^2.0.2" } }, - "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==", + "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 }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "node_modules/electron-to-chromium": { + "version": "1.4.118", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz", + "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-abstract": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -1077,15 +1389,15 @@ "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -1099,6 +1411,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -1138,12 +1465,12 @@ } }, "node_modules/eslint": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", - "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1151,10 +1478,10 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -1209,9 +1536,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", - "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", "dev": true, "dependencies": { "debug": "^3.2.7", @@ -1231,9 +1558,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, "dependencies": { "array-includes": "^3.1.4", @@ -1241,14 +1568,14 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-module-utils": "^2.7.3", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" }, "engines": { "node": ">=4" @@ -1285,12 +1612,12 @@ "dev": true }, "node_modules/eslint-plugin-jsdoc": { - "version": "37.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.8.0.tgz", - "integrity": "sha512-0HvNH9nyKhp06u5vi8lPB97j/luBrkk+6JrcKVBjLQZuVkyzLYfKOYoc9cFHxMKvJMgYVa2F3g+msV2T8IM3jQ==", + "version": "37.9.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", + "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.18.0", + "@es-joy/jsdoccomment": "~0.20.1", "comment-parser": "1.3.0", "debug": "^4.3.3", "escape-string-regexp": "^4.0.0", @@ -1368,18 +1695,18 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -1399,14 +1726,14 @@ } }, "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "dependencies": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1472,6 +1799,15 @@ "node": ">=0.10.0" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -1545,6 +1881,12 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -1611,9 +1953,9 @@ } }, "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "node_modules/fs.realpath": { @@ -1756,10 +2098,16 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1772,16 +2120,16 @@ } }, "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -1792,9 +2140,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/growl": { @@ -1819,9 +2167,9 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1836,10 +2184,22 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { "node": ">= 0.4" @@ -1887,9 +2247,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "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==", "dev": true, "dependencies": { "agent-base": "6", @@ -1948,6 +2308,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -1994,6 +2373,15 @@ "node": ">= 0.4" } }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -2047,9 +2435,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -2082,12 +2470,15 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-glob": { @@ -2102,9 +2493,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { "node": ">= 0.4" @@ -2122,9 +2513,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" @@ -2145,6 +2536,18 @@ "node": ">=8" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -2162,10 +2565,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2225,12 +2631,12 @@ } }, "node_modules/is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2247,6 +2653,44 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2260,14 +2704,20 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.2.tgz", - "integrity": "sha512-zRokSWcPLSWkoNzsWn9pq7YYSwDhKyEe+cJYT2qaPqLOOJb5sFSi46BPj81vP+e8chvCNdQL9RG86Bi9EI6MDw==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", + "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", "dev": true, "engines": { "node": ">=12.0.0" } }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "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", @@ -2292,6 +2742,15 @@ "json5": "lib/cli.js" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2315,9 +2774,9 @@ } }, "node_modules/lint-staged": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.2.tgz", - "integrity": "sha512-gtw4Cbj01SuVSfAOXC6ivd/7VKHTj51yj5xV8TgktFmYNMsZzXuSd5/brqJEA93v63wL7R6iDlunMANOechC0A==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.4.0.tgz", + "integrity": "sha512-3X7MR0h9b7qf4iXf/1n7RlVAx+EzpAZXoCEMhVSpaBlgKDfH2ewf+QUm7BddFyq29v4dgPP+8+uYpWuSWx035A==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", @@ -2330,6 +2789,7 @@ "micromatch": "^4.0.4", "normalize-path": "^3.0.0", "object-inspect": "^1.12.0", + "pidtree": "^0.5.0", "string-argv": "^0.3.1", "supports-color": "^9.2.1", "yaml": "^1.10.2" @@ -2344,161 +2804,123 @@ "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/lint-staged/node_modules/supports-color": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", + "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", "dev": true, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/lint-staged/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "node_modules/listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, "engines": { "node": ">=12" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } } }, - "node_modules/lint-staged/node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/listr2/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 }, - "node_modules/lint-staged/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "node_modules/listr2/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/string-width": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", - "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "node_modules/listr2/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, "dependencies": { - "emoji-regex": "^9.2.2", - "is-fullwidth-code-point": "^4.0.0", - "strip-ansi": "^7.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=6.11.5" } }, - "node_modules/lint-staged/node_modules/supports-color": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", - "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "node_modules/listr2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.2.tgz", - "integrity": "sha512-YcgwfCWpvPbj9FLUGqvdFvd3hrFWKpOeuXznRgfWEJ7RNr8b/IKKIKZABHx3aU+4CWN/iSAFFSReziQG6vTeIA==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.2", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "dependencies": { "p-locate": "^2.0.0", @@ -2548,6 +2970,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update/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 + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -2565,6 +3002,20 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/log-update/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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -2605,17 +3056,38 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -2626,9 +3098,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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" }, @@ -2637,27 +3109,27 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/mocha": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", - "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -2673,9 +3145,9 @@ "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.2.0", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -2697,6 +3169,29 @@ "url": "https://opencollective.com/mochajs" } }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/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 + }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2728,6 +3223,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2795,9 +3302,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -2812,6 +3319,18 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==", + "dev": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3027,10 +3546,16 @@ "node": ">=8" } }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -3038,6 +3563,100 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3048,15 +3667,18 @@ } }, "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { @@ -3147,6 +3769,18 @@ "node": ">=8.10.0" } }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -3178,18 +3812,43 @@ } }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3265,9 +3924,9 @@ } }, "node_modules/rxjs": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", - "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -3293,10 +3952,28 @@ } ] }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3322,6 +3999,18 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3358,9 +4047,9 @@ } }, "node_modules/signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "node_modules/slash": { @@ -3373,29 +4062,62 @@ } }, "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", @@ -3403,9 +4125,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "node_modules/string_decoder": { @@ -3433,17 +4155,47 @@ } }, "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==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/string.prototype.trimend": { @@ -3526,6 +4278,94 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", + "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "dev": true, + "dependencies": { + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3558,22 +4398,41 @@ "node": "*" } }, + "node_modules/ts-loader": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.8.tgz", + "integrity": "sha512-gxSak7IHUuRtwKf3FIPSW1VpZcqF9+MBrHOvBp9cjHh+525SjtCIJKVGjRKIAfxBwDGDGCFF00rTfzB1quxdSw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "node_modules/tsutils": { @@ -3622,9 +4481,9 @@ } }, "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -3724,15 +4583,15 @@ "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, "node_modules/vscode-oniguruma": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.5.1.tgz", - "integrity": "sha512-JrBZH8DCC262TEYcYdeyZusiETu0Vli0xFgdRwNJjDcObcRjbmJP+IFcA3ScBwIXwgFHYKbAgfxtM/Cl+3Spjw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", + "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==", "dev": true }, "node_modules/vscode-textmate": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.4.1.tgz", - "integrity": "sha512-4CvPHmfuZQaXrcCpathdh6jo7myuR+MU8BvscgQADuponpbqfmu2rwTOtCXhGwwEgStvJF8V4s9FwMKRVLNmKQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.5.0.tgz", + "integrity": "sha512-jToQkPGMNKn0eyKyitYeINJF0NoD240aYyKPIWJv5W2jfPt++jIRg0OSergubtGhbw6SoefkvBYEpX7TsfoSUQ==", "dev": true }, "node_modules/vscode-tmgrammar-test": { @@ -3839,6 +4698,140 @@ "node": ">=4" } }, + "node_modules/watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.72.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", + "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3869,6 +4862,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -3901,6 +4900,35 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/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 + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3971,6 +4999,35 @@ "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 + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -3985,46 +5042,44 @@ } }, "dependencies": { + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, "@es-joy/jsdoccomment": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.18.0.tgz", - "integrity": "sha512-TjT8KJULV4I6ZiwIoKr6eMs+XpRejqwJ/VA+QPDeFGe9j6bZFKmMJ81EeFsGm6JNZhnzm37aoxVROmTh2PZoyA==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", + "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", "dev": true, "requires": { "comment-parser": "1.3.0", "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.2" + "jsdoc-type-pratt-parser": "~2.2.3" } }, "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", + "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } } }, "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -4067,6 +5122,32 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@types/eslint": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, "@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", @@ -4078,9 +5159,9 @@ } }, "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/json5": { @@ -4096,21 +5177,21 @@ "dev": true }, "@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true }, "@types/node": { - "version": "16.11.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.21.tgz", - "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==", + "version": "16.11.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.27.tgz", + "integrity": "sha512-C1pD3kgLoZ56Uuy5lhfOxie4aZlA3UMGLX9rXteq4WitEZH6Rl80mwactt9QG0w0gLFlN/kLBTFnGXtDVWvWQw==", "dev": true }, "@types/vscode": { - "version": "1.62.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.62.0.tgz", - "integrity": "sha512-iGlQJ1w5e3qPUryroO6v4lxg3ql1ztdTCwQW3xEwFawdyPLoeUSv48SYfMwc7kQA7h6ThUqflZIjgKAykeF9oA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", + "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==", "dev": true }, "@types/which": { @@ -4120,14 +5201,14 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz", - "integrity": "sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.20.0.tgz", + "integrity": "sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.11.0", - "@typescript-eslint/type-utils": "5.11.0", - "@typescript-eslint/utils": "5.11.0", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/type-utils": "5.20.0", + "@typescript-eslint/utils": "5.20.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -4137,150 +5218,295 @@ } }, "@typescript-eslint/parser": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", - "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.20.0.tgz", + "integrity": "sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/typescript-estree": "5.20.0", "debug": "^4.3.2" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", - "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2" - } - }, - "@typescript-eslint/types": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", - "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", - "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", - "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.10.2", - "eslint-visitor-keys": "^3.0.0" - } - } } }, "@typescript-eslint/scope-manager": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz", - "integrity": "sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.20.0.tgz", + "integrity": "sha512-h9KtuPZ4D/JuX7rpp1iKg3zOH0WNEa+ZIXwpW/KWmEFDxlA/HSfCMhiyF1HS/drTICjIbpA6OqkAhrP/zkCStg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/visitor-keys": "5.11.0" + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/visitor-keys": "5.20.0" } }, "@typescript-eslint/type-utils": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz", - "integrity": "sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.20.0.tgz", + "integrity": "sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.11.0", + "@typescript-eslint/utils": "5.20.0", "debug": "^4.3.2", "tsutils": "^3.21.0" } }, - "@typescript-eslint/types": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz", - "integrity": "sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz", - "integrity": "sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg==", + "@typescript-eslint/types": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.20.0.tgz", + "integrity": "sha512-+d8wprF9GyvPwtoB4CxBAR/s0rpP25XKgnOvMf/gMXYDvlUC3rPFHupdTQ/ow9vn7UDe5rX02ovGYQbv/IUCbg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.20.0.tgz", + "integrity": "sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/visitor-keys": "5.20.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.20.0.tgz", + "integrity": "sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.20.0", + "@typescript-eslint/types": "5.20.0", + "@typescript-eslint/typescript-estree": "5.20.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.20.0.tgz", + "integrity": "sha512-1flRpNF+0CAQkMNlTJ6L/Z5jiODG/e5+7mk6XwtPOUS3UrTz3UOiAg9jG2VtKsWI6rZQfy4C6a232QNRZTRGlg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.20.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "@vscode/test-electron": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.3.tgz", + "integrity": "sha512-ps/yJ/9ToUZtR1dHfWi1mDXtep1VoyyrmGKC3UnIbScToRQvbUjyy1VMqnMEW3EpMmC3g7+pyThIPtPyCLHyow==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/visitor-keys": "5.11.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, - "@typescript-eslint/utils": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz", - "integrity": "sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw==", + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.11.0", - "@typescript-eslint/types": "5.11.0", - "@typescript-eslint/typescript-estree": "5.11.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "@typescript-eslint/visitor-keys": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz", - "integrity": "sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA==", + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.11.0", - "eslint-visitor-keys": "^3.0.0" + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true + "@webpack-cli/configtest": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", + "dev": true, + "requires": {} }, - "@vscode/test-electron": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.2.tgz", - "integrity": "sha512-INjJ0YA9RgR1B/xBl8P4sxww4Dy2996f4Xn5oGTFfC0c2Mm45y/1Id8xmfuoba6tR5i8zZaUIHfEYWe7Rt4uZA==", + "@webpack-cli/info": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", "dev": true, "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" + "envinfo": "^7.7.3" } }, + "@webpack-cli/serve": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -4319,6 +5545,13 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -4393,14 +5626,15 @@ "dev": true }, "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" } }, "astral-regex": { @@ -4465,6 +5699,25 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, "buffer-indexof-polyfill": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", @@ -4494,9 +5747,15 @@ "dev": true }, "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001332", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", "dev": true }, "chainsaw": { @@ -4545,6 +5804,12 @@ } } }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -4561,13 +5826,13 @@ } }, "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" } }, "cliui": { @@ -4579,6 +5844,42 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "color-convert": { @@ -4637,9 +5938,9 @@ } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -4658,12 +5959,13 @@ "dev": true }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "diff": { @@ -4699,16 +6001,44 @@ "readable-stream": "^2.0.2" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.118", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz", + "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==", + "dev": true + }, "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", + "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -4717,15 +6047,15 @@ "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -4733,6 +6063,21 @@ "unbox-primitive": "^1.0.1" } }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -4757,12 +6102,12 @@ "dev": true }, "eslint": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", - "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -4770,10 +6115,10 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -4800,9 +6145,9 @@ }, "dependencies": { "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -4839,9 +6184,9 @@ } }, "eslint-module-utils": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", - "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", "dev": true, "requires": { "debug": "^3.2.7", @@ -4860,9 +6205,9 @@ } }, "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -4870,14 +6215,14 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-module-utils": "^2.7.3", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" }, "dependencies": { "debug": { @@ -4907,12 +6252,12 @@ } }, "eslint-plugin-jsdoc": { - "version": "37.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.8.0.tgz", - "integrity": "sha512-0HvNH9nyKhp06u5vi8lPB97j/luBrkk+6JrcKVBjLQZuVkyzLYfKOYoc9cFHxMKvJMgYVa2F3g+msV2T8IM3jQ==", + "version": "37.9.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", + "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.18.0", + "@es-joy/jsdoccomment": "~0.20.1", "comment-parser": "1.3.0", "debug": "^4.3.3", "escape-string-regexp": "^4.0.0", @@ -4959,20 +6304,20 @@ } }, "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "requires": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "eslint-visitor-keys": "^3.3.0" } }, "esquery": { @@ -5021,6 +6366,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -5084,6 +6435,12 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -5135,9 +6492,9 @@ } }, "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "fs.realpath": { @@ -5242,33 +6599,39 @@ "is-glob": "^4.0.3" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "growl": { @@ -5287,9 +6650,9 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { @@ -5298,10 +6661,19 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-tostringtag": { @@ -5331,9 +6703,9 @@ } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "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==", "dev": true, "requires": { "agent-base": "6", @@ -5368,6 +6740,16 @@ "resolve-from": "^4.0.0" } }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5405,6 +6787,12 @@ "side-channel": "^1.0.4" } }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -5440,9 +6828,9 @@ "dev": true }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" @@ -5463,9 +6851,9 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true }, "is-glob": { @@ -5477,9 +6865,9 @@ } }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-number": { @@ -5488,9 +6876,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -5502,6 +6890,15 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5513,10 +6910,13 @@ } }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "2.0.1", @@ -5549,12 +6949,12 @@ "dev": true }, "is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" } }, "isarray": { @@ -5568,6 +6968,34 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5578,9 +7006,15 @@ } }, "jsdoc-type-pratt-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.2.tgz", - "integrity": "sha512-zRokSWcPLSWkoNzsWn9pq7YYSwDhKyEe+cJYT2qaPqLOOJb5sFSi46BPj81vP+e8chvCNdQL9RG86Bi9EI6MDw==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", + "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema-traverse": { @@ -5604,6 +7038,12 @@ "minimist": "^1.2.0" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5621,9 +7061,9 @@ "dev": true }, "lint-staged": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.2.tgz", - "integrity": "sha512-gtw4Cbj01SuVSfAOXC6ivd/7VKHTj51yj5xV8TgktFmYNMsZzXuSd5/brqJEA93v63wL7R6iDlunMANOechC0A==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.4.0.tgz", + "integrity": "sha512-3X7MR0h9b7qf4iXf/1n7RlVAx+EzpAZXoCEMhVSpaBlgKDfH2ewf+QUm7BddFyq29v4dgPP+8+uYpWuSWx035A==", "dev": true, "requires": { "cli-truncate": "^3.1.0", @@ -5636,105 +7076,94 @@ "micromatch": "^4.0.4", "normalize-path": "^3.0.0", "object-inspect": "^1.12.0", + "pidtree": "^0.5.0", "string-argv": "^0.3.1", "supports-color": "^9.2.1", "yaml": "^1.10.2" }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "supports-color": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", + "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", "dev": true - }, + } + } + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" } }, "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - } - }, - "string-width": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", - "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { - "emoji-regex": "^9.2.2", - "is-fullwidth-code-point": "^4.0.0", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "ansi-regex": "^6.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } - }, - "supports-color": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", - "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", - "dev": true } } }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true }, - "listr2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.2.tgz", - "integrity": "sha512-YcgwfCWpvPbj9FLUGqvdFvd3hrFWKpOeuXznRgfWEJ7RNr8b/IKKIKZABHx3aU+4CWN/iSAFFSReziQG6vTeIA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.2", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - } - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -5773,6 +7202,18 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -5784,6 +7225,17 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -5817,12 +7269,27 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -5832,32 +7299,32 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "mocha": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", - "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -5873,9 +7340,9 @@ "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.2.0", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -5886,6 +7353,23 @@ "yargs-unparser": "2.0.0" }, "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "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 + } + } + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -5905,6 +7389,15 @@ "p-locate": "^5.0.0" } }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -5953,9 +7446,9 @@ "dev": true }, "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true }, "natural-compare": { @@ -5964,6 +7457,18 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-releases": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==", + "dev": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6116,10 +7621,82 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pidtree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } }, "prelude-ls": { "version": "1.2.1", @@ -6128,9 +7705,9 @@ "dev": true }, "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true }, "prettier-linter-helpers": { @@ -6200,6 +7777,15 @@ "picomatch": "^2.2.1" } }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -6219,13 +7805,31 @@ "dev": true }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, "resolve-from": { @@ -6273,9 +7877,9 @@ } }, "rxjs": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", - "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -6287,10 +7891,21 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { "lru-cache": "^6.0.0" } @@ -6310,6 +7925,15 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6337,9 +7961,9 @@ } }, "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "slash": { @@ -6349,14 +7973,37 @@ "dev": true }, "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "spdx-exceptions": { @@ -6376,9 +8023,9 @@ } }, "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "string_decoder": { @@ -6405,14 +8052,31 @@ "dev": true }, "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "string.prototype.trimend": { @@ -6471,6 +8135,57 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", + "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", + "dev": true, + "requires": { + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -6497,22 +8212,34 @@ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", "dev": true }, + "ts-loader": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.8.tgz", + "integrity": "sha512-gxSak7IHUuRtwKf3FIPSW1VpZcqF9+MBrHOvBp9cjHh+525SjtCIJKVGjRKIAfxBwDGDGCFF00rTfzB1quxdSw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + } + }, "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "tsutils": { @@ -6548,9 +8275,9 @@ "dev": true }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "unbox-primitive": { @@ -6634,15 +8361,15 @@ "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, "vscode-oniguruma": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.5.1.tgz", - "integrity": "sha512-JrBZH8DCC262TEYcYdeyZusiETu0Vli0xFgdRwNJjDcObcRjbmJP+IFcA3ScBwIXwgFHYKbAgfxtM/Cl+3Spjw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", + "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==", "dev": true }, "vscode-textmate": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.4.1.tgz", - "integrity": "sha512-4CvPHmfuZQaXrcCpathdh6jo7myuR+MU8BvscgQADuponpbqfmu2rwTOtCXhGwwEgStvJF8V4s9FwMKRVLNmKQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.5.0.tgz", + "integrity": "sha512-jToQkPGMNKn0eyKyitYeINJF0NoD240aYyKPIWJv5W2jfPt++jIRg0OSergubtGhbw6SoefkvBYEpX7TsfoSUQ==", "dev": true }, "vscode-tmgrammar-test": { @@ -6729,6 +8456,92 @@ } } }, + "watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.72.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz", + "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.9.2", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" + } + }, + "webpack-cli": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6750,6 +8563,12 @@ "is-symbol": "^1.0.3" } }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -6771,6 +8590,31 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } } }, "wrappy": { @@ -6808,6 +8652,31 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } } }, "yargs-parser": { diff --git a/package.json b/package.json index 6ee6e86b..ec6bca22 100644 --- a/package.json +++ b/package.json @@ -2,28 +2,32 @@ "name": "linter-gfortran", "displayName": "Modern Fortran", "description": "Modern Fortran language support, including syntax highlighting and error detection.", - "version": "2.6.2", + "version": "3.0.2022021000", "publisher": "krvajalm", "license": "MIT", "author": { - "email": "krvajal.miguelangel@gmail.com", - "name": "Miguel Carvajal" + "name": "The Fortran Programming Language", + "url": "https://fortran-lang.org" }, "maintainers": [ + { + "email": "krvajal.miguelangel@gmail.com", + "name": "Miguel Carvajal" + }, { "email": "giannis.nikiteas@gmail.com", "name": "Giannis Nikiteas" } ], "engines": { - "vscode": "^1.30.x" + "vscode": "^1.63.0" }, - "icon": "images/icon.png", - "homepage": "https://github.com/krvajalmiguelangel/vscode-fortran-support", - "qna": "https://github.com/krvajalmiguelangel/vscode-fortran-support/issues", + "icon": "assets/icon.png", + "homepage": "https://github.com/fortran-lang/vscode-fortran-support#readme", + "qna": "https://github.com/fortran-lang/vscode-fortran-support/issues", "repository": { "type": "git", - "url": "https://github.com/krvajalmiguelangel/vscode-fortran-support.git" + "url": "https://github.com/fortran-lang/vscode-fortran-support.git" }, "keywords": [ "Fortran", @@ -43,7 +47,7 @@ "onLanguage:FortranFreeForm", "onLanguage:FortranFixedForm" ], - "main": "./out/src/extension", + "main": "./dist/extension.js", "extensionDependencies": [ "ms-vscode.cpptools" ], @@ -128,7 +132,48 @@ "type": "object", "title": "Fortran configuration", "properties": { - "fortran.includePaths": { + "fortran.provide.hover": { + "type": "string", + "default": "fortls", + "enum": [ + "fortls", + "Built-in", + "Both", + "Disabled" + ], + "description": "Enables hover support, by default it uses fortls." + }, + "fortran.provide.autocomplete": { + "type": "string", + "default": "fortls", + "enum": [ + "fortls", + "Built-in", + "Disabled" + ], + "description": "Enables code autocompletion, by default it uses fortls." + }, + "fortran.provide.symbols": { + "type": "string", + "default": "fortls", + "enum": [ + "fortls", + "Both" + ], + "description": "Outline of modules, functions, subroutines, etc. in the document, by default it uses fortls, `Both` will use `fortls` and the `Built-in` functionality (not recommended)." + }, + "fortran.linter.compiler": { + "type": "string", + "default": "gfortran", + "enum": [ + "gfortran", + "flang", + "ifort", + "Disabled" + ], + "description": "Compiler used for linting support." + }, + "fortran.linter.includePaths": { "type": [ "array" ], @@ -136,34 +181,26 @@ "type": "string" }, "default": [], - "description": "Specifies folder paths to be used as include path for the Fortran linter" + "description": "Specifies folder paths to be used as include paths during linting. Can resolve glob patterns e.g. `/usr/local/include/**` and internal variables with `~`, `${workspaceFolder}`, `${env}`, `${config}`, `${file}`, `${fileDirname}`, `${fileBasenameNoExtension}`" }, - "fortran.gfortranExecutable": { + "fortran.linter.compilerPath": { "type": "string", - "default": "gfortran", - "description": "Specifies the complete path of the gfortran executable" - }, - "fortran.linterEnabled": { - "type": "boolean", - "default": true, - "description": "Enables or disables the linter functionality" + "default": "", + "description": "Specifies the path to the linter executable." }, - "fortran.linterExtraArgs": { + "fortran.linter.extraArgs": { "type": [ "array" ], "items": { "type": "string" }, - "default": [ - "-Wall" - ], - "description": "Specify additional options to use when calling the gfortran compiler" + "description": "Pass additional options to the linter compiler. Can resolve internal variables with `~`, `${workspaceFolder}`, `${env}`, `${config}`, `${file}`, `${fileDirname}`, `${fileBasenameNoExtension}`" }, - "fortran.linterModOutput": { + "fortran.linter.modOutput": { "type": "string", "default": "", - "description": "Global output directory for .mod files `-J`" + "description": "Global output directory for .mod files generated due to linting `-J`. Can resolve internal variables with `~`, `${workspaceFolder}`, `${env}`, `${config}`, `${file}`, `${fileDirname}`, `${fileBasenameNoExtension}`" }, "fortran.formatting.formatter": { "type": "string", @@ -175,43 +212,85 @@ ], "description": "Fortran formatter, currently supports findent and fprettify" }, - "fortran.formatting.args": { + "fortran.formatting.findentArgs": { "type": "array", "default": [], - "description": "Additional arguments for the formatter" + "description": "Additional arguments for the findent formatter" + }, + "fortran.formatting.fprettifyArgs": { + "type": "array", + "default": [], + "description": "Additional arguments for the fprettify formatter" }, "fortran.formatting.path": { "type": "string", "default": "", - "description": "Specify the full path of where the formatter is installed" + "description": "If the formatter is not in the $PATH specify the full path to its location." }, - "fortran.provideSymbols": { + "fortran.fortls.path": { + "type": "string", + "default": "fortls", + "description": "Path to the Fortran language server (fortls)." + }, + "fortran.fortls.configure": { + "type": "string", + "default": "", + "description": "Filename holding additional configuration options. For more see: https://gnikit.github.io/fortls/options.html#configuration-using-a-file" + }, + "fortran.fortls.sortKeywords": { + "type": "boolean", + "default": false, + "description": "Display variable keywords information when hovering in a sorted, consistent order." + }, + "fortran.fortls.disableAutoupdate": { + "type": "boolean", + "default": false, + "description": "fortls will automatically attempt to update itself from PyPi. Set this option if you want to fix your version of fortls. Autoudpate will not occur for Anaconda environments." + }, + "fortran.fortls.disableDiagnostics": { + "type": "boolean", + "default": false, + "description": "Disable additional diagnostics from fortls e.g. multiple variable definitions, unknown modules in use statement (requires v1.12.0+)." + }, + "fortran.fortls.incrementalSync": { "type": "boolean", "default": true, - "description": "Enables or disables symbol functionality (disable if using 'Fortran IntelliSense')" + "description": "Use incremental synchronization for file changes." }, - "fortran.symbols": { + "fortran.fortls.symbolTypes": { + "type": "boolean", + "default": true, + "description": "Include derived types in the symbols outline. If false it adds the `--symbol_skip_mem` argument to fortls." + }, + "fortran.fortls.notifyInit": { + "type": "boolean", + "default": false, + "description": "Notify when workspace initialization is complete (requires v1.7.0+)." + }, + "fortran.fortls.maxLineLength": { + "type": "number", + "default": -1, + "description": "Maximum line length (fortls requires v1.8.0+). For `gfortran` and `flang` this also sets the linting compiler flag `-ffree-line-length-` and `-ffixed-line-length-`. Default value is `none`." + }, + "fortran.fortls.maxCommentLineLength": { + "type": "number", + "default": -1, + "description": "Maximum comment line length (fortls requires v1.8.0+)." + }, + "fortran.fortls.extraArgs": { "type": [ "array" ], "items": { "type": "string" }, - "default": [ - "function", - "subroutine" - ], - "description": "Specify what kind of symbols should be shown by the symbols' provider" - }, - "fortran.provideHover": { - "type": "boolean", - "default": true, - "description": "Enables hover functionality (disable if using 'Fortran IntelliSense')" + "default": [], + "description": "Additional arguments for the fortls" }, - "fortran.provideCompletion": { + "fortran.fortls.disabled": { "type": "boolean", - "default": true, - "description": "Enables or disables completion functionality (disable if using 'Fortran IntelliSense')" + "default": false, + "description": "Disable the Language Server. If true, it will limit the extension's functionality substantially (should be avoid!)" }, "fortran.preferredCase": { "type": "string", @@ -220,12 +299,42 @@ "lowercase", "uppercase" ], - "description": "Specify the word case to use when suggesting autocomplete options (One of 'lowercase' or 'upercase')" + "description": "Specify the word case to use when suggesting autocomplete options." }, "fortran.ignoreWarning.fortls": { "type": "boolean", "default": false, - "description": "Hide error message when the fortran-language-server is not detected" + "description": "Hide error message when the fortls is not detected" + }, + "fortran.includePaths": { + "deprecationMessage": "fortran.includePaths has been renamed to fortran.linter.includePaths." + }, + "fortran.gfortranExecutable": { + "deprecationMessage": "fortran.gfortranExecutable has been renamed to fortran.linter.compilerPath" + }, + "fortran.linterEnabled": { + "deprecationMessage": "fortran.linterEnabled has been renamed to fortran.linter.compiler set to Disable to turn off." + }, + "fortran.linterExtraArgs": { + "deprecationMessage": "fortran.linterExtraArgs has been renamed to fortran.linter.extraArgs" + }, + "fortran.linterModOutput": { + "deprecationMessage": "fortran.linterModOutput has been renamed to fortran.linter.modOutput." + }, + "fortran.provideSymbols": { + "deprecationMessage": "fortran.provideSymbols has been renamed to fortran.provide.symbols. By default the fortls symbols are used, to enable the built-in symbols turn on the Built-in option." + }, + "fortran.symbols": { + "deprecationMessage": "fortran.symbols has been removed in favour of the fortran language server returning all symbols." + }, + "fortran.provideHover": { + "deprecationMessage": "fortran.provideHover has been renamed to fortran.provide.hover. By default the fortls hover is used, to enable the built-in hover turn on the Built-in option." + }, + "fortran.provideCompletion": { + "deprecationMessage": "fortran.provideCompletion has been renamed to fortran.provide.autocomplete. By default the fortls autocompletion is used, to enable the built-in autocompletion turn on the Built-in option." + }, + "fortran.fortls.preserveKeywordOrder": { + "deprecationMessage": "This option is now the default, use fortran.fortls.sortKeywords to sort keywords." } } }, @@ -236,15 +345,53 @@ { "language": "FortranFixedForm" } - ] + ], + "commands": [ + { + "category": "Fortran", + "command": "fortran.analysis.restartLanguageServer", + "title": "Restart the Fortran Language Server" + }, + { + "category": "Fortran", + "command": "fortran.analysis.stopLanguageServer", + "title": "Stop the Fortran Language Server" + }, + { + "category": "Fortran", + "command": "fortran.analysis.startLanguageServer", + "title": "Start the Fortran Language Server" + } + ], + "menus": { + "commandPalette": [ + { + "category": "Fortran", + "command": "fortran.analysis.restartLanguageServer", + "title": "Restart the Fortran Language Server", + "when": "!virtualWorkspace && shellExecutionSupported" + }, + { + "command": "fortran.analysis.stopLanguageServer", + "title": "Stop the Fortran Language Server", + "when": "!virtualWorkspace && shellExecutionSupported" + }, + { + "command": "fortran.analysis.startLanguageServer", + "title": "Start the Fortran Language Server", + "when": "!virtualWorkspace && shellExecutionSupported" + } + ] + } }, "scripts": { "vscode:prepublish": "npm run compile", - "compile": "tsc -p tsconfig.prod.json", - "compile-dev": "tsc -p tsconfig.json", - "watch": "tsc -watch -p tsconfig.prod.json", - "watch-dev": "tsc -watch -p tsconfig.json", - "pretest": "tsc -p tsconfig.test.json", + "compile": "webpack --mode production", + "compile-dev": "webpack --mode development", + "watch": "webpack --mode production --watch --progress", + "watch-dev": "webpack --mode development --watch --progress", + "webpack": "webpack --mode production", + "pretest": "npm run compile-dev && tsc -p tsconfig.test.json", "test": "node ./out/test/runTest.js", "test:grammar-free": "vscode-tmgrammar-snap -s source.fortran.free -g ./syntaxes/fortran_free-form.tmLanguage.json -t \"./test/**/*{.f90,F90}\"", "test:grammar-fixed": "vscode-tmgrammar-snap -s source.fortran.fixed -g ./syntaxes/fortran_fixed-form.tmLanguage.json -t \"./test/**/*{.f,F}\"", @@ -260,7 +407,7 @@ "@types/glob": "^7.2.0", "@types/mocha": "^9.1.0", "@types/node": "^16.11.21", - "@types/vscode": "^1.30.0", + "@types/vscode": "^1.63.0", "@types/which": "^2.0.1", "@typescript-eslint/eslint-plugin": "^5.11.0", "@typescript-eslint/parser": "^5.10.2", @@ -273,8 +420,11 @@ "lint-staged": "^12.3.2", "mocha": "^9.2.0", "prettier": "^2.5.1", + "ts-loader": "^9.2.6", "typescript": "^4.5.5", - "vscode-tmgrammar-test": "^0.0.11" + "vscode-tmgrammar-test": "^0.0.11", + "webpack": "^5.65.0", + "webpack-cli": "^4.9.1" }, "lint-staged": { "*.ts": [ diff --git a/snippets/fortran90.json b/snippets/fortran90.json index 565ff500..b403baf2 100644 --- a/snippets/fortran90.json +++ b/snippets/fortran90.json @@ -25,9 +25,9 @@ "prefix": "fun", "body": [ "function ${1:func}(${2:arg}) result(${3:retval})", - "\timplicit none", - "\t${4:type} :: ${2:arg}", - "\t${4:type} :: ${3:retval}", + "\t${4:integer}, intent(in) :: ${2:arg}", + "\t${5:integer} :: ${3:retval}", + "", "\t${0}", "end function ${1:func}" ], @@ -37,14 +37,31 @@ "prefix": "sub", "body": [ "subroutine ${1:routine}(${2:arg1}, ${3: arg2})", - "implicit none", - "${4:type1},intent(in) :: ${2:arg1}", - "${5:type2},intent(out) :: ${3:arg2}", - "${0}", + "\t${4:type1}, intent(${5:in}) :: ${2:arg1}", + "\t${6:type2}, intent(${7:out}) :: ${3:arg2}", + "", + "\t${0}", "end subroutine ${1:routine}" ], "description": "Create a subroutine" }, + "Type": { + "prefix": "typ", + "body": [ + "type, public :: ${1:type_name}", + "\t${2:integer} :: ${3:var}", + "\t${4}", + "", + "private", + "\t${5}", + "", + "contains", + "\t${0}", + "", + "end type ${1:type_name}" + ], + "description": "Create a new type" + }, "ifs": { "prefix": "if", "body": ["if ( ${1:condition} ) ${0}"], diff --git a/src/extension.ts b/src/extension.ts index 8bf93146..a54a33f5 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,88 +1,137 @@ // src/extension.ts -import * as which from 'which'; import * as vscode from 'vscode'; - -import FortranLintingProvider from './features/linter-provider'; -import FortranHoverProvider from './features/hover-provider'; +import which from 'which'; +import * as pkg from '../package.json'; +import { registerCommands } from './features/commands'; import { FortranCompletionProvider } from './features/completion-provider'; import { FortranDocumentSymbolProvider } from './features/document-symbol-provider'; - -import { LoggingService } from './services/logging-service'; -import * as pkg from '../package.json'; -import { LANG_SERVER_TOOL_ID } from './lib/tools'; import { FortranFormattingProvider } from './features/formatting-provider'; -import { EXTENSION_ID, FortranDocumentSelector, promptForMissingTool } from './lib/tools'; +import { FortranLanguageServer } from './features/fortls-interface'; +import { FortranHoverProvider } from './features/hover-provider'; +import { FortranLintingProvider } from './features/linter-provider'; +import { + EXTENSION_ID, + FortranDocumentSelector, + LANG_SERVER_TOOL_ID, + promptForMissingTool, +} from './lib/tools'; +import { LoggingService } from './services/logging-service'; // Make it global to catch errors when activation fails const loggingService = new LoggingService(); -export function activate(context: vscode.ExtensionContext) { - const extensionConfig = vscode.workspace.getConfiguration(EXTENSION_ID); +export async function activate(context: vscode.ExtensionContext) { + const config = vscode.workspace.getConfiguration(EXTENSION_ID); + const linterType = config.get('linter.compiler'); + const formatterType = config.get('formatting.formatter'); + const autocompleteType = config.get('provide.autocomplete'); + const hoverType = config.get('provide.hover'); + const symbolsType = config.get('provide.symbols'); + detectDeprecatedOptions(); loggingService.logInfo(`Extension Name: ${pkg.displayName}`); loggingService.logInfo(`Extension Version: ${pkg.version}`); + loggingService.logInfo(`Linter set to: ${linterType}`); + loggingService.logInfo(`Formatter set to: ${formatterType}`); + loggingService.logInfo(`Autocomplete set to: ${autocompleteType}`); + loggingService.logInfo(`Hover set to: ${hoverType}`); + loggingService.logInfo(`Symbols set to: ${symbolsType}`); - if (extensionConfig.get('linterEnabled', true)) { - const linter = new FortranLintingProvider(loggingService); - linter.activate(context.subscriptions); - vscode.languages.registerCodeActionsProvider(FortranDocumentSelector(), linter); - loggingService.logInfo('Linter is enabled'); - } else { - loggingService.logInfo('Linter is not enabled'); - } + // Linter is always activated but will only lint if compiler !== Disabled + const linter = new FortranLintingProvider(loggingService); + linter.activate(context.subscriptions); + vscode.languages.registerCodeActionsProvider(FortranDocumentSelector(), linter); - if (extensionConfig.get('formatter') !== 'Disabled') { + if (formatterType !== 'Disabled') { const disposable: vscode.Disposable = vscode.languages.registerDocumentFormattingEditProvider( FortranDocumentSelector(), new FortranFormattingProvider(loggingService) ); context.subscriptions.push(disposable); - loggingService.logInfo('Formatting is enabled'); - } else { - loggingService.logInfo('Formatting is disabled'); } - if (extensionConfig.get('provideCompletion', true)) { + if (autocompleteType === 'Built-in') { const completionProvider = new FortranCompletionProvider(loggingService); vscode.languages.registerCompletionItemProvider(FortranDocumentSelector(), completionProvider); - } else { - loggingService.logInfo('Completion Provider is not enabled'); } - if (extensionConfig.get('provideHover', true)) { + if (hoverType === 'Built-in' || hoverType === 'Both') { const hoverProvider = new FortranHoverProvider(loggingService); vscode.languages.registerHoverProvider(FortranDocumentSelector(), hoverProvider); - loggingService.logInfo('Hover Provider is enabled'); - } else { - loggingService.logInfo('Hover Provider is not enabled'); } - if (extensionConfig.get('provideSymbols', true)) { + if (symbolsType === 'Both') { const symbolProvider = new FortranDocumentSymbolProvider(); vscode.languages.registerDocumentSymbolProvider(FortranDocumentSelector(), symbolProvider); - loggingService.logInfo('Symbol Provider is enabled'); - } else { - loggingService.logInfo('Symbol Provider is not enabled'); } + registerCommands(context.subscriptions); + // Check if the language server is installed and if not prompt to install it - if (!which.sync('fortls', { nothrow: true })) { - const msg = `It is highly recommended to use the fortran-language-server to - enable hover, peeking, gotos and many more. + // Not the most elegant solution but we need pip install to have finished + // before the activate function is called so we do a little code duplication + if (!config.get('fortls.disabled')) { + which(config.get('fortls.path'), (err: any) => { + if (!config.get('ignoreWarning.fortls')) { + if (err) { + const msg = `It is highly recommended to use the fortls to + enable IDE features like hover, peeking, gotos and many more. For a full list of features the language server adds see: - https://github.com/hansec/fortran-language-server`; + https://github.com/gnikit/fortls`; + promptForMissingTool( + LANG_SERVER_TOOL_ID, + msg, + 'Python', + ['Install', "Don't Show Again"], + loggingService, + () => { + config.update('ignoreWarning.fortls', true); + } + ).then(() => { + // fortls not installed AND Warnings are enabled + new FortranLanguageServer(loggingService).activate(); + }); + } + // Ignore fortls Warnings NOT set. Activate the LS + else { + new FortranLanguageServer(loggingService).activate(); + } + } + // Ignore fortls Warnings are SET. Activate the LS + else { + new FortranLanguageServer(loggingService).activate(); + } + }); + } +} + +function detectDeprecatedOptions() { + const config = vscode.workspace.getConfiguration(EXTENSION_ID); + const oldArgs: string[] = []; + if (config.get('includePaths')) oldArgs.push('fortran.includePaths'); + if (config.get('gfortranExecutable')) oldArgs.push('fortran.gfortranExecutable'); + if (config.get('linterEnabled')) oldArgs.push('fortran.linterEnabled'); + if (config.get('linterExtraArgs')) oldArgs.push('fortran.linterExtraArgs'); + if (config.get('linterModOutput')) oldArgs.push('fortran.linterModOutput'); + if (config.get('symbols')) oldArgs.push('fortran.symbols'); + if (config.get('provideSymbols')) oldArgs.push('fortran.provideSymbols'); + if (config.get('provideHover')) oldArgs.push('fortran.provideHover'); + if (config.get('provideCompletion')) oldArgs.push('fortran.provideCompletion'); - if (!extensionConfig.get('ignoreWarning.fortls')) { - promptForMissingTool( - LANG_SERVER_TOOL_ID, - msg, - 'Python', - ['Install', "Don't Show Again"], - loggingService, - () => { - extensionConfig.update('ignoreWarning.fortls', true); + // only captures config options set to true but the package.json deprecation + // descriptions should take care of the rest + if (oldArgs.length !== 0) { + vscode.window + .showErrorMessage( + `Deprecated settings have been detected in your settings. + Please update your settings to make use of the new names. The old names will not work.`, + 'Open Settings' + ) + .then(selected => { + if (selected === 'Open Settings') { + vscode.commands.executeCommand('workbench.action.openGlobalSettings'); } - ); - } + loggingService.logError(`The following deprecated options have been detected:\n${oldArgs}`); + }); } } diff --git a/src/features/commands.ts b/src/features/commands.ts new file mode 100644 index 00000000..baa191af --- /dev/null +++ b/src/features/commands.ts @@ -0,0 +1,47 @@ +'use strict'; + +import * as vscode from 'vscode'; +import { checkLanguageServerActivation, clients } from './fortls-interface'; + +export const RestartLS = 'fortran.analysis.restartLanguageServer'; +export const StarttLS = 'fortran.analysis.startLanguageServer'; +export const StoptLS = 'fortran.analysis.stopLanguageServer'; + +let commandsActivated = false; + +export function registerCommands(disposables: vscode.Disposable[]): void { + if (commandsActivated) return; + + commandsActivated = true; + disposables.push(vscode.commands.registerCommand(RestartLS, onRestartLS)); + disposables.push(vscode.commands.registerCommand(StarttLS, onStartLS)); + disposables.push(vscode.commands.registerCommand(StoptLS, onStopLS)); +} + +function onRestartLS(): void { + const activeEditor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; + vscode.window.showInformationMessage('Restarting the Fortran Language Server'); + const folder = checkLanguageServerActivation(activeEditor.document); + + if (!folder) return; + clients.get(folder.uri.toString()).stop(); + clients.get(folder.uri.toString()).start(); +} + +function onStartLS(): void { + const activeEditor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; + vscode.window.showInformationMessage('Starting the Fortran Language Server'); + const folder = checkLanguageServerActivation(activeEditor.document); + + if (!folder) return; + clients.get(folder.uri.toString()).start(); +} + +function onStopLS(): void { + const activeEditor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; + vscode.window.showInformationMessage('Stopping the Fortran Language Server'); + const folder = checkLanguageServerActivation(activeEditor.document); + + if (!folder) return; + clients.get(folder.uri.toString()).stop(); +} diff --git a/src/features/document-symbol-provider.ts b/src/features/document-symbol-provider.ts index a435da5d..ac237a13 100644 --- a/src/features/document-symbol-provider.ts +++ b/src/features/document-symbol-provider.ts @@ -13,6 +13,7 @@ import { parseSubroutine as getDeclaredSubroutine, } from '../lib/functions'; import { parseVars as getDeclaredVar } from '../lib/variables'; +import { EXTENSION_ID } from '../lib/tools'; type SymbolType = 'subroutine' | 'function' | 'variable'; type ParserFunc = (line: TextLine) => SymbolInformation | undefined; @@ -98,8 +99,9 @@ export class FortranDocumentSymbolProvider implements vscode.DocumentSymbolProvi } getSymbolTypes() { - const config = vscode.workspace.getConfiguration('fortran'); - const symbolTypes = config.get('symbols', ['subroutine', 'function']); + const config = vscode.workspace.getConfiguration(EXTENSION_ID); + // It does not make much sense for this to be an input option + const symbolTypes: SymbolType[] = ['subroutine', 'function']; return symbolTypes; } } diff --git a/src/features/formatting-provider.ts b/src/features/formatting-provider.ts index e57a2d1c..121689fd 100644 --- a/src/features/formatting-provider.ts +++ b/src/features/formatting-provider.ts @@ -7,27 +7,35 @@ import * as vscode from 'vscode'; import * as cp from 'child_process'; import { LoggingService } from '../services/logging-service'; -import { FORMATTERS, EXTENSION_ID, promptForMissingTool } from '../lib/tools'; +import { + FORMATTERS, + EXTENSION_ID, + promptForMissingTool, + getWholeFileRange, + spawnAsPromise, +} from '../lib/tools'; export class FortranFormattingProvider implements vscode.DocumentFormattingEditProvider { + private readonly workspace = vscode.workspace.getConfiguration(EXTENSION_ID); + private formatter: string | undefined; constructor(private logger: LoggingService) {} - public provideDocumentFormattingEdits( + public async provideDocumentFormattingEdits( document: vscode.TextDocument, options: vscode.FormattingOptions, token: vscode.CancellationToken - ): vscode.ProviderResult { + ): Promise { const formatterName: string = this.getFormatter(); if (formatterName === 'fprettify') { - this.doFormatFprettify(document); + return this.doFormatFprettify(document); } else if (formatterName === 'findent') { - this.doFormatFindent(document); + return this.doFormatFindent(document); } else { this.logger.logError('Cannot format document with formatter set to Disabled'); } - return; + return undefined; } /** @@ -35,15 +43,15 @@ export class FortranFormattingProvider implements vscode.DocumentFormattingEditP * * @param document vscode.TextDocument document to operate on */ - private doFormatFprettify(document: vscode.TextDocument) { + private async doFormatFprettify(document: vscode.TextDocument): Promise { // fprettify can only do FortranFreeFrom if (document.languageId !== 'FortranFreeForm') { this.logger.logError(`fprettify can only format FortranFreeForm, change to findent for FortranFixedForm formatting`); - return; + return undefined; } - const formatterName = 'fprettify'; + const formatterName = process.platform !== 'win32' ? 'fprettify' : 'fprettify.exe'; const formatterPath: string = this.getFormatterPath(); const formatter: string = path.join(formatterPath, formatterName); // If no formatter is detected try and install it @@ -54,37 +62,22 @@ export class FortranFormattingProvider implements vscode.DocumentFormattingEditP promptForMissingTool(formatterName, msg, 'Python', ['Install'], this.logger); } - const args: string[] = [document.fileName, ...this.getFormatterArgs()]; - // args.push('--silent'); // TODO: pass? - - // Get current file (name rel to path), run extension can be in a shell?? - const process = cp.spawn(formatter, args); - - // if the findent then capture the output from that and parse it back to the file - process.stdout.on('data', data => { - this.logger.logInfo(`formatter stdout: ${data}`); - }); - process.stderr.on('data', data => { - this.logger.logError(`formatter stderr: ${data}`); - }); - process.on('close', (code: number) => { - if (code !== 0) this.logger.logInfo(`formatter exited with code: ${code}`); - }); - process.on('error', code => { - this.logger.logInfo(`formatter exited with code: ${code}`); - }); + const args: string[] = ['--stdout', ...this.getFormatterArgs()]; + const edits: vscode.TextEdit[] = []; + const output = await spawnAsPromise(formatter, args, undefined, document.getText()); + edits.push(new vscode.TextEdit(getWholeFileRange(document), output)); + return edits; } /** * Use `findent` to format a Fortran file. - * Creates a temporary file where the output is placed and then deleted * * @param document vscode.TextDocument document to operate on */ - private doFormatFindent(document: vscode.TextDocument) { - const formatterName = 'findent'; + private async doFormatFindent(document: vscode.TextDocument): Promise { + const formatterName = process.platform !== 'win32' ? 'findent' : 'findent.exe'; const formatterPath: string = this.getFormatterPath(); - let formatter: string = path.join(formatterPath, formatterName); + const formatter: string = path.join(formatterPath, formatterName); // If no formatter is detected try and install it if (!which.sync(formatter, { nothrow: true })) { this.logger.logWarning(`Formatter: ${formatterName} not detected in your system. @@ -93,21 +86,11 @@ export class FortranFormattingProvider implements vscode.DocumentFormattingEditP promptForMissingTool(formatterName, msg, 'Python', ['Install'], this.logger); } - // Annoyingly findent only outputs to a file and not to a stream so - // let us go and create a temporary file - const out = document.uri.path + '.findent.tmp'; - const args: string = ['< ' + document.fileName + ' >', out, ...this.getFormatterArgs()].join( - ' ' - ); - formatter = formatter + ' ' + args; - - // @note It is wise to have all IO operations being synchronous we don't - // want to copy or delete the temp file before findent has completed. - // I cannot forsee a situation where a performance bottleneck is created - // since findent performs something like ~100k lines per second - cp.execSync(formatter, { stdio: 'inherit' }); - fs.copyFileSync(out, document.fileName); - fs.unlinkSync(out); + const args: string[] = this.getFormatterArgs(); + const edits: vscode.TextEdit[] = []; + const output = await spawnAsPromise(formatter, args, undefined, document.getText()); + edits.push(new vscode.TextEdit(getWholeFileRange(document), output)); + return edits; } /** @@ -119,13 +102,12 @@ export class FortranFormattingProvider implements vscode.DocumentFormattingEditP * @returns {string} formatter name or `Disabled` */ private getFormatter(): string { - const config = vscode.workspace.getConfiguration(EXTENSION_ID); - const formatter: string = config.get('formatting.formatter', 'Disabled'); + this.formatter = this.workspace.get('formatting.formatter', 'Disabled'); - if (!FORMATTERS.includes(formatter)) { - this.logger.logError(`Unsupported formatter: ${formatter}`); + if (!FORMATTERS.includes(this.formatter)) { + this.logger.logError(`Unsupported formatter: ${this.formatter}`); } - return formatter; + return this.formatter; } /** @@ -134,9 +116,7 @@ export class FortranFormattingProvider implements vscode.DocumentFormattingEditP * @returns {string[]} list of additional arguments */ private getFormatterArgs(): string[] { - const config = vscode.workspace.getConfiguration(EXTENSION_ID); - const args: string[] = config.get('formatting.args', []); - + const args: string[] = this.workspace.get(`formatting.${this.formatter}Args`, []); return args; } @@ -146,8 +126,7 @@ export class FortranFormattingProvider implements vscode.DocumentFormattingEditP * @returns {string} path of formatter */ private getFormatterPath(): string { - const config = vscode.workspace.getConfiguration(EXTENSION_ID); - const formatterPath: string = config.get('formatting.path', ''); + const formatterPath: string = this.workspace.get('formatting.path', ''); if (formatterPath !== '') { this.logger.logInfo(`Formatter located in: ${formatterPath}`); } diff --git a/src/features/fortls-interface.ts b/src/features/fortls-interface.ts new file mode 100644 index 00000000..87e0416a --- /dev/null +++ b/src/features/fortls-interface.ts @@ -0,0 +1,218 @@ +// Modified version of Chris Hansen's Fortran Intellisense + +'use strict'; + +import { spawnSync } from 'child_process'; +import { commands, window, workspace, TextDocument, WorkspaceFolder } from 'vscode'; +import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node'; +import { EXTENSION_ID, FortranDocumentSelector } from '../lib/tools'; +import { LoggingService } from '../services/logging-service'; + +// The clients are non member variables of the class because they need to be +// shared for command registration. The command operates on the client and not +// the server +export const clients: Map = new Map(); + +/** + * Checks if the Language Server should run in the current workspace and return + * the workspace folder if it should else return undefined. + * @param document the active VS Code editor + * @returns the root workspace folder or undefined + */ +export function checkLanguageServerActivation(document: TextDocument): WorkspaceFolder | undefined { + // We are only interested in Fortran files + if ( + !FortranDocumentSelector().some(e => e.scheme === document.uri.scheme) || + !FortranDocumentSelector().some(e => e.language === document.languageId) + ) { + return undefined; + } + const uri = document.uri; + const folder = workspace.getWorkspaceFolder(uri); + // Files outside a folder can't be handled. This might depend on the language. + // Single file languages like JSON might handle files outside the workspace folders. + // This will be undefined if the file does not belong to the workspace + if (!folder) return undefined; + if (clients.has(folder.uri.toString())) return undefined; + + return folder; +} + +export class FortranLanguageServer { + constructor(private logger: LoggingService) { + this.logger.logInfo('Fortran Language Server'); + } + + private _fortlsVersion: string | undefined; + + public async activate() { + workspace.onDidOpenTextDocument(this.didOpenTextDocument, this); + workspace.textDocuments.forEach(this.didOpenTextDocument, this); + return; + } + + public async deactivate(): Promise { + const promises: Thenable[] = []; + for (const client of clients.values()) { + promises.push(client.stop()); + } + await Promise.all(promises); + return undefined; + } + + /** + * Launch fortls. This launches the server for all + * glob matches in the workspace and caches it. + * + * for references on the method see: + * https://code.visualstudio.com/api/language-extensions/language-server-extension-guide#implementing-a-language-server + * + * @param document document to lint + * @returns + */ + private async didOpenTextDocument(document: TextDocument): Promise { + const folder = checkLanguageServerActivation(document); + if (!folder) return; + + this.logger.logInfo('Initialising the Fortran Language Server'); + + const args: string[] = await this.fortlsArguments(); + const executablePath = workspace.getConfiguration(EXTENSION_ID).get('fortls.path'); + + // Detect language server version and verify selected options + this._fortlsVersion = this.getLSVersion(executablePath, args); + if (this._fortlsVersion) { + const serverOptions: ServerOptions = { + command: executablePath, + args: args, + }; + + // Options to control the language client + const clientOptions: LanguageClientOptions = { + // Register the server for all Fortran documents in workspace + // NOTE: remove the folder args and workspaceFolder to ge single file language servers + // will also have to change the checkLanguageServerActivation method + // we want fortran documents but not just in the workspace + // if in the workspace do provide + documentSelector: FortranDocumentSelector(folder), + workspaceFolder: folder, + }; + + // Create the language client, start the client and add it to the registry + const client = new LanguageClient( + 'fortls', + 'Fortran Language Server', + serverOptions, + clientOptions + ); + client.start(); + clients.set(folder.uri.toString(), client); + } + } + + /** + * Sets `fortls` arguments based on VS Code settings + * @returns argument list + */ + private async fortlsArguments() { + // Get path for the language server + const conf = workspace.getConfiguration(EXTENSION_ID); + const executablePath = conf.get('fortls.path'); + const maxLineLength = conf.get('fortls.maxLineLength'); + const maxCommentLineLength = conf.get('fortls.maxCommentLineLength'); + const fortlsExtraArgs = conf.get('fortls.extraArgs'); + const autocomplete = conf.get('provide.autocomplete'); + const letterCase = conf.get('preferredCase'); + const hover = conf.get('provide.hover'); + + // Setup server arguments + const args: string[] = ['--enable_code_actions']; + if (autocomplete === 'Disabled' || autocomplete === 'Built-in') { + args.push('--autocomplete_no_prefix'); + } + // Enable all hover functionality. Does not make much sense to have one + // but not the other two + if (hover === 'fortls' || hover === 'Both') { + args.push('--hover_signature', '--use_signature_help'); + } + if (letterCase === 'lowercase') args.push('--lowercase_intrinsics'); + + // FORTLS specific args with no overlap with the main extension + if (conf.get('fortls.configure')) { + args.push('-c', conf.get('fortls.configure')); + } + if (conf.get('fortls.notifyInit')) { + args.push('--notify_init'); + } + if (conf.get('fortls.incrementalSync')) { + args.push('--incremental_sync'); + } + if (conf.get('fortls.sortKeywords')) { + args.push('--sort_keywords'); + } + if (conf.get('fortls.disableAutoupdate')) { + args.push('--disable_autoupdate'); + } + if (conf.get('fortls.disableDiagnostics')) { + args.push('--disable_diagnostics'); + } + if (!conf.get('fortls.symbolTypes')) { + args.push('--symbol_skip_mem'); + } + if (maxLineLength > 0) { + args.push(`--max_line_length=${maxLineLength}`); + } + if (maxCommentLineLength > 0) { + args.push(`--max_comment_line_length=${maxCommentLineLength}`); + } + if (fortlsExtraArgs.length > 0) { + args.push(...fortlsExtraArgs); + } + + return args; + } + + /** + * Check if `fortls` is present and the arguments being passed are correct + * The presence check has already been done in the extension activate call + * + * Code taken from Fortran Intellisense + * + * @param executablePath path for `fortls` if not in path else `fortls` + * @param args `fortls` input arguments see documentation + * @returns truthy value on success + */ + private getLSVersion(executablePath: string, args: string[]) { + const results = spawnSync(executablePath, args.concat(['--version'])); + if (results.error) { + const selected = window.showErrorMessage( + 'Error starting fortls: Check that fortls is in your PATH or that "fortran.fortls.path" is pointing to a fortls binary.', + 'Settings', + 'Workspace settings', + 'Disable fortls' + ); + selected.then(opt => { + const config = workspace.getConfiguration(EXTENSION_ID); + if (opt === 'Settings') commands.executeCommand('workbench.action.openGlobalSettings'); + else if (opt === 'Workspace settings') + commands.executeCommand('workbench.action.openWorkspaceSettings'); + else if (opt === 'Disable fortls') config.update('fortls.disabled', true); + }); + return null; + } + if (results.status !== 0) { + const selected = window.showErrorMessage( + 'Error launching fortls: Please check that all selected options are supported by your language server version.', + 'Settings', + 'Workspace settings' + ); + selected.then(opt => { + if (opt === 'Settings') commands.executeCommand('workbench.action.openGlobalSettings'); + else if (opt === 'Workspace settings') + commands.executeCommand('workbench.action.openWorkspaceSettings'); + }); + return null; + } + return results.stdout.toString().trim(); + } +} diff --git a/src/features/hover-provider.ts b/src/features/hover-provider.ts index ed885e47..44f83ddc 100644 --- a/src/features/hover-provider.ts +++ b/src/features/hover-provider.ts @@ -3,7 +3,7 @@ import { CancellationToken, TextDocument, Position, Hover } from 'vscode'; import { isIntrinsic, loadDocString } from '../lib/helper'; import { LoggingService } from '../services/logging-service'; -export default class FortranHoverProvider { +export class FortranHoverProvider { constructor(private loggingService: LoggingService) {} public provideHover( document: TextDocument, diff --git a/src/features/linter-provider.ts b/src/features/linter-provider.ts index 510ec9b5..11cacfd2 100644 --- a/src/features/linter-provider.ts +++ b/src/features/linter-provider.ts @@ -8,16 +8,53 @@ import { LoggingService } from '../services/logging-service'; import { FortranDocumentSelector, resolveVariables } from '../lib/tools'; import * as fg from 'fast-glob'; import { glob } from 'glob'; +import { arraysEqual } from '../lib/helper'; -export default class FortranLintingProvider { - constructor(private loggingService: LoggingService) {} +export class FortranLintingProvider { + constructor(private logger: LoggingService = new LoggingService()) {} private diagnosticCollection: vscode.DiagnosticCollection; + private compiler: string; + private compilerPath: string; + private cache = { includePaths: [''], globIncPaths: [''] }; - private doModernFortranLint(textDocument: vscode.TextDocument) { - const errorRegex = - /^([a-zA-Z]:\\)*([^:]*):([0-9]+):([0-9]+):\s+(.*)\s+.*?\s+(Error|Warning|Fatal Error):\s(.*)$/gm; + public provideCodeActions( + document: vscode.TextDocument, + range: vscode.Range, + context: vscode.CodeActionContext, + token: vscode.CancellationToken + ): vscode.Command[] { + return; + } + + public async activate(subscriptions: vscode.Disposable[]) { + this.diagnosticCollection = vscode.languages.createDiagnosticCollection('Fortran'); + + vscode.workspace.onDidOpenTextDocument(this.doModernFortranLint, this, subscriptions); + vscode.workspace.onDidCloseTextDocument( + textDocument => { + this.diagnosticCollection.delete(textDocument.uri); + }, + null, + subscriptions + ); + + vscode.workspace.onDidSaveTextDocument(this.doModernFortranLint, this); + // Run gfortran in all open fortran files + vscode.workspace.textDocuments.forEach(this.doModernFortranLint, this); + } + + public dispose(): void { + this.diagnosticCollection.clear(); + this.diagnosticCollection.dispose(); + // this.command.dispose(); + } + + private doModernFortranLint(textDocument: vscode.TextDocument) { + // Only lint if a compiler is specified + const config = vscode.workspace.getConfiguration('fortran.linter'); + if (config.get('fortran.linter.compiler') === 'Disabled') return; // Only lint Fortran (free, fixed) format files if ( !FortranDocumentSelector().some(e => e.scheme === textDocument.uri.scheme) || @@ -26,17 +63,15 @@ export default class FortranLintingProvider { return; } - let decoded = ''; - const diagnostics: vscode.Diagnostic[] = []; - const command = this.getGfortranPath(); + let compilerOutput = ''; + const command = this.getLinterExecutable(); const argList = this.constructArgumentList(textDocument); - const filePath = path.parse(textDocument.fileName).dir; /* * reset localization settings to traditional C English behavior in case * gfortran is set up to use the system provided localization information, - * so errorRegex can nevertheless be used to filter out errors and warnings + * so linterREGEX can nevertheless be used to filter out errors and warnings * * see also: https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html */ @@ -55,41 +90,23 @@ export default class FortranLintingProvider { if (childProcess.pid) { childProcess.stdout.on('data', (data: Buffer) => { - decoded += data; + compilerOutput += data; }); childProcess.stderr.on('data', data => { - decoded += data; + compilerOutput += data; }); childProcess.stderr.on('end', () => { - let matchesArray: string[]; - while ((matchesArray = errorRegex.exec(decoded)) !== null) { - const elements: string[] = matchesArray.slice(1); // get captured expressions - const startLine = parseInt(elements[2]); - const startColumn = parseInt(elements[3]); - const type = elements[5]; // error or warning - const severity = - type.toLowerCase() === 'warning' - ? vscode.DiagnosticSeverity.Warning - : vscode.DiagnosticSeverity.Error; - const message = elements[6]; - const range = new vscode.Range( - new vscode.Position(startLine - 1, startColumn), - new vscode.Position(startLine - 1, startColumn) - ); - const diagnostic = new vscode.Diagnostic(range, message, severity); - diagnostics.push(diagnostic); - } - + const diagnostics = this.getLinterResults(compilerOutput); this.diagnosticCollection.set(textDocument.uri, diagnostics); }); - childProcess.stdout.on('close', code => { - console.log(`child process exited with code ${code}`); + childProcess.on('error', err => { + console.log(`ERROR: ${err}`); }); } else { childProcess.on('error', (err: any) => { if (err.code === 'ENOENT') { vscode.window.showErrorMessage( - "gfortran can't found on path, update your settings with a proper path or disable the linter." + "Linter can't be found in $PATH. Update your settings with a proper path or disable the linter." ); } }); @@ -98,11 +115,9 @@ export default class FortranLintingProvider { private constructArgumentList(textDocument: vscode.TextDocument): string[] { const args = [ - '-fsyntax-only', - '-cpp', - '-fdiagnostics-show-option', - ...this.getLinterExtraArgs(), - this.getModOutputDir(), + ...this.getMandatoryLinterArgs(this.compiler), + ...this.getLinterExtraArgs(this.compiler), + this.getModOutputDir(this.compiler), ]; const includePaths = this.getIncludePaths(); @@ -118,111 +133,317 @@ export default class FortranLintingProvider { return argList.map(arg => arg.trim()).filter(arg => arg !== ''); } - private static commandId = 'fortran.lint.runCodeAction'; - - public provideCodeActions( - document: vscode.TextDocument, - range: vscode.Range, - context: vscode.CodeActionContext, - token: vscode.CancellationToken - ): vscode.Command[] { - return; - // let diagnostic: vscode.Diagnostic = context.diagnostics[0]; - // return [{ - // title: "Accept gfortran suggestion", - // command: FortranLintingProvider.commandId, - // arguments: [document, diagnostic.range, diagnostic.message] - // }]; - } - - private command: vscode.Disposable; - - public activate(subscriptions: vscode.Disposable[]) { - this.diagnosticCollection = vscode.languages.createDiagnosticCollection('Fortran'); - - vscode.workspace.onDidOpenTextDocument(this.doModernFortranLint, this, subscriptions); - vscode.workspace.onDidCloseTextDocument( - textDocument => { - this.diagnosticCollection.delete(textDocument.uri); - }, - null, - subscriptions - ); - - vscode.workspace.onDidSaveTextDocument(this.doModernFortranLint, this); - - // Run gfortran in all open fortran files - vscode.workspace.textDocuments.forEach(this.doModernFortranLint, this); - } - - public dispose(): void { - this.diagnosticCollection.clear(); - this.diagnosticCollection.dispose(); - this.command.dispose(); - } - - private getModOutputDir(): string { + private getModOutputDir(compiler: string): string { const config = vscode.workspace.getConfiguration('fortran'); - let modout: string = config.get('linterModOutput', ''); + let modout: string = config.get('linter.modOutput', ''); + let modFlag = '-J'; + switch (compiler) { + case 'ifort': + modFlag = '-module '; + break; + + default: + modFlag = '-J'; + break; + } if (modout) { - modout = '-J' + resolveVariables(modout); - this.loggingService.logInfo(`Linter.moduleOutput`); + modout = modFlag + resolveVariables(modout); + this.logger.logInfo(`Linter.moduleOutput: ${modout}`); } return modout; } + /** + * Resolves, interpolates and expands internal variables and glob patterns + * for the `linter.includePaths` option. The results are stored in a cache + * to improve performance + * + * @returns String Array of directories + */ private getIncludePaths(): string[] { const config = vscode.workspace.getConfiguration('fortran'); - const includePaths: string[] = config.get('includePaths', []); + let includePaths: string[] = config.get('linter.includePaths', []); + + // Check if we can use the cached results for the include directories no + // need to evaluate the glob patterns everytime we call the linter + if (arraysEqual(includePaths, this.cache['includePaths'])) { + return this.cache['globIncPaths']; + } + + // Update our cache input + this.cache['includePaths'] = includePaths; // Output the original include paths - this.loggingService.logInfo(`Linter.include:\n${includePaths.join('\r\n')}`); + this.logger.logInfo(`Linter.include:\n${includePaths.join('\r\n')}`); // Resolve internal variables and expand glob patterns const resIncludePaths = includePaths.map(e => resolveVariables(e)); + // fast-glob cannot work with Windows paths + includePaths = includePaths.map(e => e.replace('/\\/g', '/')); // This needs to be after the resolvevariables since {} are used in globs try { const globIncPaths: string[] = fg.sync(resIncludePaths, { onlyDirectories: true, suppressErrors: false, }); + // Update values in cache + this.cache['globIncPaths'] = globIncPaths; return globIncPaths; // Try to recover from fast-glob failing due to EACCES using slower more // robust glob. } catch (eacces) { - this.loggingService.logWarning(`You lack read permissions for an include directory + this.logger.logWarning(`You lack read permissions for an include directory or more likely a glob match from the input 'includePaths' list. This can happen when using overly broad root level glob patters e.g. /usr/lib/** . No reason to worry. I will attempt to recover. You should consider adjusting your 'includePaths' if linting performance is slow.`); - this.loggingService.logWarning(`${eacces.message}`); + this.logger.logWarning(`${eacces.message}`); try { const globIncPaths: string[] = []; for (const i of resIncludePaths) { // use '/' to match only directories and not files globIncPaths.push(...glob.sync(i + '/', { strict: false })); } + this.cache['globIncPaths'] = globIncPaths; return globIncPaths; // if we failed again then our includes are somehow wrong. Abort } catch (error) { - this.loggingService.logError(`Failed to recover: ${error}`); + this.logger.logError(`Failed to recover: ${error}`); } } } - private getGfortranPath(): string { - const config = vscode.workspace.getConfiguration('fortran'); - const gfortranPath = config.get('gfortranExecutable', 'gfortran'); - this.loggingService.logInfo(`using gfortran executable: ${gfortranPath}`); - return gfortranPath; + /** + * Returns the linter executable + * @returns String with linter + */ + private getLinterExecutable(): string { + const config = vscode.workspace.getConfiguration('fortran.linter'); + + this.compiler = config.get('compiler', 'gfortran'); + this.compilerPath = config.get('compilerPath', ''); + const linter = path.join(this.compilerPath, this.compiler); + + this.logger.logInfo(`using linter: ${this.compiler} located in: ${linter}`); + + return linter; } - private getLinterExtraArgs(): string[] { + /** + * Gets the additional linter arguments or sets the default ones if none are + * specified. + * Attempts to match and resolve any internal variables, but no glob support. + * + * @param compiler compiler name `gfortran`, `flang`, `ifort` + * @returns + */ + private getLinterExtraArgs(compiler: string): string[] { const config = vscode.workspace.getConfiguration('fortran'); - const args = config.get('linterExtraArgs', ['-Wall']).map(e => resolveVariables(e)); - this.loggingService.logInfo(`Linter.arguments:\n${args.join('\r\n')}`); + + // The default 'trigger all warnings' flag is different depending on the compiler + let args: string[]; + switch (compiler) { + // fall-through + case 'flang': + case 'gfortran': + args = ['-Wall']; + break; + + case 'ifort': + args = ['-warn', 'all']; + break; + + default: + args = []; + break; + } + const user_args: string[] = config.get('linter.extraArgs'); + // If we have specified linter.extraArgs then replace default arguments + if (user_args.length > 0) args = user_args.slice(); + // gfortran and flang have compiler flags for restricting the width of + // the code. + // You can always override by passing in the correct args as extraArgs + if (compiler !== 'ifort') { + const ln: number = config.get('fortls.maxLineLength'); + const lnStr: string = ln === -1 ? 'none' : ln.toString(); + args.push(`-ffree-line-length-${lnStr}`, `-ffixed-line-length-${lnStr}`); + } + this.logger.logInfo(`Linter.arguments:\n${args.join('\r\n')}`); + + // Resolve internal variables but do not apply glob pattern matching return args.map(e => resolveVariables(e)); } private getIncludeParams = (paths: string[]) => { return paths.map(path => `-I${path}`); }; + + /** + * Extract using the appropriate compiler REGEX from the input `msg` the + * information required for vscode to report diagnostics. + * + * @param msg The message string produced by the mock compilation + * @returns Array of diagnostics for errors, warnings and infos + */ + private getLinterResults(msg: string): vscode.Diagnostic[] { + const regex = this.getCompilerREGEX(this.compiler); + const matches = [...msg.matchAll(regex)]; + // const matches = msg.matchAll(regex); + const diagnostics: vscode.Diagnostic[] = []; + + switch (this.compiler) { + case 'gfortran': + for (const m of matches) { + const g = m.groups; + // NOTE: m[0] is the entire match and then the captured groups follow + const fname: string = g['fname'] !== undefined ? g['fname'] : g['bin']; + const lineNo: number = g['ln'] !== undefined ? parseInt(g['ln']) : 1; + const colNo: number = g['cn'] !== undefined ? parseInt(g['cn']) : 1; + const msg_type: string = g['sev1'] !== undefined ? g['sev1'] : g['sev2']; + const msg: string = g['msg1'] !== undefined ? g['msg1'] : g['msg2']; + + const range = new vscode.Range( + new vscode.Position(lineNo - 1, colNo), + new vscode.Position(lineNo - 1, colNo) + ); + + let severity: vscode.DiagnosticSeverity; + switch (msg_type.toLowerCase()) { + case 'error': + case 'fatal error': + severity = vscode.DiagnosticSeverity.Error; + break; + case 'warning': + severity = vscode.DiagnosticSeverity.Warning; + break; + case 'info': // gfortran does not produce info AFAIK + severity = vscode.DiagnosticSeverity.Information; + break; + default: + severity = vscode.DiagnosticSeverity.Error; + break; + } + + const d = new vscode.Diagnostic(range, msg, severity); + diagnostics.push(d); + } + + return diagnostics; + + case 'flang': + break; + + case 'ifort': + for (const m of matches) { + const g = m.groups; + // NOTE: m[0] is the entire match and then the captured groups follow + const fname: string = g['fname']; + const lineNo: number = parseInt(g['ln']); + const msg_type: string = g['sev1'] !== undefined ? g['sev1'] : g['sev2']; + const msg: string = g['msg1'] !== undefined ? g['msg1'] : g['msg2']; + const colNo: number = g['cn'] !== undefined ? g['cn'].length : 1; + + const range = new vscode.Range( + new vscode.Position(lineNo - 1, colNo), + new vscode.Position(lineNo - 1, colNo) + ); + + let severity: vscode.DiagnosticSeverity; + switch (msg_type.toLowerCase()) { + case 'error': + case 'fatal error': + severity = vscode.DiagnosticSeverity.Error; + break; + case 'warning': + case 'remark': // ifort's version of warning is remark + severity = vscode.DiagnosticSeverity.Warning; + break; + case 'info': // ifort does not produce info during compile-time AFAIK + severity = vscode.DiagnosticSeverity.Information; + break; + default: + severity = vscode.DiagnosticSeverity.Error; + break; + } + + const d = new vscode.Diagnostic(range, msg, severity); + diagnostics.push(d); + } + return diagnostics; + + default: + break; + } + } + + /** + * Different compilers, display errors in different ways, hence we need + * different regular expressions to interpret their output. + * This function returns the appropriate regular expression. + * + * @param compiler Compiler name: gfortran, flang, ifort + * @returns `RegExp` for linter + */ + private getCompilerREGEX(compiler: string): RegExp { + // `severity` can be: Warning, Error, Fatal Error + switch (compiler) { + /* + ------------------------------------------------------------------------- + COMPILER MESSAGE ANATOMY: + filename:line:column: + + line | failing line of code + | + severity: message + ------------------------------------------------------------------------- + ALTERNATIVE COMPILER MESSAGE ANATOMY: (for includes, failed args and C++) + compiler-bin: severity: message + ------------------------------------------------------------------------- + */ + case 'gfortran': + // see https://regex101.com/r/hZtk3f/1 + return /(?:^(?(?:\w:\\)?.*):(?\d+):(?\d+):(?:\s+.*\s+.*?\s+)(?Error|Warning|Fatal Error):\s(?.*)$)|(?:^(?\w+):\s*(?\w+\s*\w*):\s*(?.*)$)/gm; + + // TODO: write the regex + case 'flang': + return /^([a-zA-Z]:\\)*([^:]*):([0-9]+):([0-9]+):\s+(.*)\s+.*?\s+(Error|Warning|Fatal Error):\s(.*)$/gm; + + /* + COMPILER MESSAGE ANATOMY: + filename(linenum): severity #error number: message + failing line of code + ----------------------^ + */ + case 'ifort': + // see https://regex101.com/r/GZ0Lzz/2 + return /^(?(?:\w:\\)?.*)\((?\d+)\):\s*(?:#(?:(?\w*):\s*(?.*$))|(?\w*)\s*(?.*$)(?:\s*.*\s*)(?-*\^))/gm; + + default: + vscode.window.showErrorMessage('Unsupported linter, change your linter.compiler option'); + } + } + + /** + * Every compiler has different flags to generate diagnostics, this functions + * ensures that the default arguments passed are valid. + * + * @note Check with the appropriate compiler documentation before altering + * any of these + * + * @param compiler Compiler name: gfortran, flang, ifort + * @returns Array of valid compiler arguments + */ + private getMandatoryLinterArgs(compiler: string): string[] { + switch (compiler) { + case 'flang': + case 'gfortran': + return ['-fsyntax-only', '-cpp', '-fdiagnostics-show-option']; + + // ifort theoretically supports fsyntax-only too but I had trouble + // getting it to work on my machine + case 'ifort': + return ['-syntax-only', '-fpp']; + + default: + break; + } + } } diff --git a/src/lib/helper.ts b/src/lib/helper.ts index 7f988884..f6bb678f 100644 --- a/src/lib/helper.ts +++ b/src/lib/helper.ts @@ -20,7 +20,7 @@ export const FORTRAN_KEYWORDS = [ 'IMPLICIT', ]; -export const isIntrinsic = keyword => { +export const isIntrinsic = (keyword: string) => { return intrinsics.findIndex(intrinsic => intrinsic === keyword.toUpperCase()) !== -1; }; @@ -29,9 +29,9 @@ interface Doc { docstr: string; } -export const loadDocString = keyword => { +export const loadDocString = (keyword: string) => { keyword = keyword.toUpperCase(); - const filepath = __dirname + '/../docs/' + keyword + '.json'; + const filepath = __dirname + '/../doc/intrinsics/' + keyword + '.json'; const docstr = fs.readFileSync(filepath).toString(); const doc: Doc = JSON.parse(docstr); return doc.docstr; @@ -131,3 +131,11 @@ export function isOptionalString(input: any): input is string | undefined { export function isArrayOfString(input: any): input is string[] { return isArray(input) && input.every(isString); } + +export function arraysEqual(a: any[], b: any[]) { + if (a === b) return true; + if (a == null || b == null) return false; + if (a.length !== b.length) return false; + if (a.every((e, i) => e !== b[i])) return false; + return true; +} diff --git a/src/lib/tools.ts b/src/lib/tools.ts index a0a549a0..104aed18 100644 --- a/src/lib/tools.ts +++ b/src/lib/tools.ts @@ -6,7 +6,7 @@ import { LoggingService } from '../services/logging-service'; import { isString, isArrayOfString } from './helper'; export const EXTENSION_ID = 'fortran'; -export const LANG_SERVER_TOOL_ID = 'fortran-language-server'; +export const LANG_SERVER_TOOL_ID = 'fortls'; export const FORMATTERS = ['Disabled', 'findent', 'fprettify']; // Platform-specific environment variable delimiter @@ -41,19 +41,19 @@ export function FortranDocumentSelector(folder?: vscode.WorkspaceFolder) { * Install a package either a Python pip package or a VS Marketplace Extension. * * For the Python install supply the name of the package in PyPi - * e.g. fortran-language-server + * e.g. fortls * * For the VS Extension to be installed supply the id of the extension * e.g 'hansec.fortran-ls' * - * @param tool name of the tool e.g. fortran-language-server + * @param tool name of the tool e.g. fortls * @param msg message for installing said package * @param toolType type of tool, supports `Python` (through pip) and 'VSExt' * @param opts options for the prompt. "Install" and "Don't Show Again" are coded * @param logger log channel output * @param action a void function for an action to perform when "Don't Show Again" is pressed */ -export function promptForMissingTool( +export async function promptForMissingTool( tool: string, msg: string, toolType: string, @@ -95,22 +95,22 @@ export function promptForMissingTool( * @param logger `optional` logging channel for output */ export function installPythonTool(pyPackage: string, logger?: LoggingService) { - const installProcess = cp.spawn('pip', 'install --user --upgrade '.concat(pyPackage).split(' ')); - installProcess.stdout.on('data', data => { - logger.logInfo(`pip install: ${data}`); - }); - installProcess.on('exit', (code, signal) => { - if (code !== 0) { - logger.logError( - `Python package ${pyPackage} failed to install with code: ${code}, signal: ${signal}` - ); - } else { - logger.logInfo(`Successfully installed ${pyPackage}.`); - } - }); - installProcess.on('error', err => { - logger.logError(`${err}`); - }); + const installProcess = cp.spawnSync( + 'pip', + 'install --user --upgrade '.concat(pyPackage).split(' ') + ); + if (installProcess.error) { + logger.logError( + `Python package ${pyPackage} failed to install with code: ${installProcess.error}` + ); + } + if (installProcess.stdout) { + const sep = '-'.repeat(80); + logger.logInfo( + `pip install --user --upgrade ${pyPackage}:\n${sep}\n${installProcess.stdout}${sep}` + ); + logger.logInfo(`pip install was successful`); + } } /** @@ -205,3 +205,37 @@ export function resolveVariables( return ret; // return new Promise((resolve) => { resolve(ret) }); } + +export function getWholeFileRange(document: vscode.TextDocument): vscode.Range { + return new vscode.Range(0, 0, document.lineCount, 0); +} + +export async function spawnAsPromise( + cmd: string, + args: ReadonlyArray | undefined, + options: cp.SpawnOptions | undefined, + input: string | undefined +) { + return new Promise((resolve, reject) => { + // You could separate STDOUT and STDERR if your heart so desires... + let output = ''; + const child = cp.spawn(cmd, args, options); + child.stdout.on('data', data => { + output += data; + }); + child.stderr.on('data', data => { + output += data; + }); + child.on('close', code => { + code === 0 ? resolve(output) : reject(output); + }); + child.on('error', err => { + reject(err.toString()); + }); + + if (input) { + child.stdin.write(input); + child.stdin.end(); + } + }); +} diff --git a/syntaxes/fortran_free-form.tmLanguage.json b/syntaxes/fortran_free-form.tmLanguage.json index 3e3a631c..62ede89d 100644 --- a/syntaxes/fortran_free-form.tmLanguage.json +++ b/syntaxes/fortran_free-form.tmLanguage.json @@ -2053,7 +2053,7 @@ "name": "variable.other.fortran" }, "2": { - "name": "punctuation.accessor.fortran" + "name": "keyword.accessor.fortran" }, "3": { "name": "entity.name.function.subroutine.fortran" @@ -2527,6 +2527,9 @@ }, { "include": "#invalid-word" + }, + { + "include": "#pointer-attribute" } ] } diff --git a/test/linter-provider.test.ts b/test/linter-provider.test.ts new file mode 100644 index 00000000..746edaac --- /dev/null +++ b/test/linter-provider.test.ts @@ -0,0 +1,516 @@ +import { strictEqual, deepStrictEqual } from 'assert'; +import { Diagnostic, DiagnosticSeverity, Range, Position } from 'vscode'; +import { FortranLintingProvider } from '../src/features/linter-provider'; + +suite('GNU (gfortran) lint single', () => { + const linter = new FortranLintingProvider(); + linter['compiler'] = 'gfortran'; + const msg = ` +C:\\Some\\random\\path\\sample.f90:4:18: + +4 | call say_hello() + | 1 +Error: Missing actual argument for argument ‘a’ at (1) +`; + suite('REGEX matches', () => { + const regex = linter['getCompilerREGEX'](linter['compiler']); + const matches = [...msg.matchAll(regex)]; + const g = matches[0].groups; + test('REGEX: filename', () => { + strictEqual(g['fname'], 'C:\\Some\\random\\path\\sample.f90'); + }); + test('REGEX: line number', () => { + strictEqual(g['ln'], '4'); + }); + test('REGEX: column number', () => { + strictEqual(g['cn'], '18'); + }); + test('REGEX: severity ', () => { + strictEqual(g['sev1'], 'Error'); + }); + test('REGEX: message ', () => { + strictEqual(g['msg1'], 'Missing actual argument for argument ‘a’ at (1)'); + }); + }); + test('Diagnostics Array', () => { + const matches = linter['getLinterResults'](msg); + const ref = [ + new Diagnostic( + new Range(new Position(3, 18), new Position(3, 18)), + 'Missing actual argument for argument ‘a’ at (1)', + DiagnosticSeverity.Error + ), + ]; + deepStrictEqual(matches, ref); + }); +}); +suite('GNU (gfortran) lint multiple', () => { + const linter = new FortranLintingProvider(); + linter['compiler'] = 'gfortran'; + const msg = ` +/fetch/main/FETCH.F90:1629:24: + +1629 | surf_glnodes = ele_nodes(fluid_surface_mesh, fele) + | 1 +Warning: POINTER-valued function appears on right-hand side of assignment at (1) [-Wsurprising] +/fetch/main/FETCH.F90:1634:44: + +1634 | call scale(fluid_flux, scaling_factor) + | 1 +Error: There is no specific subroutine for the generic ‘scale’ at (1) +f951: some warnings being treated as errors +`; + suite('REGEX matches', () => { + const regex = linter['getCompilerREGEX'](linter['compiler']); + const matches = [...msg.matchAll(regex)]; + const g1 = matches[0].groups; + test('REGEX: match 1 - filename', () => { + strictEqual(g1['fname'], '/fetch/main/FETCH.F90'); + }); + test('REGEX: match 1 - line number', () => { + strictEqual(g1['ln'], '1629'); + }); + test('REGEX: match 1 - column number', () => { + strictEqual(g1['cn'], '24'); + }); + test('REGEX: match 1 - severity ', () => { + strictEqual(g1['sev1'], 'Warning'); + }); + test('REGEX: match 1 - message ', () => { + strictEqual( + g1['msg1'], + 'POINTER-valued function appears on right-hand side of assignment at (1) [-Wsurprising]' + ); + }); + const g2 = matches[1].groups; + test('REGEX: match 2 - filename', () => { + strictEqual(g2['fname'], '/fetch/main/FETCH.F90'); + }); + test('REGEX: match 2 - line number', () => { + strictEqual(g2['ln'], '1634'); + }); + test('REGEX: match 2 - column number', () => { + strictEqual(g2['cn'], '44'); + }); + test('REGEX: match 2 - severity ', () => { + strictEqual(g2['sev1'], 'Error'); + }); + test('REGEX: match 2 - message ', () => { + strictEqual(g2['msg1'], 'There is no specific subroutine for the generic ‘scale’ at (1)'); + }); + }); + test('Diagnostics Array', () => { + const matches = linter['getLinterResults'](msg); + const ref = [ + new Diagnostic( + new Range(new Position(1628, 24), new Position(1628, 24)), + 'POINTER-valued function appears on right-hand side of assignment at (1) [-Wsurprising]', + DiagnosticSeverity.Warning + ), + new Diagnostic( + new Range(new Position(1633, 44), new Position(1633, 44)), + 'There is no specific subroutine for the generic ‘scale’ at (1)', + DiagnosticSeverity.Error + ), + ]; + deepStrictEqual(matches, ref); + }); +}); +suite('GNU (gfortran) lint preprocessor', () => { + const linter = new FortranLintingProvider(); + linter['compiler'] = 'gfortran'; + const msg = ` +gfortran: fatal error: cannot execute '/usr/lib/gcc/x86_64-linux-gnu/9/f951': execv: Argument list too long\ncompilation terminated. +`; + suite('REGEX matches', () => { + const regex = linter['getCompilerREGEX'](linter['compiler']); + const matches = [...msg.matchAll(regex)]; + const g = matches[0].groups; + test('REGEX: binary name ', () => { + strictEqual(g['bin'], 'gfortran'); + }); + test('REGEX: line number', () => { + strictEqual(g['ln'], undefined); + }); + test('REGEX: column number', () => { + strictEqual(g['cn'], undefined); + }); + test('REGEX: severity ', () => { + strictEqual(g['sev2'], 'fatal error'); + }); + test('REGEX: message ', () => { + strictEqual( + g['msg2'], + "cannot execute '/usr/lib/gcc/x86_64-linux-gnu/9/f951': execv: Argument list too long" + ); + }); + }); + test('Diagnostics Array', () => { + const matches = linter['getLinterResults'](msg); + const ref = [ + new Diagnostic( + new Range(new Position(0, 1), new Position(0, 1)), + "cannot execute '/usr/lib/gcc/x86_64-linux-gnu/9/f951': execv: Argument list too long", + DiagnosticSeverity.Error + ), + ]; + deepStrictEqual(matches, ref); + }); +}); +suite('GNU (gfortran) lint preprocessor multiple', () => { + const linter = new FortranLintingProvider(); + linter['compiler'] = 'gfortran'; + const msg = ` +f951: Warning: Nonexistent include directory '/Code/TypeScript/vscode-fortran-support/test/resources/include' [-Wmissing-include-dirs] +/Code/TypeScript/vscode-fortran-support/test/resources/sample.f90:4:18: + + 4 | call say_hello() + | 1 +Error: Missing actual argument for argument 'a' at (1) +`; + suite('REGEX matches', () => { + const regex = linter['getCompilerREGEX'](linter['compiler']); + const matches = [...msg.matchAll(regex)]; + const g1 = matches[0].groups; + test('REGEX: match 1 - binary ', () => { + strictEqual(g1['bin'], 'f951'); + }); + test('REGEX: match 1 - line number', () => { + strictEqual(g1['ln'], undefined); + }); + test('REGEX: match 1 - column number', () => { + strictEqual(g1['cn'], undefined); + }); + test('REGEX: match 1 - severity ', () => { + strictEqual(g1['sev2'], 'Warning'); + }); + test('REGEX: match 1 - message ', () => { + strictEqual( + g1['msg2'], + "Nonexistent include directory '/Code/TypeScript/vscode-fortran-support/test/resources/include' [-Wmissing-include-dirs]" + ); + }); + const g2 = matches[1].groups; + test('REGEX: match 2 - filename', () => { + strictEqual(g2['fname'], '/Code/TypeScript/vscode-fortran-support/test/resources/sample.f90'); + }); + test('REGEX: match 2 - line number', () => { + strictEqual(g2['ln'], '4'); + }); + test('REGEX: match 2 - column number', () => { + strictEqual(g2['cn'], '18'); + }); + test('REGEX: match 2 - severity ', () => { + strictEqual(g2['sev1'], 'Error'); + }); + test('REGEX: match 2 - message ', () => { + strictEqual(g2['msg1'], "Missing actual argument for argument 'a' at (1)"); + }); + }); + test('Diagnostics Array', () => { + const matches = linter['getLinterResults'](msg); + const ref = [ + new Diagnostic( + new Range(new Position(0, 1), new Position(0, 1)), + "Nonexistent include directory '/Code/TypeScript/vscode-fortran-support/test/resources/include' [-Wmissing-include-dirs]", + DiagnosticSeverity.Warning + ), + new Diagnostic( + new Range(new Position(3, 18), new Position(3, 18)), + "Missing actual argument for argument 'a' at (1)", + DiagnosticSeverity.Error + ), + ]; + deepStrictEqual(matches, ref); + }); +}); + +// ----------------------------------------------------------------------------- + +suite('Intel (ifort) lint single', () => { + const linter = new FortranLintingProvider(); + linter['compiler'] = 'ifort'; + const msg = ` +/fetch/radiant/RADIANT_Matrix_Free_Subgrid_Scale.F90(102): error #5082: Syntax error, found '::' when expecting one of: ( : % [ . = => + PetscInt :: ierr +---------------^ +`; + suite('REGEX matches', () => { + const regex = linter['getCompilerREGEX'](linter['compiler']); + const matches = [...msg.matchAll(regex)]; + const g = matches[0].groups; + test('REGEX: filename', () => { + strictEqual(g['fname'], '/fetch/radiant/RADIANT_Matrix_Free_Subgrid_Scale.F90'); + }); + test('REGEX: line number', () => { + strictEqual(g['ln'], '102'); + }); + test('REGEX: column number', () => { + strictEqual(g['cn'], '---------------^'); + }); + test('REGEX: severity ', () => { + strictEqual(g['sev1'], 'error'); + }); + test('REGEX: message ', () => { + strictEqual( + g['msg1'], + "#5082: Syntax error, found '::' when expecting one of: ( : % [ . = =>" + ); + }); + }); + test('Diagnostics Array', () => { + const matches = linter['getLinterResults'](msg); + const ref = [ + new Diagnostic( + new Range(new Position(101, 16), new Position(101, 16)), + "#5082: Syntax error, found '::' when expecting one of: ( : % [ . = =>", + DiagnosticSeverity.Error + ), + ]; + deepStrictEqual(matches, ref); + }); +}); +suite('Intel (ifort) lint multiple', () => { + const linter = new FortranLintingProvider(); + linter['compiler'] = 'ifort'; + const msg = ` +sample.f90(4): error #6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [A] + call say_hello() +-------^ +sample.f90(4): error #6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [B] + call say_hello() +-------^ +sample.f90(8): remark #7712: This variable has not been used. [A] + subroutine say_hello(a,b) +-----------------------^ +sample.f90(8): remark #7712: This variable has not been used. [B] + subroutine say_hello(a,b) +-------------------------^ +compilation aborted for sample.f90 (code 1) +`; + suite('REGEX matches', () => { + const regex = linter['getCompilerREGEX'](linter['compiler']); + const matches = [...msg.matchAll(regex)]; + const g1 = matches[0].groups; + test('REGEX: match 1 - filename', () => { + strictEqual(g1['fname'], 'sample.f90'); + }); + test('REGEX: match 1 - line number', () => { + strictEqual(g1['ln'], '4'); + }); + test('REGEX: match 1 - column number', () => { + strictEqual(g1['cn'], '-------^'); + }); + test('REGEX: match 1 - severity ', () => { + strictEqual(g1['sev1'], 'error'); + }); + test('REGEX: match 1 - message ', () => { + strictEqual( + g1['msg1'], + '#6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [A]' + ); + }); + const g2 = matches[1].groups; + test('REGEX: match 2 - filename', () => { + strictEqual(g2['fname'], 'sample.f90'); + }); + test('REGEX: match 2 - line number', () => { + strictEqual(g2['ln'], '4'); + }); + test('REGEX: match 2 - column number', () => { + strictEqual(g2['cn'], '-------^'); + }); + test('REGEX: match 2 - severity ', () => { + strictEqual(g2['sev1'], 'error'); + }); + test('REGEX: match 2 - message ', () => { + strictEqual( + g2['msg1'], + '#6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [B]' + ); + }); + const g3 = matches[2].groups; + test('REGEX: match 1 - filename', () => { + strictEqual(g3['fname'], 'sample.f90'); + }); + test('REGEX: match 1 - line number', () => { + strictEqual(g3['ln'], '8'); + }); + test('REGEX: match 1 - column number', () => { + strictEqual(g3['cn'], '-----------------------^'); + }); + test('REGEX: match 1 - severity ', () => { + strictEqual(g3['sev1'], 'remark'); + }); + test('REGEX: match 1 - message ', () => { + strictEqual(g3['msg1'], '#7712: This variable has not been used. [A]'); + }); + const g4 = matches[3].groups; + test('REGEX: match 2 - filename', () => { + strictEqual(g4['fname'], 'sample.f90'); + }); + test('REGEX: match 2 - line number', () => { + strictEqual(g4['ln'], '8'); + }); + test('REGEX: match 2 - column number', () => { + strictEqual(g4['cn'], '-------------------------^'); + }); + test('REGEX: match 2 - severity ', () => { + strictEqual(g4['sev1'], 'remark'); + }); + test('REGEX: match 2 - message ', () => { + strictEqual(g4['msg1'], '#7712: This variable has not been used. [B]'); + }); + }); + test('Diagnostics Array', () => { + const matches = linter['getLinterResults'](msg); + const ref = [ + new Diagnostic( + new Range(new Position(3, 8), new Position(3, 8)), + '#6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [A]', + DiagnosticSeverity.Error + ), + new Diagnostic( + new Range(new Position(3, 8), new Position(3, 8)), + '#6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [B]', + DiagnosticSeverity.Error + ), + new Diagnostic( + new Range(new Position(7, 24), new Position(7, 24)), + '#7712: This variable has not been used. [A]', + DiagnosticSeverity.Warning + ), + new Diagnostic( + new Range(new Position(7, 26), new Position(7, 26)), + '#7712: This variable has not been used. [B]', + DiagnosticSeverity.Warning + ), + ]; + deepStrictEqual(matches, ref); + }); +}); +suite('Intel (ifort) lint preprocessor', () => { + const linter = new FortranLintingProvider(); + linter['compiler'] = 'ifort'; + const msg = ` +RADIANT_Matrix_Free_Subgrid_Scale.F90(1): #error: can't find include file: fdebug.h +`; + suite('REGEX matches', () => { + const regex = linter['getCompilerREGEX'](linter['compiler']); + const matches = [...msg.matchAll(regex)]; + const g = matches[0].groups; + test('REGEX: filename', () => { + strictEqual(g['fname'], 'RADIANT_Matrix_Free_Subgrid_Scale.F90'); + }); + test('REGEX: line number', () => { + strictEqual(g['ln'], '1'); + }); + test('REGEX: column number', () => { + strictEqual(g['cn'], undefined); + }); + test('REGEX: severity ', () => { + strictEqual(g['sev2'], 'error'); + }); + test('REGEX: message ', () => { + strictEqual(g['msg2'], "can't find include file: fdebug.h"); + }); + }); + test('Diagnostics Array', () => { + const matches = linter['getLinterResults'](msg); + const ref = [ + new Diagnostic( + new Range(new Position(0, 1), new Position(0, 1)), + "can't find include file: fdebug.h", + DiagnosticSeverity.Error + ), + ]; + deepStrictEqual(matches, ref); + }); +}); +suite('Intel (ifort) lint preprocessor multiple', () => { + const linter = new FortranLintingProvider(); + linter['compiler'] = 'ifort'; + const msg = ` +RADIANT_Matrix_Free_Subgrid_Scale.F90(1): #error: can't find include file: fdebug.h +RADIANT_Matrix_Free_Subgrid_Scale.F90(52): #error: can't find include file: petsc_legacy.h +C:\\Some\\random\\path\\sample.f90(4): error #6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [A] + call say_hello() +-------^ +`; + suite('REGEX matches', () => { + const regex = linter['getCompilerREGEX'](linter['compiler']); + const matches = [...msg.matchAll(regex)]; + const g1 = matches[0].groups; + test('REGEX: match 1 - filename', () => { + strictEqual(g1['fname'], 'RADIANT_Matrix_Free_Subgrid_Scale.F90'); + }); + test('REGEX: match 1 - line number', () => { + strictEqual(g1['ln'], '1'); + }); + test('REGEX: match 1 - column number', () => { + strictEqual(g1['cn'], undefined); + }); + test('REGEX: match 1 - severity ', () => { + strictEqual(g1['sev2'], 'error'); + }); + test('REGEX: match 1 - message ', () => { + strictEqual(g1['msg2'], "can't find include file: fdebug.h"); + }); + const g2 = matches[1].groups; + test('REGEX: match 2 - filename', () => { + strictEqual(g2['fname'], 'RADIANT_Matrix_Free_Subgrid_Scale.F90'); + }); + test('REGEX: match 2 - line number', () => { + strictEqual(g2['ln'], '52'); + }); + test('REGEX: match 2 - column number', () => { + strictEqual(g2['cn'], undefined); + }); + test('REGEX: match 2 - severity ', () => { + strictEqual(g2['sev2'], 'error'); + }); + test('REGEX: match 2 - message ', () => { + strictEqual(g2['msg2'], "can't find include file: petsc_legacy.h"); + }); + const g3 = matches[2].groups; + test('REGEX: match 3 - filename', () => { + strictEqual(g3['fname'], 'C:\\Some\\random\\path\\sample.f90'); + }); + test('REGEX: match 3 - line number', () => { + strictEqual(g3['ln'], '4'); + }); + test('REGEX: match 3 - column number', () => { + strictEqual(g3['cn'], '-------^'); + }); + test('REGEX: match 3 - severity ', () => { + strictEqual(g3['sev1'], 'error'); + }); + test('REGEX: match 3 - message ', () => { + strictEqual( + g3['msg1'], + '#6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [A]' + ); + }); + }); + test('Diagnostics Array', () => { + const matches = linter['getLinterResults'](msg); + const ref = [ + new Diagnostic( + new Range(new Position(0, 1), new Position(0, 1)), + "can't find include file: fdebug.h", + DiagnosticSeverity.Error + ), + new Diagnostic( + new Range(new Position(51, 1), new Position(51, 1)), + "can't find include file: petsc_legacy.h", + DiagnosticSeverity.Error + ), + new Diagnostic( + new Range(new Position(3, 8), new Position(3, 8)), + '#6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface. [A]', + DiagnosticSeverity.Error + ), + ]; + deepStrictEqual(matches, ref); + }); +}); diff --git a/test/resources/abstraction.f90.snap b/test/resources/abstraction.f90.snap index 8e324b8a..1635f2e8 100644 --- a/test/resources/abstraction.f90.snap +++ b/test/resources/abstraction.f90.snap @@ -293,7 +293,7 @@ # ^^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran keyword.control.call.fortran # ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran # ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran variable.other.fortran -# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran punctuation.accessor.fortran +# ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran keyword.accessor.fortran # ^^^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran entity.name.function.subroutine.fortran # ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran punctuation.parentheses.left.fortran # ^ source.fortran.free meta.program.fortran meta.block.specification.program.fortran meta.block.do.unlabeled.fortran meta.statement.control.call.fortran meta.parameter.fortran diff --git a/test/resources/nopass.f90 b/test/resources/nopass.f90 new file mode 100644 index 00000000..14c2ddce --- /dev/null +++ b/test/resources/nopass.f90 @@ -0,0 +1,11 @@ +MODULE nopass_test + TYPE :: vector + INTEGER(4) :: n + REAL(8), POINTER, DIMENSION(:) :: v => NULL() + PROCEDURE(fort_wrap), NOPASS, POINTER :: bound_nopass => NULL() + CONTAINS + PROCEDURE :: create => vector_create !< Doc 1 + PROCEDURE :: norm => vector_norm !< Doc 2 + PROCEDURE, PASS(self) :: bound_pass => bound_pass + END TYPE vector +END MODULE nopass_test diff --git a/test/resources/nopass.f90.snap b/test/resources/nopass.f90.snap new file mode 100644 index 00000000..60ffcec2 --- /dev/null +++ b/test/resources/nopass.f90.snap @@ -0,0 +1,125 @@ +>MODULE nopass_test +#^^^^^^ source.fortran.free meta.module.fortran keyword.other.program.fortran +# ^ source.fortran.free meta.module.fortran +# ^^^^^^^^^^^ source.fortran.free meta.module.fortran entity.name.class.module.fortran +> TYPE :: vector +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.attribute-list.derived-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran entity.name.type.fortran +> INTEGER(4) :: n +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran storage.type.integer.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.type-spec.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.type-spec.fortran constant.numeric.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.type-spec.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran +> REAL(8), POINTER, DIMENSION(:) :: v => NULL() +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran storage.type.real.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.type-spec.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.type-spec.fortran constant.numeric.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.type-spec.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran storage.modifier.pointer.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran storage.modifier.dimension.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.attribute-list.derived-type-component-type.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran meta.parameter.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran support.function.intrinsic.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran punctuation.parentheses.left.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.derived-type.fortran meta.name-list.fortran punctuation.parentheses.right.fortran +> PROCEDURE(fort_wrap), NOPASS, POINTER :: bound_nopass => NULL() +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran storage.type.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran punctuation.parentheses.left.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.type-spec.fortran entity.name.function.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran punctuation.parentheses.right.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-component-procedure.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-component-procedure.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-component-procedure.fortran storage.modifier.nopass.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-component-procedure.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-component-procedure.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-component-procedure.fortran storage.modifier.pointer.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-component-procedure.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.name-list.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.specification.derived-type.fortran meta.specification.procedure.fortran meta.name-list.fortran +> CONTAINS +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran keyword.control.contains.fortran +> PROCEDURE :: create => vector_create !< Doc 1 +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran storage.type.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran comment.line.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran comment.line.fortran +> PROCEDURE :: norm => vector_norm !< Doc 2 +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran storage.type.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran comment.line.fortran +# ^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran comment.line.fortran +> PROCEDURE, PASS(self) :: bound_pass => bound_pass +#^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran +# ^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran storage.type.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran punctuation.comma.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran storage.modifier.pass.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.attribute-list.derived-type-contains-procedure.fortran meta.something.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran keyword.operator.double-colon.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran keyword.other.point.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran +# ^^^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran meta.block.contains.fortran meta.specification.procedure.fortran meta.name-list.fortran entity.name.function.procedure.fortran +> END TYPE vector +#^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran keyword.control.endtype.fortran +# ^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran +# ^^^^^^ source.fortran.free meta.module.fortran meta.block.specification.module.fortran meta.derived-type.definition.fortran entity.name.type.fortran +>END MODULE nopass_test +#^^^^^^^^^^ source.fortran.free meta.module.fortran keyword.other.endmodule.fortran +# ^ source.fortran.free meta.module.fortran +# ^^^^^^^^^^^ source.fortran.free meta.module.fortran entity.name.class.module.fortran +> \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 7bca5dd9..e9fd6544 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,15 @@ { "compilerOptions": { "module": "commonjs", - "target": "es6", + "target": "ES2020", "outDir": "out", - "lib": ["es6"], + "lib": ["ES2020"], "sourceMap": true, - "rootDir": ".", - "resolveJsonModule": true + "resolveJsonModule": true, + "esModuleInterop": true, + "removeComments": true, + "rootDir": "." }, - "include": ["src/**/*.ts", "src/docs/**/*.json"], - "exclude": ["node_modules", ".vscode-test"] + "include": ["src/**/*.ts"], + "exclude": ["node_modules", ".vscode-test", "assets/videos"] } diff --git a/tsconfig.prod.json b/tsconfig.prod.json deleted file mode 100644 index 39d35580..00000000 --- a/tsconfig.prod.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "outDir": "out", - "lib": ["es6"], - "sourceMap": false, - "removeComments": true, - "rootDir": ".", - "resolveJsonModule": true - }, - "include": ["src/**/*.ts", "src/docs/**/*.json"], - "exclude": ["node_modules", ".vscode-test"] -} diff --git a/tsconfig.test.json b/tsconfig.test.json index 5dbc8498..293fd34f 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -1,9 +1,9 @@ { "compilerOptions": { "module": "commonjs", - "target": "es6", + "target": "ES2020", "outDir": "out", - "lib": ["es6"], + "lib": ["ES2020"], "sourceMap": true, "rootDir": ".", "resolveJsonModule": true diff --git a/vsc-extension-quickstart.md b/vsc-extension-quickstart.md deleted file mode 100644 index 0765c365..00000000 --- a/vsc-extension-quickstart.md +++ /dev/null @@ -1,38 +0,0 @@ -# Welcome to your first VS Code Extension - -## What's in the folder - -- This folder contains all of the files necessary for your extension -- `package.json` - this is the manifest file in which you declare your extension and command. - The sample plugin registers a command and defines its title and command name. With this information - VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. -- `src/extension.ts` - this is the main file where you will provide the implementation of your command. - The file exports one function, `activate`, which is called the very first time your extension is - activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. - We pass the function containing the implementation of the command as the second parameter to - `registerCommand`. - -## Get up and running straight away - -- press `F5` to open a new window with your extension loaded -- run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World` -- set breakpoints in your code inside `src/extension.ts` to debug your extension -- find output from your extension in the debug console - -## Make changes - -- you can relaunch the extension from the debug toolbar after changing code in `src/extension.ts` -- you can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes - -## Explore the API - -- you can open the full set of our API when you open the file `node_modules/vscode/vscode.d.ts` - -## Run tests - -- open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Launch Tests` -- press `F5` to run the tests in a new window with your extension loaded -- see the output of the test result in the debug console -- make changes to `test/extension.test.ts` or create new test files inside the `test` folder - - by convention, the test runner will only consider files matching the name pattern `**.test.ts` - - you can create folders inside the `test` folder to structure your tests any way you wants diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..773a2cbf --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,47 @@ +//@ts-check + +'use strict'; + +const path = require('path'); +const webpack = require('webpack'); + +/**@type {import('webpack').Configuration}*/ +const config = { + target: 'node', // vscode extensions run in webworker context for VS Code web 📖 -> https://webpack.js.org/configuration/target/#target + + entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ + output: { + // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ + path: path.resolve(__dirname, 'dist'), + filename: 'extension.js', + libraryTarget: 'commonjs2', + devtoolModuleFilenameTemplate: '../[resource-path]', + }, + devtool: 'source-map', + externals: { + vscode: 'commonjs vscode', // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + }, + resolve: { + // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader + extensions: ['.ts', '.js'], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: 'ts-loader', + options: { + compilerOptions: { + sourceMap: true, + }, + }, + }, + ], + }, + ], + }, +}; +module.exports = config;