diff --git a/.eslintrc.json b/.eslintrc.json index c91cad6003908c1a947c7032fc025f6d499af795..3582e5dd89111421e271a455f22fe535e00b7ff1 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,18 +1,19 @@ { - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - "plugins": ["@typescript-eslint"], - "rules": { - "@typescript-eslint/naming-convention": "warn", - "@typescript-eslint/semi": "warn", - "curly": "warn", - "eqeqeq": "warn", - "no-throw-literal": "warn", - "semi": "off" - }, - "ignorePatterns": ["out", "dist", "**/*.d.ts"] + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": ["@typescript-eslint", "license-header"], + "rules": { + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off", + "license-header/header": ["error", "resources/license-header.ts"] + }, + "ignorePatterns": ["out", "dist", "**/*.d.ts"] } diff --git a/.markdownlint.json b/.markdownlint.json index 6801c750d0d05569ed39c9693d6f3f2f43e041ca..c3dcb925933df1803e9e552f7388ffb2ed063fe4 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,33 +1,33 @@ { - "MD001": false, - "MD013": { - "line_length": 120, - "tables": false - }, - "MD024": false, - "MD025": { - "front_matter_title": "" - }, - "MD033": { - "allowed_elements": [ - "a", - "img", - "sup", - "br", - "p", - "span", - "code", - "ul", - "li", - "table", - "thead", - "th", - "tbody", - "tr", - "td", - "CodeGroupItem", - "CodeGroup", - "tag" - ] - } + "MD001": false, + "MD013": { + "line_length": 120, + "tables": false + }, + "MD024": false, + "MD025": { + "front_matter_title": "" + }, + "MD033": { + "allowed_elements": [ + "a", + "img", + "sup", + "br", + "p", + "span", + "code", + "ul", + "li", + "table", + "thead", + "th", + "tbody", + "tr", + "td", + "CodeGroupItem", + "CodeGroup", + "tag" + ] + } } diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000000000000000000000000000000000..bce8a6d8c0c0748f409c64a50b0ac6884eed7e8a --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +shamefully-hoist=true +auto-install-peers=true +strict-peer-dependencies=false \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 1b64a01faa644df792eec2b1426645ada75c38e5..f36e36512726691d7790c097715fc611af6068ae 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,5 @@ { - "tabWidth": 4, - "useTabs": false, - "printWidth": 120 + "tabWidth": 2, + "useTabs": false, + "printWidth": 100 } diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 2b3ee5d3cddea0c69c9f3787e4852d0504f3ac00..9db69433634ca5b6803e818ce6ae8a5023167994 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,15 +1,15 @@ { - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "dbaeumer.vscode-eslint", - "alexr00.formatallfilesinworkspace", - "esbenp.prettier-vscode", - "DavidAnson.vscode-markdownlint", - "streetsidesoftware.code-spell-checker", - "ms-python.python", - "rioj7.commandOnAllFiles", - "nsoult.typescript-imports-sort", - "connor4312.esbuild-problem-matchers" - ] + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "dbaeumer.vscode-eslint", + "alexr00.formatallfilesinworkspace", + "esbenp.prettier-vscode", + "DavidAnson.vscode-markdownlint", + "streetsidesoftware.code-spell-checker", + "ms-python.python", + "rioj7.commandOnAllFiles", + "nsoult.typescript-imports-sort", + "connor4312.esbuild-problem-matchers" + ] } diff --git a/.vscode/launch.json b/.vscode/launch.json index 595537d3004d1db9fede412a669f437df6d2d56d..e9fa0a03ed341ac2870b5e2f8c5ce04b12476c8a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,45 +3,44 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - "version": "0.2.0", - "configurations": [ - { - "name": "Python: 当前文件", - "type": "python", - "request": "launch", - "program": "${file}", - "console": "integratedTerminal", - "justMyCode": true - }, - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - // Disable other extensions when debugging - "--disable-extensions", - // Specific workspace root directory - "${workspaceRoot}/testRoot" - ], - "outFiles": ["${workspaceFolder}/client/out/**/*.js", "${workspaceFolder}/server/out/**/*.js"], - // Automatically attach language server child process - "autoAttachChildProcesses": true, - "preLaunchTask": "all_watch" - // "postDebugTask": "terminateTasks" - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/client/out/test/index", - "${workspaceRoot}/testRoot" - ], - "outFiles": ["${workspaceFolder}/client/out/test/**/*.js"], - "preLaunchTask": "all_watch" - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "Python: 当前文件", + "type": "debugpy", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal" + }, + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + // Disable other extensions when debugging + "--disable-extensions", + // Specific workspace root directory + "${workspaceRoot}/testRoot" + ], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + // Automatically attach language server child process + "autoAttachChildProcesses": true, + "preLaunchTask": "all_watch" + // "postDebugTask": "terminateTasks" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/client/out/test/index", + "${workspaceRoot}/testRoot" + ], + "outFiles": ["${workspaceFolder}/client/out/test/**/*.js"], + "preLaunchTask": "all_watch" + } + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 51368a3aafe80a635a909d5bee633b87cb92e8ac..9fc8ab9d196e0885c69170fd8022db676c622fba 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,44 +1,46 @@ // Place your settings in this file to overwrite default and user settings. { - "files.exclude": { - "**/out": true, - "**/.vscode-test": true - }, - "search.exclude": { - "**/out": true, - "**/.vscode-test": true - }, - // 禁止 tsc 自动检测 - "typescript.tsc.autoDetect": "off", - // typescript 快速修复优先使用单引号 - "typescript.preferences.quoteStyle": "single", - // 保存时自动格式化文件 - "editor.formatOnSave": true, - // 使用 prettier 作为首选格式化工具 - "editor.defaultFormatter": "esbenp.prettier-vscode", - "[markdown]": { - "editor.defaultFormatter": "DavidAnson.vscode-markdownlint" - }, - // IDE 标尺 - "editor.rulers": [80, 120], - // Format All Files 插件排除文件夹 - "formatAll.excludeFolders": ["node_modules", "out", ".vscode-test", "assets", "resources"], - "cSpell.words": [ - "appenders", - "iscas", - "Mulan", - "prewatch", - "prismjs", - "rvportingtool", - "RVCodingAsst", - "shiki", - "tcse", - "Upto" - ], - "commandOnAllFiles.commands": { - "Typescript Import Sort": { - "command": "extension.typescriptImportsSort", - "includeFileExtensions": [".ts"] - } + "files.exclude": { + "**/out": true, + "**/.vscode-test": true + }, + "search.exclude": { + "**/out": true, + "**/.vscode-test": true + }, + // 禁止 tsc 自动检测 + "typescript.tsc.autoDetect": "off", + // typescript 快速修复优先使用单引号 + "typescript.preferences.quoteStyle": "single", + // 保存时自动格式化文件 + "editor.formatOnSave": true, + // 使用 prettier 作为首选格式化工具 + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[markdown]": { + "editor.defaultFormatter": "DavidAnson.vscode-markdownlint" + }, + // IDE 标尺 + "editor.rulers": [80, 120], + // Format All Files 插件排除文件夹 + "formatAll.excludeFolders": ["node_modules", "out", ".vscode-test", "assets", "resources"], + "cSpell.words": [ + "appenders", + "iscas", + "Mulan", + "prewatch", + "prismjs", + "rvportingtool", + "RVCodingAsst", + "shiki", + "tcse", + "Upto" + ], + "commandOnAllFiles.commands": { + "Typescript Import Sort": { + "command": "extension.typescriptImportsSort", + "includeFileExtensions": [".ts"] } + }, + "editor.tabSize": 2, + "typescript.tsdk": "node_modules\\typescript\\lib" } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5c8e63fd61c6e6728ef939dde2048cfbb44b9020..86a70756b37a01dec5198fefa322045e7f7a63c8 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,55 +1,55 @@ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format { - "version": "2.0.0", - "tasks": [ - { - "label": "all_watch", - "dependsOn": ["tsc_watch", "esbuild_watch"], - "group": { - "kind": "build", - "isDefault": true - } - }, - { - "type": "npm", - "script": "watch_esbuild", - "label": "esbuild_watch", - "problemMatcher": "$esbuild-watch", - "isBackground": true, - "presentation": { - "reveal": "always" - }, - "group": { - "kind": "build" - } - }, - { - "type": "npm", - "script": "watch", - "label": "tsc_watch", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "always" - }, - "group": { - "kind": "build" - } - }, - { - "type": "shell", - "label": "terminateTasks", - "command": "echo ${input:terminateTasks}", - "problemMatcher": [] - } - ], - "inputs": [ - { - "id": "terminateTasks", - "type": "command", - "command": "workbench.action.tasks.terminate", - "args": "terminateAll" - } - ] + "version": "2.0.0", + "tasks": [ + { + "label": "all_watch", + "dependsOn": ["tsc_watch", "esbuild_watch"], + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "type": "npm", + "script": "watch_esbuild", + "label": "esbuild_watch", + "problemMatcher": "$esbuild-watch", + "isBackground": true, + "presentation": { + "reveal": "always" + }, + "group": { + "kind": "build" + } + }, + { + "type": "npm", + "script": "watch", + "label": "tsc_watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "always" + }, + "group": { + "kind": "build" + } + }, + { + "type": "shell", + "label": "terminateTasks", + "command": "echo ${input:terminateTasks}", + "problemMatcher": [] + } + ], + "inputs": [ + { + "id": "terminateTasks", + "type": "command", + "command": "workbench.action.tasks.terminate", + "args": "terminateAll" + } + ] } diff --git a/.vscodeignore b/.vscodeignore index 170b0b99ba46c11a4f4b79bf8819ea9f50ec7253..8a9a9aa9d1b291165d31ad03a12237c6d1661c55 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,19 +1,30 @@ +.eslintrc.json +.gitignore +.markdownlint.json +.npmrc +.prettierignore +.prettierrc +README.md +README.en.md +DEV_NOTES.md +CHANGELOG.md +esbuild.js +pnpm-lock.yaml + .vscode/** .vscode-test/** .gitignore -.yarnrc -vsc-extension-quickstart.md **/tsconfig.json **/tsconfig.base.json **/.eslintrc.json **/*.map **/*.ts .travis.yml -CONTRIBUTING.md -client/node_modules/** -!client/node_modules/vscode-jsonrpc/** -!client/node_modules/vscode-languageclient/** -!client/node_modules/vscode-languageserver-protocol/** -!client/node_modules/vscode-languageserver-types/** -!client/node_modules/{minimatch,brace-expansion,concat-map,balanced-match}/** -!client/node_modules/{semver,lru-cache,yallist}/** \ No newline at end of file + +testRoot/** +scripts/** + +client/** +server/** +webview/** +common/** diff --git a/client/package-lock.json b/client/package-lock.json deleted file mode 100644 index 562d6f63557eab2aa9ddfacc35ceee61487d59f6..0000000000000000000000000000000000000000 --- a/client/package-lock.json +++ /dev/null @@ -1,489 +0,0 @@ -{ - "name": "rvportingtool-client", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "rvportingtool-client", - "version": "0.0.1", - "license": "MulanPSL-2.0", - "dependencies": { - "@vscode/l10n": "^0.0.11", - "@vscode/webview-ui-toolkit": "^1.2.2", - "log4js": "^6.9.1", - "vscode-languageclient": "^7.0.0" - }, - "devDependencies": { - "@types/vscode": "^1.75.0", - "@vscode/test-electron": "^2.1.2" - }, - "engines": { - "vscode": "^1.75.0" - } - }, - "node_modules/@microsoft/fast-element": { - "version": "1.11.0", - "resolved": "https://registry.npmmirror.com/@microsoft/fast-element/-/fast-element-1.11.0.tgz", - "integrity": "sha512-VKJYMkS5zgzHHb66sY7AFpYv6IfFhXrjQcAyNgi2ivD65My1XOhtjfKez5ELcLFRJfgZNAxvI8kE69apXERTkw==" - }, - "node_modules/@microsoft/fast-foundation": { - "version": "2.47.0", - "resolved": "https://registry.npmmirror.com/@microsoft/fast-foundation/-/fast-foundation-2.47.0.tgz", - "integrity": "sha512-EyFuioaZQ9ngjUNRQi8R3dIPPsaNQdUOS+tP0G7b1MJRhXmQWIitBM6IeveQA6ZvXG6H21dqgrfEWlsYrUZ2sw==", - "dependencies": { - "@microsoft/fast-element": "^1.11.0", - "@microsoft/fast-web-utilities": "^5.4.1", - "tabbable": "^5.2.0", - "tslib": "^1.13.0" - } - }, - "node_modules/@microsoft/fast-react-wrapper": { - "version": "0.1.48", - "resolved": "https://registry.npmmirror.com/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.1.48.tgz", - "integrity": "sha512-9NvEjru9Kn5ZKjomAMX6v+eF0DR+eDkxKDwDfi+Wb73kTbrNzcnmlwd4diN15ygH97kldgj2+lpvI4CKLQQWLg==", - "dependencies": { - "@microsoft/fast-element": "^1.9.0", - "@microsoft/fast-foundation": "^2.41.1" - }, - "peerDependencies": { - "react": ">=16.9.0" - } - }, - "node_modules/@microsoft/fast-web-utilities": { - "version": "5.4.1", - "resolved": "https://registry.npmmirror.com/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz", - "integrity": "sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==", - "dependencies": { - "exenv-es6": "^1.1.1" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/vscode": { - "version": "1.76.0", - "resolved": "https://registry.npmmirror.com/@types/vscode/-/vscode-1.76.0.tgz", - "integrity": "sha512-CQcY3+Fe5hNewHnOEAVYj4dd1do/QHliXaknAEYSXx2KEHUzFibDZSKptCon+HPgK55xx20pR+PBJjf0MomnBA==", - "dev": true - }, - "node_modules/@vscode/l10n": { - "version": "0.0.11", - "resolved": "https://registry.npmmirror.com/@vscode/l10n/-/l10n-0.0.11.tgz", - "integrity": "sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==" - }, - "node_modules/@vscode/test-electron": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/@vscode/test-electron/-/test-electron-2.3.0.tgz", - "integrity": "sha512-fwzA9RtazH1GT/sckYlbxu6t5e4VaMXwCVtyLv4UAG0hP6NTfnMaaG25XCfWqlVwFhBMcQXHBCy5dmz2eLUnkw==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "jszip": "^3.10.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@vscode/webview-ui-toolkit": { - "version": "1.2.2", - "resolved": "https://registry.npmmirror.com/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.2.tgz", - "integrity": "sha512-xIQoF4FC3Xh6d7KNKIoIezSiFWYFuf6gQMdDyKueKBFGeKwaHWEn+dY2g3makvvEsNMEDji/woEwvg9QSbuUsw==", - "dependencies": { - "@microsoft/fast-element": "^1.6.2", - "@microsoft/fast-foundation": "^2.38.0", - "@microsoft/fast-react-wrapper": "^0.1.18" - }, - "peerDependencies": { - "react": ">=16.9.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmmirror.com/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/exenv-es6": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/exenv-es6/-/exenv-es6-1.1.1.tgz", - "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==" - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmmirror.com/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmmirror.com/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/tabbable": { - "version": "5.3.3", - "resolved": "https://registry.npmmirror.com/tabbable/-/tabbable-5.3.3.tgz", - "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==" - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "engines": { - "vscode": "^1.52.0" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/client/package.json b/client/package.json index d8e6b3e7484a30cbd6106c39636a56e05843f696..8191b0a283969e1a588281847a448e2db80ff91d 100644 --- a/client/package.json +++ b/client/package.json @@ -1,22 +1,22 @@ { - "name": "rvportingtool-client", - "description": "VSCode Client Part of Software Porting Tool for RISC-V", - "author": "tcse-iscas", - "license": "MulanPSL-2.0", - "version": "0.0.1", - "publisher": "tcse-iscas", - "l10n": "../l10n", - "engines": { - "vscode": "^1.75.0" - }, - "dependencies": { - "@vscode/l10n": "^0.0.11", - "@vscode/webview-ui-toolkit": "^1.2.2", - "log4js": "^6.9.1", - "vscode-languageclient": "^7.0.0" - }, - "devDependencies": { - "@types/vscode": "^1.75.0", - "@vscode/test-electron": "^2.1.2" - } + "name": "rvportingtool-client", + "description": "VSCode Client Part of Software Porting Tool for RISC-V", + "author": "tcse-iscas", + "license": "MulanPSL-2.0", + "version": "0.0.1", + "publisher": "tcse-iscas", + "l10n": "../l10n", + "engines": { + "vscode": "^1.75.0" + }, + "dependencies": { + "@vscode/l10n": "^0.0.11", + "@vscode/webview-ui-toolkit": "^1.2.2", + "log4js": "^6.9.1", + "vscode-languageclient": "^7.0.0" + }, + "devDependencies": { + "@types/vscode": "^1.75.0", + "@vscode/test-electron": "^2.1.2" + } } diff --git a/client/pnpm-lock.yaml b/client/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fbacc0561a49e23a2f2d1975c9a915b700cfcaf6 --- /dev/null +++ b/client/pnpm-lock.yaml @@ -0,0 +1,422 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@vscode/l10n': + specifier: ^0.0.11 + version: 0.0.11 + '@vscode/webview-ui-toolkit': + specifier: ^1.2.2 + version: 1.2.2(react@18.2.0) + log4js: + specifier: ^6.9.1 + version: 6.9.1 + vscode-languageclient: + specifier: ^7.0.0 + version: 7.0.0 + devDependencies: + '@types/vscode': + specifier: ^1.75.0 + version: 1.76.0 + '@vscode/test-electron': + specifier: ^2.1.2 + version: 2.3.0 + +packages: + + '@microsoft/fast-element@1.11.0': + resolution: {integrity: sha512-VKJYMkS5zgzHHb66sY7AFpYv6IfFhXrjQcAyNgi2ivD65My1XOhtjfKez5ELcLFRJfgZNAxvI8kE69apXERTkw==} + + '@microsoft/fast-foundation@2.47.0': + resolution: {integrity: sha512-EyFuioaZQ9ngjUNRQi8R3dIPPsaNQdUOS+tP0G7b1MJRhXmQWIitBM6IeveQA6ZvXG6H21dqgrfEWlsYrUZ2sw==} + + '@microsoft/fast-react-wrapper@0.1.48': + resolution: {integrity: sha512-9NvEjru9Kn5ZKjomAMX6v+eF0DR+eDkxKDwDfi+Wb73kTbrNzcnmlwd4diN15ygH97kldgj2+lpvI4CKLQQWLg==} + peerDependencies: + react: '>=16.9.0' + + '@microsoft/fast-web-utilities@5.4.1': + resolution: {integrity: sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==} + + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + '@types/vscode@1.76.0': + resolution: {integrity: sha512-CQcY3+Fe5hNewHnOEAVYj4dd1do/QHliXaknAEYSXx2KEHUzFibDZSKptCon+HPgK55xx20pR+PBJjf0MomnBA==} + + '@vscode/l10n@0.0.11': + resolution: {integrity: sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==} + + '@vscode/test-electron@2.3.0': + resolution: {integrity: sha512-fwzA9RtazH1GT/sckYlbxu6t5e4VaMXwCVtyLv4UAG0hP6NTfnMaaG25XCfWqlVwFhBMcQXHBCy5dmz2eLUnkw==} + engines: {node: '>=16'} + + '@vscode/webview-ui-toolkit@1.2.2': + resolution: {integrity: sha512-xIQoF4FC3Xh6d7KNKIoIezSiFWYFuf6gQMdDyKueKBFGeKwaHWEn+dY2g3makvvEsNMEDji/woEwvg9QSbuUsw==} + peerDependencies: + react: '>=16.9.0' + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + date-format@4.0.14: + resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} + engines: {node: '>=4.0'} + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + exenv-es6@1.1.1: + resolution: {integrity: sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==} + + flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + log4js@6.9.1: + resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} + engines: {node: '>=8.0'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + semver@7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} + hasBin: true + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + streamroller@3.1.5: + resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} + engines: {node: '>=8.0'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + tabbable@5.3.3: + resolution: {integrity: sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vscode-jsonrpc@6.0.0: + resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} + engines: {node: '>=8.0.0 || >=10.0.0'} + + vscode-languageclient@7.0.0: + resolution: {integrity: sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==} + engines: {vscode: ^1.52.0} + + vscode-languageserver-protocol@3.16.0: + resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==} + + vscode-languageserver-types@3.16.0: + resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + +snapshots: + + '@microsoft/fast-element@1.11.0': {} + + '@microsoft/fast-foundation@2.47.0': + dependencies: + '@microsoft/fast-element': 1.11.0 + '@microsoft/fast-web-utilities': 5.4.1 + tabbable: 5.3.3 + tslib: 1.14.1 + + '@microsoft/fast-react-wrapper@0.1.48(react@18.2.0)': + dependencies: + '@microsoft/fast-element': 1.11.0 + '@microsoft/fast-foundation': 2.47.0 + react: 18.2.0 + + '@microsoft/fast-web-utilities@5.4.1': + dependencies: + exenv-es6: 1.1.1 + + '@tootallnate/once@1.1.2': {} + + '@types/vscode@1.76.0': {} + + '@vscode/l10n@0.0.11': {} + + '@vscode/test-electron@2.3.0': + dependencies: + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + jszip: 3.10.1 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + + '@vscode/webview-ui-toolkit@1.2.2(react@18.2.0)': + dependencies: + '@microsoft/fast-element': 1.11.0 + '@microsoft/fast-foundation': 2.47.0 + '@microsoft/fast-react-wrapper': 0.1.48(react@18.2.0) + react: 18.2.0 + + agent-base@6.0.2: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + balanced-match@1.0.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + concat-map@0.0.1: {} + + core-util-is@1.0.3: {} + + date-format@4.0.14: {} + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + exenv-es6@1.1.1: {} + + flatted@3.2.7: {} + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + graceful-fs@4.2.11: {} + + http-proxy-agent@4.0.1: + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + immediate@3.0.6: {} + + inherits@2.0.4: {} + + isarray@1.0.0: {} + + js-tokens@4.0.0: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + log4js@6.9.1: + dependencies: + date-format: 4.0.14 + debug: 4.3.4 + flatted: 3.2.7 + rfdc: 1.3.0 + streamroller: 3.1.5 + transitivePeerDependencies: + - supports-color + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + ms@2.1.2: {} + + pako@1.0.11: {} + + process-nextick-args@2.0.1: {} + + react@18.2.0: + dependencies: + loose-envify: 1.4.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + rfdc@1.3.0: {} + + safe-buffer@5.1.2: {} + + semver@7.3.8: + dependencies: + lru-cache: 6.0.0 + + setimmediate@1.0.5: {} + + streamroller@3.1.5: + dependencies: + date-format: 4.0.14 + debug: 4.3.4 + fs-extra: 8.1.0 + transitivePeerDependencies: + - supports-color + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + tabbable@5.3.3: {} + + tslib@1.14.1: {} + + universalify@0.1.2: {} + + util-deprecate@1.0.2: {} + + vscode-jsonrpc@6.0.0: {} + + vscode-languageclient@7.0.0: + dependencies: + minimatch: 3.1.2 + semver: 7.3.8 + vscode-languageserver-protocol: 3.16.0 + + vscode-languageserver-protocol@3.16.0: + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + + vscode-languageserver-types@3.16.0: {} + + yallist@4.0.0: {} diff --git a/client/src/extension.ts b/client/src/extension.ts index 657d6ef848b9bd21621d1a609f79c40e5823d64c..e4437efbda13c7c0e073cab738a2a7f7b5c90cfc 100644 --- a/client/src/extension.ts +++ b/client/src/extension.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,17 +8,24 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Client Entry for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 15, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as path from "path"; import * as vscode from "vscode"; import { ClientLogger } from "./utils/log"; -import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from "vscode-languageclient/node"; +import { + LanguageClient, + LanguageClientOptions, + ServerOptions, + TransportKind, +} from "vscode-languageclient/node"; import { ReportManagerClient } from "./reportManagerClient"; import { WikiHelper } from "./wikiHelper"; @@ -26,62 +33,67 @@ import { WikiHelper } from "./wikiHelper"; let client: LanguageClient; export function activate(context: vscode.ExtensionContext) { - /** 初始化日志模块 */ - const logger = ClientLogger.init(context); + /** 初始化日志模块 */ + const logger = ClientLogger.init(context); - /** Language Server 入口路径 */ - const serverModule = context.asAbsolutePath(path.join("server", "out", "server", "src", "server.js")); + /** Language Server 入口路径 */ + const serverModule = context.asAbsolutePath(path.join("out", "server", "server.js")); - /** Language Server 配置 */ - const serverOptions: ServerOptions = { - run: { - module: serverModule, - transport: TransportKind.ipc, - }, - debug: { - module: serverModule, - transport: TransportKind.ipc, - }, - }; + /** Language Server 配置 */ + const serverOptions: ServerOptions = { + run: { + module: serverModule, + transport: TransportKind.ipc, + }, + debug: { + module: serverModule, + transport: TransportKind.ipc, + }, + }; - /** Language Client 配置 */ - const clientOptions: LanguageClientOptions = { - /** 注册为所有类型文件 */ - documentSelector: [ - { - scheme: "file", - }, - ], - synchronize: { - // Notify the server about file changes to '.clientrc files contained in the workspace - fileEvents: vscode.workspace.createFileSystemWatcher("**/.clientrc"), - }, - }; + /** Language Client 配置 */ + const clientOptions: LanguageClientOptions = { + /** 注册为所有类型文件 */ + documentSelector: [ + { + scheme: "file", + }, + ], + synchronize: { + // Notify the server about file changes to '.clientrc files contained in the workspace + fileEvents: vscode.workspace.createFileSystemWatcher("**/.clientrc"), + }, + }; - // 创建 Language Client - client = new LanguageClient("rvportingtool", "RVPortingTool Language Server", serverOptions, clientOptions); + // 创建 Language Client + client = new LanguageClient( + "rvportingtool", + "RVPortingTool Language Server", + serverOptions, + clientOptions + ); - // Language Client 就绪后操作 - client.onReady().then(() => { - logger.info("Language Client is ready"); - }); + // Language Client 就绪后操作 + client.onReady().then(() => { + logger.info("Language Client is ready"); + }); - // 初始化 Language Server 日志功能 - ClientLogger.initLSP(client); + // 初始化 Language Server 日志功能 + ClientLogger.initLSP(client); - // 初始化 Report Manager Client - ReportManagerClient.init(context, client); + // 初始化 Report Manager Client + ReportManagerClient.init(context, client); - // 初始化 Wiki Helper - WikiHelper.init(context, client); + // 初始化 Wiki Helper + WikiHelper.init(context, client); - // 启动 Language Client,同时启动 Server - client.start(); + // 启动 Language Client,同时启动 Server + client.start(); } export function deactivate(): Thenable | undefined { - if (!client) { - return undefined; - } - return client.stop(); + if (!client) { + return undefined; + } + return client.stop(); } diff --git a/client/src/reportManagerClient.ts b/client/src/reportManagerClient.ts index c2549201a6bb21f6797ef5a30c8205dba8147b9b..3fb256aa18e4eb4196703adddfe3b128adb1e806 100644 --- a/client/src/reportManagerClient.ts +++ b/client/src/reportManagerClient.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Client Report Manager for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 16, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as lsp from "vscode-languageclient"; @@ -23,10 +25,10 @@ import { CommandID } from "../../common/src/types/command"; import { LSPNotificationID } from "../../common/src/types/notification"; import { LSPRequestID } from "../../common/src/types/request"; import { - ReportMgrLoadError, - ReportMgrLoadParams, - ReportMgrSaveError, - ReportMgrSaveParams, + ReportMgrLoadError, + ReportMgrLoadParams, + ReportMgrSaveError, + ReportMgrSaveParams, } from "../../common/src/types/reportManager"; import path = require("path"); @@ -35,383 +37,394 @@ const logger = ClientLogger.getLogger("reportMgrClient"); /** 代码问题报告管理器(客户端) */ export class ReportManagerClient { - /** LSP 客户端 */ - private _client: lsp.BaseLanguageClient; - - private constructor(client: lsp.BaseLanguageClient) { - this._client = client; - } - - public static init(context: vscode.ExtensionContext, client: lsp.BaseLanguageClient): ReportManagerClient { - const manager = new ReportManagerClient(client); - - // 注册模块所定义命令 - context.subscriptions.push( - // 选择工作区,并从本地文件读入报告 - vscode.commands.registerCommand(CommandID.reportMgrLoadFromFile, () => { - manager.chooseReportWorkspace((workspace) => { - if (workspace !== undefined) { - manager.loadReportToWorkspace(LSPNotificationID.reportMgrLoadFromFile, workspace); - } - }); - }), - - // 导出报告(用户选择工作区) - vscode.commands.registerCommand(CommandID.reportMgrExport, () => { - const diagCollection = vscode.languages.createDiagnosticCollection("test"); - const docUri = vscode.Uri.parse("file:///m%3A/Projects/RISC-V/rv-vsc-plugin/testRoot/TestPoisonArea.c"); - diagCollection.set(docUri, [ - { - code: { target: vscode.Uri.parse("https://www.baidu.com"), value: "testCode" }, - message: "This is a test", - range: new vscode.Range(new vscode.Position(81, 10), new vscode.Position(81, 40)), - severity: vscode.DiagnosticSeverity.Warning, - source: "test1234", - }, - ]); - manager.exportReport(); - }), - - // 保存所有报告(缓存到工作区) - vscode.commands.registerCommand(CommandID.reportMgrSaveAllReportsCache, () => { - manager.saveAllReportsCache(); - }) - ); - - // 注册模块所属回调方法 - client.onReady().then(() => { - // 注册请求:获取报告信息 - client.onRequest(LSPRequestID.reportMgrGetRuleInfo, async (ruleId: string) => { - return checkerRules.get(ruleId); - }); - - // 注册通知:报告读取错误 - client.onNotification(LSPNotificationID.reportMgrLoadError, (data) => { - manager.onLoadError(data); - }); - - // 注册通知:报告替换确认 - client.onNotification(LSPNotificationID.reportMgrReloadConfirm, (data) => { - manager.onReloadConfirm(data); - }); - - // 注册通知:报告加载完成 - client.onNotification(LSPNotificationID.reportMgrLoadFinished, (data) => { - manager.onLoadFinished(data); - }); - - // 注册通知:报告加载完成,但缓存到工作区失败 - client.onNotification(LSPNotificationID.reportMgrLoadFinishedWithSaveError, () => { - manager.onLoadFinishedWithSaveError(); - }); - - // 注册通知:报告保存成功 - client.onNotification(LSPNotificationID.reportMgrSaveFinished, (data) => { - manager.onSaveFinished(data); - }); - - // 注册通知:保存全部报告(缓存到工作区)成功 - client.onNotification(LSPNotificationID.reportMgrSaveCacheAllFinished, (data) => { - manager.onSaveAllCacheFinished(data); - }); - - // 注册通知:报告保存失败 - client.onNotification(LSPNotificationID.reportMgrSaveError, (data) => { - manager.onSaveError(data); - }); - - // 发送通知:加载报告 JSON Schema - const schemaPath = context.asAbsolutePath("resources/report_schema.json"); - client.sendNotification(LSPNotificationID.reportMgrLoadSchema, schemaPath); + /** LSP 客户端 */ + private _client: lsp.BaseLanguageClient; + + private constructor(client: lsp.BaseLanguageClient) { + this._client = client; + } + + public static init( + context: vscode.ExtensionContext, + client: lsp.BaseLanguageClient + ): ReportManagerClient { + const manager = new ReportManagerClient(client); + + // 注册模块所定义命令 + context.subscriptions.push( + // 选择工作区,并从本地文件读入报告 + vscode.commands.registerCommand(CommandID.reportMgrLoadFromFile, () => { + manager.chooseReportWorkspace((workspace) => { + if (workspace !== undefined) { + manager.loadReportToWorkspace(LSPNotificationID.reportMgrLoadFromFile, workspace); + } }); + }), - return manager; - } - - /** - * 报告保存完毕 - * - * @param params 报告保存参数 - */ - public onSaveFinished(params: ReportMgrSaveParams) { - vscode.window.showInformationMessage( - vscode.l10n.t("Finished saving report to: {0}", params.reportUri), - vscode.l10n.t("Confirm") + // 导出报告(用户选择工作区) + vscode.commands.registerCommand(CommandID.reportMgrExport, () => { + const diagCollection = vscode.languages.createDiagnosticCollection("test"); + const docUri = vscode.Uri.parse( + "file:///m%3A/Projects/RISC-V/rv-vsc-plugin/testRoot/TestPoisonArea.c" ); - } - - /** - * 所有工作区报告保存完毕 - * - * @param data 工作区总数 - */ - public onSaveAllCacheFinished(data: number) { - vscode.window.showInformationMessage( - vscode.l10n.t("Finished saving all {0} workspaces' report cache", data.toString()), - vscode.l10n.t("Confirm") - ); - } - - /** - * 报告加载完毕 - * - * @param data 报告时间戳 - */ - public onLoadFinished(data: number) { - vscode.window.showInformationMessage( - vscode.l10n.t( - "Finished loading code check report! The report was updated at: {0}", - new Date(data).toISOString() - ), - vscode.l10n.t("Confirm") - ); - } - - /** - * 报告加载完毕,但保存到工作区出错 - */ - public onLoadFinishedWithSaveError() { - vscode.window.showWarningMessage( - vscode.l10n.t( - "Finished loading code check report, but failed to save to workspace. \ + diagCollection.set(docUri, [ + { + code: { target: vscode.Uri.parse("https://www.baidu.com"), value: "testCode" }, + message: "This is a test", + range: new vscode.Range(new vscode.Position(81, 10), new vscode.Position(81, 40)), + severity: vscode.DiagnosticSeverity.Warning, + source: "test1234", + }, + ]); + manager.exportReport(); + }), + + // 保存所有报告(缓存到工作区) + vscode.commands.registerCommand(CommandID.reportMgrSaveAllReportsCache, () => { + manager.saveAllReportsCache(); + }) + ); + + // 注册模块所属回调方法 + client.onReady().then(() => { + // 注册请求:获取报告信息 + client.onRequest(LSPRequestID.reportMgrGetRuleInfo, async (ruleId: string) => { + return checkerRules.get(ruleId); + }); + + // 注册通知:报告读取错误 + client.onNotification(LSPNotificationID.reportMgrLoadError, (data) => { + manager.onLoadError(data); + }); + + // 注册通知:报告替换确认 + client.onNotification(LSPNotificationID.reportMgrReloadConfirm, (data) => { + manager.onReloadConfirm(data); + }); + + // 注册通知:报告加载完成 + client.onNotification(LSPNotificationID.reportMgrLoadFinished, (data) => { + manager.onLoadFinished(data); + }); + + // 注册通知:报告加载完成,但缓存到工作区失败 + client.onNotification(LSPNotificationID.reportMgrLoadFinishedWithSaveError, () => { + manager.onLoadFinishedWithSaveError(); + }); + + // 注册通知:报告保存成功 + client.onNotification(LSPNotificationID.reportMgrSaveFinished, (data) => { + manager.onSaveFinished(data); + }); + + // 注册通知:保存全部报告(缓存到工作区)成功 + client.onNotification(LSPNotificationID.reportMgrSaveCacheAllFinished, (data) => { + manager.onSaveAllCacheFinished(data); + }); + + // 注册通知:报告保存失败 + client.onNotification(LSPNotificationID.reportMgrSaveError, (data) => { + manager.onSaveError(data); + }); + + // 发送通知:加载报告 JSON Schema + const schemaPath = context.asAbsolutePath("resources/report_schema.json"); + client.sendNotification(LSPNotificationID.reportMgrLoadSchema, schemaPath); + }); + + return manager; + } + + /** + * 报告保存完毕 + * + * @param params 报告保存参数 + */ + public onSaveFinished(params: ReportMgrSaveParams) { + vscode.window.showInformationMessage( + vscode.l10n.t("Finished saving report to: {0}", params.reportUri), + vscode.l10n.t("Confirm") + ); + } + + /** + * 所有工作区报告保存完毕 + * + * @param data 工作区总数 + */ + public onSaveAllCacheFinished(data: number) { + vscode.window.showInformationMessage( + vscode.l10n.t("Finished saving all {0} workspaces' report cache", data.toString()), + vscode.l10n.t("Confirm") + ); + } + + /** + * 报告加载完毕 + * + * @param data 报告时间戳 + */ + public onLoadFinished(data: number) { + vscode.window.showInformationMessage( + vscode.l10n.t( + "Finished loading code check report! The report was updated at: {0}", + new Date(data).toISOString() + ), + vscode.l10n.t("Confirm") + ); + } + + /** + * 报告加载完毕,但保存到工作区出错 + */ + public onLoadFinishedWithSaveError() { + vscode.window.showWarningMessage( + vscode.l10n.t( + "Finished loading code check report, but failed to save to workspace. \ Your operations will be lost if you don't export the report manually after working." - ), - vscode.l10n.t("Confirm") - ); + ), + vscode.l10n.t("Confirm") + ); + } + + public onReloadConfirm(data: ReportMgrLoadParams) { + const message = vscode.l10n.t("Report reloading confirm"); + const messageOptions: vscode.MessageOptions = { + detail: vscode.l10n.t( + "The workspace already contains report data! Would you like to override it?" + ), + modal: true, + }; + const nextOptions: string[] = []; + const optionConfirm = vscode.l10n.t("Confirm"); + nextOptions.push(optionConfirm); + vscode.window.showWarningMessage(message, messageOptions, ...nextOptions).then((value) => { + if (value === optionConfirm) { + data.reloadConfirm = true; + this._client.sendNotification(LSPNotificationID.reportMgrLoad, data); + } + }); + } + + /** + * 报告加载失败回调 + * + * @param data 加载失败信息 + */ + public onLoadError(data: ReportMgrLoadError) { + const loadParams: ReportMgrLoadParams = data.loadParams; + let reason: string; + switch (data.reason) { + case "fileNotExists": + reason = vscode.l10n.t("File does not exists"); + break; + case "networkError": + reason = vscode.l10n.t("Network error"); + break; + case "formatError": + reason = vscode.l10n.t("Format Error"); + break; + default: + reason = vscode.l10n.t("Unknown reason"); + break; } - public onReloadConfirm(data: ReportMgrLoadParams) { - const message = vscode.l10n.t("Report reloading confirm"); - const messageOptions: vscode.MessageOptions = { - detail: vscode.l10n.t("The workspace already contains report data! Would you like to override it?"), - modal: true, - }; - const nextOptions: string[] = []; - const optionConfirm = vscode.l10n.t("Confirm"); - nextOptions.push(optionConfirm); - vscode.window.showWarningMessage(message, messageOptions, ...nextOptions).then((value) => { - if (value === optionConfirm) { - data.reloadConfirm = true; - this._client.sendNotification(LSPNotificationID.reportMgrLoad, data); - } - }); + // 构造错误提示,并通过模态框弹窗提示(普通消息不够显眼) + const message = vscode.l10n.t("Failed to load report"); + const messageOptions: vscode.MessageOptions = { + detail: vscode.l10n.t("Failed to load report: {0}: {1}", reason, loadParams.reportUri), + modal: true, + }; + const nextOptions: string[] = []; + const optionRetry = vscode.l10n.t("Retry"); + if (data.retry) { + nextOptions.push(optionRetry); } - - /** - * 报告加载失败回调 - * - * @param data 加载失败信息 - */ - public onLoadError(data: ReportMgrLoadError) { - const loadParams: ReportMgrLoadParams = data.loadParams; - let reason: string; - switch (data.reason) { - case "fileNotExists": - reason = vscode.l10n.t("File does not exists"); - break; - case "networkError": - reason = vscode.l10n.t("Network error"); - break; - case "formatError": - reason = vscode.l10n.t("Format Error"); - break; - default: - reason = vscode.l10n.t("Unknown reason"); - break; - } - - // 构造错误提示,并通过模态框弹窗提示(普通消息不够显眼) - const message = vscode.l10n.t("Failed to load report"); - const messageOptions: vscode.MessageOptions = { - detail: vscode.l10n.t("Failed to load report: {0}: {1}", reason, loadParams.reportUri), - modal: true, - }; - const nextOptions: string[] = []; - const optionRetry = vscode.l10n.t("Retry"); - if (data.retry) { - nextOptions.push(optionRetry); - } - vscode.window.showErrorMessage(message, messageOptions, ...nextOptions).then((value) => { - if (value === optionRetry) { - this._client.sendNotification(LSPNotificationID.reportMgrLoad, loadParams); - } - }); - } - - /** - * 导入报告前选择工作区 - * - * @param data - */ - public chooseReportWorkspace(callback: (workspace: vscode.WorkspaceFolder | undefined) => void) { - logger.debug("chooseReportWorkspace begin"); - - // 检查当前工作区数量 - const folders = vscode.workspace.workspaceFolders; - if (!folders || folders.length < 1) { - // 当前没有任何工作区,显示警告信息 - vscode.window.showWarningMessage( - vscode.l10n.t("Please open a folder as workspace before loading report"), - vscode.l10n.t("Confirm") - ); - return; - } else if (folders.length < 2) { - // 仅包含一个工作区,直接加载到该工作区 - callback(folders[0]); - return; - } - - // 工作区多于一个,要求用户选择 - vscode.window - .showWorkspaceFolderPick({ - placeHolder: vscode.l10n.t("Please choose a workspace for displaying report"), - }) - .then(callback); - } - - /** - * 导出报告(用户选择工作区) - */ - public exportReport() { - this.chooseReportWorkspace((workspace) => { - if (workspace !== undefined) { - this.exportWorkspaceReport(workspace.uri); - } - }); - } - - /** - * 导出指定工作区的报告文件 - * - * @param workspaceUri 工作区路径 - */ - public exportWorkspaceReport(workspaceUri: vscode.Uri) { - const defaultPath = path.resolve(workspaceUri.fsPath, ".vscode/rvCodingAsst_report.json"); - const fileFilters: { [name: string]: string[] } = {}; - fileFilters[vscode.l10n.t("Code Scan Report")] = ["json"]; - vscode.window - .showSaveDialog({ - defaultUri: vscode.Uri.file(defaultPath), - saveLabel: vscode.l10n.t("Save"), - filters: fileFilters, - title: vscode.l10n.t("Save Code Scan Report As..."), - }) - .then((uri) => { - if (uri) { - this._client.sendNotification(LSPNotificationID.reportMgrSave, { - workspaceUri: workspaceUri.toString(), - reportUri: uri.toString(), - replaceConfirm: true, // 保存框选择时会提示是否替换 - }); - } else { - logger.debug("exportWorkspaceReport: user cancelled: ".concat(workspaceUri.toString())); - } - }); - } - - /** - * 保存所有报告(缓存到工作区) - */ - public saveAllReportsCache() { - this._client.sendNotification(LSPNotificationID.reportMgrSaveCacheAll); + vscode.window.showErrorMessage(message, messageOptions, ...nextOptions).then((value) => { + if (value === optionRetry) { + this._client.sendNotification(LSPNotificationID.reportMgrLoad, loadParams); + } + }); + } + + /** + * 导入报告前选择工作区 + * + * @param data + */ + public chooseReportWorkspace(callback: (workspace: vscode.WorkspaceFolder | undefined) => void) { + logger.debug("chooseReportWorkspace begin"); + + // 检查当前工作区数量 + const folders = vscode.workspace.workspaceFolders; + if (!folders || folders.length < 1) { + // 当前没有任何工作区,显示警告信息 + vscode.window.showWarningMessage( + vscode.l10n.t("Please open a folder as workspace before loading report"), + vscode.l10n.t("Confirm") + ); + return; + } else if (folders.length < 2) { + // 仅包含一个工作区,直接加载到该工作区 + callback(folders[0]); + return; } - /** - * 报告保存失败回调(支持多个文件) - * - * @param data 报告保存失败数据 - */ - public onSaveError(data: ReportMgrSaveError | ReportMgrSaveError[]) { - let errors: ReportMgrSaveError[] = []; - if (Array.isArray(data)) { - errors = errors.concat(data); + // 工作区多于一个,要求用户选择 + vscode.window + .showWorkspaceFolderPick({ + placeHolder: vscode.l10n.t("Please choose a workspace for displaying report"), + }) + .then(callback); + } + + /** + * 导出报告(用户选择工作区) + */ + public exportReport() { + this.chooseReportWorkspace((workspace) => { + if (workspace !== undefined) { + this.exportWorkspaceReport(workspace.uri); + } + }); + } + + /** + * 导出指定工作区的报告文件 + * + * @param workspaceUri 工作区路径 + */ + public exportWorkspaceReport(workspaceUri: vscode.Uri) { + const defaultPath = path.resolve(workspaceUri.fsPath, ".vscode/rvCodingAsst_report.json"); + const fileFilters: { [name: string]: string[] } = {}; + fileFilters[vscode.l10n.t("Code Scan Report")] = ["json"]; + vscode.window + .showSaveDialog({ + defaultUri: vscode.Uri.file(defaultPath), + saveLabel: vscode.l10n.t("Save"), + filters: fileFilters, + title: vscode.l10n.t("Save Code Scan Report As..."), + }) + .then((uri) => { + if (uri) { + this._client.sendNotification(LSPNotificationID.reportMgrSave, { + workspaceUri: workspaceUri.toString(), + reportUri: uri.toString(), + replaceConfirm: true, // 保存框选择时会提示是否替换 + }); } else { - errors.push(data); + logger.debug("exportWorkspaceReport: user cancelled: ".concat(workspaceUri.toString())); } - const message = vscode.l10n.t("Failed to save report"); - let details = vscode.l10n.t("The report for following workspace(s) are failed to save\n"); - errors.forEach((error) => { - details = details.concat("\n", vscode.Uri.parse(error.saveParams.workspaceUri).fsPath); - }); - const optionSaveAs = vscode.l10n.t("Save as..."); - const nextOptions = [optionSaveAs]; - vscode.window - .showErrorMessage( - message, - { - modal: true, - detail: details, - }, - ...nextOptions - ) - .then((value) => { - if (value === optionSaveAs) { - errors.forEach((error) => { - this.exportWorkspaceReport(vscode.Uri.parse(error.saveParams.workspaceUri)); - }); - } else { - logger.warn("onSaveError: user discard all"); - } - }); + }); + } + + /** + * 保存所有报告(缓存到工作区) + */ + public saveAllReportsCache() { + this._client.sendNotification(LSPNotificationID.reportMgrSaveCacheAll); + } + + /** + * 报告保存失败回调(支持多个文件) + * + * @param data 报告保存失败数据 + */ + public onSaveError(data: ReportMgrSaveError | ReportMgrSaveError[]) { + let errors: ReportMgrSaveError[] = []; + if (Array.isArray(data)) { + errors = errors.concat(data); + } else { + errors.push(data); } - - /** - * 读取报告到指定工作区 - * - * 根据 notificationId 区分读取方式,并调用相应的读取方法 - * - * @param notificationId 报告读取通知 ID(来自服务端) - * @param workspace 工作区文件夹 - * @param data 报告读取额外参数 - */ - private loadReportToWorkspace(notificationId: string, workspace: vscode.WorkspaceFolder, data?: any) { - // 根据 notificationId 判断导入方式(本地或在线) - if (notificationId === LSPNotificationID.reportMgrLoadFromFile) { - this.loadFromFileToWorkspace(workspace); - } else if (notificationId === LSPNotificationID.reportMgrLoadFromServer) { - this.loadFromServerToWorkspace(workspace, data); + const message = vscode.l10n.t("Failed to save report"); + let details = vscode.l10n.t("The report for following workspace(s) are failed to save\n"); + errors.forEach((error) => { + details = details.concat("\n", vscode.Uri.parse(error.saveParams.workspaceUri).fsPath); + }); + const optionSaveAs = vscode.l10n.t("Save as..."); + const nextOptions = [optionSaveAs]; + vscode.window + .showErrorMessage( + message, + { + modal: true, + detail: details, + }, + ...nextOptions + ) + .then((value) => { + if (value === optionSaveAs) { + errors.forEach((error) => { + this.exportWorkspaceReport(vscode.Uri.parse(error.saveParams.workspaceUri)); + }); } else { - logger.error("loadReportToWorkspace: invalid notificationID: ".concat(notificationId)); - vscode.window.showErrorMessage(vscode.l10n.t("Feature is not supported yet")); + logger.warn("onSaveError: user discard all"); } + }); + } + + /** + * 读取报告到指定工作区 + * + * 根据 notificationId 区分读取方式,并调用相应的读取方法 + * + * @param notificationId 报告读取通知 ID(来自服务端) + * @param workspace 工作区文件夹 + * @param data 报告读取额外参数 + */ + private loadReportToWorkspace( + notificationId: string, + workspace: vscode.WorkspaceFolder, + data?: any + ) { + // 根据 notificationId 判断导入方式(本地或在线) + if (notificationId === LSPNotificationID.reportMgrLoadFromFile) { + this.loadFromFileToWorkspace(workspace); + } else if (notificationId === LSPNotificationID.reportMgrLoadFromServer) { + this.loadFromServerToWorkspace(workspace, data); + } else { + logger.error("loadReportToWorkspace: invalid notificationID: ".concat(notificationId)); + vscode.window.showErrorMessage(vscode.l10n.t("Feature is not supported yet")); } - - /** - * 导入报告文件到指定工作区 - * - * @param workspace 工作区文件夹 - * @param data 额外导入参数 - */ - private loadFromFileToWorkspace(workspace: vscode.WorkspaceFolder) { - const fileFilters: { [name: string]: string[] } = {}; - fileFilters[vscode.l10n.t("Code Scan Report")] = ["json"]; - vscode.window - .showOpenDialog({ - defaultUri: workspace.uri, - filters: fileFilters, - title: vscode.l10n.t("Please choose code scanning report file"), - }) - .then((uri) => { - if (uri === undefined || uri.length < 1) { - logger.debug("loadFromFileToWorkspace: no uri"); - return; - } - // 通知 Language Server 读取报告 - this._client.sendNotification(LSPNotificationID.reportMgrLoad, { - workspaceUri: workspace.uri.toString(), - reportUri: uri[0].toString(), - reloadConfirm: false, - }); - }); - } - - /** - * 从服务器下载报告并导入到指定工作区 - * - * @param workspace 工作区文件夹 - * @param data 额外导入参数 - */ - private loadFromServerToWorkspace(workspace: vscode.WorkspaceFolder, data?: any) { - vscode.window.showErrorMessage(vscode.l10n.t("Feature is not supported yet")); - } + } + + /** + * 导入报告文件到指定工作区 + * + * @param workspace 工作区文件夹 + * @param data 额外导入参数 + */ + private loadFromFileToWorkspace(workspace: vscode.WorkspaceFolder) { + const fileFilters: { [name: string]: string[] } = {}; + fileFilters[vscode.l10n.t("Code Scan Report")] = ["json"]; + vscode.window + .showOpenDialog({ + defaultUri: workspace.uri, + filters: fileFilters, + title: vscode.l10n.t("Please choose code scanning report file"), + }) + .then((uri) => { + if (uri === undefined || uri.length < 1) { + logger.debug("loadFromFileToWorkspace: no uri"); + return; + } + // 通知 Language Server 读取报告 + this._client.sendNotification(LSPNotificationID.reportMgrLoad, { + workspaceUri: workspace.uri.toString(), + reportUri: uri[0].toString(), + reloadConfirm: false, + }); + }); + } + + /** + * 从服务器下载报告并导入到指定工作区 + * + * @param workspace 工作区文件夹 + * @param data 额外导入参数 + */ + private loadFromServerToWorkspace(workspace: vscode.WorkspaceFolder, data?: any) { + vscode.window.showErrorMessage(vscode.l10n.t("Feature is not supported yet")); + } } diff --git a/client/src/test/completion.test.ts b/client/src/test/completion.test.ts index 9f4301d98f5e70061bdf7afed4c8aa3fd7650b7c..a4f3b2e7871ff23dfd7c3600ffec6430b3ce54ab 100644 --- a/client/src/test/completion.test.ts +++ b/client/src/test/completion.test.ts @@ -1,43 +1,50 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ +/*************************************************************************************** + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. + * RVPortingTool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + **************************************************************************************/ import * as assert from "assert"; import * as vscode from "vscode"; import { activate, getDocUri } from "./helper"; suite("Should do completion", () => { - const docUri = getDocUri("completion.txt"); + const docUri = getDocUri("completion.txt"); - test("Completes JS/TS in txt file", async () => { - await testCompletion(docUri, new vscode.Position(0, 0), { - items: [ - { label: "JavaScript", kind: vscode.CompletionItemKind.Text }, - { label: "TypeScript", kind: vscode.CompletionItemKind.Text }, - ], - }); + test("Completes JS/TS in txt file", async () => { + await testCompletion(docUri, new vscode.Position(0, 0), { + items: [ + { label: "JavaScript", kind: vscode.CompletionItemKind.Text }, + { label: "TypeScript", kind: vscode.CompletionItemKind.Text }, + ], }); + }); }); async function testCompletion( - docUri: vscode.Uri, - position: vscode.Position, - expectedCompletionList: vscode.CompletionList + docUri: vscode.Uri, + position: vscode.Position, + expectedCompletionList: vscode.CompletionList ) { - await activate(docUri); + await activate(docUri); - // Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion - const actualCompletionList = (await vscode.commands.executeCommand( - "vscode.executeCompletionItemProvider", - docUri, - position - )) as vscode.CompletionList; + // Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion + const actualCompletionList = (await vscode.commands.executeCommand( + "vscode.executeCompletionItemProvider", + docUri, + position + )) as vscode.CompletionList; - assert.ok(actualCompletionList.items.length >= 2); - expectedCompletionList.items.forEach((expectedItem, i) => { - const actualItem = actualCompletionList.items[i]; - assert.equal(actualItem.label, expectedItem.label); - assert.equal(actualItem.kind, expectedItem.kind); - }); + assert.ok(actualCompletionList.items.length >= 2); + expectedCompletionList.items.forEach((expectedItem, i) => { + const actualItem = actualCompletionList.items[i]; + assert.equal(actualItem.label, expectedItem.label); + assert.equal(actualItem.kind, expectedItem.kind); + }); } diff --git a/client/src/test/diagnostics.test.ts b/client/src/test/diagnostics.test.ts index c82a2d46d63282294d0d8c9d4ef5ecbcf1a48c62..2f00b9c26a58ad862e2c479a27410b50450535de 100644 --- a/client/src/test/diagnostics.test.ts +++ b/client/src/test/diagnostics.test.ts @@ -1,56 +1,63 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ +/*************************************************************************************** + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. + * RVPortingTool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + **************************************************************************************/ import * as assert from "assert"; import * as vscode from "vscode"; import { activate, getDocUri } from "./helper"; suite("Should get diagnostics", () => { - const docUri = getDocUri("diagnostics.txt"); - - test("Diagnoses uppercase texts", async () => { - await testDiagnostics(docUri, [ - { - message: "ANY is all uppercase.", - range: toRange(0, 0, 0, 3), - severity: vscode.DiagnosticSeverity.Warning, - source: "ex", - }, - { - message: "ANY is all uppercase.", - range: toRange(0, 14, 0, 17), - severity: vscode.DiagnosticSeverity.Warning, - source: "ex", - }, - { - message: "OS is all uppercase.", - range: toRange(0, 18, 0, 20), - severity: vscode.DiagnosticSeverity.Warning, - source: "ex", - }, - ]); - }); + const docUri = getDocUri("diagnostics.txt"); + + test("Diagnoses uppercase texts", async () => { + await testDiagnostics(docUri, [ + { + message: "ANY is all uppercase.", + range: toRange(0, 0, 0, 3), + severity: vscode.DiagnosticSeverity.Warning, + source: "ex", + }, + { + message: "ANY is all uppercase.", + range: toRange(0, 14, 0, 17), + severity: vscode.DiagnosticSeverity.Warning, + source: "ex", + }, + { + message: "OS is all uppercase.", + range: toRange(0, 18, 0, 20), + severity: vscode.DiagnosticSeverity.Warning, + source: "ex", + }, + ]); + }); }); function toRange(sLine: number, sChar: number, eLine: number, eChar: number) { - const start = new vscode.Position(sLine, sChar); - const end = new vscode.Position(eLine, eChar); - return new vscode.Range(start, end); + const start = new vscode.Position(sLine, sChar); + const end = new vscode.Position(eLine, eChar); + return new vscode.Range(start, end); } async function testDiagnostics(docUri: vscode.Uri, expectedDiagnostics: vscode.Diagnostic[]) { - await activate(docUri); + await activate(docUri); - const actualDiagnostics = vscode.languages.getDiagnostics(docUri); + const actualDiagnostics = vscode.languages.getDiagnostics(docUri); - assert.equal(actualDiagnostics.length, expectedDiagnostics.length); + assert.equal(actualDiagnostics.length, expectedDiagnostics.length); - expectedDiagnostics.forEach((expectedDiagnostic, i) => { - const actualDiagnostic = actualDiagnostics[i]; - assert.equal(actualDiagnostic.message, expectedDiagnostic.message); - assert.deepEqual(actualDiagnostic.range, expectedDiagnostic.range); - assert.equal(actualDiagnostic.severity, expectedDiagnostic.severity); - }); + expectedDiagnostics.forEach((expectedDiagnostic, i) => { + const actualDiagnostic = actualDiagnostics[i]; + assert.equal(actualDiagnostic.message, expectedDiagnostic.message); + assert.deepEqual(actualDiagnostic.range, expectedDiagnostic.range); + assert.equal(actualDiagnostic.severity, expectedDiagnostic.severity); + }); } diff --git a/client/src/test/helper.ts b/client/src/test/helper.ts index e48ffa6093484f7a184c8e0676a76f54fa27c474..e68da93b6246ad2185e912d4b679ec7c13e0df9e 100644 --- a/client/src/test/helper.ts +++ b/client/src/test/helper.ts @@ -1,7 +1,14 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ +/*************************************************************************************** + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. + * RVPortingTool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + **************************************************************************************/ import * as path from "path"; import * as vscode from "vscode"; @@ -15,30 +22,30 @@ export let platformEol: string; * Activates the vscode.lsp-sample extension */ export async function activate(docUri: vscode.Uri) { - // The extensionId is `publisher.name` from package.json - const ext = vscode.extensions.getExtension("tcse-iscas.rvportingtool")!; - await ext.activate(); - try { - doc = await vscode.workspace.openTextDocument(docUri); - editor = await vscode.window.showTextDocument(doc); - await sleep(2000); // Wait for server activation - } catch (e) { - console.error(e); - } + // The extensionId is `publisher.name` from package.json + const ext = vscode.extensions.getExtension("tcse-iscas.rvportingtool")!; + await ext.activate(); + try { + doc = await vscode.workspace.openTextDocument(docUri); + editor = await vscode.window.showTextDocument(doc); + await sleep(2000); // Wait for server activation + } catch (e) { + console.error(e); + } } async function sleep(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); + return new Promise((resolve) => setTimeout(resolve, ms)); } export const getDocPath = (p: string) => { - return path.resolve(__dirname, "../../testRoot", p); + return path.resolve(__dirname, "../../testRoot", p); }; export const getDocUri = (p: string) => { - return vscode.Uri.file(getDocPath(p)); + return vscode.Uri.file(getDocPath(p)); }; export async function setTestContent(content: string): Promise { - const all = new vscode.Range(doc.positionAt(0), doc.positionAt(doc.getText().length)); - return editor.edit((eb) => eb.replace(all, content)); + const all = new vscode.Range(doc.positionAt(0), doc.positionAt(doc.getText().length)); + return editor.edit((eb) => eb.replace(all, content)); } diff --git a/client/src/test/index.ts b/client/src/test/index.ts deleted file mode 100644 index 77d7f7bd2be2eff2c2af85493417330595456ff3..0000000000000000000000000000000000000000 --- a/client/src/test/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -import * as glob from "glob"; -import * as Mocha from "mocha"; - -export function run(): Promise { - // Create the mocha test - const mocha = new Mocha({ - ui: "tdd", - color: true, - }); - mocha.timeout(100000); - - const testsRoot = __dirname; - - return new Promise((resolve, reject) => { - glob("**.test.js", { cwd: testsRoot }, (err, files) => { - if (err) { - return reject(err); - } - - // 暂时禁用所有测试用例,仅保留写法 - // Add files to the test suite - // files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))); - console.info(`${files.length} tests disabled.`); - - try { - // Run the mocha test - mocha.run((failures) => { - if (failures > 0) { - reject(new Error(`${failures} tests failed.`)); - } else { - resolve(); - } - }); - } catch (err) { - console.error(err); - reject(err); - } - }); - }); -} diff --git a/client/src/test/runTest.ts b/client/src/test/runTest.ts index 9fb1d598c9d1b754cfebc543f4de72bb56a8e577..98c2d0ff40ac9609e90d0ed7cf551b55d0e2a64f 100644 --- a/client/src/test/runTest.ts +++ b/client/src/test/runTest.ts @@ -1,27 +1,44 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ +/*************************************************************************************** + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. + * RVPortingTool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + **************************************************************************************/ + +/*************************************************************************************** + * Language Client Report Manager for RVPortingTool VSCode Extension + * + * Author: Lightning Rainstorm + * liccc + * Last Change: Sep 6, 2024 + **************************************************************************************/ import * as path from "path"; + import { runTests } from "@vscode/test-electron"; async function main() { - try { - // The folder containing the Extension Manifest package.json - // Passed to `--extensionDevelopmentPath` - const extensionDevelopmentPath = path.resolve(__dirname, "../../../"); + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, "../../"); - // The path to test runner - // Passed to --extensionTestsPath - const extensionTestsPath = path.resolve(__dirname, "./index"); + // The path to the extension test runner script + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, "./suite/index"); - // Download VS Code, unzip it and run the integration test - await runTests({ extensionDevelopmentPath, extensionTestsPath }); - } catch (err) { - console.error("Failed to run tests"); - process.exit(1); - } + // Download VS Code, unzip it and run the integration test + await runTests({ extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error(err); + console.error("Failed to run tests"); + process.exit(1); + } } main(); diff --git a/client/src/test/suite/index.ts b/client/src/test/suite/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..36adc578ecffad18fe29533b8e0f568a150c4d00 --- /dev/null +++ b/client/src/test/suite/index.ts @@ -0,0 +1,57 @@ +/*************************************************************************************** + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. + * RVPortingTool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + **************************************************************************************/ + +/*************************************************************************************** + * Language Client Report Manager for RVPortingTool VSCode Extension + * + * Author: Lightning Rainstorm + * liccc + * Last Change: Sep 6, 2024 + **************************************************************************************/ + +import * as path from "path"; +import * as Mocha from "mocha"; +import { glob } from "glob"; + +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: "tdd", + color: true, + }); + + const testsRoot = path.resolve(__dirname, ".."); + + return new Promise((c, e) => { + glob("**/**.test.js", { cwd: testsRoot }) + .then((files) => { + // Add files to the test suite + files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.run((failures) => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + e(err); + } + }) + .catch((err) => { + return e(err); + }); + }); +} diff --git a/client/src/types/checkerRules.ts b/client/src/types/checkerRules.ts index d00e4fd905c09d7d481d23df53cb65e947ec3772..32f0d5578bce95d1705474b75e24beb5b0f9d660 100644 --- a/client/src/types/checkerRules.ts +++ b/client/src/types/checkerRules.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,166 +8,168 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Checker Rules Information Definition for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 17, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as vscode from "vscode"; export interface RuleInfo { - desc: string; - languages: string[]; - tags: string[]; + desc: string; + languages: string[]; + tags: string[]; } export const checkerRules: Map = new Map([ - [ - "CC-0001", - { - desc: vscode.l10n.t("ARM architecture-related macro"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("ARM"), vscode.l10n.t("macro")], - }, - ], - [ - "CC-0002", - { - desc: vscode.l10n.t("Suspected ARM architecture-related macro"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("ARM"), vscode.l10n.t("macro")], - }, - ], - [ - "CC-0003", - { - desc: vscode.l10n.t("X86 architecture-specified macro"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("X86"), vscode.l10n.t("macro")], - }, - ], - [ - "CC-0004", - { - desc: vscode.l10n.t("Architecture-related built-in function"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("built-in"), vscode.l10n.t("function")], - }, - ], - [ - "CC-0005", - { - desc: vscode.l10n.t("Inline assembly"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("assembly")], - }, - ], - [ - "CC-0006", - { - desc: vscode.l10n.t("Right-shift operation on signed integer"), - languages: [vscode.l10n.t("C/C++")], - tags: [ - vscode.l10n.t("shifting"), - vscode.l10n.t("bit operation"), - vscode.l10n.t("signed integer"), - vscode.l10n.t("implement-defined behavior"), - ], - }, - ], - [ - "CC-0007", - { - desc: vscode.l10n.t("Architecture-related pre-defined macro from compiler"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("macro"), vscode.l10n.t("compiler")], - }, - ], - [ - "CC-0008", - { - desc: vscode.l10n.t("Suspected architecture-related macro"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("macro"), vscode.l10n.t("keyword")], - }, - ], - [ - "CC-0009", - { - desc: vscode.l10n.t("Suspected architecture-related enum type"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("enum"), vscode.l10n.t("keyword")], - }, - ], - [ - "CC-0010", - { - desc: vscode.l10n.t("Function multi-versioning"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("function"), vscode.l10n.t("multi-versioning")], - }, - ], - [ - "CC-0011", - { - desc: vscode.l10n.t("X86 architecture-specified system call"), - languages: [vscode.l10n.t("C/C++")], - tags: [vscode.l10n.t("system call")], - }, - ], - [ - "RB-0001", - { - desc: vscode.l10n.t("Architecture judgement macro statement block"), - languages: [vscode.l10n.t("rpmspec")], - tags: [ - vscode.l10n.t("rpmbuild"), - vscode.l10n.t("rpmspec"), - vscode.l10n.t("architecture judgment macro"), - vscode.l10n.t("ifarch"), - vscode.l10n.t("ifnarch"), - ], - }, - ], - [ - "RB-0002", - { - desc: vscode.l10n.t("Architecture-related built-in macro statement block"), - languages: [vscode.l10n.t("rpmspec")], - tags: [ - vscode.l10n.t("rpmbuild"), - vscode.l10n.t("rpmspec"), - vscode.l10n.t("built-in"), - vscode.l10n.t("macro"), - ], - }, - ], - [ - "RB-0003", - { - desc: vscode.l10n.t("Inline architecture-related shell script"), - languages: [vscode.l10n.t("rpmspec")], - tags: [ - vscode.l10n.t("rpmbuild"), - vscode.l10n.t("rpmspec"), - vscode.l10n.t("built-in"), - vscode.l10n.t("macro"), - ], - }, - ], - [ - "RB-0004", - { - desc: vscode.l10n.t("Architecture-related macro in requirements"), - languages: [vscode.l10n.t("rpmspec")], - tags: [ - vscode.l10n.t("rpmbuild"), - vscode.l10n.t("rpmspec"), - vscode.l10n.t("requirement"), - vscode.l10n.t("macro"), - ], - }, - ], + [ + "CC-0001", + { + desc: vscode.l10n.t("ARM architecture-related macro"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("ARM"), vscode.l10n.t("macro")], + }, + ], + [ + "CC-0002", + { + desc: vscode.l10n.t("Suspected ARM architecture-related macro"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("ARM"), vscode.l10n.t("macro")], + }, + ], + [ + "CC-0003", + { + desc: vscode.l10n.t("X86 architecture-specified macro"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("X86"), vscode.l10n.t("macro")], + }, + ], + [ + "CC-0004", + { + desc: vscode.l10n.t("Architecture-related built-in function"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("built-in"), vscode.l10n.t("function")], + }, + ], + [ + "CC-0005", + { + desc: vscode.l10n.t("Inline assembly"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("assembly")], + }, + ], + [ + "CC-0006", + { + desc: vscode.l10n.t("Right-shift operation on signed integer"), + languages: [vscode.l10n.t("C/C++")], + tags: [ + vscode.l10n.t("shifting"), + vscode.l10n.t("bit operation"), + vscode.l10n.t("signed integer"), + vscode.l10n.t("implement-defined behavior"), + ], + }, + ], + [ + "CC-0007", + { + desc: vscode.l10n.t("Architecture-related pre-defined macro from compiler"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("macro"), vscode.l10n.t("compiler")], + }, + ], + [ + "CC-0008", + { + desc: vscode.l10n.t("Suspected architecture-related macro"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("macro"), vscode.l10n.t("keyword")], + }, + ], + [ + "CC-0009", + { + desc: vscode.l10n.t("Suspected architecture-related enum type"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("enum"), vscode.l10n.t("keyword")], + }, + ], + [ + "CC-0010", + { + desc: vscode.l10n.t("Function multi-versioning"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("function"), vscode.l10n.t("multi-versioning")], + }, + ], + [ + "CC-0011", + { + desc: vscode.l10n.t("X86 architecture-specified system call"), + languages: [vscode.l10n.t("C/C++")], + tags: [vscode.l10n.t("system call")], + }, + ], + [ + "RB-0001", + { + desc: vscode.l10n.t("Architecture judgement macro statement block"), + languages: [vscode.l10n.t("rpmspec")], + tags: [ + vscode.l10n.t("rpmbuild"), + vscode.l10n.t("rpmspec"), + vscode.l10n.t("architecture judgment macro"), + vscode.l10n.t("ifarch"), + vscode.l10n.t("ifnarch"), + ], + }, + ], + [ + "RB-0002", + { + desc: vscode.l10n.t("Architecture-related built-in macro statement block"), + languages: [vscode.l10n.t("rpmspec")], + tags: [ + vscode.l10n.t("rpmbuild"), + vscode.l10n.t("rpmspec"), + vscode.l10n.t("built-in"), + vscode.l10n.t("macro"), + ], + }, + ], + [ + "RB-0003", + { + desc: vscode.l10n.t("Inline architecture-related shell script"), + languages: [vscode.l10n.t("rpmspec")], + tags: [ + vscode.l10n.t("rpmbuild"), + vscode.l10n.t("rpmspec"), + vscode.l10n.t("built-in"), + vscode.l10n.t("macro"), + ], + }, + ], + [ + "RB-0004", + { + desc: vscode.l10n.t("Architecture-related macro in requirements"), + languages: [vscode.l10n.t("rpmspec")], + tags: [ + vscode.l10n.t("rpmbuild"), + vscode.l10n.t("rpmspec"), + vscode.l10n.t("requirement"), + vscode.l10n.t("macro"), + ], + }, + ], ]); diff --git a/client/src/utils/log.ts b/client/src/utils/log.ts index aa6a683b55ca3536cb76133172a04ecae4e4ea0b..4a905ced5ecfef41c2087d342fb528bcd04081dc 100644 --- a/client/src/utils/log.ts +++ b/client/src/utils/log.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Client Logger Module for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 13, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as log4js from "log4js"; @@ -23,169 +25,173 @@ import * as vscode from "vscode"; export type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal"; export interface LogData { - category: string; - level: LogLevel; - message: any; + category: string; + level: LogLevel; + message: any; } export class ClientLogger { - private static cachedLoggers: Map; - private static defaultLevel: LogLevel; - private static outputChannelName: string; - private static outputChannel: vscode.OutputChannel; - - private log4jsLogger: log4js.Logger; - private category: string; - private logLevel: LogLevel; - - /** - * Constructor of Logger - * - * @param context VSCode Extension Context - * @param category Category name - */ - private constructor(category: string, level?: LogLevel) { - // Set default level if not initialized - if (ClientLogger.defaultLevel === undefined) { - ClientLogger.defaultLevel = "info"; - } - - // Create output channel if not initialized - if (ClientLogger.outputChannel === undefined) { - const channelName = ClientLogger.outputChannelName ? ClientLogger.outputChannelName : "Logs: Extension"; - ClientLogger.outputChannel = vscode.window.createOutputChannel(channelName); - } - - this.category = category; - this.logLevel = level ? level : ClientLogger.defaultLevel; - this.log4jsLogger = log4js.getLogger(this.category); - this.log4jsLogger.level = this.logLevel; - } - - /** - * Initialize Client Logger - * - * This method should be called in activate() method of the extension. - * - * @param context VSCode Extension Context - */ - public static init(context: vscode.ExtensionContext): ClientLogger { - // Get and convert extension logLevel configuration - let extIdentifier = context.extension.id; - extIdentifier = extIdentifier.substring(extIdentifier.lastIndexOf(".") + 1); - const logLevel: string | undefined = vscode.workspace.getConfiguration(extIdentifier).get("logLevel"); - this.defaultLevel = "info"; - if (logLevel === "verbose") { - this.defaultLevel = "trace"; - } - - // Initialize log4js configuration - if (context !== undefined) { - const logFileUri = context.logUri; - log4js.configure({ - appenders: { - file: { - type: "fileSync", - maxLogSize: 16 * 1024 * 1024, - layout: { - type: "basic", - }, - filename: logFileUri.fsPath, - }, - console: { - type: "console", - }, - }, - categories: { - default: { - appenders: ["file", "console"], - level: this.defaultLevel, - }, - }, - }); - } - - // Initialize output channel - ClientLogger.outputChannelName = `Logs: ${context.extension.id}`; - ClientLogger.outputChannel = vscode.window.createOutputChannel(ClientLogger.outputChannelName); - - // Initialize and return root logger - return ClientLogger.getLogger("main"); - } - - /** - * Register Language Server Log Notification Handler - * - * @param client Language Client - */ - public static initLSP(client: lsp.BaseLanguageClient) { - client.onReady().then(() => { - client.onNotification("writeLog", (logData: LogData) => { - ClientLogger.getLogger(logData.category).log(logData.level, logData.message); - }); - ClientLogger.getLogger().debug("Registered language server writeLog handler"); - }); - } - - /** - * Get logger with category name - * - * @param category Category name, undefined means main - */ - public static getLogger(category?: string): ClientLogger { - category = category ? category : "main"; - if (ClientLogger.cachedLoggers) { - if (ClientLogger.cachedLoggers.has(category)) { - return ClientLogger.cachedLoggers.get(category)!; - } - } else { - ClientLogger.cachedLoggers = new Map(); - } - const logger = new ClientLogger(category); - ClientLogger.cachedLoggers.set(category, logger); - return logger; - } - - /** - * Write a single line log. - * - * @param level Log level - * @param message Log message - */ - public log(level: LogLevel, message: any) { - const outStr = "[" - .concat(new Date().toLocaleString()) - .concat("] [") - .concat(this.category) - .concat("] [") - .concat(level) - .concat("] ") - .concat(message); - this.log4jsLogger.log(level, message); - ClientLogger.outputChannel.appendLine(outStr); - } - - public trace(message: any) { - this.log("trace", message); - } - - public debug(message: any) { - this.log("debug", message); + private static cachedLoggers: Map; + private static defaultLevel: LogLevel; + private static outputChannelName: string; + private static outputChannel: vscode.OutputChannel; + + private log4jsLogger: log4js.Logger; + private category: string; + private logLevel: LogLevel; + + /** + * Constructor of Logger + * + * @param context VSCode Extension Context + * @param category Category name + */ + private constructor(category: string, level?: LogLevel) { + // Set default level if not initialized + if (ClientLogger.defaultLevel === undefined) { + ClientLogger.defaultLevel = "info"; } - public info(message: any) { - this.log("info", message); + // Create output channel if not initialized + if (ClientLogger.outputChannel === undefined) { + const channelName = ClientLogger.outputChannelName + ? ClientLogger.outputChannelName + : "Logs: Extension"; + ClientLogger.outputChannel = vscode.window.createOutputChannel(channelName); } - public warn(message: any) { - this.log("warn", message); + this.category = category; + this.logLevel = level ? level : ClientLogger.defaultLevel; + this.log4jsLogger = log4js.getLogger(this.category); + this.log4jsLogger.level = this.logLevel; + } + + /** + * Initialize Client Logger + * + * This method should be called in activate() method of the extension. + * + * @param context VSCode Extension Context + */ + public static init(context: vscode.ExtensionContext): ClientLogger { + // Get and convert extension logLevel configuration + let extIdentifier = context.extension.id; + extIdentifier = extIdentifier.substring(extIdentifier.lastIndexOf(".") + 1); + const logLevel: string | undefined = vscode.workspace + .getConfiguration(extIdentifier) + .get("logLevel"); + this.defaultLevel = "info"; + if (logLevel === "verbose") { + this.defaultLevel = "trace"; } - public error(message: any) { - this.log("error", message); + // Initialize log4js configuration + if (context !== undefined) { + const logFileUri = context.logUri; + log4js.configure({ + appenders: { + file: { + type: "fileSync", + maxLogSize: 16 * 1024 * 1024, + layout: { + type: "basic", + }, + filename: logFileUri.fsPath, + }, + console: { + type: "console", + }, + }, + categories: { + default: { + appenders: ["file", "console"], + level: this.defaultLevel, + }, + }, + }); } - public fatal(message: any) { - this.log("fatal", message); + // Initialize output channel + ClientLogger.outputChannelName = `Logs: ${context.extension.id}`; + ClientLogger.outputChannel = vscode.window.createOutputChannel(ClientLogger.outputChannelName); + + // Initialize and return root logger + return ClientLogger.getLogger("main"); + } + + /** + * Register Language Server Log Notification Handler + * + * @param client Language Client + */ + public static initLSP(client: lsp.BaseLanguageClient) { + client.onReady().then(() => { + client.onNotification("writeLog", (logData: LogData) => { + ClientLogger.getLogger(logData.category).log(logData.level, logData.message); + }); + ClientLogger.getLogger().debug("Registered language server writeLog handler"); + }); + } + + /** + * Get logger with category name + * + * @param category Category name, undefined means main + */ + public static getLogger(category?: string): ClientLogger { + category = category ? category : "main"; + if (ClientLogger.cachedLoggers) { + if (ClientLogger.cachedLoggers.has(category)) { + return ClientLogger.cachedLoggers.get(category)!; + } + } else { + ClientLogger.cachedLoggers = new Map(); } + const logger = new ClientLogger(category); + ClientLogger.cachedLoggers.set(category, logger); + return logger; + } + + /** + * Write a single line log. + * + * @param level Log level + * @param message Log message + */ + public log(level: LogLevel, message: any) { + const outStr = "[" + .concat(new Date().toLocaleString()) + .concat("] [") + .concat(this.category) + .concat("] [") + .concat(level) + .concat("] ") + .concat(message); + this.log4jsLogger.log(level, message); + ClientLogger.outputChannel.appendLine(outStr); + } + + public trace(message: any) { + this.log("trace", message); + } + + public debug(message: any) { + this.log("debug", message); + } + + public info(message: any) { + this.log("info", message); + } + + public warn(message: any) { + this.log("warn", message); + } + + public error(message: any) { + this.log("error", message); + } + + public fatal(message: any) { + this.log("fatal", message); + } } diff --git a/client/src/wikiHelper.ts b/client/src/wikiHelper.ts index 491ab325826e6556b736db996bba3ed3030e21b0..50b544613861e0d772d3e524ebd1e323643d070e 100644 --- a/client/src/wikiHelper.ts +++ b/client/src/wikiHelper.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * (Client) Wiki Helper for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 31, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as lsp from "vscode-languageclient/node"; @@ -24,35 +26,35 @@ import { WikiViewProvider } from "./wikiView/wikiViewProvider"; const logger = ClientLogger.getLogger("WikiHelper"); export class WikiHelper { - /** LSP 客户端 */ - private _client: lsp.BaseLanguageClient; - - private constructor(client: lsp.BaseLanguageClient) { - this._client = client; - } - - public static init(context: vscode.ExtensionContext, client: lsp.BaseLanguageClient): WikiHelper { - const manager = new WikiHelper(client); - const wikiViewProvider = new WikiViewProvider(context.extensionUri); - - context.subscriptions.push( - // 注册规则 Wiki 展示命令 - vscode.commands.registerCommand(CommandID.wikiHelperOpenRule, async (ruleId: string) => { - wikiViewProvider.showRule("cc-0001"); - }), - - // 注册 WikiViewProvider - vscode.window.registerWebviewViewProvider(WikiViewProvider.viewType, wikiViewProvider), - - // 注册 Uri - vscode.window.registerUriHandler({ - handleUri: (uri) => { - if (uri.path === "/".concat(CommandID.wikiHelperOpenRule)) { - wikiViewProvider.showRule(uri.query); - } - }, - }) - ); - return manager; - } + /** LSP 客户端 */ + private _client: lsp.BaseLanguageClient; + + private constructor(client: lsp.BaseLanguageClient) { + this._client = client; + } + + public static init(context: vscode.ExtensionContext, client: lsp.BaseLanguageClient): WikiHelper { + const manager = new WikiHelper(client); + const wikiViewProvider = new WikiViewProvider(context.extensionUri); + + context.subscriptions.push( + // 注册规则 Wiki 展示命令 + vscode.commands.registerCommand(CommandID.wikiHelperOpenRule, async (ruleId: string) => { + wikiViewProvider.showRule("cc-0001"); + }), + + // 注册 WikiViewProvider + vscode.window.registerWebviewViewProvider(WikiViewProvider.viewType, wikiViewProvider), + + // 注册 Uri + vscode.window.registerUriHandler({ + handleUri: (uri) => { + if (uri.path === "/".concat(CommandID.wikiHelperOpenRule)) { + wikiViewProvider.showRule(uri.query); + } + }, + }) + ); + return manager; + } } diff --git a/client/src/wikiView/wikiViewProvider.ts b/client/src/wikiView/wikiViewProvider.ts index a3c2bbe485d97524bfd2349c06435f44a74f719f..86bbad868b34d28fdfc517e1cb3f9e1d6a991a2f 100644 --- a/client/src/wikiView/wikiViewProvider.ts +++ b/client/src/wikiView/wikiViewProvider.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,134 +8,153 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * (Client) Wiki View Provider for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 31, 2023 + * Last Change: Sep 10, 2024 **************************************************************************************/ import * as fs from "fs"; import * as vscode from "vscode"; import { checkerRules } from "../types/checkerRules"; -import { WikiViewApplyMarkdownMsg, WikiViewLoadedMsg, WikiViewMsgUtil } from "../../../common/src/types/wikiView"; +import { + WikiViewApplyMarkdownMsg, + WikiViewLoadedMsg, + WikiViewMsgUtil, +} from "../../../common/src/types/wikiView"; export class WikiViewProvider implements vscode.WebviewViewProvider { - public static readonly viewType = "rvCodingAsst.view.wiki"; + public static readonly viewType = "rvCodingAsst.view.wiki"; - private _view?: vscode.WebviewView; + private _view?: vscode.WebviewView; - private _mdContent?: string; + private _mdContent?: string; - constructor(private readonly _extensionUri: vscode.Uri) {} + constructor(private readonly _extensionUri: vscode.Uri) {} - public resolveWebviewView( - webviewView: vscode.WebviewView, - context: vscode.WebviewViewResolveContext, - token: vscode.CancellationToken - ): void | Thenable { - this._view = webviewView; - webviewView.webview.options = { - enableScripts: true, - localResourceRoots: [this._extensionUri], - enableCommandUris: true, - }; - webviewView.webview.html = this._getHtmlForWebview(webviewView.webview); - webviewView.webview.onDidReceiveMessage((message: any) => { - this.onDidReceiveMessage(message); + public resolveWebviewView( + webviewView: vscode.WebviewView, + context: vscode.WebviewViewResolveContext, + token: vscode.CancellationToken + ): void | Thenable { + this._view = webviewView; + webviewView.webview.options = { + enableScripts: true, + localResourceRoots: [this._extensionUri], + enableCommandUris: true, + }; + webviewView.webview.html = this._getHtmlForWebview(webviewView.webview); + webviewView.webview.onDidReceiveMessage((message: any) => { + this.onDidReceiveMessage(message); + }); + } + + public onDidReceiveMessage(message: any) { + if (WikiViewMsgUtil.isLoadedMsg(message)) { + vscode.window.showInformationMessage("WikiView is ready!"); + if (this._mdContent) { + this._view!.webview.postMessage({ + type: "WikiViewApplyMarkdownMsg", + content: this._mdContent, }); + } } + } - public onDidReceiveMessage(message: any) { - if (WikiViewMsgUtil.isLoadedMsg(message)) { - vscode.window.showInformationMessage("WikiView is ready!"); - if (this._mdContent) { - this._view!.webview.postMessage({ - type: "WikiViewApplyMarkdownMsg", - content: this._mdContent, - }); - } - } + public showRule(ruleId: string) { + const ruleMDPath = vscode.Uri.joinPath( + this._extensionUri, + "resources/wiki/checkerRules/", + ruleId.toUpperCase() + ".md" + ); + try { + this._mdContent = fs.readFileSync(ruleMDPath.fsPath, { + encoding: "utf-8", + }); + } catch (err) { + vscode.window.showErrorMessage( + vscode.l10n.t( + "Failed to load rule details of {0}{1}", + ruleId, + checkerRules.has(ruleId) ? ": ".concat(checkerRules.get(ruleId)!.desc) : "" + ) + ); + return; } - - public showRule(ruleId: string) { - const ruleMDPath = vscode.Uri.joinPath( - this._extensionUri, - "resources/wiki/checkerRules/", - ruleId.toUpperCase() + ".md" - ); - try { - this._mdContent = fs.readFileSync(ruleMDPath.fsPath, { - encoding: "utf-8", - }); - } catch (err) { - vscode.window.showErrorMessage( - vscode.l10n.t( - "Failed to load rule details of {0}{1}", - ruleId, - checkerRules.has(ruleId) ? ": ".concat(checkerRules.get(ruleId)!.desc) : "" - ) - ); - return; - } - if (this._view) { - this._view.show?.(true); - this._view.webview.postMessage({ - type: "WikiViewApplyMarkdownMsg", - content: this._mdContent, - }); - } else { - vscode.commands.executeCommand(WikiViewProvider.viewType.concat(".focus")); - } + if (this._view) { + this._view.show?.(true); + this._view.webview.postMessage({ + type: "WikiViewApplyMarkdownMsg", + content: this._mdContent, + }); + } else { + vscode.commands.executeCommand(WikiViewProvider.viewType.concat(".focus")); } + } - private _getHtmlForWebview(webview: vscode.Webview): string { - // Use a nonce to only allow a specific script to be run. - const nonce = getNonce(); - const prismCSSUri = webview.asWebviewUri(vscode.Uri.joinPath(this._extensionUri, "resources/prism.css")); - const prismJSUri = webview.asWebviewUri(vscode.Uri.joinPath(this._extensionUri, "resources/prism.js")); - const scriptUri = webview.asWebviewUri(vscode.Uri.joinPath(this._extensionUri, "webview/out/wikiView/main.js")); + private _getHtmlForWebview(webview: vscode.Webview): string { + // Use a nonce to only allow a specific script to be run. + const nonce = getNonce(); + const prismCSSUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "resources/prism.css") + ); + const prismJSUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "resources/prism.js") + ); + const scriptUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "out/wikiView/main.js") + ); - let bodyHtml = "

" + vscode.l10n.t("No Wiki pages have been opened yet.") + "

"; + let bodyHtml = "

" + vscode.l10n.t("No Wiki pages have been opened yet.") + "

"; - return ` - - - - - - RVPortingTool - - - -
${bodyHtml}
- - - `; - } + return ` + + + + + + + RVPortingTool + + + + +
${bodyHtml}
+ + + + + `; + } } function getNonce() { - let text = ""; - const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - for (let i = 0; i < 32; i++) { - text += possible.charAt(Math.floor(Math.random() * possible.length)); - } - return text; + let text = ""; + const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (let i = 0; i < 32; i++) { + text += possible.charAt(Math.floor(Math.random() * possible.length)); + } + return text; } diff --git a/client/tsconfig.json b/client/tsconfig.json index b711098170bbb50511c99e644c71ce369b2153e6..92bb76733caa6e68ab95d691c3163a6fe06719ac 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -1,16 +1,16 @@ { - "compilerOptions": { - "composite": true, - "module": "commonjs", - "target": "es2020", - "lib": ["es2020"], - "outDir": "out", - "rootDir": "..", - "sourceMap": true, - "strict": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src", "../common/src"], - "exclude": ["node_modules", ".vscode-test"] + "compilerOptions": { + "composite": true, + "module": "commonjs", + "target": "es2020", + "lib": ["es2020"], + "outDir": "out", + "rootDir": "..", + "sourceMap": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src", "../common/src"], + "exclude": ["node_modules", ".vscode-test"] } diff --git a/common/package-lock.json b/common/package-lock.json deleted file mode 100644 index a4b26ec780a7d3ada93b6e80e7e6b34d47e74b9a..0000000000000000000000000000000000000000 --- a/common/package-lock.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "name": "rvportingtool-common", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "rvportingtool-common", - "version": "0.0.1", - "license": "MulanPSL-2.0", - "dependencies": { - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^8.1.0", - "vscode-languageserver-textdocument": "^1.0.8" - }, - "devDependencies": { - "@types/vscode": "^1.75.0", - "@vscode/test-electron": "^2.1.2", - "vscode-languageserver-types": "^3.17.3" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/vscode": { - "version": "1.76.0", - "resolved": "https://registry.npmmirror.com/@types/vscode/-/vscode-1.76.0.tgz", - "integrity": "sha512-CQcY3+Fe5hNewHnOEAVYj4dd1do/QHliXaknAEYSXx2KEHUzFibDZSKptCon+HPgK55xx20pR+PBJjf0MomnBA==", - "dev": true - }, - "node_modules/@vscode/test-electron": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/@vscode/test-electron/-/test-electron-2.3.0.tgz", - "integrity": "sha512-fwzA9RtazH1GT/sckYlbxu6t5e4VaMXwCVtyLv4UAG0hP6NTfnMaaG25XCfWqlVwFhBMcQXHBCy5dmz2eLUnkw==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "jszip": "^3.10.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "engines": { - "vscode": "^1.52.0" - } - }, - "node_modules/vscode-languageserver": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", - "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", - "dependencies": { - "vscode-languageserver-protocol": "3.17.3" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.3", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", - "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" - }, - "node_modules/vscode-languageserver/node_modules/vscode-jsonrpc": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", - "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/vscode-languageserver/node_modules/vscode-languageserver-protocol": { - "version": "3.17.3", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", - "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", - "dependencies": { - "vscode-jsonrpc": "8.1.0", - "vscode-languageserver-types": "3.17.3" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/common/package.json b/common/package.json index 5d2798bae16850d365196c9de8915db6afc22f8e..8267b2ae7a433b26caa31edeb2b3e5a0a099bcaf 100644 --- a/common/package.json +++ b/common/package.json @@ -1,19 +1,19 @@ { - "name": "rvportingtool-common", - "description": "VSCode Common Part of Software Porting Tool for RISC-V", - "author": "tcse-iscas", - "license": "MulanPSL-2.0", - "version": "0.0.1", - "publisher": "tcse-iscas", - "l10n": "../l10n", - "dependencies": { - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^8.1.0", - "vscode-languageserver-textdocument": "^1.0.8" - }, - "devDependencies": { - "@types/vscode": "^1.75.0", - "vscode-languageserver-types": "^3.17.3", - "@vscode/test-electron": "^2.1.2" - } + "name": "rvportingtool-common", + "description": "VSCode Common Part of Software Porting Tool for RISC-V", + "author": "tcse-iscas", + "license": "MulanPSL-2.0", + "version": "0.0.1", + "publisher": "tcse-iscas", + "l10n": "../l10n", + "dependencies": { + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^8.1.0", + "vscode-languageserver-textdocument": "^1.0.8" + }, + "devDependencies": { + "@types/vscode": "^1.75.0", + "vscode-languageserver-types": "^3.17.3", + "@vscode/test-electron": "^2.1.2" + } } diff --git a/common/pnpm-lock.yaml b/common/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b9433e018f45778ca84f0b64f8c995d41f477dfd --- /dev/null +++ b/common/pnpm-lock.yaml @@ -0,0 +1,298 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + vscode-languageclient: + specifier: ^7.0.0 + version: 7.0.0 + vscode-languageserver: + specifier: ^8.1.0 + version: 8.1.0 + vscode-languageserver-textdocument: + specifier: ^1.0.8 + version: 1.0.8 + devDependencies: + '@types/vscode': + specifier: ^1.75.0 + version: 1.76.0 + '@vscode/test-electron': + specifier: ^2.1.2 + version: 2.3.0 + vscode-languageserver-types: + specifier: ^3.17.3 + version: 3.17.3 + +packages: + + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + '@types/vscode@1.76.0': + resolution: {integrity: sha512-CQcY3+Fe5hNewHnOEAVYj4dd1do/QHliXaknAEYSXx2KEHUzFibDZSKptCon+HPgK55xx20pR+PBJjf0MomnBA==} + + '@vscode/test-electron@2.3.0': + resolution: {integrity: sha512-fwzA9RtazH1GT/sckYlbxu6t5e4VaMXwCVtyLv4UAG0hP6NTfnMaaG25XCfWqlVwFhBMcQXHBCy5dmz2eLUnkw==} + engines: {node: '>=16'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + semver@7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} + hasBin: true + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vscode-jsonrpc@6.0.0: + resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==} + engines: {node: '>=8.0.0 || >=10.0.0'} + + vscode-jsonrpc@8.1.0: + resolution: {integrity: sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==} + engines: {node: '>=14.0.0'} + + vscode-languageclient@7.0.0: + resolution: {integrity: sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==} + engines: {vscode: ^1.52.0} + + vscode-languageserver-protocol@3.16.0: + resolution: {integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==} + + vscode-languageserver-protocol@3.17.3: + resolution: {integrity: sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==} + + vscode-languageserver-textdocument@1.0.8: + resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} + + vscode-languageserver-types@3.16.0: + resolution: {integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==} + + vscode-languageserver-types@3.17.3: + resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} + + vscode-languageserver@8.1.0: + resolution: {integrity: sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==} + hasBin: true + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + +snapshots: + + '@tootallnate/once@1.1.2': {} + + '@types/vscode@1.76.0': {} + + '@vscode/test-electron@2.3.0': + dependencies: + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + jszip: 3.10.1 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + + agent-base@6.0.2: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + balanced-match@1.0.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + concat-map@0.0.1: {} + + core-util-is@1.0.3: {} + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + http-proxy-agent@4.0.1: + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + immediate@3.0.6: {} + + inherits@2.0.4: {} + + isarray@1.0.0: {} + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + ms@2.1.2: {} + + pako@1.0.11: {} + + process-nextick-args@2.0.1: {} + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + safe-buffer@5.1.2: {} + + semver@7.3.8: + dependencies: + lru-cache: 6.0.0 + + setimmediate@1.0.5: {} + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + util-deprecate@1.0.2: {} + + vscode-jsonrpc@6.0.0: {} + + vscode-jsonrpc@8.1.0: {} + + vscode-languageclient@7.0.0: + dependencies: + minimatch: 3.1.2 + semver: 7.3.8 + vscode-languageserver-protocol: 3.16.0 + + vscode-languageserver-protocol@3.16.0: + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + + vscode-languageserver-protocol@3.17.3: + dependencies: + vscode-jsonrpc: 8.1.0 + vscode-languageserver-types: 3.17.3 + + vscode-languageserver-textdocument@1.0.8: {} + + vscode-languageserver-types@3.16.0: {} + + vscode-languageserver-types@3.17.3: {} + + vscode-languageserver@8.1.0: + dependencies: + vscode-languageserver-protocol: 3.17.3 + + yallist@4.0.0: {} diff --git a/common/src/types/command.ts b/common/src/types/command.ts index 336525afa373bcfd87458ce2dae2f400556aa594..71e4274027447f923a9b69a8dac85bfd7d647cb8 100644 --- a/common/src/types/command.ts +++ b/common/src/types/command.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,27 +8,29 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Command ID Definition for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 14, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ /** Command ID 定义 */ export class CommandID { - /** 报告管理:测试命令 */ - public static reportMgrTest = "rvCodingAsst.reportManager.testCommand"; + /** 报告管理:测试命令 */ + public static reportMgrTest = "rvCodingAsst.reportManager.testCommand"; - /** 报告管理:加载代码扫描报告文件 */ - public static reportMgrLoadFromFile = "rvCodingAsst.reportManager.loadFromFile"; + /** 报告管理:加载代码扫描报告文件 */ + public static reportMgrLoadFromFile = "rvCodingAsst.reportManager.loadFromFile"; - /** 报告管理:保存所有报告(缓存到工作区) */ - public static reportMgrSaveAllReportsCache = "rvCodingAsst.reportManager.saveAllReportsCache"; + /** 报告管理:保存所有报告(缓存到工作区) */ + public static reportMgrSaveAllReportsCache = "rvCodingAsst.reportManager.saveAllReportsCache"; - /** 报告管理:导出报告(用户选择工作区) */ - public static reportMgrExport = "rvCodingAsst.reportManager.exportReport"; + /** 报告管理:导出报告(用户选择工作区) */ + public static reportMgrExport = "rvCodingAsst.reportManager.exportReport"; - /** Wiki 助手:打开 Wiki 页面 */ - public static wikiHelperOpenRule = "rvCodingAsst.wikiHelper.openRule"; + /** Wiki 助手:打开 Wiki 页面 */ + public static wikiHelperOpenRule = "rvCodingAsst.wikiHelper.openRule"; } diff --git a/common/src/types/extConfig.ts b/common/src/types/extConfig.ts index dfa1d6ae6b7a40e2ab67fc59b261d0e8f95c69d7..9785b98fbb5e280c3fdef14a8a30c122ba2001fc 100644 --- a/common/src/types/extConfig.ts +++ b/common/src/types/extConfig.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Extension Configuration Data Model for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 13, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ /** 插件日志级别 */ @@ -23,15 +25,15 @@ export type LSPTraceLevel = "off" | "messages" | "verbose"; /** RVPortingTool 插件配置项 */ export interface RVCodingAsstConfig { - /** 最大显示问题数量 */ - maxNumberOfProblems: number; + /** 最大显示问题数量 */ + maxNumberOfProblems: number; - /** 插件日志级别 */ - logLevel: ExtLogLevel; + /** 插件日志级别 */ + logLevel: ExtLogLevel; - /** Language Server 日志配置 */ - trace: { - /** Language Server 日志级别 */ - server: LSPTraceLevel; - }; + /** Language Server 日志配置 */ + trace: { + /** Language Server 日志级别 */ + server: LSPTraceLevel; + }; } diff --git a/common/src/types/notification.ts b/common/src/types/notification.ts index 5046720f8c3039fb1d5968a8e6707e708038eeb8..1f4cd29e3fff390f0b81bec7acde35a1ff3303a0 100644 --- a/common/src/types/notification.ts +++ b/common/src/types/notification.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,51 +8,54 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Client/Server Notification ID Definition for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 14, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ /** LSP 通知 ID 定义 */ export class LSPNotificationID { - /** 报告管理:加载报告 JSON Schema */ - public static reportMgrLoadSchema = "rvCodingAsst.reportManager.loadSchema"; + /** 报告管理:加载报告 JSON Schema */ + public static reportMgrLoadSchema = "rvCodingAsst.reportManager.loadSchema"; - /** 报告管理:加载报告 */ - public static reportMgrLoad = "rvCodingAsst.reportManager.load"; + /** 报告管理:加载报告 */ + public static reportMgrLoad = "rvCodingAsst.reportManager.load"; - /** 报告管理:加载本地文件报告 */ - public static reportMgrLoadFromFile = "rvCodingAsst.reportManager.loadFromFile"; + /** 报告管理:加载本地文件报告 */ + public static reportMgrLoadFromFile = "rvCodingAsst.reportManager.loadFromFile"; - /** 报告管理:加载服务器上的报告 */ - public static reportMgrLoadFromServer = "rvCodingAsst.reportManager.loadFromServer"; + /** 报告管理:加载服务器上的报告 */ + public static reportMgrLoadFromServer = "rvCodingAsst.reportManager.loadFromServer"; - /** 报告管理:加载报告完成 */ - public static reportMgrLoadFinished = "rvCodingAsst.reportManager.loadFinished"; + /** 报告管理:加载报告完成 */ + public static reportMgrLoadFinished = "rvCodingAsst.reportManager.loadFinished"; - /** 报告管理:加载报告完成,但缓存到工作区失败 */ - public static reportMgrLoadFinishedWithSaveError = "rvCodingAsst.reportManager.loadFinishedWithSaveError"; + /** 报告管理:加载报告完成,但缓存到工作区失败 */ + public static reportMgrLoadFinishedWithSaveError = + "rvCodingAsst.reportManager.loadFinishedWithSaveError"; - /** 报告管理:加载报告失败 */ - public static reportMgrLoadError = "rvCodingAsst.reportManager.loadError"; + /** 报告管理:加载报告失败 */ + public static reportMgrLoadError = "rvCodingAsst.reportManager.loadError"; - /** 报告管理:保存报告 */ - public static reportMgrSave = "rvCodingAsst.reportManager.save"; + /** 报告管理:保存报告 */ + public static reportMgrSave = "rvCodingAsst.reportManager.save"; - /** 报告管理:保存所有报告(缓存到工作区) */ - public static reportMgrSaveCacheAll = "rvCodingAsst.reportManager.saveCacheAll"; + /** 报告管理:保存所有报告(缓存到工作区) */ + public static reportMgrSaveCacheAll = "rvCodingAsst.reportManager.saveCacheAll"; - /** 报告管理:保存所有报告(缓存到工作区) */ - public static reportMgrSaveCacheAllFinished = "rvCodingAsst.reportManager.saveCacheAllFinished"; + /** 报告管理:保存所有报告(缓存到工作区) */ + public static reportMgrSaveCacheAllFinished = "rvCodingAsst.reportManager.saveCacheAllFinished"; - /** 报告管理:保存报告成功 */ - public static reportMgrSaveFinished = "rvCodingAsst.reportManager.saveFinished"; + /** 报告管理:保存报告成功 */ + public static reportMgrSaveFinished = "rvCodingAsst.reportManager.saveFinished"; - /** 报告管理:保存报告失败 */ - public static reportMgrSaveError = "rvCodingAsst.reportManager.saveError"; + /** 报告管理:保存报告失败 */ + public static reportMgrSaveError = "rvCodingAsst.reportManager.saveError"; - /** 报告管理:重新加载报告到指定工作区 */ - public static reportMgrReloadConfirm = "rvCodingAsst.reportManager.reloadConfirm"; + /** 报告管理:重新加载报告到指定工作区 */ + public static reportMgrReloadConfirm = "rvCodingAsst.reportManager.reloadConfirm"; } diff --git a/common/src/types/report.ts b/common/src/types/report.ts index ccf36ca806e2299e747c182374c6119f8b22c25f..2fc13f344f6ed43e1ee810dadf2d68ed63289714 100644 --- a/common/src/types/report.ts +++ b/common/src/types/report.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,142 +8,144 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Server Report Type Definition for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 14, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ /** 代码问题状态 */ export enum IProblemState { - /** 问题状态:无关 */ - unrelated = 0, + /** 问题状态:无关 */ + unrelated = 0, - /** 问题状态:正常 */ - default = 1, + /** 问题状态:正常 */ + default = 1, - /** 问题状态:待验证 */ - verify = 2, + /** 问题状态:待验证 */ + verify = 2, - /** 问题状态:已解决 */ - solved = 3, + /** 问题状态:已解决 */ + solved = 3, } /** 代码问题类型 */ export enum IProblemType { - /** 问题类型:文件级 */ - file = "file", + /** 问题类型:文件级 */ + file = "file", - /** 问题类型:目录级 */ - dir = "dir", + /** 问题类型:目录级 */ + dir = "dir", - /** 问题类型:源码级 */ - source = "source", + /** 问题类型:源码级 */ + source = "source", } /** 代码问题级别 */ export enum IProblemSeverity { - /** - * Something not allowed by the rules of a language or other means. - */ - error = 1, - - /** - * Something suspicious but allowed. - */ - warning = 2, - - /** - * Something to inform about but not a problem. - */ - info = 3, - - /** - * Something to hint to a better way of doing it, like proposing - * a refactoring. - */ - hint = 4, + /** + * Something not allowed by the rules of a language or other means. + */ + error = 1, + + /** + * Something suspicious but allowed. + */ + warning = 2, + + /** + * Something to inform about but not a problem. + */ + info = 3, + + /** + * Something to hint to a better way of doing it, like proposing + * a refactoring. + */ + hint = 4, } /** 代码区域 */ export interface SourceRange { - /** 代码文件相对路径 */ - filePath: string; + /** 代码文件相对路径 */ + filePath: string; - /** 代码起始行号 */ - lineFrom: number; + /** 代码起始行号 */ + lineFrom: number; - /** 代码起始列号 */ - colFrom?: number; + /** 代码起始列号 */ + colFrom?: number; - /** 代码终止行号 */ - lineUpto?: number; + /** 代码终止行号 */ + lineUpto?: number; - /** 代码终止列号 */ - colUpto?: number; + /** 代码终止列号 */ + colUpto?: number; - /** 代码区域额外信息 */ - comment?: string; + /** 代码区域额外信息 */ + comment?: string; - /** 代码区域额外级别 */ - level?: IProblemSeverity; + /** 代码区域额外级别 */ + level?: IProblemSeverity; - /** 是否隐藏显示 */ - hidden?: boolean; + /** 是否隐藏显示 */ + hidden?: boolean; - /** - * 是否已规范化 - * - * @TJS-ignore - */ - _unified?: boolean; + /** + * 是否已规范化 + * + * @TJS-ignore + */ + _unified?: boolean; } /** 代码问题数据 */ export interface IProblemData { - /** 文件或目录相对路径 */ - path: string; + /** 文件或目录相对路径 */ + path: string; - /** 描述 */ - desc: string; + /** 描述 */ + desc: string; - /** 源码区域 */ - srcRange?: SourceRange; + /** 源码区域 */ + srcRange?: SourceRange; } /** RVPortingTool 代码扫描问题 */ export interface IProblem { - /** 问题 ID */ - id: string; + /** 问题 ID */ + id: string; - /** 问题状态标志 */ - state: IProblemState; + /** 问题状态标志 */ + state: IProblemState; - /** Checker ID */ - checkerId: string; + /** Checker ID */ + checkerId: string; - /** 问题类型 */ - type: IProblemType; + /** 问题类型 */ + type: IProblemType; - /** 规则 ID */ - ruleId: string; + /** 规则 ID */ + ruleId: string; - /** 问题级别 */ - level: IProblemSeverity; + /** 问题级别 */ + level: IProblemSeverity; - /** 问题信息 */ - data: IProblemData[]; + /** 问题信息 */ + data: IProblemData[]; } /** RVPortingTool 代码扫描报告 */ export interface IReport { - /** 报告版本号 */ - version: number; + /** 报告版本号 */ + version: number; - /** 报告最后更新毫秒时间戳 */ - timestamp: number; + /** 报告最后更新毫秒时间戳 */ + timestamp: number; - /** 报告问题列表 */ - problems: IProblem[]; + /** 报告问题列表 */ + problems: IProblem[]; } diff --git a/common/src/types/reportManager.ts b/common/src/types/reportManager.ts index dd5f846dfd5000074ba55484029b9d616acbb8a7..5d3b3ea872d2cbbac4cc37834640b691c20208fd 100644 --- a/common/src/types/reportManager.ts +++ b/common/src/types/reportManager.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,55 +8,57 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Client/Server Report Manager Extra Types for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 16, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ /** 报告读取参数 */ export interface ReportMgrLoadParams { - /** 工作区路径 */ - workspaceUri: string; + /** 工作区路径 */ + workspaceUri: string; - /** 报告数据 URL(本地或在线) */ - reportUri: string; + /** 报告数据 URL(本地或在线) */ + reportUri: string; - /** 是否确认重新读入 */ - reloadConfirm: boolean; + /** 是否确认重新读入 */ + reloadConfirm: boolean; } /** 报告读取错误类型 */ export type ReportMgrLoadErrorType = - | "fileNotExists" - | "networkError" - | "formatError" - | "needReloadConfirm" - | "saveCacheError"; + | "fileNotExists" + | "networkError" + | "formatError" + | "needReloadConfirm" + | "saveCacheError"; /** 报告读取错误信息 */ export interface ReportMgrLoadError { - /** 报告导入参数,ReportMgrLoadParams */ - loadParams: ReportMgrLoadParams; + /** 报告导入参数,ReportMgrLoadParams */ + loadParams: ReportMgrLoadParams; - /** 错误原因 */ - reason: ReportMgrLoadErrorType; + /** 错误原因 */ + reason: ReportMgrLoadErrorType; - /** 是否可重试 */ - retry: boolean; + /** 是否可重试 */ + retry: boolean; } /** 报告保存参数 */ export interface ReportMgrSaveParams { - /** 工作区路径 */ - workspaceUri: string; + /** 工作区路径 */ + workspaceUri: string; - /** 保存 URL(本地或在线) */ - reportUri: string; + /** 保存 URL(本地或在线) */ + reportUri: string; - /** 是否确认覆盖 */ - replaceConfirm: boolean; + /** 是否确认覆盖 */ + replaceConfirm: boolean; } /** 报告保存错误类型 */ @@ -64,12 +66,12 @@ export type ReportMgrSaveErrorType = "ioError" | "invalidWorkspaceUri" | "needRe /** 报告保存错误信息 */ export interface ReportMgrSaveError { - /** 报告保存参数,ReportMgrSaveParams */ - saveParams: ReportMgrSaveParams; + /** 报告保存参数,ReportMgrSaveParams */ + saveParams: ReportMgrSaveParams; - /** 错误原因 */ - reason: ReportMgrSaveErrorType; + /** 错误原因 */ + reason: ReportMgrSaveErrorType; - /** 是否可重试 */ - retry: boolean; + /** 是否可重试 */ + retry: boolean; } diff --git a/common/src/types/request.ts b/common/src/types/request.ts index 4ead6599bd9aa09f2d305a20c6017e2f642a3d2a..5963a3c2bd286c3164e2f8bf8b866c08bdbeb001 100644 --- a/common/src/types/request.ts +++ b/common/src/types/request.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,15 +8,17 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Client/Server Request/Response ID Definition for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 14, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ /** LSP 请求/响应 ID 定义 */ export class LSPRequestID { - /** 报告管理:获取报告规则信息 */ - public static reportMgrGetRuleInfo = "rvCodingAsst.reportManager.getRuleInfo"; + /** 报告管理:获取报告规则信息 */ + public static reportMgrGetRuleInfo = "rvCodingAsst.reportManager.getRuleInfo"; } diff --git a/common/src/types/wikiView.ts b/common/src/types/wikiView.ts index 7a4e8e4f172d21bceba6195426bfff48b09bda0c..a02509f66c91c8246df88c082ec11dac27a3506e 100644 --- a/common/src/types/wikiView.ts +++ b/common/src/types/wikiView.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,37 +8,39 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Client Wiki View WebView Type Definition for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 27, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ /** WikiView 加载完毕消息 */ export interface WikiViewLoadedMsg { - /** type */ - type: "WikiViewLoadedMsg"; + /** type */ + type: "WikiViewLoadedMsg"; } /** WikiView 加载 Markdown 内容消息 */ export interface WikiViewApplyMarkdownMsg { - /** type */ - type: "WikiViewApplyMarkdownMsg"; + /** type */ + type: "WikiViewApplyMarkdownMsg"; - /** Markdown content */ - content: string; + /** Markdown content */ + content: string; } /** WikiView 消息类型检查辅助类 */ export class WikiViewMsgUtil { - /** 判断是否为 WikiView 加载完毕消息 */ - public static isLoadedMsg(msg: any): msg is WikiViewLoadedMsg { - return msg.type === "WikiViewLoadedMsg"; - } + /** 判断是否为 WikiView 加载完毕消息 */ + public static isLoadedMsg(msg: any): msg is WikiViewLoadedMsg { + return msg.type === "WikiViewLoadedMsg"; + } - /** 判断是否为 WikiView 加载 Markdown 内容消息 */ - public static isApplyMarkdownMsg(msg: any): msg is WikiViewApplyMarkdownMsg { - return msg.type === "WikiViewApplyMarkdownMsg"; - } + /** 判断是否为 WikiView 加载 Markdown 内容消息 */ + public static isApplyMarkdownMsg(msg: any): msg is WikiViewApplyMarkdownMsg { + return msg.type === "WikiViewApplyMarkdownMsg"; + } } diff --git a/common/src/utils/sourceRangeUtils.ts b/common/src/utils/sourceRangeUtils.ts index 75d923631ce87c770c83f73ac3f7e15dd2515e81..51dc9124632406c69eb468e466cb38f5f7985411 100644 --- a/common/src/utils/sourceRangeUtils.ts +++ b/common/src/utils/sourceRangeUtils.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,120 +8,122 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Source Range Utilities for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 17, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as LSPTypes from "vscode-languageserver-types"; import { SourceRange } from "../types/report"; export class SourceRangeUtils { - public static unify(range: SourceRange) { - if (range._unified) { - return range; - } - return { - lineFrom: range.lineFrom, - colFrom: range.colFrom !== undefined ? range.colFrom : 0, - lineUpto: range.lineUpto !== undefined ? range.lineUpto : range.lineFrom, - colUpto: range.colUpto !== undefined ? range.colUpto : Infinity, - _unified: true, - }; + public static unify(range: SourceRange) { + if (range._unified) { + return range; } + return { + lineFrom: range.lineFrom, + colFrom: range.colFrom !== undefined ? range.colFrom : 0, + lineUpto: range.lineUpto !== undefined ? range.lineUpto : range.lineFrom, + colUpto: range.colUpto !== undefined ? range.colUpto : Infinity, + _unified: true, + }; + } - public static isPrev(baseRange: SourceRange, range: SourceRange) { - baseRange = this.unify(baseRange); - range = this.unify(range); - - if (range.lineUpto! < baseRange.lineFrom) { - return true; - } else if (range.lineUpto === baseRange.lineFrom) { - if (range.colUpto! <= baseRange.colFrom!) { - return true; - } - } - return false; + public static isPrev(baseRange: SourceRange, range: SourceRange) { + baseRange = this.unify(baseRange); + range = this.unify(range); + + if (range.lineUpto! < baseRange.lineFrom) { + return true; + } else if (range.lineUpto === baseRange.lineFrom) { + if (range.colUpto! <= baseRange.colFrom!) { + return true; + } } + return false; + } + + public static isAfter(baseRange: SourceRange, range: SourceRange) { + baseRange = this.unify(baseRange); + range = this.unify(range); - public static isAfter(baseRange: SourceRange, range: SourceRange) { - baseRange = this.unify(baseRange); - range = this.unify(range); - - if (range.lineFrom > baseRange.lineUpto!) { - return true; - } else if (range.lineFrom === baseRange.lineUpto) { - if (range.colFrom! >= baseRange.colUpto!) { - return true; - } - } - return false; + if (range.lineFrom > baseRange.lineUpto!) { + return true; + } else if (range.lineFrom === baseRange.lineUpto) { + if (range.colFrom! >= baseRange.colUpto!) { + return true; + } } + return false; + } - public static getIntersect( - baseRange: SourceRange, - range: SourceRange, - ignoreFilePath?: boolean - ): SourceRange | undefined { - if (!ignoreFilePath && baseRange.filePath !== range.filePath) { - return undefined; - } - - const maxLineFrom = Math.max(baseRange.lineFrom, range.lineFrom); - const minLineUpto = Math.min(baseRange.lineUpto || maxLineFrom, range.lineUpto || maxLineFrom); - - if (maxLineFrom > minLineUpto) { - return undefined; - } - - let maxColFrom: number | undefined; - let minColUpto: number | undefined; - - if (maxLineFrom === minLineUpto) { - maxColFrom = Math.max(baseRange.colFrom || 0, range.colFrom || 0); - minColUpto = Math.min(baseRange.colUpto || Infinity, range.colUpto || Infinity); - - //if (maxColFrom >= minColUpto) { - // if (maxColFrom! > minColUpto!) { - // return undefined; - // } - } else { - maxColFrom = maxLineFrom === baseRange.lineFrom ? baseRange.colFrom : range.colFrom; - minColUpto = minLineUpto === baseRange.lineUpto ? baseRange.colUpto : range.colUpto; - } - // 如果range 在 baseRange 内部, 则列号修改为与 range 列号一致 - if (baseRange.lineUpto! > range.lineUpto!) { - minColUpto = range.colUpto; - } - if (baseRange.lineFrom! < range.lineFrom) { - maxColFrom = range.colFrom; - } - - return { - filePath: baseRange.filePath, - lineFrom: maxLineFrom, - colFrom: maxColFrom, - lineUpto: minLineUpto, - colUpto: minColUpto, - }; + public static getIntersect( + baseRange: SourceRange, + range: SourceRange, + ignoreFilePath?: boolean + ): SourceRange | undefined { + if (!ignoreFilePath && baseRange.filePath !== range.filePath) { + return undefined; } - public static fromLSPRange(range: LSPTypes.Range) { - return { - lineFrom: range.start.line + 1, - colFrom: range.start.character, - lineUpto: range.end.line + 1, - colUpto: range.end.character, - }; + const maxLineFrom = Math.max(baseRange.lineFrom, range.lineFrom); + const minLineUpto = Math.min(baseRange.lineUpto || maxLineFrom, range.lineUpto || maxLineFrom); + + if (maxLineFrom > minLineUpto) { + return undefined; } - public static toLSPRange(range: SourceRange) { - range = this.unify(range); - return { - start: { line: range.lineFrom - 1, character: range.colFrom! }, - end: { line: range.lineUpto! - 1, character: range.colUpto! }, - }; + let maxColFrom: number | undefined; + let minColUpto: number | undefined; + + if (maxLineFrom === minLineUpto) { + maxColFrom = Math.max(baseRange.colFrom || 0, range.colFrom || 0); + minColUpto = Math.min(baseRange.colUpto || Infinity, range.colUpto || Infinity); + + //if (maxColFrom >= minColUpto) { + // if (maxColFrom! > minColUpto!) { + // return undefined; + // } + } else { + maxColFrom = maxLineFrom === baseRange.lineFrom ? baseRange.colFrom : range.colFrom; + minColUpto = minLineUpto === baseRange.lineUpto ? baseRange.colUpto : range.colUpto; + } + // 如果range 在 baseRange 内部, 则列号修改为与 range 列号一致 + if (baseRange.lineUpto! > range.lineUpto!) { + minColUpto = range.colUpto; + } + if (baseRange.lineFrom! < range.lineFrom) { + maxColFrom = range.colFrom; } + + return { + filePath: baseRange.filePath, + lineFrom: maxLineFrom, + colFrom: maxColFrom, + lineUpto: minLineUpto, + colUpto: minColUpto, + }; + } + + public static fromLSPRange(range: LSPTypes.Range) { + return { + lineFrom: range.start.line + 1, + colFrom: range.start.character, + lineUpto: range.end.line + 1, + colUpto: range.end.character, + }; + } + + public static toLSPRange(range: SourceRange) { + range = this.unify(range); + return { + start: { line: range.lineFrom - 1, character: range.colFrom! }, + end: { line: range.lineUpto! - 1, character: range.colUpto! }, + }; + } } diff --git a/common/tsconfig.json b/common/tsconfig.json index 51899cd55f2185512820b3303cf25814cc152b26..b0a84f988b678149534e2de283e90c8791728c8b 100644 --- a/common/tsconfig.json +++ b/common/tsconfig.json @@ -1,16 +1,16 @@ { - "compilerOptions": { - "composite": true, - "module": "commonjs", - "target": "es2020", - "lib": ["es2020"], - "outDir": "out", - "rootDir": "..", - "sourceMap": true, - "strict": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"], - "exclude": ["node_modules", ".vscode-test"] + "compilerOptions": { + "composite": true, + "module": "commonjs", + "target": "es2020", + "lib": ["es2020"], + "outDir": "out", + "rootDir": "..", + "sourceMap": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "exclude": ["node_modules", ".vscode-test"] } diff --git a/esbuild.js b/esbuild.js index c906c16ce81c070998228e75dff21f66efba7eca..f180a98122ed4d610a98019df461dad307bfd8bd 100644 --- a/esbuild.js +++ b/esbuild.js @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,84 +8,135 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * ESBuild Script for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 27, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ const { build } = require("esbuild"); const { copy } = require("esbuild-plugin-copy"); +const { glob } = require("glob"); //@ts-check /** @typedef {import('esbuild').BuildOptions} BuildOptions **/ /** @type BuildOptions */ const baseConfig = { - bundle: true, - minify: process.env.NODE_ENV === "production", - sourcemap: process.env.NODE_ENV !== "production", + bundle: true, + minify: process.env.NODE_ENV === "production", + sourcemap: process.env.NODE_ENV !== "production", }; /** @type BuildOptions */ const wikiViewConfig = { - ...baseConfig, - target: "es2020", - format: "esm", - entryPoints: ["./webview/src/wikiView/main.ts"], - outfile: "./webview/out/wikiView/main.js", - plugins: [ - // Copy webview css and ttf files to `out` directory unaltered - copy({ - resolveFrom: "cwd", - assets: { - from: ["./webview/src/wikiView/*.css", "./webview/src/wikiView/*.ttf"], - to: ["./webview/out/wikiView"], - }, - }), - ], + ...baseConfig, + target: "es2020", + format: "esm", + entryPoints: ["./webview/src/wikiView/main.ts"], + outdir: "./out/wikiView", + plugins: [ + // Copy webview css and ttf files to `out` directory unaltered + copy({ + resolveFrom: "cwd", + assets: { + from: ["./webview/src/wikiView/*.css", "./webview/src/wikiView/*.ttf"], + to: ["./out/wikiView"], + }, + }), + ], +}; + +/** @type BuildOptions */ +const clientConfig = { + ...baseConfig, + target: "es2020", + platform: "node", + format: "cjs", + external: ["vscode"], + entryPoints: ["./client/src/extension.ts"], + outdir: "./out", +}; + +/** @type BuildOptions */ +const serverConfig = { + ...baseConfig, + target: "es2020", + platform: "node", + format: "cjs", + external: ["vscode"], + entryPoints: ["./server/src/server.ts"], + outdir: "./out/server", +}; + +/** @type BuildOptions */ +const commonConfig = { + ...baseConfig, + target: "es2020", + platform: "node", + format: "cjs", + external: ["vscode"], + entryPoints: glob.globSync("./common/src/**/*.ts"), + outdir: "./out/common", }; // This watch config adheres to the conventions of the esbuild-problem-matchers // extension (https://github.com/connor4312/esbuild-problem-matchers#esbuild-via-js) /** @type BuildOptions */ const watchConfig = { - watch: { - onRebuild(error, result) { - console.log("[watch] build started"); - if (error) { - error.errors.forEach((error) => - console.error( - `> ${error.location.file}:${error.location.line}:${error.location.column}: error: ${error.text}` - ) - ); - } else { - console.log("[watch] build finished"); - } - }, + watch: { + onRebuild(error, result) { + console.log("[watch] build started"); + if (error) { + error.errors.forEach((error) => + console.error( + `> ${error.location.file}:${error.location.line}:${error.location.column}: error: ${error.text}` + ) + ); + } else { + console.log("[watch] build finished"); + } }, + }, }; // Build script (async () => { - const args = process.argv.slice(2); - try { - if (args.includes("--watch")) { - // Build and watch webview code - console.log("[watch] build started"); - await build({ - ...wikiViewConfig, - ...watchConfig, - }); - console.log("[watch] build finished"); - } else { - // Build webview code - await build(wikiViewConfig); - console.log("build complete"); - } - } catch (err) { - process.stderr.write(err.toString()); - process.exit(1); + const args = process.argv.slice(2); + try { + if (args.includes("--watch")) { + // Build and watch webview code + console.log("[watch] build started"); + await build({ + ...wikiViewConfig, + ...watchConfig, + }); + await build({ + ...clientConfig, + ...watchConfig, + }); + await build({ + ...serverConfig, + ...watchConfig, + }); + await build({ + ...commonConfig, + ...watchConfig, + }); + console.log("[watch] build finished"); + } else { + // Build webview code + await build(wikiViewConfig); + await build(clientConfig); + await build(serverConfig); + await build(commonConfig); + console.log("build complete"); } + } catch (err) { + process.stderr.write(err.toString()); + process.exit(1); + } })(); diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index d4bdc059d208ab5189e6d7e53637ee7b3525e5b7..6580b8be49d24cb094615a025aaa6fdf6aaa19c8 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -1,65 +1,65 @@ { - "ARM": "ARM", - "ARM architecture-related macro": "ARM architecture-related macro", - "Architecture judgement macro statement block": "Architecture judgement macro statement block", - "Architecture-related built-in function": "Architecture-related built-in function", - "Architecture-related built-in macro statement block": "Architecture-related built-in macro statement block", - "Architecture-related macro in requirements": "Architecture-related macro in requirements", - "Architecture-related pre-defined macro from compiler": "Architecture-related pre-defined macro from compiler", - "C/C++": "C/C++", - "Code Scan Report": "Code Scan Report", - "Confirm": "Confirm", - "Failed to load report": "Failed to load report", - "Failed to load report: {0}: {1}": "Failed to load report: {0}: {1}", - "Failed to load rule details of {0}{1}": "Failed to load rule details of {0}{1}", - "Failed to save report": "Failed to save report", - "Feature is not supported yet": "Feature is not supported yet", - "File does not exists": "File does not exists", - "Finished loading code check report! The report was updated at: {0}": "Finished loading code check report! The report was updated at: {0}", - "Finished loading code check report, but failed to save to workspace. Your operations will be lost if you don't export the report manually after working.": "Finished loading code check report, but failed to save to workspace. Your operations will be lost if you don't export the report manually after working.", - "Finished saving all {0} workspaces' report cache": "Finished saving all {0} workspaces' report cache", - "Finished saving report to: {0}": "Finished saving report to: {0}", - "Format Error": "Format Error", - "Function multi-versioning": "Function multi-versioning", - "Inline architecture-related shell script": "Inline architecture-related shell script", - "Inline assembly": "Inline assembly", - "Network error": "Network error", - "No Wiki pages have been opened yet.": "No Wiki pages have been opened yet.", - "Please choose a workspace for displaying report": "Please choose a workspace for displaying report", - "Please choose code scanning report file": "Please choose code scanning report file", - "Please open a folder as workspace before loading report": "Please open a folder as workspace before loading report", - "Report reloading confirm": "Report reloading confirm", - "Retry": "Retry", - "Right-shift operation on signed integer": "Right-shift operation on signed integer", - "Save": "Save", - "Save Code Scan Report As...": "Save Code Scan Report As...", - "Save as...": "Save as...", - "Suspected ARM architecture-related macro": "Suspected ARM architecture-related macro", - "Suspected architecture-related enum type": "Suspected architecture-related enum type", - "Suspected architecture-related macro": "Suspected architecture-related macro", - "The report for following workspace(s) are failed to save\n": "The report for following workspace(s) are failed to save\n", - "The workspace already contains report data! Would you like to override it?": "The workspace already contains report data! Would you like to override it?", - "Unknown reason": "Unknown reason", - "X86": "X86", - "X86 architecture-specified macro": "X86 architecture-specified macro", - "X86 architecture-specified system call": "X86 architecture-specified system call", - "architecture judgment macro": "architecture judgment macro", - "assembly": "assembly", - "bit operation": "bit operation", - "built-in": "built-in", - "compiler": "compiler", - "enum": "enum", - "function": "function", - "ifarch": "ifarch", - "ifnarch": "ifnarch", - "implement-defined behavior": "implement-defined behavior", - "keyword": "keyword", - "macro": "macro", - "multi-versioning": "multi-versioning", - "requirement": "requirement", - "rpmbuild": "rpmbuild", - "rpmspec": "rpmspec", - "shifting": "shifting", - "signed integer": "signed integer", - "system call": "system call" + "ARM": "ARM", + "ARM architecture-related macro": "ARM architecture-related macro", + "Architecture judgement macro statement block": "Architecture judgement macro statement block", + "Architecture-related built-in function": "Architecture-related built-in function", + "Architecture-related built-in macro statement block": "Architecture-related built-in macro statement block", + "Architecture-related macro in requirements": "Architecture-related macro in requirements", + "Architecture-related pre-defined macro from compiler": "Architecture-related pre-defined macro from compiler", + "C/C++": "C/C++", + "Code Scan Report": "Code Scan Report", + "Confirm": "Confirm", + "Failed to load report": "Failed to load report", + "Failed to load report: {0}: {1}": "Failed to load report: {0}: {1}", + "Failed to load rule details of {0}{1}": "Failed to load rule details of {0}{1}", + "Failed to save report": "Failed to save report", + "Feature is not supported yet": "Feature is not supported yet", + "File does not exists": "File does not exists", + "Finished loading code check report! The report was updated at: {0}": "Finished loading code check report! The report was updated at: {0}", + "Finished loading code check report, but failed to save to workspace. Your operations will be lost if you don't export the report manually after working.": "Finished loading code check report, but failed to save to workspace. Your operations will be lost if you don't export the report manually after working.", + "Finished saving all {0} workspaces' report cache": "Finished saving all {0} workspaces' report cache", + "Finished saving report to: {0}": "Finished saving report to: {0}", + "Format Error": "Format Error", + "Function multi-versioning": "Function multi-versioning", + "Inline architecture-related shell script": "Inline architecture-related shell script", + "Inline assembly": "Inline assembly", + "Network error": "Network error", + "No Wiki pages have been opened yet.": "No Wiki pages have been opened yet.", + "Please choose a workspace for displaying report": "Please choose a workspace for displaying report", + "Please choose code scanning report file": "Please choose code scanning report file", + "Please open a folder as workspace before loading report": "Please open a folder as workspace before loading report", + "Report reloading confirm": "Report reloading confirm", + "Retry": "Retry", + "Right-shift operation on signed integer": "Right-shift operation on signed integer", + "Save": "Save", + "Save Code Scan Report As...": "Save Code Scan Report As...", + "Save as...": "Save as...", + "Suspected ARM architecture-related macro": "Suspected ARM architecture-related macro", + "Suspected architecture-related enum type": "Suspected architecture-related enum type", + "Suspected architecture-related macro": "Suspected architecture-related macro", + "The report for following workspace(s) are failed to save\n": "The report for following workspace(s) are failed to save\n", + "The workspace already contains report data! Would you like to override it?": "The workspace already contains report data! Would you like to override it?", + "Unknown reason": "Unknown reason", + "X86": "X86", + "X86 architecture-specified macro": "X86 architecture-specified macro", + "X86 architecture-specified system call": "X86 architecture-specified system call", + "architecture judgment macro": "architecture judgment macro", + "assembly": "assembly", + "bit operation": "bit operation", + "built-in": "built-in", + "compiler": "compiler", + "enum": "enum", + "function": "function", + "ifarch": "ifarch", + "ifnarch": "ifnarch", + "implement-defined behavior": "implement-defined behavior", + "keyword": "keyword", + "macro": "macro", + "multi-versioning": "multi-versioning", + "requirement": "requirement", + "rpmbuild": "rpmbuild", + "rpmspec": "rpmspec", + "shifting": "shifting", + "signed integer": "signed integer", + "system call": "system call" } diff --git a/l10n/bundle.l10n.zh-cn.json b/l10n/bundle.l10n.zh-cn.json index 1d9d4ea0ce6111ac9f23e2215011c77f5fecf33a..765a5d42fe2cf0184d995a26d59d63534665a02d 100644 --- a/l10n/bundle.l10n.zh-cn.json +++ b/l10n/bundle.l10n.zh-cn.json @@ -1,65 +1,65 @@ { - "ARM": "ARM", - "ARM architecture-related macro": "ARM 架构特有宏", - "Architecture judgement macro statement block": "架构判断宏语句块", - "Architecture-related built-in function": "架构相关 builtin 函数", - "Architecture-related built-in macro statement block": "架构相关内置宏语句块", - "Architecture-related macro in requirements": "依赖项名称出现架构相关内置宏", - "Architecture-related pre-defined macro from compiler": "编译器架构相关预定义宏", - "C/C++": "C/C++", - "Code Scan Report": "代码扫描报告", - "Confirm": "确认", - "Failed to load report": "加载报告失败", - "Failed to load report: {0}: {1}": "加载报告失败: {0}: {1}", - "Failed to load rule details of {0}{1}": "加载检查规则【{0}{1}】详细信息失败", - "Failed to save report": "保存报告失败", - "Feature is not supported yet": "该功能尚未支持", - "File does not exists": "文件不存在", - "Finished loading code check report! The report was updated at: {0}": "代码检查报告加载成功!该报告最后修改于:{0}", - "Finished loading code check report, but failed to save to workspace. Your operations will be lost if you don't export the report manually after working.": "代码扫描报告加载成功,但无法自动保存到工作区。如果您在工作结束时不手动导出报告,您的相关操作可能会丢失。", - "Finished saving all {0} workspaces' report cache": "已成功缓存 {0} 个工作区上的报告数据", - "Finished saving report to: {0}": "报告已成功保存到:{0}", - "Format Error": "文件格式错误", - "Function multi-versioning": "多版本函数", - "Inline architecture-related shell script": "内嵌架构相关 Shell 脚本", - "Inline assembly": "内联汇编", - "Network error": "网络错误", - "No Wiki pages have been opened yet.": "目前未打开任何 Wiki 页面。", - "Please choose a workspace for displaying report": "请选择报告对应的工作区", - "Please choose code scanning report file": "请选择代码扫描报告文件", - "Please open a folder as workspace before loading report": "加载报告前请先打开一个工作区", - "Report reloading confirm": "请确认是否重新加载报告数据", - "Retry": "重试", - "Right-shift operation on signed integer": "有符号数的右移运算", - "Save": "保存", - "Save Code Scan Report As...": "将代码扫描报告另存为...", - "Save as...": "将报告另存为...", - "Suspected ARM architecture-related macro": "疑似 ARM 架构特有宏", - "Suspected architecture-related enum type": "疑似架构相关枚举类型", - "Suspected architecture-related macro": "疑似架构相关宏", - "The report for following workspace(s) are failed to save\n": "以下工作区的报告保存失败:\n", - "The workspace already contains report data! Would you like to override it?": "工作区已存在报告数据!请确认是否替换?", - "Unknown reason": "未知原因", - "X86": "X86", - "X86 architecture-specified macro": "X86 架构特有宏", - "X86 architecture-specified system call": "架构特有系统调用", - "architecture judgment macro": "架构判断宏", - "assembly": "汇编", - "bit operation": "位操作", - "built-in": "built-in", - "compiler": "编译器", - "enum": "枚举", - "function": "函数", - "ifarch": "ifarch", - "ifnarch": "ifnarch", - "implement-defined behavior": "实现定义行为", - "keyword": "关键词", - "macro": "宏", - "multi-versioning": "多版本函数", - "requirement": "依赖", - "rpmbuild": "rpmbuild", - "rpmspec": "rpmspec", - "shifting": "移位", - "signed integer": "有符号整数", - "system call": "系统调用" + "ARM": "ARM", + "ARM architecture-related macro": "ARM 架构特有宏", + "Architecture judgement macro statement block": "架构判断宏语句块", + "Architecture-related built-in function": "架构相关 builtin 函数", + "Architecture-related built-in macro statement block": "架构相关内置宏语句块", + "Architecture-related macro in requirements": "依赖项名称出现架构相关内置宏", + "Architecture-related pre-defined macro from compiler": "编译器架构相关预定义宏", + "C/C++": "C/C++", + "Code Scan Report": "代码扫描报告", + "Confirm": "确认", + "Failed to load report": "加载报告失败", + "Failed to load report: {0}: {1}": "加载报告失败: {0}: {1}", + "Failed to load rule details of {0}{1}": "加载检查规则【{0}{1}】详细信息失败", + "Failed to save report": "保存报告失败", + "Feature is not supported yet": "该功能尚未支持", + "File does not exists": "文件不存在", + "Finished loading code check report! The report was updated at: {0}": "代码检查报告加载成功!该报告最后修改于:{0}", + "Finished loading code check report, but failed to save to workspace. Your operations will be lost if you don't export the report manually after working.": "代码扫描报告加载成功,但无法自动保存到工作区。如果您在工作结束时不手动导出报告,您的相关操作可能会丢失。", + "Finished saving all {0} workspaces' report cache": "已成功缓存 {0} 个工作区上的报告数据", + "Finished saving report to: {0}": "报告已成功保存到:{0}", + "Format Error": "文件格式错误", + "Function multi-versioning": "多版本函数", + "Inline architecture-related shell script": "内嵌架构相关 Shell 脚本", + "Inline assembly": "内联汇编", + "Network error": "网络错误", + "No Wiki pages have been opened yet.": "目前未打开任何 Wiki 页面。", + "Please choose a workspace for displaying report": "请选择报告对应的工作区", + "Please choose code scanning report file": "请选择代码扫描报告文件", + "Please open a folder as workspace before loading report": "加载报告前请先打开一个工作区", + "Report reloading confirm": "请确认是否重新加载报告数据", + "Retry": "重试", + "Right-shift operation on signed integer": "有符号数的右移运算", + "Save": "保存", + "Save Code Scan Report As...": "将代码扫描报告另存为...", + "Save as...": "将报告另存为...", + "Suspected ARM architecture-related macro": "疑似 ARM 架构特有宏", + "Suspected architecture-related enum type": "疑似架构相关枚举类型", + "Suspected architecture-related macro": "疑似架构相关宏", + "The report for following workspace(s) are failed to save\n": "以下工作区的报告保存失败:\n", + "The workspace already contains report data! Would you like to override it?": "工作区已存在报告数据!请确认是否替换?", + "Unknown reason": "未知原因", + "X86": "X86", + "X86 architecture-specified macro": "X86 架构特有宏", + "X86 architecture-specified system call": "架构特有系统调用", + "architecture judgment macro": "架构判断宏", + "assembly": "汇编", + "bit operation": "位操作", + "built-in": "built-in", + "compiler": "编译器", + "enum": "枚举", + "function": "函数", + "ifarch": "ifarch", + "ifnarch": "ifnarch", + "implement-defined behavior": "实现定义行为", + "keyword": "关键词", + "macro": "宏", + "multi-versioning": "多版本函数", + "requirement": "依赖", + "rpmbuild": "rpmbuild", + "rpmspec": "rpmspec", + "shifting": "移位", + "signed integer": "有符号整数", + "system call": "系统调用" } diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 9d8d172b5e6cee23e661d5b8e4d5bf2f670022ea..0000000000000000000000000000000000000000 --- a/package-lock.json +++ /dev/null @@ -1,3146 +0,0 @@ -{ - "name": "rvportingtool", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "rvportingtool", - "version": "0.0.1", - "hasInstallScript": true, - "license": "MulanPSL-2.0", - "devDependencies": { - "@types/glob": "^8.1.0", - "@types/mocha": "^10.0.1", - "@types/node": "16.x", - "@types/string-format": "^2.0.0", - "@types/vscode": "^1.75.0", - "@typescript-eslint/eslint-plugin": "^5.53.0", - "@typescript-eslint/parser": "^5.53.0", - "@vscode/l10n-dev": "^0.0.23", - "@vscode/test-electron": "^2.2.3", - "esbuild": "^0.16.17", - "esbuild-plugin-copy": "^2.1.1", - "eslint": "^8.34.0", - "glob": "^8.1.0", - "mocha": "^10.2.0", - "prettier": "2.8.4", - "typescript": "^4.9.5", - "typescript-json-schema": "^0.55.0", - "vscode-prettier-config": "^1.0.0" - }, - "engines": { - "vscode": "^1.75.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", - "dev": true, - "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "10.0.6", - "resolved": "https://registry.npmmirror.com/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.18.96", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-16.18.96.tgz", - "integrity": "sha512-84iSqGXoO+Ha16j8pRZ/L90vDMKX04QTYMTfYeE1WrjWaZXuchBehGUZEpNgx7JnmlrIHdnABmpjrQjhCnNldQ==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/string-format": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/@types/string-format/-/string-format-2.0.3.tgz", - "integrity": "sha512-2BuDXYaQvSZR5XHlLJQ3KQ455NW+C1Mok0uOO6q8bnp97V/gtZbDEYy44kmu5Ng1U8wRtCSF/leREYVmH2vYmQ==", - "dev": true - }, - "node_modules/@types/vscode": { - "version": "1.88.0", - "resolved": "https://registry.npmmirror.com/@types/vscode/-/vscode-1.88.0.tgz", - "integrity": "sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.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/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "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/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "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/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@vscode/l10n-dev": { - "version": "0.0.23", - "resolved": "https://registry.npmmirror.com/@vscode/l10n-dev/-/l10n-dev-0.0.23.tgz", - "integrity": "sha512-J8YhQey9b0d7oJv5xusTxgTNHXDGhQJf8NqIKyIlx4R7TXQ5Dgm9RVOR5w0EddUp54OZWstGVEJKGKIvKt2/Eg==", - "dev": true, - "dependencies": { - "deepmerge-json": "^1.5.0", - "glob": "^8.0.3", - "pseudo-localization": "^2.4.0", - "web-tree-sitter": "^0.20.7", - "xml2js": "^0.4.23", - "yargs": "^17.5.1" - }, - "bin": { - "vscode-l10n-dev": "dist/cli.js" - } - }, - "node_modules/@vscode/test-electron": { - "version": "2.3.9", - "resolved": "https://registry.npmmirror.com/@vscode/test-electron/-/test-electron-2.3.9.tgz", - "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "jszip": "^3.10.1", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge-json": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/deepmerge-json/-/deepmerge-json-1.5.0.tgz", - "integrity": "sha512-jZRrDmBKjmGcqMFEUJ14FjMJwm05Qaked+1vxaALRtF0UAl7lPU8OLWXFxvoeg3jbQM249VPFVn8g2znaQkEtA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" - } - }, - "node_modules/esbuild-plugin-copy": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/esbuild-plugin-copy/-/esbuild-plugin-copy-2.1.1.tgz", - "integrity": "sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "fs-extra": "^10.0.1", - "globby": "^11.0.3" - }, - "peerDependencies": { - "esbuild": ">= 0.14.0" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmmirror.com/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.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/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/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmmirror.com/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "8.1.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmmirror.com/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/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-equal": { - "version": "1.2.5", - "resolved": "https://registry.npmmirror.com/path-equal/-/path-equal-1.2.5.tgz", - "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/pseudo-localization": { - "version": "2.4.0", - "resolved": "https://registry.npmmirror.com/pseudo-localization/-/pseudo-localization-2.4.0.tgz", - "integrity": "sha512-ISYMOKY8+f+PmiXMFw2y6KLY74LBrv/8ml/VjjoVEV2k+MS+OJZz7ydciK5ntJwxPrKQPTU1+oXq9Mx2b0zEzg==", - "dev": true, - "dependencies": { - "flat": "^5.0.2", - "get-stdin": "^7.0.0", - "typescript": "^4.7.4", - "yargs": "^17.2.1" - }, - "bin": { - "pseudo-localization": "bin/pseudo-localize" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmmirror.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", - "dev": true - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/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/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typescript-json-schema": { - "version": "0.55.0", - "resolved": "https://registry.npmmirror.com/typescript-json-schema/-/typescript-json-schema-0.55.0.tgz", - "integrity": "sha512-BXaivYecUdiXWWNiUqXgY6A9cMWerwmhtO+lQE7tDZGs7Mf38sORDeQZugfYOZOHPZ9ulsD+w0LWjFDOQoXcwg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/node": "^16.9.2", - "glob": "^7.1.7", - "path-equal": "^1.1.2", - "safe-stable-stringify": "^2.2.0", - "ts-node": "^10.9.1", - "typescript": "~4.8.2", - "yargs": "^17.1.1" - }, - "bin": { - "typescript-json-schema": "bin/typescript-json-schema" - } - }, - "node_modules/typescript-json-schema/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript-json-schema/node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/vscode-prettier-config": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/vscode-prettier-config/-/vscode-prettier-config-1.0.0.tgz", - "integrity": "sha512-oS8jnKNCHW8D5hbxj3rk5jpbL1KQyqDB5WBb93E5P2jrwJKRXWYC5lxE5fEj5r9FRSuhOuElhzNB3+P9WuVCAw==", - "dev": true - }, - "node_modules/web-tree-sitter": { - "version": "0.20.8", - "resolved": "https://registry.npmmirror.com/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz", - "integrity": "sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==", - "dev": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmmirror.com/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/package.json b/package.json index 2d7f81566b0a5fcf0557799d3534ecc1c59b2f69..b51a653f3c0e15ebf1a134a930e3ffd7a175fe2f 100644 --- a/package.json +++ b/package.json @@ -1,152 +1,156 @@ { - "name": "rvportingtool", - "description": "%rvCodingAsst.package.description%", - "keywords": [ - "rvportingtool" - ], - "author": "tcse-iscas", - "license": "MulanPSL-2.0", - "version": "0.0.1", - "repository": { - "type": "git", - "url": "https://git.ldby.site:8443/iscas/rv-vsc-plugin" - }, - "main": "./client/out/client/src/extension", - "l10n": "./l10n", - "displayName": "RVPortingTool", - "publisher": "tcse-iscas", - "engines": { - "vscode": "^1.75.0" - }, - "categories": [ - "Other" - ], - "activationEvents": [ - "onStartupFinished", - "onLanguage:plaintext" - ], - "contributes": { - "configuration": { - "type": "object", - "title": "RVPortingTool", - "properties": { - "rvportingtool.maxNumberOfProblems": { - "scope": "resource", - "type": "number", - "default": 100, - "description": "%rvCodingAsst.config.maxNumberOfProblems%" - }, - "rvportingtool.logLevel": { - "scope": "window", - "type": "string", - "enum": [ - "off", - "info", - "verbose" - ], - "default": "info", - "description": "%rvCodingAsst.config.logLevel%" - }, - "rvportingtool.trace.server": { - "scope": "window", - "type": "string", - "enum": [ - "off", - "messages", - "verbose" - ], - "default": "messages", - "description": "%rvCodingAsst.config.trace.server%" - } - } + "name": "rvportingtool", + "description": "%rvCodingAsst.package.description%", + "keywords": [ + "rvportingtool" + ], + "author": "tcse-iscas", + "license": "MulanPSL-2.0", + "version": "0.0.1", + "repository": { + "type": "git", + "url": "https://git.ldby.site:8443/iscas/rv-vsc-plugin" + }, + "main": "./out/extension", + "l10n": "./l10n", + "displayName": "RVPortingTool", + "publisher": "tcse-iscas", + "engines": { + "vscode": "^1.75.0" + }, + "categories": [ + "Other" + ], + "activationEvents": [ + "onStartupFinished", + "onLanguage:plaintext" + ], + "contributes": { + "configuration": { + "type": "object", + "title": "RVPortingTool", + "properties": { + "rvportingtool.maxNumberOfProblems": { + "scope": "resource", + "type": "number", + "default": 100, + "description": "%rvCodingAsst.config.maxNumberOfProblems%" }, - "commands": [ - { - "command": "rvCodingAsst.reportManager.loadFromFile", - "title": "%rvCodingAsst.command.reportManager.loadFromFile%" - }, - { - "command": "rvCodingAsst.reportManager.exportReport", - "title": "%rvCodingAsst.command.reportManager.exportReport%" - }, - { - "command": "rvCodingAsst.reportManager.saveAllReportsCache", - "title": "%rvCodingAsst.command.reportManager.saveAllReportsCache%" - }, - { - "command": "rvCodingAsst.wikiHelper.openRule", - "title": "%rvCodingAsst.command.wikiHelper.openRule%" - } - ], - "viewsContainers": { - "panel": [ - { - "id": "rvCodingAsst-panel-container", - "title": "%rvCodingAsst.viewContainers.panel.title%", - "icon": "resources/dep.svg" - } - ], - "activitybar": [ - { - "id": "rvCodingAsst-suggestion-container", - "title": "%rvCodingAsst.viewContainers.activitybar.title%", - "icon": "resources/dep.svg" - } - ] + "rvportingtool.logLevel": { + "scope": "window", + "type": "string", + "enum": [ + "off", + "info", + "verbose" + ], + "default": "info", + "description": "%rvCodingAsst.config.logLevel%" }, - "views": { - "rvCodingAsst-panel-container": [ - { - "id": "rvCodingAsst.view.wiki", - "name": "%rvCodingAsst.view.wiki.name%", - "type": "webview", - "icon": "resources/dep.svg", - "contextualTitle": "%rvCodingAsst.view.wiki.contextualTitle%" - } - ], - "rvCodingAsst-suggestion-container": [ - { - "id": "rvCodingAsst.view.suggestion", - "name": "%rvCodingAsst.view.suggestion.name%", - "type": "webview", - "icon": "resources/dep.svg", - "contextualTitle": "%rvCodingAsst.view.suggestion.contextualTitle%" - } - ] + "rvportingtool.trace.server": { + "scope": "window", + "type": "string", + "enum": [ + "off", + "messages", + "verbose" + ], + "default": "messages", + "description": "%rvCodingAsst.config.trace.server%" } + } }, - "scripts": { - "vscode:prepublish": "npm run compile", - "precompile": "typescript-json-schema common/src/types/report.ts IReport --required -o resources/report_schema.json", - "compile": "tsc -b && node esbuild.js", - "prewatch": "typescript-json-schema common/src/types/report.ts IReport --required -o resources/report_schema.json", - "watch": "tsc -b -w", - "watch_esbuild": "node esbuild.js --watch", - "clean": "tsc -b --clean", - "pretest": "npm run compile && npm run lint", - "lint": "eslint ./client/src ./server/src ./common/src ./webview/src --ext ts,tsx", - "postinstall": "cd client && npm install && cd ../server && npm install && cd ../common && npm install && cd ../webview && npm install && cd ..", - "test": "node ./client/out/src/test/runTest", - "extract_l10n": "npx @vscode/l10n-dev export -o ./l10n ./client/src ./common/src && python ./scripts/merge_l10n.py" + "commands": [ + { + "command": "rvCodingAsst.reportManager.loadFromFile", + "title": "%rvCodingAsst.command.reportManager.loadFromFile%" + }, + { + "command": "rvCodingAsst.reportManager.exportReport", + "title": "%rvCodingAsst.command.reportManager.exportReport%" + }, + { + "command": "rvCodingAsst.reportManager.saveAllReportsCache", + "title": "%rvCodingAsst.command.reportManager.saveAllReportsCache%" + }, + { + "command": "rvCodingAsst.wikiHelper.openRule", + "title": "%rvCodingAsst.command.wikiHelper.openRule%" + } + ], + "viewsContainers": { + "panel": [ + { + "id": "rvCodingAsst-panel-container", + "title": "%rvCodingAsst.viewContainers.panel.title%", + "icon": "resources/dep.svg" + } + ], + "activitybar": [ + { + "id": "rvCodingAsst-suggestion-container", + "title": "%rvCodingAsst.viewContainers.activitybar.title%", + "icon": "resources/dep.svg" + } + ] }, - "devDependencies": { - "@types/glob": "^8.1.0", - "@types/mocha": "^10.0.1", - "@types/node": "16.x", - "@types/string-format": "^2.0.0", - "@types/vscode": "^1.75.0", - "@typescript-eslint/eslint-plugin": "^5.53.0", - "@typescript-eslint/parser": "^5.53.0", - "@vscode/l10n-dev": "^0.0.23", - "@vscode/test-electron": "^2.2.3", - "esbuild": "^0.16.17", - "esbuild-plugin-copy": "^2.1.1", - "eslint": "^8.34.0", - "glob": "^8.1.0", - "mocha": "^10.2.0", - "prettier": "2.8.4", - "typescript": "^4.9.5", - "typescript-json-schema": "^0.55.0", - "vscode-prettier-config": "^1.0.0" + "views": { + "rvCodingAsst-panel-container": [ + { + "id": "rvCodingAsst.view.wiki", + "name": "%rvCodingAsst.view.wiki.name%", + "type": "webview", + "icon": "resources/dep.svg", + "contextualTitle": "%rvCodingAsst.view.wiki.contextualTitle%" + } + ], + "rvCodingAsst-suggestion-container": [ + { + "id": "rvCodingAsst.view.suggestion", + "name": "%rvCodingAsst.view.suggestion.name%", + "type": "webview", + "icon": "resources/dep.svg", + "contextualTitle": "%rvCodingAsst.view.suggestion.contextualTitle%" + } + ] } + }, + "scripts": { + "postinstall": "cd client && pnpm install && cd ../server && pnpm install && cd ../common && pnpm install && cd ../webview && pnpm install && cd ..", + "vscode:prepublish": "pnpm run compile", + "precompile": "typescript-json-schema common/src/types/report.ts IReport --required -o resources/report_schema.json", + "compile": "tsc -b && node esbuild.js", + "prewatch": "typescript-json-schema common/src/types/report.ts IReport --required -o resources/report_schema.json", + "watch": "tsc -b -w", + "watch_esbuild": "node esbuild.js --watch", + "clean": "tsc -b --clean", + "pretest": "pnpm run compile && pnpm run lint", + "lint": "eslint ./client/src ./server/src ./common/src ./webview/src --ext ts,tsx,js", + "test": "node ./client/out/src/test/runTest", + "extract_l10n": "npx @vscode/l10n-dev export -o ./l10n ./client/src ./common/src && python ./scripts/merge_l10n.py" + }, + "devDependencies": { + "@types/glob": "^8.1.0", + "@types/mocha": "^10.0.7", + "@types/node": "~16.18.108", + "@types/string-format": "^2.0.3", + "@types/vscode": "^1.75.0", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "@vscode/l10n-dev": "^0.0.23", + "@vscode/test-electron": "^2.4.1", + "esbuild": "^0.16.17", + "esbuild-plugin-copy": "^2.1.1", + "eslint": "^8.57.0", + "eslint-plugin-license-header": "^0.6.1", + "glob": "^11.0.0", + "mocha": "^10.7.3", + "prettier": "2.8.4", + "typescript": "^4.9.5", + "typescript-json-schema": "^0.55.0", + "vscode-prettier-config": "^1.0.0" + }, + "dependencies": { + "@eslint/config-array": "^0.18.0" + } } diff --git a/package.nls.json b/package.nls.json index 92de91aa1a477abefd7187a8b8e9dfe42f29e02a..dcff2a93fcb26c06cd2aa8009062f2b78fabbd5a 100644 --- a/package.nls.json +++ b/package.nls.json @@ -1,16 +1,16 @@ { - "rvCodingAsst.package.description": "Software Porting Tool for RISC-V", - "rvCodingAsst.config.maxNumberOfProblems": "Controls the maximum number of problems produced by the server.", - "rvCodingAsst.config.logLevel": "Controls the log level of RVPortingTool.", - "rvCodingAsst.config.trace.server": "Set to trace to log the communication between VS Code and the language server.", - "rvCodingAsst.command.reportManager.loadFromFile": "RVPortingTool: Load Code Check Report", - "rvCodingAsst.command.reportManager.saveAllReportsCache": "RVPortingTool: Save All Reports Cache to Workspace", - "rvCodingAsst.command.reportManager.exportReport": "RVPortingTool: Export report to file", - "rvCodingAsst.command.wikiHelper.openRule": "RVPortingTool: Open Rule Definition in Wiki", - "rvCodingAsst.viewContainers.panel.title": "RVPortingTool", - "rvCodingAsst.viewContainers.activitybar.title": "RVPortingTool", - "rvCodingAsst.view.wiki.name": "RV Porting Wiki", - "rvCodingAsst.view.wiki.contextualTitle": "RVPortingTool", - "rvCodingAsst.view.suggestion.name": "Suggestion", - "rvCodingAsst.view.suggestion.contextualTitle": "RVPortingTool" + "rvCodingAsst.package.description": "Software Porting Tool for RISC-V", + "rvCodingAsst.config.maxNumberOfProblems": "Controls the maximum number of problems produced by the server.", + "rvCodingAsst.config.logLevel": "Controls the log level of RVPortingTool.", + "rvCodingAsst.config.trace.server": "Set to trace to log the communication between VS Code and the language server.", + "rvCodingAsst.command.reportManager.loadFromFile": "RVPortingTool: Load Code Check Report", + "rvCodingAsst.command.reportManager.saveAllReportsCache": "RVPortingTool: Save All Reports Cache to Workspace", + "rvCodingAsst.command.reportManager.exportReport": "RVPortingTool: Export report to file", + "rvCodingAsst.command.wikiHelper.openRule": "RVPortingTool: Open Rule Definition in Wiki", + "rvCodingAsst.viewContainers.panel.title": "RVPortingTool", + "rvCodingAsst.viewContainers.activitybar.title": "RVPortingTool", + "rvCodingAsst.view.wiki.name": "RV Porting Wiki", + "rvCodingAsst.view.wiki.contextualTitle": "RVPortingTool", + "rvCodingAsst.view.suggestion.name": "Suggestion", + "rvCodingAsst.view.suggestion.contextualTitle": "RVPortingTool" } diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 8bd4035c622443d704de5985c58a583029d142da..385ab17afbabec8314393e6161a2f17b89e0b03f 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -1,16 +1,16 @@ { - "rvCodingAsst.package.description": "RISC-V 架构迁移工具", - "rvCodingAsst.config.maxNumberOfProblems": "问题显示最大数量", - "rvCodingAsst.config.logLevel": "插件日志级别", - "rvCodingAsst.config.trace.server": "插件语言服务器日志级别", - "rvCodingAsst.command.reportManager.loadFromFile": "RVPortingTool: 加载代码扫描报告", - "rvCodingAsst.command.reportManager.saveAllReportsCache": "RVPortingTool: 保存所有报告 (缓存到工作区)", - "rvCodingAsst.command.reportManager.exportReport": "RVPortingTool: 导出报告文件", - "rvCodingAsst.command.wikiHelper.openRule": "RVPortingTool: 在 Wiki 中打开规则定义", - "rvCodingAsst.viewContainers.panel.title": "RVPortingTool", - "rvCodingAsst.viewContainers.activitybar.title": "RVPortingTool", - "rvCodingAsst.view.wiki.name": "迁移知识库", - "rvCodingAsst.view.wiki.contextualTitle": "RVPortingTool", - "rvCodingAsst.view.suggestion.name": "修改建议", - "rvCodingAsst.view.suggestion.contextualTitle": "RVPortingTool" + "rvCodingAsst.package.description": "RISC-V 架构迁移工具", + "rvCodingAsst.config.maxNumberOfProblems": "问题显示最大数量", + "rvCodingAsst.config.logLevel": "插件日志级别", + "rvCodingAsst.config.trace.server": "插件语言服务器日志级别", + "rvCodingAsst.command.reportManager.loadFromFile": "RVPortingTool: 加载代码扫描报告", + "rvCodingAsst.command.reportManager.saveAllReportsCache": "RVPortingTool: 保存所有报告 (缓存到工作区)", + "rvCodingAsst.command.reportManager.exportReport": "RVPortingTool: 导出报告文件", + "rvCodingAsst.command.wikiHelper.openRule": "RVPortingTool: 在 Wiki 中打开规则定义", + "rvCodingAsst.viewContainers.panel.title": "RVPortingTool", + "rvCodingAsst.viewContainers.activitybar.title": "RVPortingTool", + "rvCodingAsst.view.wiki.name": "迁移知识库", + "rvCodingAsst.view.wiki.contextualTitle": "RVPortingTool", + "rvCodingAsst.view.suggestion.name": "修改建议", + "rvCodingAsst.view.suggestion.contextualTitle": "RVPortingTool" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..68980b43d28a3eda954c055dee358c2f8aa2c2e6 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2463 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@eslint/config-array': + specifier: ^0.18.0 + version: 0.18.0 + devDependencies: + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + '@types/mocha': + specifier: ^10.0.7 + version: 10.0.7 + '@types/node': + specifier: ~16.18.108 + version: 16.18.108 + '@types/string-format': + specifier: ^2.0.3 + version: 2.0.3 + '@types/vscode': + specifier: ^1.75.0 + version: 1.75.0 + '@typescript-eslint/eslint-plugin': + specifier: ^5.62.0 + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/parser': + specifier: ^5.62.0 + version: 5.62.0(eslint@8.57.0)(typescript@4.9.5) + '@vscode/l10n-dev': + specifier: ^0.0.23 + version: 0.0.23 + '@vscode/test-electron': + specifier: ^2.4.1 + version: 2.4.1 + esbuild: + specifier: ^0.16.17 + version: 0.16.17 + esbuild-plugin-copy: + specifier: ^2.1.1 + version: 2.1.1(esbuild@0.16.17) + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-plugin-license-header: + specifier: ^0.6.1 + version: 0.6.1 + glob: + specifier: ^11.0.0 + version: 11.0.0 + mocha: + specifier: ^10.7.3 + version: 10.7.3 + prettier: + specifier: 2.8.4 + version: 2.8.4 + typescript: + specifier: ^4.9.5 + version: 4.9.5 + typescript-json-schema: + specifier: ^0.55.0 + version: 0.55.0 + vscode-prettier-config: + specifier: ^1.0.0 + version: 1.0.0 + +packages: + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@esbuild/android-arm64@0.16.17': + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.16.17': + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.16.17': + resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.16.17': + resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.16.17': + resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.16.17': + resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.16.17': + resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.16.17': + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.16.17': + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.16.17': + resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.16.17': + resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.16.17': + resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.16.17': + resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.16.17': + resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.16.17': + resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.16.17': + resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.16.17': + resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.16.17': + resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.16.17': + resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.16.17': + resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.16.17': + resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.16.17': + resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/glob@8.1.0': + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/mocha@10.0.7': + resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==} + + '@types/node@16.18.108': + resolution: {integrity: sha512-fj42LD82fSv6yN9C6Q4dzS+hujHj+pTv0IpRR3kI20fnYeS0ytBpjFO9OjmDowSPPt4lNKN46JLaKbCyP+BW2A==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/string-format@2.0.3': + resolution: {integrity: sha512-2BuDXYaQvSZR5XHlLJQ3KQ455NW+C1Mok0uOO6q8bnp97V/gtZbDEYy44kmu5Ng1U8wRtCSF/leREYVmH2vYmQ==} + + '@types/vscode@1.75.0': + resolution: {integrity: sha512-SAr0PoOhJS6FUq5LjNr8C/StBKALZwDVm3+U4pjF/3iYkt3GioJOPV/oB1Sf1l7lROe4TgrMyL5N1yaEgTWycw==} + + '@typescript-eslint/eslint-plugin@5.62.0': + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@5.62.0': + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/type-utils@5.62.0': + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vscode/l10n-dev@0.0.23': + resolution: {integrity: sha512-J8YhQey9b0d7oJv5xusTxgTNHXDGhQJf8NqIKyIlx4R7TXQ5Dgm9RVOR5w0EddUp54OZWstGVEJKGKIvKt2/Eg==} + hasBin: true + + '@vscode/test-electron@2.4.1': + resolution: {integrity: sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ==} + engines: {node: '>=16'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + engines: {node: '>=0.4.0'} + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge-json@1.5.0: + resolution: {integrity: sha512-jZRrDmBKjmGcqMFEUJ14FjMJwm05Qaked+1vxaALRtF0UAl7lPU8OLWXFxvoeg3jbQM249VPFVn8g2znaQkEtA==} + engines: {node: '>=4.0.0'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + esbuild-plugin-copy@2.1.1: + resolution: {integrity: sha512-Bk66jpevTcV8KMFzZI1P7MZKZ+uDcrZm2G2egZ2jNIvVnivDpodZI+/KnpL3Jnap0PBdIHU7HwFGB8r+vV5CVw==} + peerDependencies: + esbuild: '>= 0.14.0' + + esbuild@0.16.17: + resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-plugin-license-header@0.6.1: + resolution: {integrity: sha512-9aIz8q3OaMr1/uQmCGCWySjTs5nEXUJexNegz/8lluNcZbEl82Ag1Vyr1Hu3oIveRW1NbXDPs6nu4zu9mbrmWA==} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-stdin@7.0.0: + resolution: {integrity: sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==} + engines: {node: '>=8'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@11.0.0: + resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@4.0.1: + resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} + engines: {node: 20 || >=22} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-symbols@5.1.0: + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} + + lru-cache@11.0.0: + resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} + engines: {node: 20 || >=22} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mocha@10.7.3: + resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==} + engines: {node: '>= 14.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@7.0.1: + resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==} + engines: {node: '>=16'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-equal@1.2.5: + resolution: {integrity: sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@2.8.4: + resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} + engines: {node: '>=10.13.0'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + pseudo-localization@2.4.0: + resolution: {integrity: sha512-ISYMOKY8+f+PmiXMFw2y6KLY74LBrv/8ml/VjjoVEV2k+MS+OJZz7ydciK5ntJwxPrKQPTU1+oXq9Mx2b0zEzg==} + hasBin: true + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + requireindex@1.2.0: + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + stdin-discarder@0.1.0: + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@6.1.0: + resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} + engines: {node: '>=16'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typescript-json-schema@0.55.0: + resolution: {integrity: sha512-BXaivYecUdiXWWNiUqXgY6A9cMWerwmhtO+lQE7tDZGs7Mf38sORDeQZugfYOZOHPZ9ulsD+w0LWjFDOQoXcwg==} + hasBin: true + + typescript@4.8.4: + resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} + engines: {node: '>=4.2.0'} + hasBin: true + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + vscode-prettier-config@1.0.0: + resolution: {integrity: sha512-oS8jnKNCHW8D5hbxj3rk5jpbL1KQyqDB5WBb93E5P2jrwJKRXWYC5lxE5fEj5r9FRSuhOuElhzNB3+P9WuVCAw==} + + web-tree-sitter@0.20.8: + resolution: {integrity: sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + xml2js@0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@esbuild/android-arm64@0.16.17': + optional: true + + '@esbuild/android-arm@0.16.17': + optional: true + + '@esbuild/android-x64@0.16.17': + optional: true + + '@esbuild/darwin-arm64@0.16.17': + optional: true + + '@esbuild/darwin-x64@0.16.17': + optional: true + + '@esbuild/freebsd-arm64@0.16.17': + optional: true + + '@esbuild/freebsd-x64@0.16.17': + optional: true + + '@esbuild/linux-arm64@0.16.17': + optional: true + + '@esbuild/linux-arm@0.16.17': + optional: true + + '@esbuild/linux-ia32@0.16.17': + optional: true + + '@esbuild/linux-loong64@0.16.17': + optional: true + + '@esbuild/linux-mips64el@0.16.17': + optional: true + + '@esbuild/linux-ppc64@0.16.17': + optional: true + + '@esbuild/linux-riscv64@0.16.17': + optional: true + + '@esbuild/linux-s390x@0.16.17': + optional: true + + '@esbuild/linux-x64@0.16.17': + optional: true + + '@esbuild/netbsd-x64@0.16.17': + optional: true + + '@esbuild/openbsd-x64@0.16.17': + optional: true + + '@esbuild/sunos-x64@0.16.17': + optional: true + + '@esbuild/win32-arm64@0.16.17': + optional: true + + '@esbuild/win32-ia32@0.16.17': + optional: true + + '@esbuild/win32-x64@0.16.17': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} + + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.6(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.6(supports-color@8.1.1) + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.6(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/glob@8.1.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 16.18.108 + + '@types/json-schema@7.0.15': {} + + '@types/minimatch@5.1.2': {} + + '@types/mocha@10.0.7': {} + + '@types/node@16.18.108': {} + + '@types/semver@7.5.8': {} + + '@types/string-format@2.0.3': {} + + '@types/vscode@1.75.0': {} + + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + debug: 4.3.6(supports-color@8.1.1) + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare-lite: 1.4.0 + semver: 7.6.3 + tsutils: 3.21.0(typescript@4.9.5) + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5)': + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + debug: 4.3.6(supports-color@8.1.1) + eslint: 8.57.0 + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@4.9.5)': + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) + debug: 4.3.6(supports-color@8.1.1) + eslint: 8.57.0 + tsutils: 3.21.0(typescript@4.9.5) + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@5.62.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.6(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@4.9.5) + optionalDependencies: + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@4.9.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + eslint: 8.57.0 + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + '@vscode/l10n-dev@0.0.23': + dependencies: + deepmerge-json: 1.5.0 + glob: 8.1.0 + pseudo-localization: 2.4.0 + web-tree-sitter: 0.20.8 + xml2js: 0.4.23 + yargs: 17.7.2 + + '@vscode/test-electron@2.4.1': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + jszip: 3.10.1 + ora: 7.0.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn-walk@8.3.3: + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + agent-base@7.1.1: + dependencies: + debug: 4.3.6(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-colors@4.1.3: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + argparse@2.0.1: {} + + array-union@2.1.0: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + binary-extensions@2.3.0: {} + + bl@5.1.0: + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + callsites@3.1.0: {} + + camelcase@6.3.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-spinners@2.9.2: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + core-util-is@1.0.3: {} + + create-require@1.1.1: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.3.6(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + deep-is@0.1.4: {} + + deepmerge-json@1.5.0: {} + + diff@4.0.2: {} + + diff@5.2.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + eastasianwidth@0.2.0: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + esbuild-plugin-copy@2.1.1(esbuild@0.16.17): + dependencies: + chalk: 4.1.2 + chokidar: 3.6.0 + esbuild: 0.16.17 + fs-extra: 10.1.0 + globby: 11.1.0 + + esbuild@0.16.17: + optionalDependencies: + '@esbuild/android-arm': 0.16.17 + '@esbuild/android-arm64': 0.16.17 + '@esbuild/android-x64': 0.16.17 + '@esbuild/darwin-arm64': 0.16.17 + '@esbuild/darwin-x64': 0.16.17 + '@esbuild/freebsd-arm64': 0.16.17 + '@esbuild/freebsd-x64': 0.16.17 + '@esbuild/linux-arm': 0.16.17 + '@esbuild/linux-arm64': 0.16.17 + '@esbuild/linux-ia32': 0.16.17 + '@esbuild/linux-loong64': 0.16.17 + '@esbuild/linux-mips64el': 0.16.17 + '@esbuild/linux-ppc64': 0.16.17 + '@esbuild/linux-riscv64': 0.16.17 + '@esbuild/linux-s390x': 0.16.17 + '@esbuild/linux-x64': 0.16.17 + '@esbuild/netbsd-x64': 0.16.17 + '@esbuild/openbsd-x64': 0.16.17 + '@esbuild/sunos-x64': 0.16.17 + '@esbuild/win32-arm64': 0.16.17 + '@esbuild/win32-ia32': 0.16.17 + '@esbuild/win32-x64': 0.16.17 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-plugin-license-header@0.6.1: + dependencies: + requireindex: 1.2.0 + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.11.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.6(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 3.4.3 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flat@5.0.2: {} + + flatted@3.3.1: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + get-caller-file@2.0.5: {} + + get-stdin@7.0.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@11.0.0: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.0.1 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 2.0.0 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + he@1.2.0: {} + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.1 + debug: 4.3.6(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.5: + dependencies: + agent-base: 7.1.1 + debug: 4.3.6(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + immediate@3.0.6: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@2.0.0: {} + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@2.1.0: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + jackspeak@4.0.1: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-symbols@5.1.0: + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + + lru-cache@11.0.0: {} + + make-error@1.3.6: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-fn@2.1.0: {} + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + mocha@10.7.3: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.3.6(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 8.1.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + natural-compare-lite@1.4.0: {} + + natural-compare@1.4.0: {} + + normalize-path@3.0.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@7.0.1: + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 1.3.0 + log-symbols: 5.1.0 + stdin-discarder: 0.1.0 + string-width: 6.1.0 + strip-ansi: 7.1.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.0: {} + + pako@1.0.11: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-equal@1.2.5: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.0.0 + minipass: 7.1.2 + + path-type@4.0.0: {} + + picomatch@2.3.1: {} + + prelude-ls@1.2.1: {} + + prettier@2.8.4: {} + + process-nextick-args@2.0.1: {} + + pseudo-localization@2.4.0: + dependencies: + flat: 5.0.2 + get-stdin: 7.0.0 + typescript: 4.9.5 + yargs: 17.7.2 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + require-directory@2.1.1: {} + + requireindex@1.2.0: {} + + resolve-from@4.0.0: {} + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-stable-stringify@2.5.0: {} + + sax@1.4.1: {} + + semver@7.6.3: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + setimmediate@1.0.5: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + stdin-discarder@0.1.0: + dependencies: + bl: 5.1.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@6.1.0: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 10.4.0 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-table@0.2.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-node@10.9.2(@types/node@16.18.108)(typescript@4.8.4): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 16.18.108 + acorn: 8.12.1 + acorn-walk: 8.3.3 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.8.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@1.14.1: {} + + tsutils@3.21.0(typescript@4.9.5): + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + typescript-json-schema@0.55.0: + dependencies: + '@types/json-schema': 7.0.15 + '@types/node': 16.18.108 + glob: 7.2.3 + path-equal: 1.2.5 + safe-stable-stringify: 2.5.0 + ts-node: 10.9.2(@types/node@16.18.108)(typescript@4.8.4) + typescript: 4.8.4 + yargs: 17.7.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + + typescript@4.8.4: {} + + typescript@4.9.5: {} + + universalify@2.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + v8-compile-cache-lib@3.0.1: {} + + vscode-prettier-config@1.0.0: {} + + web-tree-sitter@0.20.8: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + workerpool@6.5.1: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + xml2js@0.4.23: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + + y18n@5.0.8: {} + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/resources/license-header.ts b/resources/license-header.ts new file mode 100644 index 0000000000000000000000000000000000000000..ed641d1755ffe41754e964acebf0f87c75e79d23 --- /dev/null +++ b/resources/license-header.ts @@ -0,0 +1,11 @@ +/*************************************************************************************** + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. + * RVPortingTool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + **************************************************************************************/ diff --git a/scripts/merge_l10n.py b/scripts/merge_l10n.py index ac471435449392a1376860f73d3e083e928a97c1..ae67356164ca88bc5b7fb15e3134f506b47d3191 100644 --- a/scripts/merge_l10n.py +++ b/scripts/merge_l10n.py @@ -15,7 +15,7 @@ def merge_l10n(base_dir: str): with open(bd_path, 'r', encoding='utf-8') as f: bd_base: Dict[str, str] = json.load(f) with open(bd_path, 'w', encoding='utf-8') as f: - json.dump(bd_base, f, indent=4, sort_keys=True, ensure_ascii=False) + json.dump(bd_base, f, indent=2, sort_keys=True, ensure_ascii=False) for f_item in os.listdir(base_dir): if not f_item.startswith('bundle.l10n') or f_item == 'bundle.l10n.json': @@ -39,7 +39,7 @@ def merge_l10n(base_dir: str): # Save merged result with open(f_path, 'w', encoding='utf-8') as f: - json.dump(bd_current, f, indent=4, sort_keys=True, ensure_ascii=False) + json.dump(bd_current, f, indent=2, sort_keys=True, ensure_ascii=False) print("Updated {}".format(f_item)) diff --git a/server/package-lock.json b/server/package-lock.json deleted file mode 100644 index 8b37f1fcca579610757a36d64a801d950d8b45a9..0000000000000000000000000000000000000000 --- a/server/package-lock.json +++ /dev/null @@ -1,357 +0,0 @@ -{ - "name": "rvportingtool-server", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "rvportingtool-server", - "version": "0.0.1", - "license": "MulanPSL-2.0", - "dependencies": { - "ajv": "^8.12.0", - "mkdirp": "^2.1.5", - "string-format": "^2.0.0", - "vscode-languageserver": "^8.1.0", - "vscode-languageserver-textdocument": "^1.0.8", - "vscode-uri": "^3.0.7" - }, - "devDependencies": { - "@types/vscode": "^1.75.0", - "@vscode/test-electron": "^2.1.2", - "vscode-languageserver-types": "^3.17.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/vscode": { - "version": "1.76.0", - "resolved": "https://registry.npmmirror.com/@types/vscode/-/vscode-1.76.0.tgz", - "integrity": "sha512-CQcY3+Fe5hNewHnOEAVYj4dd1do/QHliXaknAEYSXx2KEHUzFibDZSKptCon+HPgK55xx20pR+PBJjf0MomnBA==", - "dev": true - }, - "node_modules/@vscode/test-electron": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/@vscode/test-electron/-/test-electron-2.3.0.tgz", - "integrity": "sha512-fwzA9RtazH1GT/sckYlbxu6t5e4VaMXwCVtyLv4UAG0hP6NTfnMaaG25XCfWqlVwFhBMcQXHBCy5dmz2eLUnkw==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "jszip": "^3.10.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp": { - "version": "2.1.5", - "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-2.1.5.tgz", - "integrity": "sha512-jbjfql+shJtAPrFoKxHOXip4xS+kul9W3OzfzzrqueWK2QMGon2bFH2opl6W9EagBThjEz+iysyi/swOoVfB/w==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/vscode-jsonrpc": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", - "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/vscode-languageserver": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", - "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", - "dependencies": { - "vscode-languageserver-protocol": "3.17.3" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.3", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", - "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", - "dependencies": { - "vscode-jsonrpc": "8.1.0", - "vscode-languageserver-types": "3.17.3" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", - "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.3", - "resolved": "https://registry.npmmirror.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", - "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" - }, - "node_modules/vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } -} diff --git a/server/package.json b/server/package.json index 922bb5290b674b11bdd7ed820ff22804ad27ac70..5f7f5cc83639f2b3a4cfaf193e92ae69cff08bd7 100644 --- a/server/package.json +++ b/server/package.json @@ -1,25 +1,25 @@ { - "name": "rvportingtool-server", - "description": "VSCode Language Server Part of Software Porting Tool for RISC-V", - "author": "tcse-iscas", - "license": "MulanPSL-2.0", - "version": "0.0.1", - "publisher": "tcse-iscas", - "l10n": "../l10n", - "engines": { - "node": "*" - }, - "dependencies": { - "ajv": "^8.12.0", - "mkdirp": "^2.1.5", - "string-format": "^2.0.0", - "vscode-languageserver": "^8.1.0", - "vscode-languageserver-textdocument": "^1.0.8", - "vscode-uri": "^3.0.7" - }, - "devDependencies": { - "@types/vscode": "^1.75.0", - "@vscode/test-electron": "^2.1.2", - "vscode-languageserver-types": "^3.17.3" - } + "name": "rvportingtool-server", + "description": "VSCode Language Server Part of Software Porting Tool for RISC-V", + "author": "tcse-iscas", + "license": "MulanPSL-2.0", + "version": "0.0.1", + "publisher": "tcse-iscas", + "l10n": "../l10n", + "engines": { + "node": "*" + }, + "dependencies": { + "ajv": "^8.12.0", + "mkdirp": "^2.1.5", + "string-format": "^2.0.0", + "vscode-languageserver": "^8.1.0", + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-uri": "^3.0.7" + }, + "devDependencies": { + "@types/vscode": "^1.75.0", + "@vscode/test-electron": "^2.1.2", + "vscode-languageserver-types": "^3.17.3" + } } diff --git a/server/pnpm-lock.yaml b/server/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..abee8700e849f290086e4134362ca81a6469ce2a --- /dev/null +++ b/server/pnpm-lock.yaml @@ -0,0 +1,309 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + ajv: + specifier: ^8.12.0 + version: 8.12.0 + mkdirp: + specifier: ^2.1.5 + version: 2.1.5 + string-format: + specifier: ^2.0.0 + version: 2.0.0 + vscode-languageserver: + specifier: ^8.1.0 + version: 8.1.0 + vscode-languageserver-textdocument: + specifier: ^1.0.8 + version: 1.0.8 + vscode-uri: + specifier: ^3.0.7 + version: 3.0.7 + devDependencies: + '@types/vscode': + specifier: ^1.75.0 + version: 1.76.0 + '@vscode/test-electron': + specifier: ^2.1.2 + version: 2.3.0 + vscode-languageserver-types: + specifier: ^3.17.3 + version: 3.17.3 + +packages: + + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + '@types/vscode@1.76.0': + resolution: {integrity: sha512-CQcY3+Fe5hNewHnOEAVYj4dd1do/QHliXaknAEYSXx2KEHUzFibDZSKptCon+HPgK55xx20pR+PBJjf0MomnBA==} + + '@vscode/test-electron@2.3.0': + resolution: {integrity: sha512-fwzA9RtazH1GT/sckYlbxu6t5e4VaMXwCVtyLv4UAG0hP6NTfnMaaG25XCfWqlVwFhBMcQXHBCy5dmz2eLUnkw==} + engines: {node: '>=16'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + mkdirp@2.1.5: + resolution: {integrity: sha512-jbjfql+shJtAPrFoKxHOXip4xS+kul9W3OzfzzrqueWK2QMGon2bFH2opl6W9EagBThjEz+iysyi/swOoVfB/w==} + engines: {node: '>=10'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + semver@7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} + hasBin: true + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + string-format@2.0.0: + resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vscode-jsonrpc@8.1.0: + resolution: {integrity: sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.3: + resolution: {integrity: sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==} + + vscode-languageserver-textdocument@1.0.8: + resolution: {integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==} + + vscode-languageserver-types@3.17.3: + resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} + + vscode-languageserver@8.1.0: + resolution: {integrity: sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==} + hasBin: true + + vscode-uri@3.0.7: + resolution: {integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + +snapshots: + + '@tootallnate/once@1.1.2': {} + + '@types/vscode@1.76.0': {} + + '@vscode/test-electron@2.3.0': + dependencies: + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + jszip: 3.10.1 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + + agent-base@6.0.2: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + core-util-is@1.0.3: {} + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + fast-deep-equal@3.1.3: {} + + http-proxy-agent@4.0.1: + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + immediate@3.0.6: {} + + inherits@2.0.4: {} + + isarray@1.0.0: {} + + json-schema-traverse@1.0.0: {} + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + mkdirp@2.1.5: {} + + ms@2.1.2: {} + + pako@1.0.11: {} + + process-nextick-args@2.0.1: {} + + punycode@2.3.0: {} + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + require-from-string@2.0.2: {} + + safe-buffer@5.1.2: {} + + semver@7.3.8: + dependencies: + lru-cache: 6.0.0 + + setimmediate@1.0.5: {} + + string-format@2.0.0: {} + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.0 + + util-deprecate@1.0.2: {} + + vscode-jsonrpc@8.1.0: {} + + vscode-languageserver-protocol@3.17.3: + dependencies: + vscode-jsonrpc: 8.1.0 + vscode-languageserver-types: 3.17.3 + + vscode-languageserver-textdocument@1.0.8: {} + + vscode-languageserver-types@3.17.3: {} + + vscode-languageserver@8.1.0: + dependencies: + vscode-languageserver-protocol: 3.17.3 + + vscode-uri@3.0.7: {} + + yallist@4.0.0: {} diff --git a/server/src/docCacheManager.ts b/server/src/docCacheManager.ts index 09c5829d08c5dd7b60f33d4e94180e50f489c269..0e4007a3c7aa3575c804ab3facfda11f660f357c 100644 --- a/server/src/docCacheManager.ts +++ b/server/src/docCacheManager.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Server Documents Cache Manager for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 17, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as lsp from "vscode-languageserver/node"; @@ -23,113 +25,124 @@ import { TextDocumentChangeEvent } from "vscode"; const logger = ServerLogger.getLogger("DocumentsCacheManager"); export class DocumentsCacheManager { - /** Singleton instance */ - private static _instance: DocumentsCacheManager; + /** Singleton instance */ + private static _instance: DocumentsCacheManager; - /** Documents Manager */ - private _documents: lsp.TextDocuments; + /** Documents Manager */ + private _documents: lsp.TextDocuments; - /** Documents Cache Map */ - private _cacheMap: Map; + /** Documents Cache Map */ + private _cacheMap: Map; - /** - * Whether use lazy mode or not. - * - * In lazy mode, the cache won't update automatically when - * documents.onDidChangeContent(). - */ - private _isLazy: boolean; + /** + * Whether use lazy mode or not. + * + * In lazy mode, the cache won't update automatically when + * documents.onDidChangeContent(). + */ + private _isLazy: boolean; - private constructor(documents: lsp.TextDocuments, isLazy?: boolean) { - this._documents = documents; - this._cacheMap = new Map(); - this._isLazy = isLazy ? isLazy : false; - } + private constructor(documents: lsp.TextDocuments, isLazy?: boolean) { + this._documents = documents; + this._cacheMap = new Map(); + this._isLazy = isLazy ? isLazy : false; + } - public static getInstance() { - if (!this._instance) { - const msg = "DocumentsCacheManager has not been initialized yet"; - logger.error(msg); - throw new Error(msg); - } - return this._instance; + public static getInstance() { + if (!this._instance) { + const msg = "DocumentsCacheManager has not been initialized yet"; + logger.error(msg); + throw new Error(msg); } + return this._instance; + } - public static init(documents: lsp.TextDocuments, isLazy?: boolean) { - this._instance = new DocumentsCacheManager(documents, isLazy); - documents.onDidOpen((e) => { - this._instance.update(e.document.uri); - }); - documents.onDidClose((e) => { - this._instance.remove(e.document.uri); - }); - documents.onDidSave((e) => { - this._instance.update(e.document.uri); - }); - if (!isLazy) { - documents.onDidChangeContent((e) => { - this._instance.update(e.document.uri); - }); - } - logger.debug("init: finished, isLazy = ".concat(this._instance._isLazy.toString())); - return this._instance; + public static init(documents: lsp.TextDocuments, isLazy?: boolean) { + this._instance = new DocumentsCacheManager(documents, isLazy); + documents.onDidOpen((e) => { + this._instance.update(e.document.uri); + }); + documents.onDidClose((e) => { + this._instance.remove(e.document.uri); + }); + documents.onDidSave((e) => { + this._instance.update(e.document.uri); + }); + if (!isLazy) { + documents.onDidChangeContent((e) => { + this._instance.update(e.document.uri); + }); } + logger.debug("init: finished, isLazy = ".concat(this._instance._isLazy.toString())); + return this._instance; + } - public get(docUri: string) { - docUri = docUri.toString(); - return this._cacheMap.get(docUri.toString()); - } + public get(docUri: string) { + docUri = docUri.toString(); + return this._cacheMap.get(docUri.toString()); + } - public clone(docOrDocUri: string | TextDocument) { - let document: TextDocument | undefined; - if (typeof docOrDocUri === "string" || docOrDocUri.uri === undefined) { - const docUri = docOrDocUri.toString(); - document = this._documents.get(docUri); - if (!document) { - return; - } - } else { - document = docOrDocUri; - } - return TextDocument.create(document.uri, document.languageId, document.version, document.getText()); + public clone(docOrDocUri: string | TextDocument) { + let document: TextDocument | undefined; + if (typeof docOrDocUri === "string" || docOrDocUri.uri === undefined) { + const docUri = docOrDocUri.toString(); + document = this._documents.get(docUri); + if (!document) { + return; + } + } else { + document = docOrDocUri; } + return TextDocument.create( + document.uri, + document.languageId, + document.version, + document.getText() + ); + } - public update(docUri: string, updEvent?: TextDocumentContentChangeEvent | TextDocumentContentChangeEvent[]) { - docUri = docUri.toString(); - let doc = this._cacheMap.get(docUri); - if (!doc) { - doc = this.clone(docUri); - if (!doc) { - return; - } - this._cacheMap.set(docUri, doc); - logger.debug("update: created: ".concat(docUri)); - } else { - const document = this._documents.get(docUri); - if (!document) { - return; - } - let updEvents: TextDocumentContentChangeEvent[]; - if (updEvent) { - updEvents = Array.isArray(updEvent) ? updEvent : [updEvent]; - } else { - updEvents = [ - { - range: { start: { line: 0, character: 0 }, end: { line: doc.lineCount + 1, character: 0 } }, - text: document.getText(), - }, - ]; - } - TextDocument.update(doc, updEvents, document.version); - logger.debug("update: updated: ".concat(docUri)); - } + public update( + docUri: string, + updEvent?: TextDocumentContentChangeEvent | TextDocumentContentChangeEvent[] + ) { + docUri = docUri.toString(); + let doc = this._cacheMap.get(docUri); + if (!doc) { + doc = this.clone(docUri); + if (!doc) { + return; + } + this._cacheMap.set(docUri, doc); + logger.debug("update: created: ".concat(docUri)); + } else { + const document = this._documents.get(docUri); + if (!document) { + return; + } + let updEvents: TextDocumentContentChangeEvent[]; + if (updEvent) { + updEvents = Array.isArray(updEvent) ? updEvent : [updEvent]; + } else { + updEvents = [ + { + range: { + start: { line: 0, character: 0 }, + end: { line: doc.lineCount + 1, character: 0 }, + }, + text: document.getText(), + }, + ]; + } + TextDocument.update(doc, updEvents, document.version); + logger.debug("update: updated: ".concat(docUri)); } + } - public remove(docUri: string) { - docUri = docUri.toString(); - // Remove text cache - if (this._cacheMap.has(docUri)) { - this._cacheMap.delete(docUri); - } + public remove(docUri: string) { + docUri = docUri.toString(); + // Remove text cache + if (this._cacheMap.has(docUri)) { + this._cacheMap.delete(docUri); } + } } diff --git a/server/src/docSettingManager.ts b/server/src/docSettingManager.ts index 2d56b721c6e6a815512c3dc20eeed12e002d865d..c574c116c54485793a3d8ae0c377b06089c89cab 100644 --- a/server/src/docSettingManager.ts +++ b/server/src/docSettingManager.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Server Documents Setting Manager for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 16, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as lsp from "vscode-languageserver/node"; @@ -29,127 +31,127 @@ const logger = ServerLogger.getLogger("documentsSettingManager"); * @template T Configuration class */ export class DocumentsSettingManager { - /** Single instance of DocumentsSettingManager */ - private static _instance: DocumentsSettingManager; - - /** Setting section name */ - private _sectionName: string; - - /** Global settings (with default values) */ - private _globalSettings: T; - - /** Language Server Connection */ - private _connection: lsp.Connection; - - /** Language Server Documents Manager */ - private _documents: lsp.TextDocuments; - - /** Language Client Capabilities */ - private _clientCapabilities: ClientCapabilities; - - /** Documents Setting Map */ - private _documentsSetting: Map>; - - /** - * Constructor - * - * @param connection Language Server Connection - * @param documents Language Server Documents Manager - * @param clientCapabilities Client Capabilities - */ - private constructor( - connection: lsp.Connection, - documents: lsp.TextDocuments, - clientCapabilities: ClientCapabilities, - sectionName: string, - defaultSettings: T - ) { - this._connection = connection; - this._documents = documents; - this._clientCapabilities = clientCapabilities; - this._sectionName = sectionName; - this._globalSettings = defaultSettings; - this._documentsSetting = new Map(); - - // Register onDidClose handler - this._documents.onDidClose((e) => { - this.removeDocumentSettings(e.document.uri); - }); - } + /** Single instance of DocumentsSettingManager */ + private static _instance: DocumentsSettingManager; - /** - * Initialize Documents Setting Manager Single Instance - * - * @param connection Language Server Connection - * @param documents Language Server Text Documents Manager - * @param clientCapabilities Language Client Capabilities - * @param sectionName Documents Setting Section Name - * @param defaultSettings Default Settings - * @return Documents Setting Manager - */ - public static init( - connection: lsp.Connection, - documents: lsp.TextDocuments, - clientCapabilities: ClientCapabilities, - sectionName: string, - defaultSettings: T - ): DocumentsSettingManager { - this._instance = new DocumentsSettingManager( - connection, - documents, - clientCapabilities, - sectionName, - defaultSettings - ); - logger.debug("init: finished"); - return this._instance; - } + /** Setting section name */ + private _sectionName: string; - /** - * Get Documents Setting Manager Single Instance - * - * @param connection Language Server Connection - * @param documents Language Server Text Documents Manager - * @return Documents Setting Manager - */ - public static getInstance(): DocumentsSettingManager { - if (!this._instance) { - const msg = "DocumentsSettingManager has not been initialized yet"; - logger.error(msg); - throw new Error(msg); - } - return >this._instance; - } + /** Global settings (with default values) */ + private _globalSettings: T; + + /** Language Server Connection */ + private _connection: lsp.Connection; - /** - * Get Plugin Settings by Document URI - * - * @param docUri - * @returns - */ - public getDocumentSettings(docUri: string): Thenable { - if (!this._clientCapabilities.hasConfigurationCapability) { - return Promise.resolve(this._globalSettings); - } - let result = this._documentsSetting.get(docUri); - if (!result) { - result = this._connection.workspace.getConfiguration({ - scopeUri: docUri, - section: this._sectionName, - }); - this._documentsSetting.set(docUri, result); - logger.debug("getDocumentSettings: ".concat(docUri)); - } - return result; + /** Language Server Documents Manager */ + private _documents: lsp.TextDocuments; + + /** Language Client Capabilities */ + private _clientCapabilities: ClientCapabilities; + + /** Documents Setting Map */ + private _documentsSetting: Map>; + + /** + * Constructor + * + * @param connection Language Server Connection + * @param documents Language Server Documents Manager + * @param clientCapabilities Client Capabilities + */ + private constructor( + connection: lsp.Connection, + documents: lsp.TextDocuments, + clientCapabilities: ClientCapabilities, + sectionName: string, + defaultSettings: T + ) { + this._connection = connection; + this._documents = documents; + this._clientCapabilities = clientCapabilities; + this._sectionName = sectionName; + this._globalSettings = defaultSettings; + this._documentsSetting = new Map(); + + // Register onDidClose handler + this._documents.onDidClose((e) => { + this.removeDocumentSettings(e.document.uri); + }); + } + + /** + * Initialize Documents Setting Manager Single Instance + * + * @param connection Language Server Connection + * @param documents Language Server Text Documents Manager + * @param clientCapabilities Language Client Capabilities + * @param sectionName Documents Setting Section Name + * @param defaultSettings Default Settings + * @return Documents Setting Manager + */ + public static init( + connection: lsp.Connection, + documents: lsp.TextDocuments, + clientCapabilities: ClientCapabilities, + sectionName: string, + defaultSettings: T + ): DocumentsSettingManager { + this._instance = new DocumentsSettingManager( + connection, + documents, + clientCapabilities, + sectionName, + defaultSettings + ); + logger.debug("init: finished"); + return this._instance; + } + + /** + * Get Documents Setting Manager Single Instance + * + * @param connection Language Server Connection + * @param documents Language Server Text Documents Manager + * @return Documents Setting Manager + */ + public static getInstance(): DocumentsSettingManager { + if (!this._instance) { + const msg = "DocumentsSettingManager has not been initialized yet"; + logger.error(msg); + throw new Error(msg); } + return >this._instance; + } - /** - * Remove document settings - * - * @param docUri - */ - public removeDocumentSettings(docUri: string) { - this._documentsSetting.delete(docUri); - logger.debug("removeDocumentSettings: removed: ".concat(docUri)); + /** + * Get Plugin Settings by Document URI + * + * @param docUri + * @returns + */ + public getDocumentSettings(docUri: string): Thenable { + if (!this._clientCapabilities.hasConfigurationCapability) { + return Promise.resolve(this._globalSettings); } + let result = this._documentsSetting.get(docUri); + if (!result) { + result = this._connection.workspace.getConfiguration({ + scopeUri: docUri, + section: this._sectionName, + }); + this._documentsSetting.set(docUri, result); + logger.debug("getDocumentSettings: ".concat(docUri)); + } + return result; + } + + /** + * Remove document settings + * + * @param docUri + */ + public removeDocumentSettings(docUri: string) { + this._documentsSetting.delete(docUri); + logger.debug("removeDocumentSettings: removed: ".concat(docUri)); + } } diff --git a/server/src/reportManager.ts b/server/src/reportManager.ts index 5e554516196a12124a1f4e0dc08d74fe988b430a..4bfdc362ce3034142f7c11b36ca3887361abb1af 100644 --- a/server/src/reportManager.ts +++ b/server/src/reportManager.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,381 +8,408 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Server Report Manager for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 16, 2023 + * liccc + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as fs from "fs"; -import * as strFormat from "string-format"; import mkdirp from "mkdirp"; import { IReport } from "../../common/src/types/report"; import { ReportMeta } from "./types/reportMeta"; -import { ReportMgrLoadError, ReportMgrLoadErrorType, ReportMgrSaveError } from "../../common/src/types/reportManager"; +import { + ReportMgrLoadError, + ReportMgrLoadErrorType, + ReportMgrSaveError, +} from "../../common/src/types/reportManager"; import { ReportMgrLoadParams, ReportMgrSaveParams } from "../../common/src/types/reportManager"; import { ServerLogger } from "./utils/log"; import { TextDocChangeParams, updateReportByTextDocumentChange } from "./reportTransformer"; import { URI } from "vscode-uri"; import Ajv, * as ajv from "ajv"; import path = require("path"); +import strFormat = require("string-format"); const logger = ServerLogger.getLogger("reportMgr"); export class ReportManager { - /** 代码扫描报告 */ - private _reportSchema?: ajv.JSONSchemaType; + /** 代码扫描报告 */ + private _reportSchema?: ajv.JSONSchemaType; - /** 代码扫描报告 JSON Schema Validator */ - private _reportValidator?: ajv.ValidateFunction; + /** 代码扫描报告 JSON Schema Validator */ + private _reportValidator?: ajv.ValidateFunction; - /** - * 所有 workspace 对应的报告元数据 - * - * key 为工作区的 Uri 文本 - */ - private _reportMetaMap: Map; + /** + * 所有 workspace 对应的报告元数据 + * + * key 为工作区的 Uri 文本 + */ + private _reportMetaMap: Map; - constructor() { - this._reportMetaMap = new Map(); - } + constructor() { + this._reportMetaMap = new Map(); + } - /** - * 加载报告 JSON Schema 配置文件 - * - * @param filePath 报告 JSON Schema 路径 - */ - public loadSchema(filePath: string): boolean { - if (!fs.existsSync(filePath)) { - logger.error(strFormat("Report schema not exists: {0}", filePath)); - return false; - } - this._reportSchema = >JSON.parse( - fs.readFileSync(filePath, { - encoding: "utf-8", - }) - ); - this._reportValidator = new Ajv().compile(this._reportSchema); - logger.debug("loadSchema: finished creating report JSON schema validator"); - return true; + /** + * 加载报告 JSON Schema 配置文件 + * + * @param filePath 报告 JSON Schema 路径 + */ + public loadSchema(filePath: string): boolean { + if (!fs.existsSync(filePath)) { + logger.error(strFormat("Report schema not exists: {0}", filePath)); + return false; } + this._reportSchema = >JSON.parse( + fs.readFileSync(filePath, { + encoding: "utf-8", + }) + ); + this._reportValidator = new Ajv().compile(this._reportSchema); + logger.debug("loadSchema: finished creating report JSON schema validator"); + return true; + } - /** - * 加载报告 - * - * @param params 报告加载参数 - */ - public loadReport(params: ReportMgrLoadParams): IReport | ReportMgrLoadError { - const reportUri = URI.parse(params.reportUri); - const workspaceUri = URI.parse(params.workspaceUri); - - // 目前仅支持读取本地文件 - if (reportUri.scheme !== "file") { - logger.error("loadReport: unsupported scheme: ".concat(reportUri.scheme)); - return { - loadParams: params, - retry: true, - }; - } + /** + * 加载报告 + * + * @param params 报告加载参数 + */ + public loadReport(params: ReportMgrLoadParams): IReport | ReportMgrLoadError { + const reportUri = URI.parse(params.reportUri); + const workspaceUri = URI.parse(params.workspaceUri); - // 尝试读取报告对象 - const reportObj = this.loadFromFile(reportUri.fsPath); - if (typeof reportObj === "string") { - // 返回值为字符串,表示读取失败 - logger.error(strFormat("loadReport: {0}: {1}", reportObj, reportUri.toString())); - return { - loadParams: params, - reason: reportObj, - retry: true, - }; - } + // 目前仅支持读取本地文件 + if (reportUri.scheme !== "file") { + logger.error("loadReport: unsupported scheme: ".concat(reportUri.scheme)); + return { + loadParams: params, + retry: true, + }; + } - // 检查是否已有读入的报告,如有则打印日志提示 - const checkRes = this.checkAndSaveNewerReport(workspaceUri.toString(), reportObj); - if (typeof checkRes === "boolean") { - if (checkRes === false && !params.reloadConfirm) { - // 覆盖检查在 reportManagerServer 实现,这里理论上不可能出现 - logger.error("loadReport: found current report, but reloadConfirm is false"); - return { - loadParams: params, - retry: false, - }; - } - logger.info(strFormat("loadReport: discarded current report in [{0}]", workspaceUri.toString())); - } else { - logger.warn(strFormat("loadReport: Loaded report for [{0}], but saveCacheError", workspaceUri)); - return { - loadParams: params, - reason: "saveCacheError", - retry: false, - }; - } - logger.info( - strFormat("Loaded report for [{0}], lastUpdTimestamp = {1}", workspaceUri, reportObj.timestamp.toString()) - ); - return reportObj; + // 尝试读取报告对象 + const reportObj = this.loadFromFile(reportUri.fsPath); + if (typeof reportObj === "string") { + // 返回值为字符串,表示读取失败 + logger.error(strFormat("loadReport: {0}: {1}", reportObj, reportUri.toString())); + return { + loadParams: params, + reason: reportObj, + retry: true, + }; } - /** - * 加载工作区中缓存的报告文件 - * - * 如果缓存的文件内容没有已读入的报告新,则返回 undefined - * - * @param workspaceUri 工作区路径 - */ - public loadCachedReport(workspaceUri: string): IReport | ReportMgrLoadError | undefined { - const cachePath = this.getReportCachePath(workspaceUri); - const loadParams = { - workspaceUri: workspaceUri, - reportUri: URI.file(cachePath).toString(), - reloadConfirm: false, + // 检查是否已有读入的报告,如有则打印日志提示 + const checkRes = this.checkAndSaveNewerReport(workspaceUri.toString(), reportObj); + if (typeof checkRes === "boolean") { + if (checkRes === false && !params.reloadConfirm) { + // 覆盖检查在 reportManagerServer 实现,这里理论上不可能出现 + logger.error("loadReport: found current report, but reloadConfirm is false"); + return { + loadParams: params, + retry: false, }; + } + logger.info( + strFormat("loadReport: discarded current report in [{0}]", workspaceUri.toString()) + ); + } else { + logger.warn( + strFormat("loadReport: Loaded report for [{0}], but saveCacheError", workspaceUri) + ); + return { + loadParams: params, + reason: "saveCacheError", + retry: false, + }; + } + logger.info( + strFormat( + "Loaded report for [{0}], lastUpdTimestamp = {1}", + workspaceUri, + reportObj.timestamp.toString() + ) + ); + return reportObj; + } - // 尝试读取报告对象 - const reportObj = this.loadFromFile(cachePath); - if (typeof reportObj === "string") { - // 返回值为字符串,表示读取失败 - if (reportObj !== "fileNotExists") { - // 除文件不存在的错误外,记录报错日志 - logger.error(strFormat("loadCachedReport: {0}: {1}", reportObj, cachePath)); - } - return { - loadParams: loadParams, - reason: reportObj, - retry: false, // 读取缓存的报告时,出错不重试 - }; - } - - // 检查报告与已有数据的版本 - const checkRes = this.checkAndSaveNewerReport(workspaceUri, reportObj); - if (typeof checkRes !== "boolean") { - // 缓存到工作区失败,给予警告提示 - return { - loadParams: loadParams, - reason: "saveCacheError", - retry: false, - }; - } else if (checkRes === false) { - return undefined; - } + /** + * 加载工作区中缓存的报告文件 + * + * 如果缓存的文件内容没有已读入的报告新,则返回 undefined + * + * @param workspaceUri 工作区路径 + */ + public loadCachedReport(workspaceUri: string): IReport | ReportMgrLoadError | undefined { + const cachePath = this.getReportCachePath(workspaceUri); + const loadParams = { + workspaceUri: workspaceUri, + reportUri: URI.file(cachePath).toString(), + reloadConfirm: false, + }; - // 标记工作区可缓存报告 - this.getReportMeta(workspaceUri)!.cacheSavable = true; - logger.info("loadCachedReport: finished loading cached report from: ".concat(cachePath)); - return reportObj; + // 尝试读取报告对象 + const reportObj = this.loadFromFile(cachePath); + if (typeof reportObj === "string") { + // 返回值为字符串,表示读取失败 + if (reportObj !== "fileNotExists") { + // 除文件不存在的错误外,记录报错日志 + logger.error(strFormat("loadCachedReport: {0}: {1}", reportObj, cachePath)); + } + return { + loadParams: loadParams, + reason: reportObj, + retry: false, // 读取缓存的报告时,出错不重试 + }; } - /** - * 检查某个对象是否为 Report 类型 - * - * @param res 待检查对象 - * @returns 是否为 Report 类型对象 - */ - public static isReport(res: any): res is IReport { - const report = res as IReport; - return ( - Array.isArray(report.problems) && typeof report.version === "number" && typeof report.timestamp === "number" - ); + // 检查报告与已有数据的版本 + const checkRes = this.checkAndSaveNewerReport(workspaceUri, reportObj); + if (typeof checkRes !== "boolean") { + // 缓存到工作区失败,给予警告提示 + return { + loadParams: loadParams, + reason: "saveCacheError", + retry: false, + }; + } else if (checkRes === false) { + return undefined; } - /** - * 保存报告 - * - * @param params 报告保存参数 - */ - public saveReport(params: ReportMgrSaveParams, reportMeta?: ReportMeta): ReportMgrSaveError | undefined { - const reportPath = URI.parse(params.reportUri).fsPath; - const dirPath = path.dirname(reportPath); - if (!reportMeta) { - reportMeta = this.getReportMeta(params.workspaceUri); - if (!reportMeta) { - logger.error("saveReport: invalid workspaceUri: ".concat(params.workspaceUri)); - return { - saveParams: params, - reason: "invalidWorkspaceUri", - retry: false, - }; - } - } - if (fs.existsSync(reportPath) && !params.replaceConfirm) { - logger.warn("saveReport: target file exists, waiting for replace confirm: ".concat(reportPath)); - return { - saveParams: params, - reason: "needReplaceConfirm", - retry: false, - }; - } - try { - if (!fs.existsSync(dirPath)) { - logger.debug("saveReport: creating directory: ".concat(dirPath)); - mkdirp.sync(dirPath); - } - reportMeta.reportData.timestamp = reportMeta.lastUpdTimestamp; - fs.writeFileSync(reportPath, JSON.stringify(reportMeta.reportData, null, " ")); - reportMeta.lastSaveTimestamp = new Date().getTime(); - } catch (err: any) { - logger.error("saveReport: error: ".concat(err.toString())); - return { - saveParams: params, - reason: "ioError", - retry: true, - }; - } - logger.info("saveReport: finished saving report to: ".concat(reportPath)); - return; - } + // 标记工作区可缓存报告 + this.getReportMeta(workspaceUri)!.cacheSavable = true; + logger.info("loadCachedReport: finished loading cached report from: ".concat(cachePath)); + return reportObj; + } - /** - * 获取报告数据 - * - * @param workspaceUri 工作区路径或文档路径 - */ - public getReport(uri: string): IReport | undefined { - const targetMeta = this.getReportMeta(uri); - return targetMeta ? targetMeta.reportData : undefined; - } + /** + * 检查某个对象是否为 Report 类型 + * + * @param res 待检查对象 + * @returns 是否为 Report 类型对象 + */ + public static isReport(res: any): res is IReport { + const report = res as IReport; + return ( + Array.isArray(report.problems) && + typeof report.version === "number" && + typeof report.timestamp === "number" + ); + } - /** - * 获取报告元数据 - * - * @param uri 工作区路径或文档路径 - */ - public getReportMeta(uri: string): ReportMeta | undefined { - if (this._reportMetaMap.has(uri)) { - return this._reportMetaMap.get(uri); - } - for (let [workspaceUri, reportMeta] of this._reportMetaMap.entries()) { - if (uri.startsWith(workspaceUri)) { - return reportMeta; - } - } - return; + /** + * 保存报告 + * + * @param params 报告保存参数 + */ + public saveReport( + params: ReportMgrSaveParams, + reportMeta?: ReportMeta + ): ReportMgrSaveError | undefined { + const reportPath = URI.parse(params.reportUri).fsPath; + const dirPath = path.dirname(reportPath); + if (!reportMeta) { + reportMeta = this.getReportMeta(params.workspaceUri); + if (!reportMeta) { + logger.error("saveReport: invalid workspaceUri: ".concat(params.workspaceUri)); + return { + saveParams: params, + reason: "invalidWorkspaceUri", + retry: false, + }; + } } - - /** - * 卸载报告数据 - * - * @param workspaceUri 工作区路径 - */ - public unloadReport(workspaceUri: string): ReportMgrSaveError | undefined { - const currentMeta = this._reportMetaMap.get(workspaceUri); - if (currentMeta) { - const res = this.saveReportCache(currentMeta); - if (res) { - logger.info(strFormat("unloadReport: ReportMgrSaveError ({0}): {1}", res.reason, workspaceUri)); - return res; - } - this._reportMetaMap.delete(workspaceUri); - logger.info("unloadReport: ".concat(workspaceUri)); - } - return; + if (fs.existsSync(reportPath) && !params.replaceConfirm) { + logger.warn( + "saveReport: target file exists, waiting for replace confirm: ".concat(reportPath) + ); + return { + saveParams: params, + reason: "needReplaceConfirm", + retry: false, + }; } - - /** - * 通知报告更新,并自动保存 - * - * @param reportMeta - */ - public notifyReportUpdate(reportMeta: ReportMeta): ReportMgrSaveError | undefined { - logger.debug("notifyReportUpdate: triggered"); - reportMeta.lastUpdTimestamp = new Date().getTime(); - return this.saveReportCache(reportMeta); + try { + if (!fs.existsSync(dirPath)) { + logger.debug("saveReport: creating directory: ".concat(dirPath)); + mkdirp.sync(dirPath); + } + reportMeta.reportData.timestamp = reportMeta.lastUpdTimestamp; + fs.writeFileSync(reportPath, JSON.stringify(reportMeta.reportData, null, " ")); + reportMeta.lastSaveTimestamp = new Date().getTime(); + } catch (err: any) { + logger.error("saveReport: error: ".concat(err.toString())); + return { + saveParams: params, + reason: "ioError", + retry: true, + }; } + logger.info("saveReport: finished saving report to: ".concat(reportPath)); + return; + } - /** - * 保存报告(缓存到工作区) - * - * @param reportMeta 报告元数据 - * @returns 保存错误或 undefined - */ - public saveReportCache(reportMeta: ReportMeta): ReportMgrSaveError | undefined { - logger.debug("saveReportCache: begin"); - const cacheUri = URI.file(this.getReportCachePath(reportMeta.workspaceUri.toString())); + /** + * 获取报告数据 + * + * @param workspaceUri 工作区路径或文档路径 + */ + public getReport(uri: string): IReport | undefined { + const targetMeta = this.getReportMeta(uri); + return targetMeta ? targetMeta.reportData : undefined; + } - // cacheSavable 为 undefined 或 true 时,尝试保存报告 - // 若为 false 表示工作区不可缓存报告,不再尝试保存 - if (reportMeta.cacheSavable !== false) { - return this.saveReport( - { - workspaceUri: reportMeta.workspaceUri.toString(), - reportUri: cacheUri.toString(), - replaceConfirm: true, - }, - reportMeta - ); - } - return; + /** + * 获取报告元数据 + * + * @param uri 工作区路径或文档路径 + */ + public getReportMeta(uri: string): ReportMeta | undefined { + if (this._reportMetaMap.has(uri)) { + return this._reportMetaMap.get(uri); } + for (let [workspaceUri, reportMeta] of this._reportMetaMap.entries()) { + if (uri.startsWith(workspaceUri)) { + return reportMeta; + } + } + return; + } - /** - * 检查报告是否比已有的报告新(或未有报告)并缓存 - * - * @param workspaceUri 工作区路径 - * @param reportData 报告数据 - */ - private checkAndSaveNewerReport(workspaceUri: string, reportData: IReport): ReportMgrSaveError | boolean { - let currReportMeta = this.getReportMeta(workspaceUri); - if (currReportMeta && currReportMeta.lastUpdTimestamp > reportData.timestamp) { - // 报告比当前已有的报告旧 - return false; - } - // 缓存新报告 - currReportMeta = new ReportMeta(URI.parse(workspaceUri), reportData); - this._reportMetaMap.set(workspaceUri, currReportMeta); + /** + * 卸载报告数据 + * + * @param workspaceUri 工作区路径 + */ + public unloadReport(workspaceUri: string): ReportMgrSaveError | undefined { + const currentMeta = this._reportMetaMap.get(workspaceUri); + if (currentMeta) { + const res = this.saveReportCache(currentMeta); + if (res) { + logger.info( + strFormat("unloadReport: ReportMgrSaveError ({0}): {1}", res.reason, workspaceUri) + ); + return res; + } + this._reportMetaMap.delete(workspaceUri); + logger.info("unloadReport: ".concat(workspaceUri)); + } + return; + } - // 缓存到工作区 - const res = this.saveReportCache(currReportMeta); - return res ? res : true; + /** + * 通知报告更新,并自动保存 + * + * @param reportMeta + */ + public notifyReportUpdate(reportMeta: ReportMeta): ReportMgrSaveError | undefined { + logger.debug("notifyReportUpdate: triggered"); + reportMeta.lastUpdTimestamp = new Date().getTime(); + return this.saveReportCache(reportMeta); + } + + /** + * 保存报告(缓存到工作区) + * + * @param reportMeta 报告元数据 + * @returns 保存错误或 undefined + */ + public saveReportCache(reportMeta: ReportMeta): ReportMgrSaveError | undefined { + logger.debug("saveReportCache: begin"); + const cacheUri = URI.file(this.getReportCachePath(reportMeta.workspaceUri.toString())); + + // cacheSavable 为 undefined 或 true 时,尝试保存报告 + // 若为 false 表示工作区不可缓存报告,不再尝试保存 + if (reportMeta.cacheSavable !== false) { + return this.saveReport( + { + workspaceUri: reportMeta.workspaceUri.toString(), + reportUri: cacheUri.toString(), + replaceConfirm: true, + }, + reportMeta + ); } + return; + } - /** - * 获取工作区缓存报告路径 - * - * @param workspaceUri 工作区路径 - */ - private getReportCachePath(workspaceUri: string): string { - return path.resolve(URI.parse(workspaceUri).fsPath, ".vscode/rvCodingAsst_report.json"); + /** + * 检查报告是否比已有的报告新(或未有报告)并缓存 + * + * @param workspaceUri 工作区路径 + * @param reportData 报告数据 + */ + private checkAndSaveNewerReport( + workspaceUri: string, + reportData: IReport + ): ReportMgrSaveError | boolean { + let currReportMeta = this.getReportMeta(workspaceUri); + if (currReportMeta && currReportMeta.lastUpdTimestamp > reportData.timestamp) { + // 报告比当前已有的报告旧 + return false; } + // 缓存新报告 + currReportMeta = new ReportMeta(URI.parse(workspaceUri), reportData); + this._reportMetaMap.set(workspaceUri, currReportMeta); + + // 缓存到工作区 + const res = this.saveReportCache(currReportMeta); + return res ? res : true; + } - /** - * 从本地文件读取报告 - * - * @param filePath 本地文件路径 - * @returns - */ - private loadFromFile(filePath: string): IReport | ReportMgrLoadErrorType { - if (fs.existsSync(filePath)) { - const reportObj = JSON.parse( - fs.readFileSync(filePath, { - encoding: "utf-8", - }) - ); - if (!this._reportValidator) { - logger.warn("Report schema validator undefined, skip checking report data"); - } else { - if (!this._reportValidator(reportObj)) { - logger.error( - "Report schema validation failed! ajv.errors = ".concat( - JSON.stringify(this._reportValidator.errors) - ) - ); - return "formatError"; - } - } - return reportObj; + /** + * 获取工作区缓存报告路径 + * + * @param workspaceUri 工作区路径 + */ + private getReportCachePath(workspaceUri: string): string { + return path.resolve(URI.parse(workspaceUri).fsPath, ".vscode/rvCodingAsst_report.json"); + } + + /** + * 从本地文件读取报告 + * + * @param filePath 本地文件路径 + * @returns + */ + private loadFromFile(filePath: string): IReport | ReportMgrLoadErrorType { + if (fs.existsSync(filePath)) { + const reportObj = JSON.parse( + fs.readFileSync(filePath, { + encoding: "utf-8", + }) + ); + if (!this._reportValidator) { + logger.warn("Report schema validator undefined, skip checking report data"); + } else { + if (!this._reportValidator(reportObj)) { + logger.error( + "Report schema validation failed! ajv.errors = ".concat( + JSON.stringify(this._reportValidator.errors) + ) + ); + return "formatError"; } - return "fileNotExists"; + } + return reportObj; } + return "fileNotExists"; + } - /** - * 根据 TextDocument 的修改内容调整报告 - * - * @param reportMeta 报告元数据 - * @param change TextDocument 增量修改信息 - */ - public applyChanges(reportMeta: ReportMeta, change: TextDocChangeParams) { - // TODO: Report transform - updateReportByTextDocumentChange(reportMeta, change); - } + /** + * 根据 TextDocument 的修改内容调整报告 + * + * @param reportMeta 报告元数据 + * @param change TextDocument 增量修改信息 + */ + public applyChanges(reportMeta: ReportMeta, change: TextDocChangeParams) { + // TODO: Report transform + updateReportByTextDocumentChange(reportMeta, change); + } } diff --git a/server/src/reportManagerServer.ts b/server/src/reportManagerServer.ts index 31af3aecb77e27140951eaa39cee3e30bb7ad5e1..bd4adc8f3e4b10cc32b6262c3e1d12137e94ee37 100644 --- a/server/src/reportManagerServer.ts +++ b/server/src/reportManagerServer.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,312 +8,329 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Server Report Manager for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 16, 2023 + * liccc + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as lsp from "vscode-languageserver/node"; -import * as strFormat from "string-format"; import { ClientCapabilities } from "./types/clientCapabilities"; import { DocumentsSettingManager } from "./docSettingManager"; import { LSPNotificationID } from "../../common/src/types/notification"; import { refreshDocumentDiagnostics as refreshDocumentDiagnostics } from "./reportToDiagnostic"; import { ReportManager } from "./reportManager"; -import { ReportMgrLoadParams, ReportMgrSaveError, ReportMgrSaveParams } from "../../common/src/types/reportManager"; +import { + ReportMgrLoadParams, + ReportMgrSaveError, + ReportMgrSaveParams, +} from "../../common/src/types/reportManager"; import { RVCodingAsstConfig } from "../../common/src/types/extConfig"; import { ServerLogger } from "./utils/log"; import { TextDocChangeParams } from "./reportTransformer"; import { TextDocument } from "vscode-languageserver-textdocument"; import { URI } from "vscode-uri"; +import strFormat = require("string-format"); const logger = ServerLogger.getLogger("reportMgrServer"); /** 代码问题报告管理器(服务端) */ export class ReportManagerServer { - /** 报告管理器 */ - private _reportManager: ReportManager; + /** 报告管理器 */ + private _reportManager: ReportManager; - /** Language Server 连接 */ - private _connection: lsp.Connection; + /** Language Server 连接 */ + private _connection: lsp.Connection; - /** Language Server TextDocument 管理器 */ - private _documents: lsp.TextDocuments; + /** Language Server TextDocument 管理器 */ + private _documents: lsp.TextDocuments; - /** Language Client 能力 */ - private _clientCapabilities: ClientCapabilities; + /** Language Client 能力 */ + private _clientCapabilities: ClientCapabilities; - /** 当前已打开的文档 */ - private _currDocument?: TextDocument; + /** 当前已打开的文档 */ + private _currDocument?: TextDocument; - private constructor( - connection: lsp.Connection, - documents: lsp.TextDocuments, - clientCapabilities: ClientCapabilities - ) { - this._connection = connection; - this._documents = documents; - this._clientCapabilities = clientCapabilities; + private constructor( + connection: lsp.Connection, + documents: lsp.TextDocuments, + clientCapabilities: ClientCapabilities + ) { + this._connection = connection; + this._documents = documents; + this._clientCapabilities = clientCapabilities; - this._reportManager = new ReportManager(); - } + this._reportManager = new ReportManager(); + } - public static init( - connection: lsp.Connection, - documents: lsp.TextDocuments, - clientCapabilities: ClientCapabilities - ): ReportManagerServer { - const manager = new ReportManagerServer(connection, documents, clientCapabilities); + public static init( + connection: lsp.Connection, + documents: lsp.TextDocuments, + clientCapabilities: ClientCapabilities + ): ReportManagerServer { + const manager = new ReportManagerServer(connection, documents, clientCapabilities); - // 监听事件:TextDocument 内容变化 - connection.onDidChangeTextDocument((params) => { - manager.onDidChangeTextDocument(params); - }); + // 监听事件:TextDocument 内容变化 + connection.onDidChangeTextDocument((params) => { + manager.onDidChangeTextDocument(params); + }); - // 监听事件:工作区文件夹变化 - if (clientCapabilities.hasWorkspaceFolderCapability) { - connection.workspace.onDidChangeWorkspaceFolders((e) => { - manager.onDidChangeWorkspaceFolders(e); - }); - } + // 监听事件:工作区文件夹变化 + if (clientCapabilities.hasWorkspaceFolderCapability) { + connection.workspace.onDidChangeWorkspaceFolders((e) => { + manager.onDidChangeWorkspaceFolders(e); + }); + } - // 监听通知:读取报告数据 - connection.onNotification(LSPNotificationID.reportMgrLoad, (data) => { - manager.onLoadNotification(data); - }); + // 监听通知:读取报告数据 + connection.onNotification(LSPNotificationID.reportMgrLoad, (data) => { + manager.onLoadNotification(data); + }); - // 监听通知:读取报告 JSON Schema - connection.onNotification(LSPNotificationID.reportMgrLoadSchema, (data) => { - manager.onLoadSchema(data); - }); + // 监听通知:读取报告 JSON Schema + connection.onNotification(LSPNotificationID.reportMgrLoadSchema, (data) => { + manager.onLoadSchema(data); + }); - // 监听通知:保存报告 - connection.onNotification(LSPNotificationID.reportMgrSave, (data) => { - manager.onSaveReport(data); - }); + // 监听通知:保存报告 + connection.onNotification(LSPNotificationID.reportMgrSave, (data) => { + manager.onSaveReport(data); + }); - // 监听通知:保存所有报告(缓存到工作区) - connection.onNotification(LSPNotificationID.reportMgrSaveCacheAll, () => { - manager.onSaveCacheAll(); - }); + // 监听通知:保存所有报告(缓存到工作区) + connection.onNotification(LSPNotificationID.reportMgrSaveCacheAll, () => { + manager.onSaveCacheAll(); + }); - // 监听文档:内容修改变化 - documents.onDidChangeContent((e) => { - if (manager._currDocument !== e.document) { - manager._currDocument = e.document; - logger.debug("documents.onDidChangeContent: ".concat(e.document.uri)); - } - manager.refreshDiagnostics(e.document); - }); + // 监听文档:内容修改变化 + documents.onDidChangeContent((e) => { + if (manager._currDocument !== e.document) { + manager._currDocument = e.document; + logger.debug("documents.onDidChangeContent: ".concat(e.document.uri)); + } + manager.refreshDiagnostics(e.document); + }); - // 加载已有 Workspace 下缓存的报告 - connection.workspace.getWorkspaceFolders().then((workspaces) => { - workspaces?.forEach((workspace) => { - manager.loadWorkspaceCachedReport(workspace); - }); - manager.refreshDiagnostics(); - }); - return manager; - } + // 加载已有 Workspace 下缓存的报告 + connection.workspace.getWorkspaceFolders().then((workspaces) => { + workspaces?.forEach((workspace) => { + manager.loadWorkspaceCachedReport(workspace); + }); + manager.refreshDiagnostics(); + }); + return manager; + } - /** - * TextDocument 内容变化事件处理 - * - * @param params - */ - public onDidChangeTextDocument(params: lsp.DidChangeTextDocumentParams) { - const docUri = URI.parse(params.textDocument.uri.toString()); - if (docUri.scheme !== "file") { - // 非本地文件,不处理 - return; - } - const reportMeta = this._reportManager.getReportMeta(docUri.toString()); - if (reportMeta === undefined) { - // 当前文档找不到对应的报告,不处理 - return; - } - const document = this._documents.get(params.textDocument.uri)!; - // 应用变更 - this._reportManager.applyChanges(reportMeta, { - document: document, - changes: params.contentChanges, - }); - // 刷新当前文档的诊断信息 - this.refreshDiagnostics(this._documents.get(params.textDocument.uri)); + /** + * TextDocument 内容变化事件处理 + * + * @param params + */ + public onDidChangeTextDocument(params: lsp.DidChangeTextDocumentParams) { + const docUri = URI.parse(params.textDocument.uri.toString()); + if (docUri.scheme !== "file") { + // 非本地文件,不处理 + return; } - - /** - * 读取代码扫描报告 JSON Schema 定义文件 - * - * @param data JSON Schema 资源路径 - */ - public onLoadSchema(data: string) { - this._reportManager.loadSchema(data); + const reportMeta = this._reportManager.getReportMeta(docUri.toString()); + if (reportMeta === undefined) { + // 当前文档找不到对应的报告,不处理 + return; } + const document = this._documents.get(params.textDocument.uri)!; + // 应用变更 + this._reportManager.applyChanges(reportMeta, { + document: document, + changes: params.contentChanges, + }); + // 刷新当前文档的诊断信息 + this.refreshDiagnostics(this._documents.get(params.textDocument.uri)); + } - /** - * 读取报告文件到指定工作区 - * - * @param data 工作区文件夹和报告文件路径 - */ - public onLoadNotification(data: ReportMgrLoadParams) { - logger.info(strFormat("Loading into workspace folder [{0}]: {1}", data.workspaceUri, data.reportUri)); + /** + * 读取代码扫描报告 JSON Schema 定义文件 + * + * @param data JSON Schema 资源路径 + */ + public onLoadSchema(data: string) { + this._reportManager.loadSchema(data); + } - // 检查当前是否已有报告 - if (!data.reloadConfirm && this._reportManager.getReport(data.workspaceUri)) { - // 工作区已有报告,通知客户端确认重新载入报告 - logger.info("onLoadNotification: already has report data, asking for reload confirm"); - this._connection.sendNotification(LSPNotificationID.reportMgrReloadConfirm, data); - return; - } - // 读取报告 - const res = this._reportManager.loadReport(data); - if (ReportManager.isReport(res)) { - // 通知客户端读取完成 - this._connection.sendNotification(LSPNotificationID.reportMgrLoadFinished, res.timestamp); - // 刷新诊断信息 - this.refreshDiagnostics(); - } else if (res.reason === "saveCacheError") { - // 通知客户端读取完成,但缓存出错 - this._connection.sendNotification(LSPNotificationID.reportMgrLoadFinishedWithSaveError); - // 刷新诊断信息 - this.refreshDiagnostics(); - } else { - logger.error(strFormat("onLoadNotification: Load failed ({0}): {1}", res.reason, data.reportUri)); - this._connection.sendNotification(LSPNotificationID.reportMgrLoadError, res); - } - } + /** + * 读取报告文件到指定工作区 + * + * @param data 工作区文件夹和报告文件路径 + */ + public onLoadNotification(data: ReportMgrLoadParams) { + logger.info( + strFormat("Loading into workspace folder [{0}]: {1}", data.workspaceUri, data.reportUri) + ); - /** - * 工作区目录发生变化时,加载新工作区的报告,移除不再需要的报告 - * - * @param e 工作区文件夹变化事件 - * @returns - */ - public onDidChangeWorkspaceFolders(e: lsp.WorkspaceFoldersChangeEvent) { - let addCnt = 0; - for (let folder of e.added) { - this.loadWorkspaceCachedReport(folder); - addCnt++; - } - const remCnt = this.unloadWorkspacesReport(e.removed); - logger.info( - strFormat( - "onDidChangeWorkspaceFolders: added {0}, removed {0} workspace folders", - addCnt.toString(), - remCnt.toString() - ) - ); + // 检查当前是否已有报告 + if (!data.reloadConfirm && this._reportManager.getReport(data.workspaceUri)) { + // 工作区已有报告,通知客户端确认重新载入报告 + logger.info("onLoadNotification: already has report data, asking for reload confirm"); + this._connection.sendNotification(LSPNotificationID.reportMgrReloadConfirm, data); + return; + } + // 读取报告 + const res = this._reportManager.loadReport(data); + if (ReportManager.isReport(res)) { + // 通知客户端读取完成 + this._connection.sendNotification(LSPNotificationID.reportMgrLoadFinished, res.timestamp); + // 刷新诊断信息 + this.refreshDiagnostics(); + } else if (res.reason === "saveCacheError") { + // 通知客户端读取完成,但缓存出错 + this._connection.sendNotification(LSPNotificationID.reportMgrLoadFinishedWithSaveError); + // 刷新诊断信息 + this.refreshDiagnostics(); + } else { + logger.error( + strFormat("onLoadNotification: Load failed ({0}): {1}", res.reason, data.reportUri) + ); + this._connection.sendNotification(LSPNotificationID.reportMgrLoadError, res); } + } - /** - * 加载指定工作区下已缓存的报告 - * - * @param workspace 工作区路径 - */ - public loadWorkspaceCachedReport(workspace: lsp.WorkspaceFolder) { - const res = this._reportManager.loadCachedReport(workspace.uri.toString()); - if (res && !ReportManager.isReport(res)) { - if (res.reason === "saveCacheError") { - // 加载缓存的报告时无法写回,弹警告窗 - this._connection.sendNotification(LSPNotificationID.reportMgrLoadFinishedWithSaveError); - } else if (res.reason !== "fileNotExists") { - // 加载缓存的报告时出现文件不存在以外的错误,弹窗报错 - this._connection.sendNotification(LSPNotificationID.reportMgrLoadError, res); - } - } + /** + * 工作区目录发生变化时,加载新工作区的报告,移除不再需要的报告 + * + * @param e 工作区文件夹变化事件 + * @returns + */ + public onDidChangeWorkspaceFolders(e: lsp.WorkspaceFoldersChangeEvent) { + let addCnt = 0; + for (let folder of e.added) { + this.loadWorkspaceCachedReport(folder); + addCnt++; } + const remCnt = this.unloadWorkspacesReport(e.removed); + logger.info( + strFormat( + "onDidChangeWorkspaceFolders: added {0}, removed {0} workspace folders", + addCnt.toString(), + remCnt.toString() + ) + ); + } - /** - * 保存报告文件 - * - * @param data 保存参数 - */ - public onSaveReport(data: ReportMgrSaveParams) { - const res = this._reportManager.saveReport(data); - if (res) { - this._connection.sendNotification(LSPNotificationID.reportMgrSaveError, res); - } else { - this._connection.sendNotification(LSPNotificationID.reportMgrSaveFinished, data); - } + /** + * 加载指定工作区下已缓存的报告 + * + * @param workspace 工作区路径 + */ + public loadWorkspaceCachedReport(workspace: lsp.WorkspaceFolder) { + const res = this._reportManager.loadCachedReport(workspace.uri.toString()); + if (res && !ReportManager.isReport(res)) { + if (res.reason === "saveCacheError") { + // 加载缓存的报告时无法写回,弹警告窗 + this._connection.sendNotification(LSPNotificationID.reportMgrLoadFinishedWithSaveError); + } else if (res.reason !== "fileNotExists") { + // 加载缓存的报告时出现文件不存在以外的错误,弹窗报错 + this._connection.sendNotification(LSPNotificationID.reportMgrLoadError, res); + } } + } - /** - * 保存所有报告(缓存到工作区) - */ - public onSaveCacheAll() { - this._connection.workspace.getWorkspaceFolders().then((workspaces) => { - const failedArr: ReportMgrSaveError[] = []; - workspaces?.forEach((workspace) => { - const reportMeta = this._reportManager.getReportMeta(workspace.uri.toString()); - if (reportMeta) { - const res = this._reportManager.saveReportCache(reportMeta); - if (res) { - failedArr.push(res); - } - } - }); - if (failedArr.length > 0) { - this._connection.sendNotification(LSPNotificationID.reportMgrSaveError, failedArr); - } else if (workspaces && workspaces.length > 0) { - this._connection.sendNotification(LSPNotificationID.reportMgrSaveCacheAllFinished, workspaces.length); - } - }); + /** + * 保存报告文件 + * + * @param data 保存参数 + */ + public onSaveReport(data: ReportMgrSaveParams) { + const res = this._reportManager.saveReport(data); + if (res) { + this._connection.sendNotification(LSPNotificationID.reportMgrSaveError, res); + } else { + this._connection.sendNotification(LSPNotificationID.reportMgrSaveFinished, data); } + } - /** - * 卸载指定工作区的报告数据 - * - * @param workspace 工作区路径 - */ - public unloadWorkspacesReport(workspace: lsp.WorkspaceFolder | lsp.WorkspaceFolder[]) { - let workspaces: lsp.WorkspaceFolder[] = []; - const failedArr: lsp.WorkspaceFolder[] = []; - if (Array.isArray(workspace)) { - workspaces.concat(workspace); - } else { - workspaces.push(workspace); + /** + * 保存所有报告(缓存到工作区) + */ + public onSaveCacheAll() { + this._connection.workspace.getWorkspaceFolders().then((workspaces) => { + const failedArr: ReportMgrSaveError[] = []; + workspaces?.forEach((workspace) => { + const reportMeta = this._reportManager.getReportMeta(workspace.uri.toString()); + if (reportMeta) { + const res = this._reportManager.saveReportCache(reportMeta); + if (res) { + failedArr.push(res); + } } - for (let folder of workspaces) { - const res = this._reportManager.unloadReport(folder.uri.toString()); - if (res) { - failedArr.push(folder); - } - } - if (failedArr.length > 0) { - this._connection.sendNotification(LSPNotificationID.reportMgrSaveError, failedArr); - } - return failedArr.length; + }); + if (failedArr.length > 0) { + this._connection.sendNotification(LSPNotificationID.reportMgrSaveError, failedArr); + } else if (workspaces && workspaces.length > 0) { + this._connection.sendNotification( + LSPNotificationID.reportMgrSaveCacheAllFinished, + workspaces.length + ); + } + }); + } + + /** + * 卸载指定工作区的报告数据 + * + * @param workspace 工作区路径 + */ + public unloadWorkspacesReport(workspace: lsp.WorkspaceFolder | lsp.WorkspaceFolder[]) { + let workspaces: lsp.WorkspaceFolder[] = []; + const failedArr: lsp.WorkspaceFolder[] = []; + if (Array.isArray(workspace)) { + workspaces.concat(workspace); + } else { + workspaces.push(workspace); } + for (let folder of workspaces) { + const res = this._reportManager.unloadReport(folder.uri.toString()); + if (res) { + failedArr.push(folder); + } + } + if (failedArr.length > 0) { + this._connection.sendNotification(LSPNotificationID.reportMgrSaveError, failedArr); + } + return failedArr.length; + } - public async refreshDiagnostics(textDocument?: TextDocument) { - if (!this._clientCapabilities.hasDiagnosticCapability) { - return; - } - if (textDocument === undefined) { - const docUris = this._documents.all(); - if (docUris.length > 0) { - logger.info(strFormat("refreshDiagnostics: refreshing on all {0} files", docUris.length.toString())); - docUris.forEach((doc) => this.refreshDiagnostics(doc)); - } - return; - } - const docUri = textDocument.uri; - const reportMeta = this._reportManager.getReportMeta(docUri); - if (!reportMeta) { - return; - } - const settings = await DocumentsSettingManager.getInstance().getDocumentSettings(docUri); - logger.debug(strFormat("refreshDiagnostics: refreshing on: ".concat(docUri))); - // 将报告转换为诊断信息并输出 - await refreshDocumentDiagnostics( - this._connection, - this._clientCapabilities.hasDiagnosticRelatedInformationCapability, - settings, - textDocument, - reportMeta + public async refreshDiagnostics(textDocument?: TextDocument) { + if (!this._clientCapabilities.hasDiagnosticCapability) { + return; + } + if (textDocument === undefined) { + const docUris = this._documents.all(); + if (docUris.length > 0) { + logger.info( + strFormat("refreshDiagnostics: refreshing on all {0} files", docUris.length.toString()) ); + docUris.forEach((doc) => this.refreshDiagnostics(doc)); + } + return; + } + const docUri = textDocument.uri; + const reportMeta = this._reportManager.getReportMeta(docUri); + if (!reportMeta) { + return; } + const settings = + await DocumentsSettingManager.getInstance().getDocumentSettings(docUri); + logger.debug(strFormat("refreshDiagnostics: refreshing on: ".concat(docUri))); + // 将报告转换为诊断信息并输出 + await refreshDocumentDiagnostics( + this._connection, + this._clientCapabilities.hasDiagnosticRelatedInformationCapability, + settings, + textDocument, + reportMeta + ); + } } diff --git a/server/src/reportToDiagnostic.ts b/server/src/reportToDiagnostic.ts index e497c17ac237c18407af44510c198bdf42c92c31..25fe5c682ce2c41c08555a966f251b75031ffe66 100644 --- a/server/src/reportToDiagnostic.ts +++ b/server/src/reportToDiagnostic.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Server Report To Diagnostics Converter for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 31, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as lsp from "vscode-languageserver"; @@ -25,115 +27,117 @@ import { URI } from "vscode-uri"; import path = require("path"); interface RuleInfo { - desc: string; - languages: string[]; - tags: string[]; + desc: string; + languages: string[]; + tags: string[]; } export interface DiagnosticCodeExternal { - target: string; - value: string; + target: string; + value: string; } export type DiagnosticCode = string | number | DiagnosticCodeExternal | undefined; export async function refreshDocumentDiagnostics( - connection: lsp.Connection, - hasDiagRelInfoCapability: boolean, - extConfig: RVCodingAsstConfig, - document: TextDoc.TextDocument, - reportMeta: ReportMeta + connection: lsp.Connection, + hasDiagRelInfoCapability: boolean, + extConfig: RVCodingAsstConfig, + document: TextDoc.TextDocument, + reportMeta: ReportMeta ) { - const workspaceUri = reportMeta.workspaceUri; - const docUri: URI = URI.parse(document.uri); - const docRelPath = docUri.path.replace(workspaceUri.path, ""); - const workspaceRootPath = workspaceUri.fsPath; + const workspaceUri = reportMeta.workspaceUri; + const docUri: URI = URI.parse(document.uri); + const docRelPath = docUri.path.replace(workspaceUri.path, ""); + const workspaceRootPath = workspaceUri.fsPath; - const problems = reportMeta.reportData.problems; + const problems = reportMeta.reportData.problems; - // 所有诊断数据 - const diags: lsp.Diagnostic[] = []; + // 所有诊断数据 + const diags: lsp.Diagnostic[] = []; - for (let problem of problems) { - if (problem.type !== "source") { - // 暂时忽略非源码类问题 - continue; - } + for (let problem of problems) { + if (problem.type !== "source") { + // 暂时忽略非源码类问题 + continue; + } - const ruleInfo = await connection.sendRequest(LSPRequestID.reportMgrGetRuleInfo, problem.ruleId); + const ruleInfo = ( + await connection.sendRequest(LSPRequestID.reportMgrGetRuleInfo, problem.ruleId) + ); - // 当一个问题包含多个源码区域时,将第一个区域视为主区域,用于创建 mainDiag - // 其它区域视为 relatedInformation 区域 - let mainDiag: lsp.Diagnostic | undefined = undefined; - let i = 0; - // 对于源码级问题,problem.data 每一个元素视为一个诊断 - for (let pbData of problem.data) { - i++; - const srcRange = pbData.srcRange; - if (!srcRange || srcRange.hidden) { - continue; - } - const fileUri = URI.file(path.resolve(workspaceRootPath, srcRange.filePath)); - if (fileUri.toString() !== docUri.toString()) { - continue; - } + // 当一个问题包含多个源码区域时,将第一个区域视为主区域,用于创建 mainDiag + // 其它区域视为 relatedInformation 区域 + let mainDiag: lsp.Diagnostic | undefined = undefined; + let i = 0; + // 对于源码级问题,problem.data 每一个元素视为一个诊断 + for (let pbData of problem.data) { + i++; + const srcRange = pbData.srcRange; + if (!srcRange || srcRange.hidden) { + continue; + } + const fileUri = URI.file(path.resolve(workspaceRootPath, srcRange.filePath)); + if (fileUri.toString() !== docUri.toString()) { + continue; + } - /** 代码文本 */ - const codeText = document.getText({ - start: { - line: srcRange.lineFrom - 1, - character: srcRange.colFrom ? srcRange.colFrom : 0, - }, - end: { - line: srcRange.lineUpto ? srcRange.lineUpto - 1 : srcRange.lineFrom - 1, - character: srcRange.colUpto ? srcRange.colUpto : 999999, - }, - }); + /** 代码文本 */ + const codeText = document.getText({ + start: { + line: srcRange.lineFrom - 1, + character: srcRange.colFrom ? srcRange.colFrom : 0, + }, + end: { + line: srcRange.lineUpto ? srcRange.lineUpto - 1 : srcRange.lineFrom - 1, + character: srcRange.colUpto ? srcRange.colUpto : 999999, + }, + }); - /** Language Server Range */ - const lspRange = lsp.Range.create( - lsp.Position.create(srcRange.lineFrom - 1, srcRange.colFrom ? srcRange.colFrom : 0), - lsp.Position.create( - srcRange.lineUpto ? srcRange.lineUpto - 1 : srcRange.lineFrom - 1, - srcRange.colUpto ? srcRange.colUpto : 999999 - ) - ); + /** Language Server Range */ + const lspRange = lsp.Range.create( + lsp.Position.create(srcRange.lineFrom - 1, srcRange.colFrom ? srcRange.colFrom : 0), + lsp.Position.create( + srcRange.lineUpto ? srcRange.lineUpto - 1 : srcRange.lineFrom - 1, + srcRange.colUpto ? srcRange.colUpto : 999999 + ) + ); - if (mainDiag) { - mainDiag.relatedInformation!.push( - lsp.DiagnosticRelatedInformation.create( - lsp.Location.create( - URI.file(path.resolve(workspaceRootPath, srcRange.filePath)).toString(), - lspRange - ), - srcRange.comment ? srcRange.comment : "See also:" - ) - ); - } else if (i === 1) { - mainDiag = lsp.Diagnostic.create( - lspRange, - ruleInfo ? ruleInfo.desc : pbData.desc, - srcRange.level ? srcRange.level : problem.level, - ({ - target: "vscode://tcse-iscas.rvportingtool/".concat( - CommandID.wikiHelperOpenRule, - "?", - problem.ruleId - ), - value: problem.ruleId, - }) as string, - problem.checkerId, - [] - ); - } - } - if (mainDiag) { - diags.push(mainDiag); - } + if (mainDiag) { + mainDiag.relatedInformation!.push( + lsp.DiagnosticRelatedInformation.create( + lsp.Location.create( + URI.file(path.resolve(workspaceRootPath, srcRange.filePath)).toString(), + lspRange + ), + srcRange.comment ? srcRange.comment : "See also:" + ) + ); + } else if (i === 1) { + mainDiag = lsp.Diagnostic.create( + lspRange, + ruleInfo ? ruleInfo.desc : pbData.desc, + srcRange.level ? srcRange.level : problem.level, + ({ + target: "vscode://tcse-iscas.rvportingtool/".concat( + CommandID.wikiHelperOpenRule, + "?", + problem.ruleId + ), + value: problem.ruleId, + }) as string, + problem.checkerId, + [] + ); + } + } + if (mainDiag) { + diags.push(mainDiag); } - await connection.sendDiagnostics({ - uri: docUri.toString(), - version: reportMeta.reportData.version, - diagnostics: diags, - }); + } + await connection.sendDiagnostics({ + uri: docUri.toString(), + version: reportMeta.reportData.version, + diagnostics: diags, + }); } diff --git a/server/src/reportTransformer.ts b/server/src/reportTransformer.ts index 1aad12433914806d2fbaadb7f1c689265e6ce6ed..9397b112c20b5c29b4436ab867aa71012169167e 100644 --- a/server/src/reportTransformer.ts +++ b/server/src/reportTransformer.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Server Report Transformer for RVPortingTool VSCode Extension * - * Author: - * Last Change: Mar 17, 2023 + * Author: Lightning Rainstorm + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as LSPTypes from "vscode-languageserver-types"; @@ -24,130 +26,137 @@ import { SourceRange } from "../../common/src/types/report"; import { SourceRangeUtils } from "../../common/src/utils/sourceRangeUtils"; export interface TextDocChangeParams { - document: TextDoc.TextDocument; - changes: TextDoc.TextDocumentContentChangeEvent[]; + document: TextDoc.TextDocument; + changes: TextDoc.TextDocumentContentChangeEvent[]; } const logger = ServerLogger.getLogger("reportTransformer"); -export function updateReportByTextDocumentChange(reportMeta: ReportMeta, params: TextDocChangeParams) { - const docUri = params.document.uri.toString(); - - const docCacheManager = DocumentsCacheManager.getInstance(); - const oldDoc = docCacheManager.get(docUri); - if (oldDoc === undefined) { - logger.error("Failed to retrieve oldText from DocumentsCacheManager"); - return; +export function updateReportByTextDocumentChange( + reportMeta: ReportMeta, + params: TextDocChangeParams +) { + const docUri = params.document.uri.toString(); + + const docCacheManager = DocumentsCacheManager.getInstance(); + const oldDoc = docCacheManager.get(docUri); + if (oldDoc === undefined) { + logger.error("Failed to retrieve oldText from DocumentsCacheManager"); + return; + } + const newDoc = docCacheManager.clone(oldDoc)!; + TextDoc.TextDocument.update(newDoc, params.changes, newDoc.version + 1); + + for (let change of params.changes) { + const rangeLSP = (change).range; + const oldText = oldDoc.getText(rangeLSP); + const newText = change.text; + + if (oldText === newText) { + return; } - const newDoc = docCacheManager.clone(oldDoc)!; - TextDoc.TextDocument.update(newDoc, params.changes, newDoc.version + 1); - for (let change of params.changes) { - const rangeLSP = (change).range; - const oldText = oldDoc.getText(rangeLSP); - const newText = change.text; - - if (oldText === newText) { - return; + const range = SourceRangeUtils.fromLSPRange(rangeLSP); + const oldLines = oldText.split("\n"); + const newLines = newText.split("\n"); + logger.debug(oldLines); + logger.debug(newLines); + logger.debug(range); + + // 综合行数差异 + const lineDelta = newLines.length - oldLines.length; + logger.debug("lineDelta" + lineDelta); + + // 最后一行字数差 + const oldLastLine = oldLines.length > 0 ? oldLines[oldLines.length - 1] : ""; + const newLastLine = newLines.length > 0 ? newLines[newLines.length - 1] : ""; + const lastLineDelta = newLastLine.length - oldLastLine.length; + + // 首行字数差 + const oldFirstLine = oldLines.length > 0 ? oldLines[0] : ""; + const newFirstLine = newLines.length > 0 ? newLines[0] : ""; + const firstLineDelta = newFirstLine.length - oldFirstLine.length; + + for (let problem of reportMeta.reportData.problems) { + for (let pbData of problem.data) { + if (!pbData.srcRange) { + continue; } + const srcRange = pbData.srcRange; - const range = SourceRangeUtils.fromLSPRange(rangeLSP); - const oldLines = oldText.split("\n"); - const newLines = newText.split("\n"); - logger.debug(oldLines); - logger.debug(newLines); - logger.debug(range); - - // 综合行数差异 - const lineDelta = newLines.length - oldLines.length; - logger.debug("lineDelta" + lineDelta); - - // 最后一行字数差 - const oldLastLine = oldLines.length > 0 ? oldLines[oldLines.length - 1] : ""; - const newLastLine = newLines.length > 0 ? newLines[newLines.length - 1] : ""; - const lastLineDelta = newLastLine.length - oldLastLine.length; - - // 首行字数差 - const oldFirstLine = oldLines.length > 0 ? oldLines[0] : ""; - const newFirstLine = newLines.length > 0 ? newLines[0] : ""; - const firstLineDelta = newFirstLine.length - oldFirstLine.length; - - for (let problem of reportMeta.reportData.problems) { - for (let pbData of problem.data) { - if (!pbData.srcRange) { - continue; - } - const srcRange = pbData.srcRange; - - // srcRange 位于修改范围之前,无需调整 - if (SourceRangeUtils.isPrev(range, srcRange)) { - logger.debug("before change"); - continue; - } - // srcRange 位于修改范围之后 - if (SourceRangeUtils.isAfter(range, srcRange)) { - if (range.lineUpto === srcRange.lineFrom) { - // 与修改范围的结束行有重叠,调整列号 - if (srcRange.colFrom !== undefined) { - srcRange.colFrom += lastLineDelta; - } - if (srcRange.colUpto !== undefined) { - srcRange.colUpto += lastLineDelta; - } - logger.debug("after change"); - } - // 调整行号 - srcRange.lineFrom += lineDelta; - if (srcRange.lineUpto !== undefined) { - srcRange.lineUpto += lineDelta; - } - continue; - } - // srcRange 与修改内容有交集 - // 先比较内容,若内容无变化则忽略 - const srcRangeLSP = SourceRangeUtils.toLSPRange(srcRange); - const pOldText = oldDoc.getText(); - const pNewText = newDoc.getText(); - - logger.debug("srcRange".concat(JSON.stringify(srcRange))); - if (pOldText === pNewText) { - continue; - } - const interRange = SourceRangeUtils.getIntersect(range, srcRange, true); - if (interRange !== undefined) { - // 删除或完全替换 - if ( - interRange.lineFrom === srcRange.lineFrom && - interRange.lineUpto === srcRange.lineUpto && - interRange.colFrom === srcRange.colFrom && - interRange.colUpto === srcRange.colUpto && - interRange.colFrom! < interRange.colUpto! - ) { - srcRange.hidden = true; - logger.debug("delete"); - } - - // 单行内部修改 - if (interRange.lineFrom === interRange.lineUpto! && srcRange.lineFrom === srcRange.lineUpto) { - srcRange.colUpto! = srcRange.colFrom! + 1; - logger.debug("single line change"); - } - - // 多行内部修改 - else if (srcRange.lineFrom < srcRange.lineUpto!) { - srcRange.lineFrom = Math.min(srcRange.lineFrom, range.lineFrom); - srcRange.lineUpto = srcRange.lineFrom; - srcRange.colFrom = srcRange.lineFrom > range.lineFrom ? range.colFrom! : srcRange.colFrom; - srcRange.colUpto = srcRange.colFrom! + 1; - logger.debug("multi line change"); - } - } - logger.debug("interRange ".concat(JSON.stringify(interRange))); - logger.debug("?"); + // srcRange 位于修改范围之前,无需调整 + if (SourceRangeUtils.isPrev(range, srcRange)) { + logger.debug("before change"); + continue; + } + // srcRange 位于修改范围之后 + if (SourceRangeUtils.isAfter(range, srcRange)) { + if (range.lineUpto === srcRange.lineFrom) { + // 与修改范围的结束行有重叠,调整列号 + if (srcRange.colFrom !== undefined) { + srcRange.colFrom += lastLineDelta; + } + if (srcRange.colUpto !== undefined) { + srcRange.colUpto += lastLineDelta; } + logger.debug("after change"); + } + // 调整行号 + srcRange.lineFrom += lineDelta; + if (srcRange.lineUpto !== undefined) { + srcRange.lineUpto += lineDelta; + } + continue; + } + // srcRange 与修改内容有交集 + // 先比较内容,若内容无变化则忽略 + const srcRangeLSP = SourceRangeUtils.toLSPRange(srcRange); + const pOldText = oldDoc.getText(); + const pNewText = newDoc.getText(); + + logger.debug("srcRange".concat(JSON.stringify(srcRange))); + if (pOldText === pNewText) { + continue; + } + const interRange = SourceRangeUtils.getIntersect(range, srcRange, true); + if (interRange !== undefined) { + // 删除或完全替换 + if ( + interRange.lineFrom === srcRange.lineFrom && + interRange.lineUpto === srcRange.lineUpto && + interRange.colFrom === srcRange.colFrom && + interRange.colUpto === srcRange.colUpto && + interRange.colFrom! < interRange.colUpto! + ) { + srcRange.hidden = true; + logger.debug("delete"); + } + + // 单行内部修改 + if ( + interRange.lineFrom === interRange.lineUpto! && + srcRange.lineFrom === srcRange.lineUpto + ) { + srcRange.colUpto! = srcRange.colFrom! + 1; + logger.debug("single line change"); + } + + // 多行内部修改 + else if (srcRange.lineFrom < srcRange.lineUpto!) { + srcRange.lineFrom = Math.min(srcRange.lineFrom, range.lineFrom); + srcRange.lineUpto = srcRange.lineFrom; + srcRange.colFrom = + srcRange.lineFrom > range.lineFrom ? range.colFrom! : srcRange.colFrom; + srcRange.colUpto = srcRange.colFrom! + 1; + logger.debug("multi line change"); + } } + logger.debug("interRange ".concat(JSON.stringify(interRange))); + logger.debug("?"); + } } + } - // Update document cache - docCacheManager.update(docUri, params.changes); + // Update document cache + docCacheManager.update(docUri, params.changes); } diff --git a/server/src/server.ts b/server/src/server.ts index 9b1e66eb351364b6d1127f9f2e6976176b31263a..101254b96f13d9997f05cf93791f2d4cec6ed069 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Server Entry for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 16, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as lsp from "vscode-languageserver/node"; @@ -38,65 +40,67 @@ const clientCapabilities = new ClientCapabilities(); // 连接建立时,检查 Language Client 能力 connection.onInitialize((params: lsp.InitializeParams) => { - // Does the client support the `workspace/configuration` request? - // If not, we fall back using global settings. - const capabilities = params.capabilities; - clientCapabilities.hasConfigurationCapability = !!( - capabilities.workspace && !!capabilities.workspace.configuration - ); - clientCapabilities.hasWorkspaceFolderCapability = !!( - capabilities.workspace && !!capabilities.workspace.workspaceFolders - ); - clientCapabilities.hasDiagnosticCapability = !!( - capabilities.textDocument && capabilities.textDocument.publishDiagnostics - ); - clientCapabilities.hasDiagnosticRelatedInformationCapability = !!( - capabilities.textDocument && - capabilities.textDocument.publishDiagnostics && - capabilities.textDocument.publishDiagnostics.relatedInformation - ); + // Does the client support the `workspace/configuration` request? + // If not, we fall back using global settings. + const capabilities = params.capabilities; + clientCapabilities.hasConfigurationCapability = !!( + capabilities.workspace && !!capabilities.workspace.configuration + ); + clientCapabilities.hasWorkspaceFolderCapability = !!( + capabilities.workspace && !!capabilities.workspace.workspaceFolders + ); + clientCapabilities.hasDiagnosticCapability = !!( + capabilities.textDocument && capabilities.textDocument.publishDiagnostics + ); + clientCapabilities.hasDiagnosticRelatedInformationCapability = !!( + capabilities.textDocument && + capabilities.textDocument.publishDiagnostics && + capabilities.textDocument.publishDiagnostics.relatedInformation + ); - const result: lsp.InitializeResult = { - capabilities: { - textDocumentSync: { - openClose: true, - save: true, - change: lsp.TextDocumentSyncKind.Incremental, - }, - // Tell the client that this server supports code completion. - // completionProvider: { - // resolveProvider: true, - // }, - }, + const result: lsp.InitializeResult = { + capabilities: { + textDocumentSync: { + openClose: true, + save: true, + change: lsp.TextDocumentSyncKind.Incremental, + }, + // Tell the client that this server supports code completion. + // completionProvider: { + // resolveProvider: true, + // }, + }, + }; + if (clientCapabilities.hasWorkspaceFolderCapability) { + result.capabilities.workspace = { + workspaceFolders: { + supported: true, + }, }; - if (clientCapabilities.hasWorkspaceFolderCapability) { - result.capabilities.workspace = { - workspaceFolders: { - supported: true, - }, - }; - } - return result; + } + return result; }); // 连接建立成功后,初始化各模块 connection.onInitialized(() => { - // 初始化 TextDocument 配置管理器 - DocumentsSettingManager.init(connection, documents, clientCapabilities, "rvportingtool", { - maxNumberOfProblems: 100, - logLevel: "info", - trace: { - server: "messages", - }, - }); + // 初始化 TextDocument 配置管理器 + DocumentsSettingManager.init(connection, documents, clientCapabilities, "rvportingtool", < + RVCodingAsstConfig + >{ + maxNumberOfProblems: 100, + logLevel: "info", + trace: { + server: "messages", + }, + }); - // 初始化 Report Manager Server - ReportManagerServer.init(connection, documents, clientCapabilities); + // 初始化 Report Manager Server + ReportManagerServer.init(connection, documents, clientCapabilities); - // 初始化 Documents Cache Manager - DocumentsCacheManager.init(documents, true); + // 初始化 Documents Cache Manager + DocumentsCacheManager.init(documents, true); - logger.info("Finished initializing Language Server"); + logger.info("Finished initializing Language Server"); }); // Make the text document manager listen on the connection diff --git a/server/src/types/clientCapabilities.ts b/server/src/types/clientCapabilities.ts index e4b7a2bb837c39e202142033003863f73167098b..b2273b5f1885e1c171bf44488e24b6a88b4e4cad 100644 --- a/server/src/types/clientCapabilities.ts +++ b/server/src/types/clientCapabilities.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,16 +8,18 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Client Capabilities Descriptor for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 14, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ export class ClientCapabilities { - public hasConfigurationCapability = false; - public hasWorkspaceFolderCapability = false; - public hasDiagnosticCapability = false; - public hasDiagnosticRelatedInformationCapability = false; + public hasConfigurationCapability = false; + public hasWorkspaceFolderCapability = false; + public hasDiagnosticCapability = false; + public hasDiagnosticRelatedInformationCapability = false; } diff --git a/server/src/types/reportMeta.ts b/server/src/types/reportMeta.ts index 29b6e68b5cdec2d1e467f846e0711a4cc06289a8..3404c6ca0bf854047f280913356e94aaa78ee1a2 100644 --- a/server/src/types/reportMeta.ts +++ b/server/src/types/reportMeta.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Language Server Report Meta Data Model for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 16, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import { IReport } from "../../../common/src/types/report"; @@ -21,24 +23,24 @@ import { URI } from "vscode-uri"; /** 代码扫描报告元数据类 */ export class ReportMeta { - public workspaceUri: URI; + public workspaceUri: URI; - /** 工作区是否可缓存报告 */ - public cacheSavable?: boolean; + /** 工作区是否可缓存报告 */ + public cacheSavable?: boolean; - /** 代码扫描报告原始数据 */ - public reportData: IReport; + /** 代码扫描报告原始数据 */ + public reportData: IReport; - /** 代码扫描报告最后更新时间 */ - public lastUpdTimestamp: number; + /** 代码扫描报告最后更新时间 */ + public lastUpdTimestamp: number; - /** 代码扫描报告最后保存时间,-1 表示未保存过 */ - public lastSaveTimestamp: number; + /** 代码扫描报告最后保存时间,-1 表示未保存过 */ + public lastSaveTimestamp: number; - constructor(workspaceUri: URI, reportData: IReport) { - this.workspaceUri = workspaceUri; - this.reportData = reportData; - this.lastUpdTimestamp = reportData.timestamp ? reportData.timestamp : new Date().getTime(); - this.lastSaveTimestamp = -1; - } + constructor(workspaceUri: URI, reportData: IReport) { + this.workspaceUri = workspaceUri; + this.reportData = reportData; + this.lastUpdTimestamp = reportData.timestamp ? reportData.timestamp : new Date().getTime(); + this.lastSaveTimestamp = -1; + } } diff --git a/server/src/utils/log.ts b/server/src/utils/log.ts index dce0723f45a5788d6828d889dc238d3045530b3d..7590fa3c1da037ae5c686d4f67a84911e1f66301 100644 --- a/server/src/utils/log.ts +++ b/server/src/utils/log.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Server Logger Module for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 14, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as lsp from "vscode-languageserver/node"; @@ -21,95 +23,95 @@ import * as lsp from "vscode-languageserver/node"; export type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal"; export class ServerLogger { - private static cachedLoggers: Map; - private static connection: lsp.Connection; - private category: string; + private static cachedLoggers: Map; + private static connection: lsp.Connection; + private category: string; - /** - * Constructor of Logger - * - * @param context VSCode Extension Context - * @param category Category name - */ - private constructor(category: string) { - this.category = category; - } + /** + * Constructor of Logger + * + * @param context VSCode Extension Context + * @param category Category name + */ + private constructor(category: string) { + this.category = category; + } - /** - * Initialize Language Server Logger - * - * Should be called when initializing language server. - * - * @param connection Language Server Connection - */ - public static init(connection: lsp.Connection) { - this.connection = connection; - return this.getLogger(); - } + /** + * Initialize Language Server Logger + * + * Should be called when initializing language server. + * + * @param connection Language Server Connection + */ + public static init(connection: lsp.Connection) { + this.connection = connection; + return this.getLogger(); + } - /** - * Get or create logger with category name - * - * @param category Category name, undefined means main - */ - public static getLogger(category?: string): ServerLogger { - category = category ? category : "serverMain"; - if (ServerLogger.cachedLoggers) { - if (ServerLogger.cachedLoggers.has(category)) { - return ServerLogger.cachedLoggers.get(category)!; - } - } else { - ServerLogger.cachedLoggers = new Map(); - } - const logger = new ServerLogger(category); - ServerLogger.cachedLoggers.set(category, logger); - return logger; + /** + * Get or create logger with category name + * + * @param category Category name, undefined means main + */ + public static getLogger(category?: string): ServerLogger { + category = category ? category : "serverMain"; + if (ServerLogger.cachedLoggers) { + if (ServerLogger.cachedLoggers.has(category)) { + return ServerLogger.cachedLoggers.get(category)!; + } + } else { + ServerLogger.cachedLoggers = new Map(); } + const logger = new ServerLogger(category); + ServerLogger.cachedLoggers.set(category, logger); + return logger; + } - /** - * Write a single line log. - * - * For ServerLogger, we use connection.sendNotification() to send the log data to client. - * - * NOTE: According to the lifecycle of language server connection, sendNotification() will only take place after - * connection.onInitialized(), otherwise the notification will be dropped, thus the log will be missed. - * - * @param level Log level - * @param message Log message - */ - public log(level: LogLevel, message: any) { - if (!ServerLogger.connection) { - console.error("Logger connection has not been initialized yet!"); - return; - } - ServerLogger.connection.sendNotification("writeLog", { - category: this.category, - level: level, - message: message, - }); + /** + * Write a single line log. + * + * For ServerLogger, we use connection.sendNotification() to send the log data to client. + * + * NOTE: According to the lifecycle of language server connection, sendNotification() will only take place after + * connection.onInitialized(), otherwise the notification will be dropped, thus the log will be missed. + * + * @param level Log level + * @param message Log message + */ + public log(level: LogLevel, message: any) { + if (!ServerLogger.connection) { + console.error("Logger connection has not been initialized yet!"); + return; } + ServerLogger.connection.sendNotification("writeLog", { + category: this.category, + level: level, + message: message, + }); + } - public trace(message: any) { - this.log("trace", message); - } + public trace(message: any) { + this.log("trace", message); + } - public debug(message: any) { - this.log("debug", message); - } + public debug(message: any) { + this.log("debug", message); + } - public info(message: any) { - this.log("info", message); - } + public info(message: any) { + this.log("info", message); + } - public warn(message: any) { - this.log("warn", message); - } + public warn(message: any) { + this.log("warn", message); + } - public error(message: any) { - this.log("error", message); - } + public error(message: any) { + this.log("error", message); + } - public fatal(message: any) { - this.log("fatal", message); - } + public fatal(message: any) { + this.log("fatal", message); + } } diff --git a/server/tsconfig.json b/server/tsconfig.json index b711098170bbb50511c99e644c71ce369b2153e6..92bb76733caa6e68ab95d691c3163a6fe06719ac 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -1,16 +1,16 @@ { - "compilerOptions": { - "composite": true, - "module": "commonjs", - "target": "es2020", - "lib": ["es2020"], - "outDir": "out", - "rootDir": "..", - "sourceMap": true, - "strict": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src", "../common/src"], - "exclude": ["node_modules", ".vscode-test"] + "compilerOptions": { + "composite": true, + "module": "commonjs", + "target": "es2020", + "lib": ["es2020"], + "outDir": "out", + "rootDir": "..", + "sourceMap": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src", "../common/src"], + "exclude": ["node_modules", ".vscode-test"] } diff --git a/testRoot/.vscode/settings.json b/testRoot/.vscode/settings.json index 53f373544b509b269f034988e4a4cfc0df1ccbe7..a8c9f23ad7d6388315eac6a3a17179230831ff66 100644 --- a/testRoot/.vscode/settings.json +++ b/testRoot/.vscode/settings.json @@ -1,4 +1,4 @@ { - "rvportingtool.logLevel": "verbose", - "rvportingtool.trace.server": "verbose" + "rvportingtool.logLevel": "verbose", + "rvportingtool.trace.server": "verbose" } diff --git a/testRoot/DemoData.json b/testRoot/DemoData.json index fbf65b4323f50e94e1f3c3ff3b07e6ce94534460..90acc50443b37103ef184335a78cbd329f8ee742 100644 --- a/testRoot/DemoData.json +++ b/testRoot/DemoData.json @@ -1,133 +1,133 @@ { - "problem": [ - { - "id": "1", + "problem": [ + { + "id": "1", + "efficient": true, + "checker": "checker1", + "type": "Source", + "rule": "rule1", + "ruleId": "ruleId1", + "msg": "demo1", + "data": { + "files": [ + "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/Detector.java" + ], + "dirs": [ + "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/Detector.java" + ], + "sources": [ + { + "srcMark": "demo", "efficient": true, - "checker": "checker1", - "type": "Source", - "rule": "rule1", - "ruleId": "ruleId1", - "msg": "demo1", - "data": { - "files": [ - "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/Detector.java" - ], - "dirs": [ - "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/Detector.java" - ], - "sources": [ - { - "srcMark": "demo", - "efficient": true, - "grade": 1, - "srcRange": { - "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "lineBegin": 123, - "colBegin": 0, - "lineEnd": 124, - "colEnd": 999 - } - }, - { - "srcMark": "demo", - "efficient": true, - "grade": 1, - "srcRange": { - "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "lineBegin": 127, - "colBegin": 0, - "lineEnd": 128, - "colEnd": 999 - } - }, - { - "srcMark": "demo", - "efficient": true, - "grade": 2, - "srcRange": { - "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "lineBegin": 132, - "colBegin": 0, - "lineEnd": 133, - "colEnd": 999 - } - }, - { - "srcMark": "demo", - "efficient": true, - "grade": 2, - "srcRange": { - "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "lineBegin": 135, - "colBegin": 0, - "lineEnd": 136, - "colEnd": 999 - } - }, - { - "srcMark": "demo", - "efficient": true, - "grade": 3, - "srcRange": { - "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "lineBegin": 138, - "colBegin": 0, - "lineEnd": 139, - "colEnd": 999 - } - }, - { - "srcMark": "demo", - "efficient": true, - "grade": 3, - "srcRange": { - "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "lineBegin": 141, - "colBegin": 0, - "lineEnd": 142, - "colEnd": 999 - } - }, - { - "srcMark": "demo", - "efficient": true, - "grade": 1, - "srcRange": { - "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "lineBegin": 144, - "colBegin": 0, - "lineEnd": 145, - "colEnd": 999 - } - }, - { - "srcMark": "demo", - "efficient": true, - "grade": 1, - "srcRange": { - "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", - "lineBegin": 147, - "colBegin": 0, - "lineEnd": 147, - "colEnd": 999 - } - }, - { - "srcMark": "demo2", - "efficient": true, - "grade": 1, - "srcRange": { - "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/Detector.java", - "lineBegin": 107, - "colBegin": 0, - "lineEnd": 138, - "colEnd": 999 - } - } - ] + "grade": 1, + "srcRange": { + "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "lineBegin": 123, + "colBegin": 0, + "lineEnd": 124, + "colEnd": 999 } - } - ] + }, + { + "srcMark": "demo", + "efficient": true, + "grade": 1, + "srcRange": { + "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "lineBegin": 127, + "colBegin": 0, + "lineEnd": 128, + "colEnd": 999 + } + }, + { + "srcMark": "demo", + "efficient": true, + "grade": 2, + "srcRange": { + "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "lineBegin": 132, + "colBegin": 0, + "lineEnd": 133, + "colEnd": 999 + } + }, + { + "srcMark": "demo", + "efficient": true, + "grade": 2, + "srcRange": { + "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "lineBegin": 135, + "colBegin": 0, + "lineEnd": 136, + "colEnd": 999 + } + }, + { + "srcMark": "demo", + "efficient": true, + "grade": 3, + "srcRange": { + "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "lineBegin": 138, + "colBegin": 0, + "lineEnd": 139, + "colEnd": 999 + } + }, + { + "srcMark": "demo", + "efficient": true, + "grade": 3, + "srcRange": { + "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "lineBegin": 141, + "colBegin": 0, + "lineEnd": 142, + "colEnd": 999 + } + }, + { + "srcMark": "demo", + "efficient": true, + "grade": 1, + "srcRange": { + "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "lineBegin": 144, + "colBegin": 0, + "lineEnd": 145, + "colEnd": 999 + } + }, + { + "srcMark": "demo", + "efficient": true, + "grade": 1, + "srcRange": { + "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/TestPoisonArea.c", + "lineBegin": 147, + "colBegin": 0, + "lineEnd": 147, + "colEnd": 999 + } + }, + { + "srcMark": "demo2", + "efficient": true, + "grade": 1, + "srcRange": { + "filePath": "file:///d%3A/Projects/RISC-V/rv-vscode-plugin/demo/Detector.java", + "lineBegin": 107, + "colBegin": 0, + "lineEnd": 138, + "colEnd": 999 + } + } + ] + } + } + ] } diff --git a/testRoot/example.json b/testRoot/example.json index 55db4cebe076ccd42d901fb4321bb286adcdecbc..4ebb0510afcdf374c09fb1484d1c21cf821435a5 100644 --- a/testRoot/example.json +++ b/testRoot/example.json @@ -1,405 +1,405 @@ { - "version": 1, - "timestamp": 1677654000000, - "problems": [ + "version": 1, + "timestamp": 1677654000000, + "problems": [ + { + "id": "000001", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0001", + "level": 2, + "data": [ { - "id": "000001", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0001", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 3, - "colFrom": 12, - "lineUpto": 3, - "colUpto": 19, - "comment": "__arm__" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 3, + "colFrom": 12, + "lineUpto": 3, + "colUpto": 19, + "comment": "__arm__" + } + } + ] + }, + { + "id": "000002", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0002", + "level": 2, + "data": [ { - "id": "000002", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0002", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 3, - "colFrom": 31, - "lineUpto": 3, - "colUpto": 43, - "comment": "__ARCH_ARM__" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 3, + "colFrom": 31, + "lineUpto": 3, + "colUpto": 43, + "comment": "__ARCH_ARM__" + } + } + ] + }, + { + "id": "000003", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0002", + "level": 2, + "data": [ { - "id": "000003", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0002", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 4, - "colFrom": 8, - "lineUpto": 4, - "colUpto": 20, - "comment": "RETURN_INSTR" - } - }, - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 3, - "colFrom": 12, - "lineUpto": 3, - "colUpto": 19, - "comment": "Defined under macro: __arm__" - } - } - ] + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 4, + "colFrom": 8, + "lineUpto": 4, + "colUpto": 20, + "comment": "RETURN_INSTR" + } }, { - "id": "000004", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0003", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 6, - "colFrom": 14, - "lineUpto": 6, - "colUpto": 22, - "comment": "__i386__" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 3, + "colFrom": 12, + "lineUpto": 3, + "colUpto": 19, + "comment": "Defined under macro: __arm__" + } + } + ] + }, + { + "id": "000004", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0003", + "level": 2, + "data": [ { - "id": "000005", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0003", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 6, - "colFrom": 34, - "lineUpto": 6, - "colUpto": 44, - "comment": "__x86_64__" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 6, + "colFrom": 14, + "lineUpto": 6, + "colUpto": 22, + "comment": "__i386__" + } + } + ] + }, + { + "id": "000005", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0003", + "level": 2, + "data": [ { - "id": "000006", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0003", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 6, - "colFrom": 56, - "lineUpto": 6, - "colUpto": 62, - "comment": "__i386" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 6, + "colFrom": 34, + "lineUpto": 6, + "colUpto": 44, + "comment": "__x86_64__" + } + } + ] + }, + { + "id": "000006", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0003", + "level": 2, + "data": [ { - "id": "000007", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0003", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 7, - "colFrom": 14, - "lineUpto": 7, - "colUpto": 22, - "comment": "__x86_64" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 6, + "colFrom": 56, + "lineUpto": 6, + "colUpto": 62, + "comment": "__i386" + } + } + ] + }, + { + "id": "000007", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0003", + "level": 2, + "data": [ { - "id": "000008", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0003", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 7, - "colFrom": 34, - "lineUpto": 7, - "colUpto": 41, - "comment": "_M_IX86" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 7, + "colFrom": 14, + "lineUpto": 7, + "colUpto": 22, + "comment": "__x86_64" + } + } + ] + }, + { + "id": "000008", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0003", + "level": 2, + "data": [ { - "id": "000009", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0003", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 7, - "colFrom": 53, - "lineUpto": 7, - "colUpto": 61, - "comment": "_M_AMD64" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 7, + "colFrom": 34, + "lineUpto": 7, + "colUpto": 41, + "comment": "_M_IX86" + } + } + ] + }, + { + "id": "000009", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0003", + "level": 2, + "data": [ { - "id": "000010", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0003", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 8, - "colFrom": 8, - "lineUpto": 8, - "colUpto": 20, - "comment": "RETURN_INSTR" - } - }, - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 6, - "colFrom": 14, - "lineUpto": 6, - "colUpto": 22, - "comment": "Defined under macro: __i386__" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 7, + "colFrom": 53, + "lineUpto": 7, + "colUpto": 61, + "comment": "_M_AMD64" + } + } + ] + }, + { + "id": "000010", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0003", + "level": 2, + "data": [ { - "id": "000011", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0004", - "level": 1, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 9, - "colFrom": 13, - "lineUpto": 9, - "colUpto": 36, - "comment": "__builtin_ia64_flush_rs" - } - } - ] + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 8, + "colFrom": 8, + "lineUpto": 8, + "colUpto": 20, + "comment": "RETURN_INSTR" + } }, { - "id": "000012", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0005", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 12, - "colFrom": 0, - "lineUpto": 16, - "colUpto": 37, - "comment": "inline asm", - "hidden": true - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 6, + "colFrom": 14, + "lineUpto": 6, + "colUpto": 22, + "comment": "Defined under macro: __i386__" + } + } + ] + }, + { + "id": "000011", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0004", + "level": 1, + "data": [ { - "id": "000013", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0006", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 20, - "colFrom": 8, - "lineUpto": 20, - "colUpto": 14, - "comment": "inline asm" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 9, + "colFrom": 13, + "lineUpto": 9, + "colUpto": 36, + "comment": "__builtin_ia64_flush_rs" + } + } + ] + }, + { + "id": "000012", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0005", + "level": 2, + "data": [ { - "id": "000014", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0008", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 22, - "colFrom": 8, - "lineUpto": 22, - "colUpto": 14, - "comment": "EM_386" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 12, + "colFrom": 0, + "lineUpto": 16, + "colUpto": 37, + "comment": "inline asm", + "hidden": true + } + } + ] + }, + { + "id": "000013", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0006", + "level": 2, + "data": [ { - "id": "000015", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0008", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 23, - "colFrom": 8, - "lineUpto": 23, - "colUpto": 15, - "comment": "EM_MIPS" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 20, + "colFrom": 8, + "lineUpto": 20, + "colUpto": 14, + "comment": "inline asm" + } + } + ] + }, + { + "id": "000014", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0008", + "level": 2, + "data": [ { - "id": "000016", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0008", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 24, - "colFrom": 8, - "lineUpto": 24, - "colUpto": 15, - "comment": "EM_S390" - } - } - ] - }, + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 22, + "colFrom": 8, + "lineUpto": 22, + "colUpto": 14, + "comment": "EM_386" + } + } + ] + }, + { + "id": "000015", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0008", + "level": 2, + "data": [ + { + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 23, + "colFrom": 8, + "lineUpto": 23, + "colUpto": 15, + "comment": "EM_MIPS" + } + } + ] + }, + { + "id": "000016", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0008", + "level": 2, + "data": [ + { + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 24, + "colFrom": 8, + "lineUpto": 24, + "colUpto": 15, + "comment": "EM_S390" + } + } + ] + }, + { + "id": "000017", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0008", + "level": 2, + "data": [ { - "id": "000017", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0008", - "level": 2, - "data": [ - { - "path": "example.c", - "desc": "", - "srcRange": { - "filePath": "example.c", - "lineFrom": 25, - "colFrom": 8, - "lineUpto": 25, - "colUpto": 20, - "comment": "EM_LOONGARCH" - } - } - ] + "path": "example.c", + "desc": "", + "srcRange": { + "filePath": "example.c", + "lineFrom": 25, + "colFrom": 8, + "lineUpto": 25, + "colUpto": 20, + "comment": "EM_LOONGARCH" + } } - ] + ] + } + ] } diff --git a/testRoot/report_demo1.json b/testRoot/report_demo1.json index fd3fb3d740baf3fc3d0e3ec69e36f8430e0337ff..ddb26ffaf1c450a274b1e245486398c660a0668c 100644 --- a/testRoot/report_demo1.json +++ b/testRoot/report_demo1.json @@ -1,96 +1,96 @@ { - "version": 1, - "timestamp": 1677654000000, - "problems": [ + "version": 1, + "timestamp": 1677654000000, + "problems": [ + { + "id": "000001", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "CC-0003", + "level": 1, + "data": [ { - "id": "000001", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "CC-0003", - "level": 1, - "data": [ - { - "path": "TestPoisonArea.c", - "desc": "X86 architecture-specified macro", - "srcRange": { - "filePath": "TestPoisonArea.c", - "lineFrom": 123, - "colFrom": 12, - "lineUpto": 123, - "colUpto": 20, - "comment": "__i386__" - } - }, - { - "path": "TestPoisonArea.c", - "desc": "Previously defined", - "srcRange": { - "filePath": "TestPoisonArea.c", - "lineFrom": 117, - "colFrom": 0, - "lineUpto": 122, - "colUpto": 0, - "comment": "Previously defined here" - } - } - ] + "path": "TestPoisonArea.c", + "desc": "X86 architecture-specified macro", + "srcRange": { + "filePath": "TestPoisonArea.c", + "lineFrom": 123, + "colFrom": 12, + "lineUpto": 123, + "colUpto": 20, + "comment": "__i386__" + } }, { - "id": "000002", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "test", - "level": 1, - "data": [ - { - "path": "TestPoisonArea.c", - "desc": "X86 architecture-specified macro", - "srcRange": { - "filePath": "TestPoisonArea.c", - "lineFrom": 123, - "colFrom": 32, - "lineUpto": 123, - "colUpto": 42, - "comment": "__x86_64__" - } - }, - { - "path": "TestPoisonArea.c", - "desc": "X86 architecture-specified macro1", - "srcRange": { - "filePath": "TestPoisonArea.c", - "lineFrom": 106, - "colFrom": 0, - "lineUpto": 113, - "colUpto": 6, - "comment": "any" - } - } - ] + "path": "TestPoisonArea.c", + "desc": "Previously defined", + "srcRange": { + "filePath": "TestPoisonArea.c", + "lineFrom": 117, + "colFrom": 0, + "lineUpto": 122, + "colUpto": 0, + "comment": "Previously defined here" + } + } + ] + }, + { + "id": "000002", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "test", + "level": 1, + "data": [ + { + "path": "TestPoisonArea.c", + "desc": "X86 architecture-specified macro", + "srcRange": { + "filePath": "TestPoisonArea.c", + "lineFrom": 123, + "colFrom": 32, + "lineUpto": 123, + "colUpto": 42, + "comment": "__x86_64__" + } }, { - "id": "000004", - "state": 1, - "checkerId": "c_cxx", - "type": "source", - "ruleId": "test", - "level": 1, - "data": [ - { - "path": "TestPoisonArea.c", - "desc": "multiline macro", - "srcRange": { - "filePath": "TestPoisonArea.c", - "lineFrom": 106, - "colFrom": 0, - "lineUpto": 113, - "colUpto": 6, - "comment": "any" - } - } - ] + "path": "TestPoisonArea.c", + "desc": "X86 architecture-specified macro1", + "srcRange": { + "filePath": "TestPoisonArea.c", + "lineFrom": 106, + "colFrom": 0, + "lineUpto": 113, + "colUpto": 6, + "comment": "any" + } + } + ] + }, + { + "id": "000004", + "state": 1, + "checkerId": "c_cxx", + "type": "source", + "ruleId": "test", + "level": 1, + "data": [ + { + "path": "TestPoisonArea.c", + "desc": "multiline macro", + "srcRange": { + "filePath": "TestPoisonArea.c", + "lineFrom": 106, + "colFrom": 0, + "lineUpto": 113, + "colUpto": 6, + "comment": "any" + } } - ] + ] + } + ] } diff --git a/tsconfig.json b/tsconfig.json index 7a91d07214a537b1db8f3daa303a12eb0715733b..fc45d0f51f3753055d5caa78cbcf8147ff18f097 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,20 +1,20 @@ { - "compilerOptions": { - "downlevelIteration": true + "compilerOptions": { + "downlevelIteration": true + }, + "exclude": ["*"], + "references": [ + { + "path": "./client" }, - "exclude": ["*"], - "references": [ - { - "path": "./client" - }, - { - "path": "./server" - }, - { - "path": "./common" - }, - { - "path": "./webview" - } - ] + { + "path": "./server" + }, + { + "path": "./common" + }, + { + "path": "./webview" + } + ] } diff --git a/webview/package-lock.json b/webview/package-lock.json deleted file mode 100644 index 68a1671849bd18d0f83c347aa37586ce7b3462f5..0000000000000000000000000000000000000000 --- a/webview/package-lock.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "name": "rvportingtool-webview", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "rvportingtool-webview", - "version": "0.0.1", - "license": "MulanPSL-2.0", - "dependencies": { - "@types/markdown-it": "^12.2.3", - "@types/markdown-it-container": "^2.0.5", - "@vscode/webview-ui-toolkit": "^1.2.2", - "markdown-it": "^13.0.1", - "markdown-it-container": "^3.0.0", - "prismjs": "^1.29.0" - }, - "devDependencies": { - "@types/prismjs": "^1.26.0", - "@types/vscode-webview": "^1.57.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@microsoft/fast-element": { - "version": "1.11.0", - "resolved": "https://registry.npmmirror.com/@microsoft/fast-element/-/fast-element-1.11.0.tgz", - "integrity": "sha512-VKJYMkS5zgzHHb66sY7AFpYv6IfFhXrjQcAyNgi2ivD65My1XOhtjfKez5ELcLFRJfgZNAxvI8kE69apXERTkw==" - }, - "node_modules/@microsoft/fast-foundation": { - "version": "2.47.0", - "resolved": "https://registry.npmmirror.com/@microsoft/fast-foundation/-/fast-foundation-2.47.0.tgz", - "integrity": "sha512-EyFuioaZQ9ngjUNRQi8R3dIPPsaNQdUOS+tP0G7b1MJRhXmQWIitBM6IeveQA6ZvXG6H21dqgrfEWlsYrUZ2sw==", - "dependencies": { - "@microsoft/fast-element": "^1.11.0", - "@microsoft/fast-web-utilities": "^5.4.1", - "tabbable": "^5.2.0", - "tslib": "^1.13.0" - } - }, - "node_modules/@microsoft/fast-react-wrapper": { - "version": "0.1.48", - "resolved": "https://registry.npmmirror.com/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.1.48.tgz", - "integrity": "sha512-9NvEjru9Kn5ZKjomAMX6v+eF0DR+eDkxKDwDfi+Wb73kTbrNzcnmlwd4diN15ygH97kldgj2+lpvI4CKLQQWLg==", - "dependencies": { - "@microsoft/fast-element": "^1.9.0", - "@microsoft/fast-foundation": "^2.41.1" - }, - "peerDependencies": { - "react": ">=16.9.0" - } - }, - "node_modules/@microsoft/fast-web-utilities": { - "version": "5.4.1", - "resolved": "https://registry.npmmirror.com/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz", - "integrity": "sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==", - "dependencies": { - "exenv-es6": "^1.1.1" - } - }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/markdown-it-container": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/@types/markdown-it-container/-/markdown-it-container-2.0.5.tgz", - "integrity": "sha512-8v5jIC5gcCUv+JcD0DExwNBkoKC0kLB4acensF0NoNlTIcXmQxF3RDjzAdIW82sXSoR+n772ePguxIWlq2ELvA==", - "dependencies": { - "@types/markdown-it": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "node_modules/@types/prismjs": { - "version": "1.26.0", - "resolved": "https://registry.npmmirror.com/@types/prismjs/-/prismjs-1.26.0.tgz", - "integrity": "sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==", - "dev": true - }, - "node_modules/@types/vscode-webview": { - "version": "1.57.1", - "resolved": "https://registry.npmmirror.com/@types/vscode-webview/-/vscode-webview-1.57.1.tgz", - "integrity": "sha512-ghW5SfuDmsGDS2A4xkvGsLwDRNc3Vj5rS6rPOyPm/IryZuf3wceZKxgYaUoW+k9f0f/CB7y2c1rRsdOWZWn0PQ==", - "dev": true - }, - "node_modules/@vscode/webview-ui-toolkit": { - "version": "1.2.2", - "resolved": "https://registry.npmmirror.com/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.2.tgz", - "integrity": "sha512-xIQoF4FC3Xh6d7KNKIoIezSiFWYFuf6gQMdDyKueKBFGeKwaHWEn+dY2g3makvvEsNMEDji/woEwvg9QSbuUsw==", - "dependencies": { - "@microsoft/fast-element": "^1.6.2", - "@microsoft/fast-foundation": "^2.38.0", - "@microsoft/fast-react-wrapper": "^0.1.18" - }, - "peerDependencies": { - "react": ">=16.9.0" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/exenv-es6": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/exenv-es6/-/exenv-es6-1.1.1.tgz", - "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, - "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-container": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/markdown-it-container/-/markdown-it-container-3.0.0.tgz", - "integrity": "sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmmirror.com/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tabbable": { - "version": "5.3.3", - "resolved": "https://registry.npmmirror.com/tabbable/-/tabbable-5.3.3.tgz", - "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==" - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - } - } -} diff --git a/webview/package.json b/webview/package.json index 8eaa25b2809161211b04cd02c61bf2c61a0cee51..fc24e1b405b311c8d0d3eae119ba682cbb98e0e5 100644 --- a/webview/package.json +++ b/webview/package.json @@ -1,23 +1,23 @@ { - "name": "rvportingtool-webview", - "description": "VSCode WebView Part of Software Porting Tool for RISC-V", - "author": "tcse-iscas", - "license": "MulanPSL-2.0", - "version": "0.0.1", - "publisher": "tcse-iscas", - "engines": { - "node": "*" - }, - "dependencies": { - "@types/markdown-it": "^12.2.3", - "@types/markdown-it-container": "^2.0.5", - "@vscode/webview-ui-toolkit": "^1.2.2", - "markdown-it": "^13.0.1", - "markdown-it-container": "^3.0.0", - "prismjs": "^1.29.0" - }, - "devDependencies": { - "@types/prismjs": "^1.26.0", - "@types/vscode-webview": "^1.57.1" - } + "name": "rvportingtool-webview", + "description": "VSCode WebView Part of Software Porting Tool for RISC-V", + "author": "tcse-iscas", + "license": "MulanPSL-2.0", + "version": "0.0.1", + "publisher": "tcse-iscas", + "engines": { + "node": "*" + }, + "dependencies": { + "@types/markdown-it": "^12.2.3", + "@types/markdown-it-container": "^2.0.5", + "@vscode/webview-ui-toolkit": "^1.2.2", + "markdown-it": "^13.0.1", + "markdown-it-container": "^3.0.0", + "prismjs": "^1.29.0" + }, + "devDependencies": { + "@types/prismjs": "^1.26.0", + "@types/vscode-webview": "^1.57.1" + } } diff --git a/webview/pnpm-lock.yaml b/webview/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1cf49d99837997d4d15a03269718f8424b653f72 --- /dev/null +++ b/webview/pnpm-lock.yaml @@ -0,0 +1,206 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@types/markdown-it': + specifier: ^12.2.3 + version: 12.2.3 + '@types/markdown-it-container': + specifier: ^2.0.5 + version: 2.0.5 + '@vscode/webview-ui-toolkit': + specifier: ^1.2.2 + version: 1.2.2(react@18.2.0) + markdown-it: + specifier: ^13.0.1 + version: 13.0.1 + markdown-it-container: + specifier: ^3.0.0 + version: 3.0.0 + prismjs: + specifier: ^1.29.0 + version: 1.29.0 + devDependencies: + '@types/prismjs': + specifier: ^1.26.0 + version: 1.26.0 + '@types/vscode-webview': + specifier: ^1.57.1 + version: 1.57.1 + +packages: + + '@microsoft/fast-element@1.11.0': + resolution: {integrity: sha512-VKJYMkS5zgzHHb66sY7AFpYv6IfFhXrjQcAyNgi2ivD65My1XOhtjfKez5ELcLFRJfgZNAxvI8kE69apXERTkw==} + + '@microsoft/fast-foundation@2.47.0': + resolution: {integrity: sha512-EyFuioaZQ9ngjUNRQi8R3dIPPsaNQdUOS+tP0G7b1MJRhXmQWIitBM6IeveQA6ZvXG6H21dqgrfEWlsYrUZ2sw==} + + '@microsoft/fast-react-wrapper@0.1.48': + resolution: {integrity: sha512-9NvEjru9Kn5ZKjomAMX6v+eF0DR+eDkxKDwDfi+Wb73kTbrNzcnmlwd4diN15ygH97kldgj2+lpvI4CKLQQWLg==} + peerDependencies: + react: '>=16.9.0' + + '@microsoft/fast-web-utilities@5.4.1': + resolution: {integrity: sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==} + + '@types/linkify-it@3.0.2': + resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} + + '@types/markdown-it-container@2.0.5': + resolution: {integrity: sha512-8v5jIC5gcCUv+JcD0DExwNBkoKC0kLB4acensF0NoNlTIcXmQxF3RDjzAdIW82sXSoR+n772ePguxIWlq2ELvA==} + + '@types/markdown-it@12.2.3': + resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} + + '@types/mdurl@1.0.2': + resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} + + '@types/prismjs@1.26.0': + resolution: {integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==} + + '@types/vscode-webview@1.57.1': + resolution: {integrity: sha512-ghW5SfuDmsGDS2A4xkvGsLwDRNc3Vj5rS6rPOyPm/IryZuf3wceZKxgYaUoW+k9f0f/CB7y2c1rRsdOWZWn0PQ==} + + '@vscode/webview-ui-toolkit@1.2.2': + resolution: {integrity: sha512-xIQoF4FC3Xh6d7KNKIoIezSiFWYFuf6gQMdDyKueKBFGeKwaHWEn+dY2g3makvvEsNMEDji/woEwvg9QSbuUsw==} + peerDependencies: + react: '>=16.9.0' + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + + exenv-es6@1.1.1: + resolution: {integrity: sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + linkify-it@4.0.1: + resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + markdown-it-container@3.0.0: + resolution: {integrity: sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==} + + markdown-it@13.0.1: + resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} + hasBin: true + + mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + + tabbable@5.3.3: + resolution: {integrity: sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + +snapshots: + + '@microsoft/fast-element@1.11.0': {} + + '@microsoft/fast-foundation@2.47.0': + dependencies: + '@microsoft/fast-element': 1.11.0 + '@microsoft/fast-web-utilities': 5.4.1 + tabbable: 5.3.3 + tslib: 1.14.1 + + '@microsoft/fast-react-wrapper@0.1.48(react@18.2.0)': + dependencies: + '@microsoft/fast-element': 1.11.0 + '@microsoft/fast-foundation': 2.47.0 + react: 18.2.0 + + '@microsoft/fast-web-utilities@5.4.1': + dependencies: + exenv-es6: 1.1.1 + + '@types/linkify-it@3.0.2': {} + + '@types/markdown-it-container@2.0.5': + dependencies: + '@types/markdown-it': 12.2.3 + + '@types/markdown-it@12.2.3': + dependencies: + '@types/linkify-it': 3.0.2 + '@types/mdurl': 1.0.2 + + '@types/mdurl@1.0.2': {} + + '@types/prismjs@1.26.0': {} + + '@types/vscode-webview@1.57.1': {} + + '@vscode/webview-ui-toolkit@1.2.2(react@18.2.0)': + dependencies: + '@microsoft/fast-element': 1.11.0 + '@microsoft/fast-foundation': 2.47.0 + '@microsoft/fast-react-wrapper': 0.1.48(react@18.2.0) + react: 18.2.0 + + argparse@2.0.1: {} + + entities@3.0.1: {} + + exenv-es6@1.1.1: {} + + js-tokens@4.0.0: {} + + linkify-it@4.0.1: + dependencies: + uc.micro: 1.0.6 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + markdown-it-container@3.0.0: {} + + markdown-it@13.0.1: + dependencies: + argparse: 2.0.1 + entities: 3.0.1 + linkify-it: 4.0.1 + mdurl: 1.0.1 + uc.micro: 1.0.6 + + mdurl@1.0.1: {} + + prismjs@1.29.0: {} + + react@18.2.0: + dependencies: + loose-envify: 1.4.0 + + tabbable@5.3.3: {} + + tslib@1.14.1: {} + + uc.micro@1.0.6: {} diff --git a/webview/src/wikiView/initUI.ts b/webview/src/wikiView/initUI.ts index 89364ee9007bb03aae4658f50da731153b2e1c40..5e933ede89222dc38b1b75a0d34a13baf5c27d50 100644 --- a/webview/src/wikiView/initUI.ts +++ b/webview/src/wikiView/initUI.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,58 +8,60 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Client Wiki View WebView Init UI Script for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 27, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import { - Checkbox, - DataGrid, - provideVSCodeDesignSystem, - vsCodeBadge, - vsCodeButton, - vsCodeCheckbox, - vsCodeDataGrid, - vsCodeDataGridCell, - vsCodeDataGridRow, - vsCodeDivider, - vsCodeDropdown, - vsCodeLink, - vsCodeOption, - vsCodePanels, - vsCodePanelTab, - vsCodePanelView, - vsCodeProgressRing, - vsCodeRadio, - vsCodeRadioGroup, - vsCodeTag, - vsCodeTextArea, - vsCodeTextField, + Checkbox, + DataGrid, + provideVSCodeDesignSystem, + vsCodeBadge, + vsCodeButton, + vsCodeCheckbox, + vsCodeDataGrid, + vsCodeDataGridCell, + vsCodeDataGridRow, + vsCodeDivider, + vsCodeDropdown, + vsCodeLink, + vsCodeOption, + vsCodePanels, + vsCodePanelTab, + vsCodePanelView, + vsCodeProgressRing, + vsCodeRadio, + vsCodeRadioGroup, + vsCodeTag, + vsCodeTextArea, + vsCodeTextField, } from "@vscode/webview-ui-toolkit"; export function initUI() { - provideVSCodeDesignSystem().register( - vsCodeBadge(), - vsCodeButton(), - vsCodeCheckbox(), - vsCodeDataGrid(), - vsCodeDataGridCell(), - vsCodeDataGridRow(), - vsCodeDivider(), - vsCodeDropdown(), - vsCodeLink(), - vsCodeOption(), - vsCodePanels(), - vsCodePanelTab(), - vsCodePanelView(), - vsCodeProgressRing(), - vsCodeRadio(), - vsCodeRadioGroup(), - vsCodeTag(), - vsCodeTextArea(), - vsCodeTextField() - ); + provideVSCodeDesignSystem().register( + vsCodeBadge(), + vsCodeButton(), + vsCodeCheckbox(), + vsCodeDataGrid(), + vsCodeDataGridCell(), + vsCodeDataGridRow(), + vsCodeDivider(), + vsCodeDropdown(), + vsCodeLink(), + vsCodeOption(), + vsCodePanels(), + vsCodePanelTab(), + vsCodePanelView(), + vsCodeProgressRing(), + vsCodeRadio(), + vsCodeRadioGroup(), + vsCodeTag(), + vsCodeTextArea(), + vsCodeTextField() + ); } diff --git a/webview/src/wikiView/main.ts b/webview/src/wikiView/main.ts index 7708c82b49ecb3805a99c10c93846a94480f6623..659d08d5aeae4477f7767170bfde172d799ef4f5 100644 --- a/webview/src/wikiView/main.ts +++ b/webview/src/wikiView/main.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Client Wiki View WebView Script for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 26, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import { initMDTransformer } from "./mdTransformer"; @@ -30,17 +32,17 @@ initUI(); initMDTransformer(msgHandlers); window.addEventListener("load", () => { - console.log("WebView Initialized, state: ", vscode.getState()); - prism.highlightAll(); - vscode.postMessage({ - type: "WikiViewLoadedMsg", - }); + console.log("WebView Initialized, state: ", vscode.getState()); + prism.highlightAll(); + vscode.postMessage({ + type: "WikiViewLoadedMsg", + }); }); window.addEventListener("message", (ev) => { - const message = ev.data; - console.info("WebView received message: ", message); - if (message.type && msgHandlers.has(message.type)) { - msgHandlers.get(message.type)!(message); - } + const message = ev.data; + console.info("WebView received message: ", message); + if (message.type && msgHandlers.has(message.type)) { + msgHandlers.get(message.type)!(message); + } }); diff --git a/webview/src/wikiView/mdTransformer.ts b/webview/src/wikiView/mdTransformer.ts index f5086cac8a3fbfacbdb0b90f0f7de1ab3b9a3926..724a492097b48ed4f7d562117e5e34682fcfaf1e 100644 --- a/webview/src/wikiView/mdTransformer.ts +++ b/webview/src/wikiView/mdTransformer.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,11 +8,13 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Client Wiki View WebView Script for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 26, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ import * as MarkdownIt from "markdown-it"; @@ -21,39 +23,39 @@ import { WikiViewApplyMarkdownMsg } from "../../../common/src/types/wikiView"; const prism = window.Prism; const engine: MarkdownIt = require("markdown-it")({ - html: true, + html: true, }); engine.use(require("markdown-it-container"), "details", { - validate: function (params: any) { - return params.trim().match(/^details\s+(.*)$/) !== null; - }, + validate: function (params: any) { + return params.trim().match(/^details\s+(.*)$/) !== null; + }, - render: function (tokens: Token[], idx: number) { - var m = tokens[idx].info.trim().match(/^details\s+(.*)$/); - if (m && tokens[idx].nesting === 1) { - return "
" + engine.utils.escapeHtml(m[1]) + "\n"; - } else { - return "
\n"; - } - }, + render: function (tokens: Token[], idx: number) { + var m = tokens[idx].info.trim().match(/^details\s+(.*)$/); + if (m && tokens[idx].nesting === 1) { + return "
" + engine.utils.escapeHtml(m[1]) + "\n"; + } else { + return "
\n"; + } + }, }); // tag 转 vscode-tag const htmlInlineOldRule = engine.renderer.rules.html_inline!; engine.renderer.rules.html_inline = function (tokens, idx, options, env, self) { - const token = tokens[idx]; - token.content = token.content.replace(/(<)([/]*)(tag)/g, "$1$2vscode-tag"); - return htmlInlineOldRule(tokens, idx, options, env, self); + const token = tokens[idx]; + token.content = token.content.replace(/(<)([/]*)(tag)/g, "$1$2vscode-tag"); + return htmlInlineOldRule(tokens, idx, options, env, self); }; engine.renderer.rules.fence; export function initMDTransformer(msgHandlers: Map void>) { - msgHandlers.set("WikiViewApplyMarkdownMsg", (msg: WikiViewApplyMarkdownMsg) => { - const mainDiv = document.getElementById("main")!; - console.info("Rendering Markdown to HTML..."); - mainDiv.innerHTML = engine.render(msg.content); - prism.highlightAll(); - window.scrollTo(0, 0); - }); + msgHandlers.set("WikiViewApplyMarkdownMsg", (msg: WikiViewApplyMarkdownMsg) => { + const mainDiv = document.getElementById("main")!; + console.info("Rendering Markdown to HTML..."); + mainDiv.innerHTML = engine.render(msg.content); + prism.highlightAll(); + window.scrollTo(0, 0); + }); } diff --git a/webview/src/wikiView/state.ts b/webview/src/wikiView/state.ts index 2eae4d5f5967dd46bc77390024262c71ac6563a9..9b86dda2a2c31e5396f90c2f8f28160b9371e104 100644 --- a/webview/src/wikiView/state.ts +++ b/webview/src/wikiView/state.ts @@ -1,5 +1,5 @@ /*************************************************************************************** - * Copyright (c) 2023 TCSE-ISCAS. All rights reserved. + * Copyright (c) 2023-2024 RVSmartPorting. All rights reserved. * RVPortingTool is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: @@ -8,15 +8,17 @@ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PSL v2 for more details. - * + **************************************************************************************/ + +/*************************************************************************************** * Client Wiki View WebView Persisted State Definition for RVPortingTool VSCode Extension * * Author: Lightning Rainstorm - * Last Change: Mar 27, 2023 + * Last Change: Sep 6, 2024 **************************************************************************************/ /** WikiViewState */ export class WikiViewState { - /** 最后一次查看的规则 ID */ - public lastRuleId?: string; + /** 最后一次查看的规则 ID */ + public lastRuleId?: string; } diff --git a/webview/tsconfig.json b/webview/tsconfig.json index 59d7a887400177b466fd78d42270c8ebaf38b2df..c2857bd2ddc2fa351434dc1bbdd88c6ce8f826c7 100644 --- a/webview/tsconfig.json +++ b/webview/tsconfig.json @@ -1,17 +1,17 @@ { - "compilerOptions": { - "composite": true, - "target": "ES2020", - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "outDir": "out", - "rootDir": "..", - "sourceMap": true, - "strict": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "moduleResolution": "node", - "skipLibCheck": true - }, - "include": ["src", "../common/src"], - "exclude": ["node_modules", ".vscode-test"] + "compilerOptions": { + "composite": true, + "target": "ES2020", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "outDir": "out", + "rootDir": "..", + "sourceMap": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "moduleResolution": "node", + "skipLibCheck": true + }, + "include": ["src", "../common/src"], + "exclude": ["node_modules", ".vscode-test"] }