├── .npmrc ├── .gitignore ├── images └── icon.png ├── tsconfig.json ├── .vscode ├── extensions.json ├── settings.json ├── tasks.json └── launch.json ├── .vscodeignore ├── .prettierrc ├── CHANGELOG.md ├── server ├── tsconfig.json ├── package.json ├── src │ ├── diagnostic │ │ ├── index.ts │ │ ├── input.ts │ │ ├── select.ts │ │ ├── card.ts │ │ ├── modal.ts │ │ ├── menu.ts │ │ ├── tooltip.ts │ │ ├── drawer.ts │ │ └── dropdown.ts │ ├── server.ts │ ├── genDiagnostic.ts │ └── utils.ts └── package-lock.json ├── .prettierignore ├── LEGAL.md ├── .eslintrc.json ├── LICENSE ├── src ├── umi-config-completion.ts ├── provideCodeActions.ts ├── util.ts ├── extension.ts ├── jump-to.ts └── props-hover.ts ├── README.md ├── webpack.config.js ├── package.json └── pnpm-lock.yaml /.npmrc: -------------------------------------------------------------------------------- 1 | enable-pre-post-scripts = true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | node_modules 4 | .vscode-test/ 5 | *.vsix 6 | -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ant-design/antd-vsce/HEAD/images/icon.png -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2020", 5 | "lib": ["ES2020"], 6 | "sourceMap": true, 7 | "strict": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": ["dbaeumer.vscode-eslint", "amodio.tsl-problem-matcher"] 5 | } 6 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/** 4 | node_modules/** 5 | src/** 6 | .gitignore 7 | .yarnrc 8 | webpack.config.js 9 | vsc-extension-quickstart.md 10 | **/tsconfig.json 11 | **/.eslintrc.json 12 | **/*.map 13 | **/*.ts 14 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "printWidth": 100, 5 | "proseWrap": "never", 6 | "overrides": [ 7 | { 8 | "files": ".prettierrc", 9 | "options": { "parser": "json" } 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "development-efficiency" extension will be documented in this file. 4 | 5 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 6 | 7 | ## [Unreleased] 8 | 9 | - Initial release -------------------------------------------------------------------------------- /server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "lib": ["es2020"], 5 | "module": "commonjs", 6 | "moduleResolution": "node", 7 | "sourceMap": true, 8 | "strict": true, 9 | "outDir": "out", 10 | "rootDir": "src" 11 | }, 12 | "include": ["src"], 13 | "exclude": ["node_modules", ".vscode-test"] 14 | } 15 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.svg 2 | **/*.webp 3 | **/*.csv 4 | .dingpushrc 5 | package.json 6 | .umi 7 | .umi-production 8 | dist 9 | .dockerignore 10 | .DS_Store 11 | .eslintignore 12 | *.png 13 | *.toml 14 | docker 15 | .editorconfig 16 | Dockerfile* 17 | .gitignore 18 | .prettierignore 19 | LICENSE 20 | .eslintcache 21 | *.lock 22 | yarn-error.log 23 | .history 24 | *.mp4 25 | .node 26 | OWNERS 27 | *.zip 28 | .env 29 | -------------------------------------------------------------------------------- /LEGAL.md: -------------------------------------------------------------------------------- 1 | Legal Disclaimer 2 | 3 | Within this source code, the comments in Chinese shall be the original, governing version. Any comment in other languages are for reference only. In the event of any conflict between the Chinese language version comments and other language version comments, the Chinese language version shall prevail. 4 | 5 | 法律免责声明 6 | 7 | 关于代码注释部分,中文注释为官方版本,其它语言注释仅做参考。中文注释可能与其它语言注释存在不一致,当中文注释与其它语言注释存在不一致时,请以中文注释为准。 -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "plugins": [ 9 | "@typescript-eslint" 10 | ], 11 | "rules": { 12 | "@typescript-eslint/naming-convention": "warn", 13 | "@typescript-eslint/semi": "warn", 14 | "curly": "warn", 15 | "eqeqeq": "warn", 16 | "no-throw-literal": "warn", 17 | "semi": "off" 18 | }, 19 | "ignorePatterns": [ 20 | "out", 21 | "dist", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false, // set this to true to hide the "out" folder with the compiled JS files 5 | "dist": false // set this to true to hide the "dist" folder with the compiled JS files 6 | }, 7 | "search.exclude": { 8 | "out": true, // set this to false to include "out" folder in search results 9 | "dist": true // set this to false to include "dist" folder in search results 10 | }, 11 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 12 | "typescript.tsc.autoDetect": "off" 13 | } -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lsp-sample-server", 3 | "description": "Example implementation of a language server in node.", 4 | "version": "1.0.0", 5 | "author": "Microsoft Corporation", 6 | "license": "MIT", 7 | "engines": { 8 | "node": "*" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/Microsoft/vscode-extension-samples" 13 | }, 14 | "dependencies": { 15 | "@ant-design/doc": "^1.0.6", 16 | "@babel/parser": "^7.23.9", 17 | "@babel/traverse": "^7.23.9", 18 | "@babel/types": "^7.23.9", 19 | "vscode-languageserver": "^9.0.1", 20 | "vscode-languageserver-textdocument": "^1.0.11" 21 | }, 22 | "scripts": {} 23 | } 24 | -------------------------------------------------------------------------------- /server/src/diagnostic/index.ts: -------------------------------------------------------------------------------- 1 | import { cardDiagnostic } from './card'; 2 | import { drawerDiagnostic } from './drawer'; 3 | import { dropdownDiagnostic } from './dropdown'; 4 | import { inputDiagnostic } from './input'; 5 | import { menuDiagnostic } from './menu'; 6 | import { modalDiagnostic } from './modal'; 7 | import { selectDiagnostic } from './select'; 8 | import { tooltipDiagnostic } from './tooltip'; 9 | 10 | export const diagnosticMessageMap = new Map([ 11 | ['Drawer', drawerDiagnostic], 12 | ['Menu', menuDiagnostic], 13 | ['Dropdown', dropdownDiagnostic], 14 | ['Modal', modalDiagnostic], 15 | ['Card', cardDiagnostic], 16 | ['Input', inputDiagnostic], 17 | ['Tooltip', tooltipDiagnostic], 18 | ['Select', selectDiagnostic], 19 | // ['Popconfirm', modalDiagnostic], 20 | // ['Popover', modalDiagnostic], 21 | ]); 22 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$ts-webpack-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never", 13 | "group": "watchers" 14 | }, 15 | "group": { 16 | "kind": "build", 17 | "isDefault": true 18 | } 19 | }, 20 | { 21 | "type": "npm", 22 | "script": "watch-tests", 23 | "problemMatcher": "$tsc-watch", 24 | "isBackground": true, 25 | "presentation": { 26 | "reveal": "never", 27 | "group": "watchers" 28 | }, 29 | "group": "build" 30 | }, 31 | { 32 | "label": "tasks: watch-tests", 33 | "dependsOn": [ 34 | "npm: watch", 35 | "npm: watch-tests" 36 | ], 37 | "problemMatcher": [] 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/dist/**/*.js" 17 | ], 18 | "preLaunchTask": "${defaultBuildTask}" 19 | }, 20 | { 21 | "name": "Extension Tests", 22 | "type": "extensionHost", 23 | "request": "launch", 24 | "args": [ 25 | "--extensionDevelopmentPath=${workspaceFolder}", 26 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" 27 | ], 28 | "outFiles": [ 29 | "${workspaceFolder}/out/**/*.js", 30 | "${workspaceFolder}/dist/**/*.js" 31 | ], 32 | "preLaunchTask": "tasks: watch-tests" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2015 - present Microsoft Corporation 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /src/umi-config-completion.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import { Position, TextDocument } from 'vscode'; 3 | import { getProjectPath, slash } from './util'; 4 | 5 | export function provideCompletionItems(document: TextDocument, position: Position) { 6 | try { 7 | const line = document.lineAt(position); 8 | const projectPath = getProjectPath(document); 9 | 10 | // 只截取到光标位置为止,防止一些特殊情况 11 | const lineText = line.text.substring(0, position.character); 12 | 13 | // 简单匹配,只要当前光标前的字符串为`this.dependencies.`都自动带出所有的依赖 14 | if (lineText.includes('form ') && projectPath) { 15 | const json = require(slash(`${projectPath}/package.json`)); 16 | const dependencies = Object.keys(json.dependencies || {}).concat( 17 | Object.keys(json.devDependencies || {}), 18 | ); 19 | return dependencies.map((dep) => { 20 | // vscode.CompletionItemKind 表示提示的类型 21 | return new vscode.CompletionItem(dep, vscode.CompletionItemKind.Field); 22 | }); 23 | } 24 | } catch (error) { 25 | console.log(error); 26 | } 27 | } 28 | 29 | /** 30 | * 光标选中当前自动补全item时触发动作,一般情况下无需处理 31 | * @param {*} item 32 | * @param {*} token 33 | */ 34 | export function resolveCompletionItem() { 35 | return null; 36 | } 37 | -------------------------------------------------------------------------------- /server/src/server.ts: -------------------------------------------------------------------------------- 1 | import { TextDocument } from 'vscode-languageserver-textdocument'; 2 | import { 3 | Diagnostic, 4 | InitializeResult, 5 | ProposedFeatures, 6 | TextDocumentSyncKind, 7 | TextDocuments, 8 | createConnection, 9 | } from 'vscode-languageserver/node'; 10 | import { getJSXComponentList } from './genDiagnostic'; 11 | 12 | const connection = createConnection(ProposedFeatures.all); 13 | 14 | // 创建一个简单的文本文档管理器。 15 | const documents: TextDocuments = new TextDocuments(TextDocument); 16 | 17 | connection.onInitialize(() => { 18 | const result: InitializeResult = { 19 | capabilities: { 20 | textDocumentSync: TextDocumentSyncKind.Incremental, 21 | }, 22 | serverInfo: { 23 | name: 'Ant Design Pro LSP Server', 24 | version: '1.0', 25 | }, 26 | }; 27 | return result; 28 | }); 29 | 30 | // 文本文档内容已更改。当文本文档首次打开或其内容已更改时,会发出此事件。 31 | documents.onDidChangeContent((change) => { 32 | const diagnostics: Diagnostic[] = getJSXComponentList(change.document); 33 | connection.sendDiagnostics({ uri: change.document.uri, diagnostics }); 34 | }); 35 | 36 | connection.onDidChangeWatchedFiles((_change) => { 37 | // 在 VSCode 中监视的文件发生更改 38 | connection.console.log('我们收到了文件更改事件'); 39 | }); 40 | 41 | // 让文本文档管理器在连接上监听打开、更改和关闭文本文档事件 42 | documents.listen(connection); 43 | 44 | // 在连接上监听 45 | connection.listen(); 46 | -------------------------------------------------------------------------------- /src/provideCodeActions.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CodeAction, 3 | CodeActionContext, 4 | CodeActionKind, 5 | Range, 6 | Selection, 7 | TextDocument, 8 | WorkspaceEdit, 9 | } from 'vscode'; 10 | 11 | /** 12 | * 提供代码操作的函数。 13 | * 14 | * @param document - 当前文档对象。 15 | * @param range - 代码操作的范围。 16 | * @param context - 代码操作的上下文。 17 | * @returns 代码操作的数组。 18 | */ 19 | export async function provideCodeActions( 20 | document: TextDocument, 21 | _: Range | Selection, 22 | context: CodeActionContext, 23 | ) { 24 | const actions: CodeAction[] = []; 25 | context.diagnostics.forEach((diagnostic) => { 26 | // 如果诊断信息是自己的插件产生的,则进行处理 27 | if (diagnostic.source !== 'Ant Design Pro For VSCode') { 28 | return; 29 | } 30 | const { data } = diagnostic as any as { 31 | data: { 32 | code: string; 33 | actionName: string; 34 | }; 35 | }; 36 | // 如果没有代码操作,则直接返回 37 | if (!data?.code) { 38 | return; 39 | } 40 | const action = new CodeAction(data.actionName, CodeActionKind.QuickFix); 41 | 42 | action.diagnostics = [diagnostic]; 43 | 44 | // 修改完成后,格式化文档 45 | action.command = { 46 | command: 'editor.action.formatDocument', 47 | title: '格式化文档', 48 | }; 49 | 50 | const edit = new WorkspaceEdit(); 51 | 52 | edit.replace(document.uri, diagnostic.range, data.code); 53 | 54 | action.edit = edit; 55 | 56 | actions.push(action); 57 | }); 58 | 59 | return actions; 60 | } 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ant Design Pro For VSCode 2 | 3 | ## 功能特点 4 | 5 | - **跳转功能**:在 umi 项目中,按住 Ctrl 键点击路由可以直接跳转到对应的路由地址。 6 | - **配置文件提示**:对于 umi 项目和 antd 组件配置文件中的配置,提供详细的文档提示,帮助开发者更快速地配置项目和组件。 7 | - **属性提示**:悬停在属性上时,提供相关文档和类型提示,让开发者更清晰地了解属性的用途和类型。 8 | - **过期属性提示和自动修复**:提供 antd 组件的过期属性提示,并支持自动修复,确保代码始终保持最新和规范。 9 | 10 | ## 使用方式 11 | 12 | - 在配置文件中查看详细配置信息和文档提示。 ![在配置文件中查看详细配置信息和文档提示。](https://mdn.alipayobjects.com/huamei_gcee1x/afts/img/A*zb7gRI2bnDQAAAAAAAAAAAAADml6AQ/original) 13 | - 悬停在属性上可查看相关文档和类型提示。![悬停在属性上可查看相关文档和类型提示。](https://mdn.alipayobjects.com/huamei_gcee1x/afts/img/A*lPg2SIAUhx4AAAAAAAAAAAAADml6AQ/original) 14 | - 按住 Ctrl 键点击路由可以跳转到路由地址。![键点击路由可以跳转到路由地址。](https://mdn.alipayobjects.com/huamei_gcee1x/afts/img/A*ORhdSoh-lugAAAAAAAAAAAAADml6AQ/original) 15 | - 提供 antd 组件的过期属性提示,并支持自动修复。![提供 antd 组件的过期属性提示,并支持自动修复。](https://mdn.alipayobjects.com/huamei_ptjqan/afts/img/A*KT8HTZHmoqAAAAAAAAAAAAAADkN6AQ/original) 16 | 17 | ## 安装 18 | 19 | https://marketplace.visualstudio.com/VSCode 中搜索 Ant Design Pro For VSCode。 20 | 21 | ## 仓库信息 22 | 23 | - **仓库地址**:[https://github.com/ant-design/antd-vsce](https://github.com/ant-design/antd-vsce) 24 | 25 | ## 作者信息 26 | 27 | - **作者**:chenshuai2144 28 | - **联系邮箱**:qixian.cs@outlook.com 29 | 30 | ## 主要文件 31 | 32 | - **主文件**:./dist/extension.js 33 | 34 | ## 反馈与贡献 35 | 36 | 如果您发现任何问题或有任何建议,欢迎在 GitHub 仓库中提出 issue 或 Pull Request,让我们一起改进 Ant Design Pro For VSCode 插件,为开发者提供更好的开发体验。 37 | 38 | 希望这份更详细的 README 能够帮助您更好地了解 Ant Design Pro For VSCode 插件的功能特点和使用方式。如有任何疑问或建议,请随时联系作者或在仓库中留言。感谢您的支持与关注! 39 | 40 | ## 版本要求 41 | 42 | 插件要求 Visual Studio Code 版本为 ^1.40.0 43 | 44 | ## 许可证 45 | 46 | 该插件遵循 MIT 许可证。详情请参阅 LICENSE 文件。 47 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | //@ts-check 2 | 3 | 'use strict'; 4 | 5 | const path = require('path'); 6 | 7 | //@ts-check 8 | /** @typedef {import('webpack').Configuration} WebpackConfig **/ 9 | 10 | /** @type WebpackConfig */ 11 | const extensionConfig = { 12 | target: 'node', // VS Code extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ 13 | mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') 14 | 15 | entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ 16 | output: { 17 | // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ 18 | path: path.resolve(__dirname, 'dist'), 19 | filename: 'extension.js', 20 | libraryTarget: 'commonjs2', 21 | }, 22 | externals: { 23 | vscode: 'commonjs vscode', // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ 24 | // modules added here also need to be added in the .vscodeignore file 25 | }, 26 | resolve: { 27 | // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader 28 | extensions: ['.ts', '.js'], 29 | }, 30 | module: { 31 | rules: [ 32 | { 33 | test: /\.ts$/, 34 | exclude: /node_modules/, 35 | use: [ 36 | { 37 | loader: 'ts-loader', 38 | }, 39 | ], 40 | }, 41 | ], 42 | }, 43 | devtool: 'nosources-source-map', 44 | infrastructureLogging: { 45 | level: 'log', // enables logging required for problem matchers 46 | }, 47 | }; 48 | module.exports = [extensionConfig]; 49 | -------------------------------------------------------------------------------- /src/util.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as path from 'path'; 3 | import * as vscode from 'vscode'; 4 | /** 5 | * 获取当前所在工程根目录,有3种使用方法:
6 | * getProjectPath(uri) uri 表示工程内某个文件的路径
7 | * getProjectPath(document) document 表示当前被打开的文件document对象
8 | * getProjectPath() 会自动从 activeTextEditor 拿document对象,如果没有拿到则报错 9 | * @param {*} document 10 | */ 11 | export const getProjectPath = (document: any) => { 12 | if (!document) { 13 | document = vscode.window.activeTextEditor ? vscode.window.activeTextEditor.document : null; 14 | } 15 | if (!document) { 16 | vscode.window.showErrorMessage('当前激活的编辑器不是文件或者没有文件被打开!'); 17 | return ''; 18 | } 19 | 20 | const currentFile = (document.uri ? document.uri : document).fsPath; 21 | let projectPath = null; 22 | 23 | let workspaceFolders = 24 | vscode.workspace.workspaceFolders?.map((item) => { 25 | return slash(item.uri.fsPath); 26 | }) || []; 27 | 28 | if (workspaceFolders.length === 1) { 29 | const rootPath = workspaceFolders[0]; 30 | if (fs.readdirSync(rootPath).find((file) => file.includes('package.json'))) { 31 | return rootPath; 32 | } 33 | } 34 | workspaceFolders.forEach((folder) => { 35 | if (currentFile.indexOf(folder) === 0) { 36 | projectPath = folder; 37 | } 38 | }); 39 | if (!projectPath) { 40 | vscode.window.showErrorMessage('获取工程根路径异常!'); 41 | return ''; 42 | } 43 | return projectPath; 44 | }; 45 | /** 46 | * 获取当前工程名 47 | */ 48 | export const getProjectName = function (projectPath: string) { 49 | return path.basename(projectPath); 50 | }; 51 | 52 | export const slash = (input: string) => { 53 | const isExtendedLengthPath = /^\\\\\?\\/.test(input); 54 | 55 | if (isExtendedLengthPath) { 56 | return input; 57 | } 58 | 59 | return input.replace(/\\/g, '/'); 60 | }; 61 | -------------------------------------------------------------------------------- /server/src/diagnostic/input.ts: -------------------------------------------------------------------------------- 1 | import { Diagnostic, DiagnosticSeverity, Position } from 'vscode-languageserver'; 2 | import { JSXComponentType } from '../genDiagnostic'; 3 | import * as t from '@babel/types'; 4 | import { borderedToVariant } from '../utils'; 5 | import generate from '@babel/generator'; 6 | 7 | export const inputDiagnostic = (item: JSXComponentType) => { 8 | const keys = item.props.map((prop) => prop?.name); 9 | return item.props 10 | .map((prop) => { 11 | if (!prop) { 12 | return; 13 | } 14 | const diagnostic: Diagnostic = { 15 | severity: DiagnosticSeverity.Error, 16 | range: { 17 | start: Position.create( 18 | prop.value?.loc?.start?.line! - 1, 19 | prop.value?.loc?.start?.column!, 20 | ), 21 | end: Position.create(prop.value?.loc?.end?.line! - 1, prop.value?.loc?.end?.column!), 22 | }, 23 | message: '', 24 | source: 'Ant Design Pro For VSCode', 25 | }; 26 | 27 | if (prop?.name === 'bordered') { 28 | if (keys.includes('variant')) { 29 | diagnostic.message = `bordered 和 variant 属性冲突,请删除 bordered 属性`; 30 | diagnostic.data = { 31 | code: '', 32 | actionName: '删除 bordered 属性', 33 | }; 34 | return diagnostic; 35 | } 36 | 37 | const action = borderedToVariant(prop.value); 38 | diagnostic.message = action?.message || ''; 39 | diagnostic.data = { 40 | code: 41 | typeof action?.props !== 'string' ? generate(action?.props as t.JSXAttribute).code : '', 42 | actionName: action?.actionName, 43 | }; 44 | } 45 | if (!diagnostic.message) { 46 | } 47 | return diagnostic; 48 | }) 49 | .filter((item) => item?.message) as Diagnostic[]; 50 | }; 51 | -------------------------------------------------------------------------------- /server/src/diagnostic/select.ts: -------------------------------------------------------------------------------- 1 | import { Diagnostic, DiagnosticSeverity, Position } from 'vscode-languageserver'; 2 | import { JSXComponentType } from '../genDiagnostic'; 3 | import * as t from '@babel/types'; 4 | import { borderedToVariant } from '../utils'; 5 | import generate from '@babel/generator'; 6 | 7 | export const selectDiagnostic = (item: JSXComponentType) => { 8 | const keys = item.props.map((prop) => prop?.name); 9 | return item.props 10 | .map((prop) => { 11 | if (!prop) { 12 | return; 13 | } 14 | const diagnostic: Diagnostic = { 15 | severity: DiagnosticSeverity.Error, 16 | range: { 17 | start: Position.create( 18 | prop.value?.loc?.start?.line! - 1, 19 | prop.value?.loc?.start?.column!, 20 | ), 21 | end: Position.create(prop.value?.loc?.end?.line! - 1, prop.value?.loc?.end?.column!), 22 | }, 23 | message: '', 24 | source: 'Ant Design Pro For VSCode', 25 | }; 26 | 27 | if (prop?.name === 'bordered') { 28 | if (keys.includes('variant')) { 29 | diagnostic.message = `bordered 和 variant 属性冲突,请删除 bordered 属性`; 30 | diagnostic.data = { 31 | code: '', 32 | actionName: '删除 bordered 属性', 33 | }; 34 | return diagnostic; 35 | } 36 | 37 | const action = borderedToVariant(prop.value); 38 | diagnostic.message = action?.message || ''; 39 | diagnostic.data = { 40 | code: 41 | typeof action?.props !== 'string' ? generate(action?.props as t.JSXAttribute).code : '', 42 | actionName: action?.actionName, 43 | }; 44 | } 45 | if (!diagnostic.message) { 46 | } 47 | return diagnostic; 48 | }) 49 | .filter((item) => item?.message) as Diagnostic[]; 50 | }; 51 | -------------------------------------------------------------------------------- /server/src/diagnostic/card.ts: -------------------------------------------------------------------------------- 1 | import { Diagnostic, DiagnosticSeverity, Position } from 'vscode-languageserver'; 2 | import { JSXComponentType } from '../genDiagnostic'; 3 | import generate from '@babel/generator'; 4 | import { xxxStyleToStylesBody } from '../utils'; 5 | 6 | export const cardDiagnostic = (item: JSXComponentType) => { 7 | const keys = item.props.map((prop) => prop.name); 8 | return item.props 9 | .map((prop) => { 10 | if (!prop) { 11 | return; 12 | } 13 | const diagnostic: Diagnostic = { 14 | severity: DiagnosticSeverity.Error, 15 | range: { 16 | start: Position.create( 17 | prop.value?.loc?.start?.line! - 1, 18 | prop.value?.loc?.start?.column!, 19 | ), 20 | end: Position.create(prop.value?.loc?.end?.line! - 1, prop.value?.loc?.end?.column!), 21 | }, 22 | message: '', 23 | source: 'Ant Design Pro For VSCode', 24 | }; 25 | 26 | if (prop?.name === 'bodyStyle') { 27 | diagnostic.message = `bodyStyle 属性已废弃,请使用 styles.body 属性`; 28 | const bodyStyleValue = xxxStyleToStylesBody(prop.value); 29 | diagnostic.data = { 30 | code: generate(bodyStyleValue).code, 31 | actionName: '将 bodyStyle 替换为 styles.body', 32 | }; 33 | } 34 | 35 | if (prop?.name === 'headStyle') { 36 | diagnostic.message = `headStyle 属性已废弃,请使用 styles.body 属性`; 37 | const headStyleValue = xxxStyleToStylesBody(prop.value, 'header'); 38 | 39 | diagnostic.data = { 40 | code: generate(headStyleValue).code, 41 | actionName: '将 headStyle 替换为 styles.body', 42 | }; 43 | } 44 | 45 | if (!diagnostic.message) { 46 | return; 47 | } 48 | return diagnostic; 49 | }) 50 | .filter((item) => item?.message) as Diagnostic[]; 51 | }; 52 | -------------------------------------------------------------------------------- /server/src/diagnostic/modal.ts: -------------------------------------------------------------------------------- 1 | import { Diagnostic, DiagnosticSeverity, Position } from 'vscode-languageserver'; 2 | import { JSXComponentType } from '../genDiagnostic'; 3 | import * as t from '@babel/types'; 4 | import generate from '@babel/generator'; 5 | import { xxxStyleToStylesBody, visibleToOpen } from '../utils'; 6 | 7 | export const modalDiagnostic = (item: JSXComponentType) => { 8 | const keys = item.props.map((prop) => prop.name); 9 | return item.props 10 | .map((prop) => { 11 | if (!prop) { 12 | return; 13 | } 14 | const diagnostic: Diagnostic = { 15 | severity: DiagnosticSeverity.Error, 16 | range: { 17 | start: Position.create( 18 | prop.value?.loc?.start?.line! - 1, 19 | prop.value?.loc?.start?.column!, 20 | ), 21 | end: Position.create(prop.value?.loc?.end?.line! - 1, prop.value?.loc?.end?.column!), 22 | }, 23 | message: '', 24 | source: 'Ant Design Pro For VSCode', 25 | }; 26 | if (prop?.name === 'visible') { 27 | diagnostic.message = `visible 属性已废弃,请使用 open 属性`; 28 | const newProps = visibleToOpen(prop.value); 29 | diagnostic.data = { 30 | code: generate(newProps).code, 31 | actionName: '将 visible 替换为 open', 32 | }; 33 | } 34 | 35 | if (prop?.name === 'bodyStyle') { 36 | diagnostic.message = `bodyStyle 属性已废弃,请使用 styles.body 属性`; 37 | const bodyStyleValue = xxxStyleToStylesBody(prop.value); 38 | diagnostic.data = { 39 | code: generate(bodyStyleValue).code, 40 | actionName: '将 bodyStyle 替换为 styles.body', 41 | }; 42 | } 43 | 44 | if (prop?.name === 'maskStyle') { 45 | diagnostic.message = `maskStyle 属性已废弃,请使用 styles.mask 属性`; 46 | const maskStyleValue = xxxStyleToStylesBody(prop.value, 'mask'); 47 | diagnostic.data = { 48 | code: generate(maskStyleValue).code, 49 | actionName: '将 maskStyle 替换为 styles.mask', 50 | }; 51 | } 52 | 53 | if (!diagnostic.message) { 54 | return; 55 | } 56 | return diagnostic; 57 | }) 58 | .filter((item) => item?.message) as Diagnostic[]; 59 | }; 60 | -------------------------------------------------------------------------------- /server/src/diagnostic/menu.ts: -------------------------------------------------------------------------------- 1 | import { Diagnostic, DiagnosticSeverity, Position } from 'vscode-languageserver'; 2 | import { JSXComponentType } from '../genDiagnostic'; 3 | import * as t from '@babel/types'; 4 | import { jsxElementPropsListToArray, menuChildrenJsxElementToJSON } from '../utils'; 5 | import generate from '@babel/generator'; 6 | 7 | export const menuDiagnostic = (item: JSXComponentType) => { 8 | const keys = item.props.map((prop) => prop?.name); 9 | return item.props 10 | .map((prop) => { 11 | if (!prop) { 12 | return; 13 | } 14 | const diagnostic: Diagnostic = { 15 | severity: DiagnosticSeverity.Error, 16 | range: { 17 | start: Position.create( 18 | prop.value?.loc?.start?.line! - 1, 19 | prop.value?.loc?.start?.column!, 20 | ), 21 | end: Position.create(prop.value?.loc?.end?.line! - 1, prop.value?.loc?.end?.column!), 22 | }, 23 | message: '', 24 | source: 'Ant Design Pro For VSCode', 25 | }; 26 | 27 | if (prop?.name === 'children') { 28 | if (!keys.includes('items')) { 29 | diagnostic.message = `Menu 组件的 children 属性已废弃,请使用 items 属性`; 30 | const jsxItems: { 31 | name: string | t.JSXIdentifier; 32 | value: t.JSXAttribute | t.JSXEmptyExpression | t.SpreadElement; 33 | }[][] = []; 34 | 35 | if (t.isJSXFragment(prop.value?.value)) { 36 | const menuChildrenList = (prop.value.value as t.JSXFragment).children; 37 | 38 | menuChildrenList.forEach((child, index) => { 39 | const prop = menuChildrenJsxElementToJSON(child, index); 40 | if (prop) { 41 | jsxItems.push(prop); 42 | } 43 | }); 44 | } 45 | const items = t.jsxAttribute( 46 | t.jsxIdentifier('items'), 47 | t.jsxExpressionContainer(jsxElementPropsListToArray(jsxItems)), 48 | ); 49 | 50 | if (prop.parent) { 51 | prop.parent.children = []; 52 | prop.parent.openingElement.attributes.push(items); 53 | } 54 | diagnostic.data = { 55 | code: generate(prop.parent!).code, 56 | actionName: '将 children 替换为 items', 57 | }; 58 | } 59 | } 60 | if (!diagnostic.message) { 61 | } 62 | return diagnostic; 63 | }) 64 | .filter((item) => item?.message) as Diagnostic[]; 65 | }; 66 | -------------------------------------------------------------------------------- /server/src/diagnostic/tooltip.ts: -------------------------------------------------------------------------------- 1 | import { Diagnostic, DiagnosticSeverity, Position } from 'vscode-languageserver'; 2 | import { JSXComponentType } from '../genDiagnostic'; 3 | import { onVisibleChangeChangeToOnOpenChange, visibleToOpen } from '../utils'; 4 | import generate from '@babel/generator'; 5 | 6 | export const tooltipDiagnostic = (item: JSXComponentType) => { 7 | return item.props 8 | .map((prop) => { 9 | const diagnostic: Diagnostic = { 10 | severity: DiagnosticSeverity.Error, 11 | range: { 12 | start: Position.create( 13 | prop.value?.loc?.start?.line! - 1, 14 | prop.value?.loc?.start?.column!, 15 | ), 16 | end: Position.create(prop.value?.loc?.end?.line! - 1, prop.value?.loc?.end?.column!), 17 | }, 18 | message: '', 19 | source: 'Ant Design Pro For VSCode', 20 | }; 21 | 22 | if (prop?.name === 'visible') { 23 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 open 属性`; 24 | const newProps = visibleToOpen(prop.value); 25 | diagnostic.data = { 26 | code: generate(newProps).code, 27 | actionName: `将 ${prop?.name} 替换为 open`, 28 | }; 29 | } 30 | 31 | if (prop?.name === 'onVisibleChange') { 32 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 onOpenChange 属性`; 33 | const newProps = onVisibleChangeChangeToOnOpenChange(prop.value); 34 | diagnostic.data = { 35 | code: generate(newProps).code, 36 | actionName: `将 ${prop?.name} 替换为 onOpenChange`, 37 | }; 38 | } 39 | 40 | if (prop?.name === 'defaultVisible') { 41 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 defaultOpen 属性`; 42 | const newProps = visibleToOpen(prop.value, 'defaultOpen'); 43 | diagnostic.data = { 44 | code: generate(newProps).code, 45 | actionName: `将 ${prop?.name} 替换为 defaultOpen`, 46 | }; 47 | } 48 | 49 | if (prop?.name === 'afterVisibleChange') { 50 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 afterOpenChange 属性`; 51 | const newProps = onVisibleChangeChangeToOnOpenChange(prop.value, 'afterVisibleChange'); 52 | diagnostic.data = { 53 | code: generate(newProps).code, 54 | actionName: `将 ${prop?.name} 替换为 afterOpenChange`, 55 | }; 56 | } 57 | 58 | if (diagnostic.message) { 59 | return diagnostic; 60 | } 61 | return null; 62 | }) 63 | .filter((item) => item?.message) as Diagnostic[]; 64 | }; 65 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "antd-vesc", 3 | "displayName": "Ant Design Pro For VSCode", 4 | "version": "1.0.11", 5 | "description": "效能开发", 6 | "categories": [ 7 | "Other" 8 | ], 9 | "repository": { 10 | "type": "git", 11 | "url": "git@github.com:ant-design/antd-vsce.git" 12 | }, 13 | "publisher": "qixiancs", 14 | "main": "./dist/extension.js", 15 | "scripts": { 16 | "compile": "webpack", 17 | "compile-tests": "tsc -p . --outDir out", 18 | "lint": "eslint src --ext ts", 19 | "package": "webpack --mode production --devtool hidden-source-map && npm run tsc", 20 | "pretest": "pnpm run compile-tests && pnpm run compile && pnpm run lint", 21 | "test": "node ./out/test/runTest.js", 22 | "vscode:prepublish": "pnpm run package", 23 | "prettier": "prettier -c --write \"**/*.{css,less,js,ts,tsx,conf}\"", 24 | "watch": "webpack --watch", 25 | "watch-tests": "tsc -p . -w --outDir out", 26 | "tsc": "tsc -p ./server" 27 | }, 28 | "activationEvents": [ 29 | "onStartupFinished", 30 | "onLanguage:json", 31 | "onLanguage:typescript", 32 | "onLanguage:typescriptreact" 33 | ], 34 | "dependencies": { 35 | "@ant-design/doc": "^1.0.6", 36 | "@babel/core": "^7.23.9", 37 | "@babel/generator": "^7.23.6", 38 | "@babel/parser": "^7.23.9", 39 | "@babel/traverse": "^7.23.9", 40 | "@babel/types": "^7.23.9", 41 | "@types/babel__traverse": "^7.20.5", 42 | "execa": "^7.1.1", 43 | "vscode-languageclient": "^9.0.1", 44 | "vscode-languageserver": "^9.0.1", 45 | "vscode-languageserver-textdocument": "^1.0.11" 46 | }, 47 | "devDependencies": { 48 | "@types/babel__core": "^7.20.5", 49 | "@types/git-url-parse": "^9.0.1", 50 | "@types/glob": "^8.1.0", 51 | "@types/mocha": "^10.0.1", 52 | "@types/node": "20.2.5", 53 | "prettier-plugin-organize-imports": "^3.2.3", 54 | "prettier-plugin-packagejson": "^2.4.5", 55 | "prettier-plugin-two-style-order": "^1.0.1", 56 | "@types/vscode": "^1.40.0", 57 | "@typescript-eslint/eslint-plugin": "^5.59.8", 58 | "@typescript-eslint/parser": "^5.59.8", 59 | "@vscode/test-electron": "^2.3.2", 60 | "eslint": "^8.41.0", 61 | "glob": "^8.1.0", 62 | "mocha": "^10.2.0", 63 | "ts-loader": "^9.4.3", 64 | "typescript": "^5.1.3", 65 | "webpack": "^5.85.0", 66 | "webpack-cli": "^5.1.1" 67 | }, 68 | "engines": { 69 | "vscode": "^1.40.0" 70 | }, 71 | "author": { 72 | "chenshuai2144": "qixian.cs@outlook.com" 73 | }, 74 | "icon": "images/icon.png" 75 | } 76 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | // The module 'vscode' contains the VS Code extensibility API 2 | // Import the module and reference it with the alias vscode in your code below 3 | import * as path from 'path'; 4 | import * as vscode from 'vscode'; 5 | import { workspace } from 'vscode'; 6 | 7 | let client: LanguageClient; 8 | 9 | import { 10 | LanguageClient, 11 | LanguageClientOptions, 12 | ServerOptions, 13 | TransportKind, 14 | } from 'vscode-languageclient/node'; 15 | 16 | import { provideDefinition } from './jump-to'; 17 | import { provideHover } from './props-hover'; 18 | import { provideCodeActions } from './provideCodeActions'; 19 | import { provideCompletionItems, resolveCompletionItem } from './umi-config-completion'; 20 | 21 | export function activate(context: vscode.ExtensionContext) { 22 | const languageSelector = [ 23 | 'json', 24 | 'typescript', 25 | 'javascript', 26 | 'javascriptreact', 27 | 'typescriptreact', 28 | ]; 29 | context.subscriptions.push( 30 | // 注册跳转到定义 31 | vscode.languages.registerDefinitionProvider(languageSelector, { 32 | provideDefinition: provideDefinition as any, 33 | }), 34 | ); 35 | context.subscriptions.push( 36 | // 注册自动补全 37 | vscode.languages.registerCompletionItemProvider( 38 | languageSelector, 39 | { 40 | resolveCompletionItem, 41 | provideCompletionItems, 42 | }, 43 | '.', 44 | ), 45 | ); 46 | 47 | context.subscriptions.push( 48 | // 注册悬停提示 49 | vscode.languages.registerHoverProvider(languageSelector, { 50 | provideHover, 51 | }), 52 | ); 53 | 54 | vscode.languages.registerCodeActionsProvider(languageSelector, { 55 | // 注册代码操作 56 | provideCodeActions, 57 | }); 58 | 59 | const serverModule = context.asAbsolutePath(path.join('server', 'out', 'server.js')); 60 | 61 | // If the extension is launched in debug mode then the debug server options are used 62 | // Otherwise the run options are used 63 | const serverOptions: ServerOptions = { 64 | run: { module: serverModule, transport: TransportKind.ipc }, 65 | debug: { 66 | module: serverModule, 67 | transport: TransportKind.ipc, 68 | }, 69 | }; 70 | 71 | // Options to control the language client 72 | const clientOptions: LanguageClientOptions = { 73 | // Register the server for plain text documents 74 | documentSelector: languageSelector, 75 | synchronize: { 76 | // Notify the server about file changes to '.clientrc files contained in the workspace 77 | fileEvents: workspace.createFileSystemWatcher('**/.clientrc'), 78 | }, 79 | }; 80 | 81 | // Create the language client and start the client. 82 | client = new LanguageClient( 83 | 'languageServerExample', 84 | 'Language Server Example', 85 | serverOptions, 86 | clientOptions, 87 | ); 88 | 89 | // Start the client. This will also launch the server 90 | client.start(); 91 | } 92 | 93 | export function deactivate(): Thenable | undefined { 94 | if (!client) { 95 | return undefined; 96 | } 97 | return client.stop(); 98 | } 99 | -------------------------------------------------------------------------------- /src/jump-to.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 跳转到定义示例,本示例支持package.json中dependencies、devDependencies跳转到对应依赖包。 3 | */ 4 | import * as fs from 'fs'; 5 | import * as path from 'path'; 6 | import * as vscode from 'vscode'; 7 | import { Position, TextDocument } from 'vscode'; 8 | import * as util from './util'; 9 | 10 | /** 11 | * 查找文件定义的provider,匹配到了就return一个location,否则不做处理 12 | * 最终效果是,当按住Ctrl键时,如果return了一个location,字符串就会变成一个可以点击的链接,否则无任何效果 13 | * @param {*} document 14 | * @param {*} position 15 | * @param {*} token 16 | */ 17 | export function provideDefinition(document: TextDocument, position: Position) { 18 | const fileName = util.slash(document.fileName); 19 | const workDir = util.slash(path.dirname(fileName)); 20 | const projectPath = util.getProjectPath(document); 21 | const word = document.getText(document.getWordRangeAtPosition(position)); 22 | const line = document.lineAt(position); 23 | 24 | // 只处理package.json文件 25 | if (/\/package\.json$/.test(fileName)) { 26 | try { 27 | const json = JSON.parse(document.getText()); 28 | const dependencies = json.dependencies || {}; 29 | const devDependencies = json.devDependencies || {}; 30 | const packageNameRegex = /"([^"]+)":/; 31 | const matches = line.text.match(packageNameRegex) || []; 32 | const packageName = matches.length > 1 ? matches?.[1] : word; 33 | if (!dependencies[packageName] && !devDependencies[packageName]) { 34 | return; 35 | } 36 | 37 | // 因为运行环境问题,不能用 resolve 38 | // const destPath = require.resolve(`${packageName}`); 39 | let destPath = `${workDir}/node_modules/${packageName.replace(/"/g, '')}/package.json`; 40 | 41 | if (!fs.existsSync(destPath)) { 42 | return ''; 43 | } 44 | return new vscode.Location(vscode.Uri.file(destPath), new vscode.Position(0, 0)); 45 | } catch (error) { 46 | console.log(error); 47 | } 48 | } 49 | const relativePath = util.slash(path.relative(projectPath, fileName)); 50 | if (relativePath.includes('node_modules')) { 51 | return; 52 | } 53 | 54 | if (['config/routes.ts'].includes(relativePath) || ['config/config.ts'].includes(relativePath)) { 55 | const regex = /'([^']+)'/; 56 | const match = line.text.match(regex); 57 | 58 | if ( 59 | match && 60 | match.index && 61 | match?.length > 1 && 62 | match?.[1].includes(word) && 63 | line.text?.trim().startsWith('component') 64 | ) { 65 | const filePath = path.join(projectPath, 'src', 'pages', match?.[1]); 66 | let fileUrl = null; 67 | if (fs.existsSync(path.join(filePath, 'index.tsx'))) { 68 | fileUrl = path.join(filePath, 'index.tsx'); 69 | } 70 | 71 | if (fs.existsSync(path.join(filePath, 'index.jsx'))) { 72 | fileUrl = path.join(filePath, 'index.jsx'); 73 | } 74 | 75 | if (fs.existsSync(filePath + '.tsx')) { 76 | fileUrl = filePath + '.tsx'; 77 | } 78 | 79 | if (fs.existsSync(filePath + '.jsx')) { 80 | fileUrl = filePath + '.jsx'; 81 | } 82 | 83 | if (!fileUrl) { 84 | return null; 85 | } 86 | 87 | return { 88 | // 这个uri是跳转的目标文件 89 | targetUri: vscode.Uri.file(fileUrl), 90 | // 这个range是目标文件的位置 91 | targetRange: new vscode.Range(0, 0, 0, 0), 92 | // 这个range 是需要出现下划线的字符串的范围 93 | originSelectionRange: new vscode.Range( 94 | new Position(position.line, match.index), 95 | // 2是因为有两个引号 96 | new Position(position.line, match.index + match[1].length + 2), 97 | ), 98 | }; 99 | } 100 | } 101 | 102 | return null; 103 | } 104 | -------------------------------------------------------------------------------- /server/src/diagnostic/drawer.ts: -------------------------------------------------------------------------------- 1 | import { Diagnostic, DiagnosticSeverity, Position } from 'vscode-languageserver'; 2 | import { JSXComponentType } from '../genDiagnostic'; 3 | import * as t from '@babel/types'; 4 | import generate from '@babel/generator'; 5 | import { afterVisibleChangeToAfterOpenChange, visibleToOpen, xxxStyleToStylesBody } from '../utils'; 6 | 7 | export const drawerDiagnostic = (item: JSXComponentType) => { 8 | return item.props 9 | .map((prop) => { 10 | if (!prop) { 11 | return; 12 | } 13 | const diagnostic: Diagnostic = { 14 | severity: DiagnosticSeverity.Error, 15 | range: { 16 | start: Position.create( 17 | prop.value?.loc?.start?.line! - 1, 18 | prop.value?.loc?.start?.column!, 19 | ), 20 | end: Position.create(prop.value?.loc?.end?.line! - 1, prop.value?.loc?.end?.column!), 21 | }, 22 | message: '', 23 | source: 'Ant Design Pro For VSCode', 24 | }; 25 | if (prop?.name === 'visible') { 26 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 open 属性`; 27 | const newProps = visibleToOpen(prop.value); 28 | diagnostic.data = { 29 | code: generate(newProps).code, 30 | actionName: '将 visible 替换为 open', 31 | }; 32 | } 33 | if (prop?.name === 'afterVisibleChange') { 34 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 afterOpenChange 属性`; 35 | const newProps = afterVisibleChangeToAfterOpenChange(prop.value); 36 | diagnostic.data = { 37 | code: generate(newProps).code, 38 | actionName: `将 ${prop?.name} 替换为 afterOpenChange`, 39 | }; 40 | } 41 | 42 | if (prop?.name === 'bodyStyle') { 43 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 styles.body 属性`; 44 | const bodyStyleValue = xxxStyleToStylesBody(prop.value); 45 | diagnostic.data = { 46 | code: generate(bodyStyleValue).code, 47 | actionName: `将 ${prop?.name} 替换为 styles.body`, 48 | }; 49 | } 50 | 51 | if (prop?.name === 'maskStyle') { 52 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 styles.mask 属性`; 53 | const maskStyleValue = xxxStyleToStylesBody(prop.value, 'mask'); 54 | diagnostic.data = { 55 | code: generate(maskStyleValue).code, 56 | actionName: `将 ${prop?.name} 替换为 styles.mask`, 57 | }; 58 | } 59 | 60 | if (prop?.name === 'footerStyle') { 61 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 styles.footer 属性`; 62 | const maskStyleValue = xxxStyleToStylesBody(prop.value, 'footer'); 63 | diagnostic.data = { 64 | code: generate(maskStyleValue).code, 65 | actionName: `将 ${prop?.name} 替换为 styles.footer`, 66 | }; 67 | } 68 | 69 | if (prop?.name === 'contentWrapperStyle') { 70 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 styles.wrapper 属性`; 71 | const xxxStyleValue = xxxStyleToStylesBody(prop.value, 'wrapper'); 72 | diagnostic.data = { 73 | code: generate(xxxStyleValue).code, 74 | actionName: `将 ${prop?.name} 替换为 styles.wrapper`, 75 | }; 76 | } 77 | 78 | if (prop?.name === 'headerStyle') { 79 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 styles.header 属性`; 80 | const xxxStyleValue = xxxStyleToStylesBody(prop.value, 'header'); 81 | diagnostic.data = { 82 | code: generate(xxxStyleValue).code, 83 | actionName: `将 ${prop?.name} 替换为 styles.header`, 84 | }; 85 | } 86 | 87 | if (prop?.name === 'drawerStyle') { 88 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 styles.content 属性`; 89 | const xxxStyleValue = xxxStyleToStylesBody(prop.value, 'content'); 90 | diagnostic.data = { 91 | code: generate(xxxStyleValue).code, 92 | actionName: `将 ${prop?.name} 替换为 styles.content`, 93 | }; 94 | } 95 | 96 | if (!diagnostic.message) { 97 | return; 98 | } 99 | return diagnostic; 100 | }) 101 | .filter((item) => item?.message) as Diagnostic[]; 102 | }; 103 | -------------------------------------------------------------------------------- /server/src/diagnostic/dropdown.ts: -------------------------------------------------------------------------------- 1 | import { Diagnostic, DiagnosticSeverity, Position } from 'vscode-languageserver'; 2 | import { JSXComponentType } from '../genDiagnostic'; 3 | import * as t from '@babel/types'; 4 | import { 5 | attributesToMap, 6 | getJSXNodeName, 7 | jsxElementPropsListToArray, 8 | jsxValueToObjectValue, 9 | menuChildrenJsxElementToJSON, 10 | onVisibleChangeChangeToOnOpenChange, 11 | visibleToOpen, 12 | } from '../utils'; 13 | import generate from '@babel/generator'; 14 | 15 | export const dropdownDiagnostic = (item: JSXComponentType) => { 16 | return item.props 17 | .map((prop) => { 18 | const diagnostic: Diagnostic = { 19 | severity: DiagnosticSeverity.Error, 20 | range: { 21 | start: Position.create( 22 | prop.value?.loc?.start?.line! - 1, 23 | prop.value?.loc?.start?.column!, 24 | ), 25 | end: Position.create(prop.value?.loc?.end?.line! - 1, prop.value?.loc?.end?.column!), 26 | }, 27 | message: '', 28 | source: 'Ant Design Pro For VSCode', 29 | }; 30 | 31 | if (prop.name === 'overlay') { 32 | const jsxMenu = prop.value.value; 33 | if (!jsxMenu) { 34 | return; 35 | } 36 | diagnostic.message = `在 4.24.0 版本后,我们提供了 的简写方式,有更好的性能和更方便的数据组织方式,开发者不再需要自行拼接 JSX。 37 | 同时我们废弃了原先的写法,你还是可以在 4.x 继续使用,但会在控制台看到警告,并会在 5.0 后移除。`; 38 | 39 | // 生成自动更新的代码 40 | if (t.isJSXExpressionContainer(jsxMenu) && t.isJSXElement(jsxMenu.expression)) { 41 | const menuJSXElement = jsxMenu.expression; 42 | 43 | const propsArray = attributesToMap(menuJSXElement) 44 | .map((attr) => { 45 | if (!attr.value) return null; 46 | 47 | if (attr.name === 'children') { 48 | const jsxItems: { 49 | name: string | t.JSXIdentifier; 50 | value: t.JSXAttribute | t.JSXEmptyExpression | t.SpreadElement; 51 | }[][] = []; 52 | 53 | if (t.isJSXFragment(attr.value?.value)) { 54 | const menuChildrenList = (prop.value.value as t.JSXFragment).children; 55 | menuChildrenList.forEach((child, index) => { 56 | const prop = menuChildrenJsxElementToJSON(child, index); 57 | if (prop) { 58 | jsxItems.push(prop); 59 | } 60 | }); 61 | } 62 | 63 | const items = jsxElementPropsListToArray(jsxItems); 64 | return t.objectProperty(t.stringLiteral('items'), items); 65 | } 66 | return t.objectProperty( 67 | t.stringLiteral(getJSXNodeName(attr.value.name)), 68 | jsxValueToObjectValue(attr.value.value) || t.booleanLiteral(true), 69 | ); 70 | }) 71 | .filter(Boolean) as t.ObjectProperty[]; 72 | 73 | diagnostic.data = { 74 | code: generate( 75 | t.jsxAttribute( 76 | t.jsxIdentifier('menu'), 77 | t.jsxExpressionContainer(t.objectExpression(propsArray)), 78 | ), 79 | ).code, 80 | actionName: '将 overlay={...} 替换为 menu={...}', 81 | }; 82 | } 83 | } 84 | 85 | if (prop?.name === 'visible') { 86 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 open 属性`; 87 | const newProps = visibleToOpen(prop.value); 88 | diagnostic.data = { 89 | code: generate(newProps).code, 90 | actionName: `将 ${prop?.name} 替换为 open`, 91 | }; 92 | } 93 | 94 | if (prop?.name === 'onVisibleChange') { 95 | diagnostic.message = `${prop?.name} 属性已废弃,请使用 onOpenChange 属性`; 96 | const newProps = onVisibleChangeChangeToOnOpenChange(prop.value); 97 | diagnostic.data = { 98 | code: generate(newProps).code, 99 | actionName: `将 ${prop?.name} 替换为 onOpenChange`, 100 | }; 101 | } 102 | 103 | if (diagnostic.message) { 104 | return diagnostic; 105 | } 106 | return null; 107 | }) 108 | .filter((item) => item?.message) as Diagnostic[]; 109 | }; 110 | -------------------------------------------------------------------------------- /server/src/genDiagnostic.ts: -------------------------------------------------------------------------------- 1 | /* -------------------------------------------------------------------------------------------- 2 | * 版权所有 (c) 微软公司。保留所有权利。 3 | * 根据 MIT 许可证获得许可。有关许可信息,请参阅项目根目录中的 License.txt 文件。 4 | * ------------------------------------------------------------------------------------------ */ 5 | // 创建一个映射表,用于存储文件的AST和JSX组件信息 6 | import * as parser from '@babel/parser'; 7 | import traverse from '@babel/traverse'; 8 | import * as t from '@babel/types'; 9 | 10 | import { TextDocument } from 'vscode-languageserver-textdocument'; 11 | import { attributesToMap, getJSXNodeName } from './utils'; 12 | import { Diagnostic } from 'vscode-languageserver'; 13 | import { diagnosticMessageMap } from './diagnostic'; 14 | 15 | // 导入API信息的JSON文件 16 | const proComponentsJson = require('@ant-design/doc/api/pro-components.json'); 17 | const antdJson = require('@ant-design/doc/api/ant-design.json'); 18 | 19 | // 创建一个映射表,用于存储组件的属性信息 20 | const proAndAntdApiMap = new Map(); 21 | 22 | // 处理pro-components.json中的属性信息 23 | proComponentsJson?.map((pre: any) => { 24 | pre.properties?.map((item: any) => { 25 | const propsMap = new Map(); 26 | item.property?.map((child: any) => { 27 | if (propsMap.has(child['属性'])) { 28 | /** 29 | * 获取属性列表 30 | */ 31 | const list = propsMap.get(child['属性']); 32 | propsMap.set(child['属性'], [...list, child]); 33 | } else { 34 | propsMap.set(child['属性'], [child]); 35 | } 36 | }); 37 | propsMap.set('参考官网文档链接', item.url); 38 | const title = item.title.split?.('-')?.[1]?.trim() || item.title.split?.('-')?.[0]?.trim(); 39 | 40 | const preProps = proAndAntdApiMap.get(title) || []; 41 | proAndAntdApiMap.set(title, new Map([...preProps, ...propsMap])); 42 | }); 43 | }); 44 | 45 | // 处理ant-design.json中的属性信息 46 | antdJson?.map((pre: any) => { 47 | pre.properties?.map((item: any) => { 48 | const propsMap = new Map(); 49 | item.property?.map((child: any) => { 50 | if (propsMap.has(child['参数'])) { 51 | const list = propsMap.get(child['参数']); 52 | propsMap.set(child['参数'], [...list, child]); 53 | } else { 54 | propsMap.set(child['参数'], [child]); 55 | } 56 | }); 57 | propsMap.set('参考官网文档链接', item.url); 58 | const title = item.title.split?.('-')?.[1]?.trim() || item.title.split?.('-')?.[0]?.trim(); 59 | 60 | const preProps = proAndAntdApiMap.get(title) || []; 61 | proAndAntdApiMap.set(title, new Map([...preProps, ...propsMap])); 62 | }); 63 | }); 64 | 65 | export type JSXComponentType = { 66 | componentName: string | null; 67 | loc: t.SourceLocation | null | undefined; 68 | props: { 69 | name: string | t.JSXIdentifier; 70 | value: t.JSXAttribute; 71 | parent?: t.JSXElement | undefined; 72 | }[]; 73 | }; 74 | 75 | /** 76 | * 从给定的文本文档中获取JSX组件列表。 77 | * @param textDocument 要解析的文本文档。 78 | * @returns 包含组件名称、位置和属性的对象数组。 79 | */ 80 | export const getJSXComponentList = (textDocument: TextDocument): Diagnostic[] => { 81 | try { 82 | let diagnostics: Diagnostic[] = []; 83 | const fileName = textDocument.uri; 84 | const content = fileName ? textDocument.getText() : ''; 85 | 86 | const ast = parser.parse(content, { 87 | sourceType: 'module', 88 | plugins: ['jsx', 'typescript'], 89 | }); 90 | 91 | const importMap = new Map< 92 | string, 93 | { 94 | default: string; 95 | source: string; 96 | } 97 | >(); 98 | 99 | // 遍历AST,获取JSX组件信息,然后将有文档的信息存储到fileAstJSXMap中 100 | traverse(ast, { 101 | ImportDeclaration: (path: { node: t.ImportDeclaration }) => { 102 | if ( 103 | path.node.source.value === 'antd' || 104 | path.node.source.value === 'pro-components' || 105 | path.node.source.value === '@alipay/bigfish/antd' || 106 | path.node.source.value === '@alipay/tech-ui' 107 | ) { 108 | path.node.specifiers.forEach((specifier) => { 109 | if (t.isImportSpecifier(specifier)) { 110 | if (t.isIdentifier(specifier.imported)) { 111 | importMap.set(specifier.local.name, { 112 | default: specifier.imported.name, 113 | source: path.node.source.value, 114 | }); 115 | } 116 | if (t.isStringLiteral(specifier.imported)) { 117 | importMap.set(specifier.local.name, { 118 | default: specifier.imported.value, 119 | source: path.node.source.value, 120 | }); 121 | } 122 | } 123 | }); 124 | } 125 | }, 126 | JSXElement: (path: { node: t.JSXElement }) => { 127 | const componentNameNode = path.node.openingElement?.name; 128 | const componentName: string | null = getJSXNodeName(componentNameNode); 129 | const realComponentName = importMap.get(componentName)?.default; 130 | const props = attributesToMap(path.node); 131 | 132 | if (!realComponentName) { 133 | return; 134 | } 135 | // 如果组件名称存在,则将组件名称和位置信息存储到fileAstJSXMap中 136 | if (!proAndAntdApiMap.has(realComponentName)!) { 137 | return; 138 | } 139 | const itemProps = { 140 | componentName: realComponentName, 141 | loc: path.node.loc, 142 | props, 143 | }; 144 | 145 | if (!realComponentName) return; 146 | 147 | // 如果有处理方案,执行处理方案 148 | if (!diagnosticMessageMap.has(realComponentName)) return; 149 | try { 150 | const genDiagnostic = diagnosticMessageMap.get(realComponentName); 151 | if (!genDiagnostic) { 152 | return; 153 | } 154 | const diagnosticList = genDiagnostic(itemProps); 155 | diagnostics = [...diagnostics, ...diagnosticList]; 156 | } catch (error) {} 157 | }, 158 | }); 159 | return diagnostics; 160 | } catch (error) {} 161 | return []; 162 | }; 163 | -------------------------------------------------------------------------------- /src/props-hover.ts: -------------------------------------------------------------------------------- 1 | // 导入所需的模块和库 2 | import * as parser from '@babel/parser'; 3 | import * as fs from 'node:fs'; 4 | import * as path from 'node:path'; 5 | import * as vscode from 'vscode'; 6 | import { Position, TextDocument } from 'vscode'; 7 | import { getProjectPath, slash } from './util'; 8 | // @ts-ignore 9 | import traverse from '@babel/traverse'; 10 | import * as types from '@babel/types'; 11 | 12 | // 导入API信息的JSON文件 13 | const apiJson = require('@ant-design/doc/api/umi.json'); 14 | const proComponentsJson = require('@ant-design/doc/api/pro-components.json'); 15 | const antdJson = require('@ant-design/doc/api/ant-design.json'); 16 | 17 | // 创建一个映射表,用于存储组件的属性信息 18 | const proAndAntdApiMap = new Map(); 19 | 20 | // 处理pro-components.json中的属性信息 21 | proComponentsJson?.map((pre: any) => { 22 | pre.properties?.map((item: any) => { 23 | const propsMap = new Map(); 24 | item.property?.map((child: any) => { 25 | if (propsMap.has(child['属性'])) { 26 | /** 27 | * 获取属性列表 28 | */ 29 | const list = propsMap.get(child['属性']); 30 | propsMap.set(child['属性'], [...list, child]); 31 | } else { 32 | propsMap.set(child['属性'], [child]); 33 | } 34 | }); 35 | propsMap.set('参考官网文档链接', item.url); 36 | const title = item.title.split?.('-')?.[1]?.trim() || item.title.split?.('-')?.[0]?.trim(); 37 | 38 | const preProps = proAndAntdApiMap.get(title) || []; 39 | proAndAntdApiMap.set(title, new Map([...preProps, ...propsMap])); 40 | }); 41 | }); 42 | 43 | // 处理ant-design.json中的属性信息 44 | antdJson?.map((pre: any) => { 45 | pre.properties?.map((item: any) => { 46 | const propsMap = new Map(); 47 | item.property?.map((child: any) => { 48 | if (propsMap.has(child['参数'])) { 49 | const list = propsMap.get(child['参数']); 50 | propsMap.set(child['参数'], [...list, child]); 51 | } else { 52 | propsMap.set(child['参数'], [child]); 53 | } 54 | }); 55 | propsMap.set('参考官网文档链接', item.url); 56 | const title = item.title.split?.('-')?.[1]?.trim() || item.title.split?.('-')?.[0]?.trim(); 57 | 58 | const preProps = proAndAntdApiMap.get(title) || []; 59 | proAndAntdApiMap.set(title, new Map([...preProps, ...propsMap])); 60 | }); 61 | }); 62 | 63 | /** 64 | * 这段代码是在创建一个名为umiApiMap的对象,它是通过对apiJson进行处理得到的。 65 | * apiJson是一个包含API信息的数组。通过遍历apiJson, 66 | * 将其中的属性和子属性添加到umiApiMap对象中,以便后续使用。 67 | */ 68 | const umiApiMap = apiJson?.reduce((pre: any, cur: any) => { 69 | if (cur.properties) { 70 | cur.properties.forEach((item: any) => { 71 | if (item.property && item.property.length > 0) { 72 | item.property.forEach((child: any) => { 73 | if (child.property && child.property.length > 0) { 74 | child.property.forEach((sub: any) => { 75 | pre[sub.title] = sub; 76 | }); 77 | } else { 78 | pre[child.title] = child; 79 | } 80 | }); 81 | } else { 82 | pre[item.title] = item; 83 | } 84 | }); 85 | } 86 | return pre; 87 | }, {}); 88 | 89 | // 创建一个映射表,用于存储文件的AST和JSX组件信息 90 | const fileAstJSXMap = new Map(); 91 | 92 | /** 93 | * 鼠标悬停提示,当鼠标停在package.json的dependencies或者devDependencies时, 94 | * 自动显示对应包的名称、版本号和许可协议 95 | * @param {*} document 96 | * @param {*} position 97 | * @param {*} token 98 | */ 99 | export function provideHover(document: TextDocument, position: Position) { 100 | try { 101 | const fileName = slash(document.fileName); 102 | 103 | const workDir = getProjectPath(document); 104 | const word = document.getText(document.getWordRangeAtPosition(position)); 105 | const line = document.lineAt(position); 106 | if (/\/package\.json$/.test(fileName)) { 107 | const packageNameRegex = /"([^"]+)":/; 108 | 109 | const matches = line.text.match(packageNameRegex) || []; 110 | const packageName = matches.length > 1 ? matches?.[1] : word; 111 | let destPath = `${workDir}/node_modules/${packageName.replace(/"/g, '')}/package.json`; 112 | 113 | if (fs.existsSync(destPath)) { 114 | const content = JSON.parse(fs.readFileSync(destPath, 'utf-8')); 115 | 116 | return new vscode.Hover( 117 | `* **名称**:${content.name}\n* **当前安装版本**:${content.version}`, 118 | ); 119 | } 120 | } 121 | 122 | const relativePath = slash(path.relative(workDir, fileName)); 123 | 124 | if (['config/config.ts', '.umirc.ts'].includes(relativePath)) { 125 | let api = umiApiMap[word]; 126 | 127 | if (api) { 128 | return new vscode.Hover( 129 | ` 130 | ### ${word} 131 | 132 | 参考官网文档链接 [${api.url}](${api.url}) \n\n ------ \n\n ${api.md} `, 133 | ); 134 | } 135 | } 136 | 137 | if (['src/app.tsx', 'src/app.ts', 'src/requestErrorConfig.ts'].includes(relativePath)) { 138 | if ( 139 | line.text.startsWith('export const ') || 140 | line.text.startsWith('export async function ') || 141 | line.text.startsWith('export function ') 142 | ) { 143 | let api = umiApiMap[word]; 144 | // hack code 145 | if (word === 'getInitialState') { 146 | return new vscode.Hover(umiApiMap['数据流'].md); 147 | } 148 | if (api) { 149 | return new vscode.Hover(api.md); 150 | } 151 | } 152 | } 153 | 154 | if (relativePath.startsWith('src')) { 155 | let astList: any[] | null = null; 156 | 157 | // 如果文件的AST和JSX组件信息已经存在,则直接使用 158 | if (fileAstJSXMap.has(fileName)) { 159 | astList = fileAstJSXMap.get(fileName); 160 | } else { 161 | const content = fs.readFileSync(fileName, 'utf-8'); 162 | const ast = parser.parse(content, { 163 | sourceType: 'module', 164 | plugins: ['jsx', 'typescript'], 165 | }); 166 | 167 | // 遍历AST,获取JSX组件信息,然后将有文档的信息存储到fileAstJSXMap中 168 | traverse(ast, { 169 | JSXElement: (path: { node: types.JSXElement }) => { 170 | const componentNameNode = path.node.openingElement?.name; 171 | let componentName: string | null = null; 172 | 173 | // 这个是最简单的JSXIdentifier,用于表示JSX中的标识符。在React中,JSXIdentifier通常用于表示React组件的名称。 174 | // 175 | if (types.isJSXIdentifier(componentNameNode)) { 176 | componentName = componentNameNode.name; 177 | } 178 | // 在React中,JSXMemberExpression是JSX中的一种语法,用于表示成员表达式。JSXMemberExpression通常用于访问React组件中的属性或方法。 179 | // const element = ; 180 | if (types.isJSXMemberExpression(componentNameNode)) { 181 | componentName = componentNameNode.property.name; 182 | } 183 | // JSXNamespacedName是JSX中的一种特殊语法,用于表示命名空间的JSX元素。在React中,JSXNamespacedName用于表示命名空间的XML元素,通常用于SVG图形或其它XML命名空间中的元素。 184 | // 例如,下面是一个使用JSXNamespacedName的示例: 185 | // ```jsx 186 | // const element = ; 187 | // ``` 188 | // 在这个例子中,`svg:circle`是一个JSXNamespacedName,表示SVG命名空间中的`circle`元素。这种语法允许在React应用中使用XML命名空间中的元素,例如SVG元素。 189 | if (types.isJSXNamespacedName(componentNameNode)) { 190 | componentName = componentNameNode.namespace.name; 191 | } 192 | 193 | // 如果组件名称存在,则将组件名称和位置信息存储到fileAstJSXMap中 194 | if (proAndAntdApiMap.has(componentName)) { 195 | const astList = fileAstJSXMap.get(fileName) || []; 196 | astList.push({ 197 | componentName, 198 | loc: path.node.loc, 199 | }); 200 | fileAstJSXMap.set(fileName, astList); 201 | } 202 | }, 203 | }); 204 | } 205 | if (astList) { 206 | // 获取当前文件的AST和JSX组件信息 207 | const nodeList = astList.reverse().filter((item: any) => { 208 | const { loc } = item; 209 | if (loc.start.line <= position.line && loc.end.line >= position.line) { 210 | return true; 211 | } 212 | return false; 213 | }); 214 | 215 | if (!nodeList || nodeList.length < 1) { 216 | return null; 217 | } 218 | let node: { 219 | componentName: string; 220 | } | null = null; 221 | 222 | if (nodeList.length === 1) { 223 | node = nodeList[0]; 224 | } 225 | 226 | if (nodeList.length > 1) { 227 | // 找到离得最近那个组件 228 | node = nodeList.reduce((pre: any, cur: any) => { 229 | if (!pre) { 230 | return cur; 231 | } 232 | if (pre.loc.start.line >= cur.loc.start.line) { 233 | return pre; 234 | } 235 | return cur; 236 | }, null); 237 | } 238 | 239 | if (!node) { 240 | return null; 241 | } 242 | 243 | const componentName = node.componentName; 244 | 245 | let api: Map = proAndAntdApiMap.get(componentName); 246 | 247 | if (componentName === 'ProTable') { 248 | api = new Map([...proAndAntdApiMap.get('Table'), ...api]); 249 | } 250 | 251 | if (componentName === 'ProForm') { 252 | api = new Map([...proAndAntdApiMap.get('Form'), ...api]); 253 | } 254 | 255 | if (componentName === 'ProDescriptions') { 256 | api = new Map([...proAndAntdApiMap.get('Descriptions'), ...api]); 257 | } 258 | 259 | if (!api) { 260 | return; 261 | } 262 | 263 | const propsMap = api.get(word); 264 | 265 | if (!propsMap) { 266 | return null; 267 | } 268 | return new vscode.Hover( 269 | ` 270 | ### ${componentName} - ${word} 271 | ${propsMap.map((props: any) => { 272 | return Object.keys(props) 273 | .map((key) => `- ${key}: ${props[key]}`) 274 | .join('\n'); 275 | })}\n\n` + 276 | (api.get('参考官网文档链接') && 277 | ` 278 | #### 参考官网文档链接 [${api.get('参考官网文档链接')}](${api.get('参考官网文档链接')}) 279 | --------- 280 | `), 281 | ); 282 | } 283 | } 284 | } catch (error) { 285 | console.log(error); 286 | } 287 | 288 | return null; 289 | } 290 | -------------------------------------------------------------------------------- /server/src/utils.ts: -------------------------------------------------------------------------------- 1 | import * as parser from '@babel/parser'; 2 | 3 | import traverse from '@babel/traverse'; 4 | import * as t from '@babel/types'; 5 | 6 | import { TextDocument } from 'vscode-languageserver-textdocument'; 7 | 8 | /** 9 | * 将 JSX 属性值转换为对象值。 10 | * @param value JSX 属性值 11 | * @returns 转换后的对象值 12 | */ 13 | export const jsxValueToObjectValue = (value: t.JSXAttribute['value']) => { 14 | if (t.isJSXExpressionContainer(value)) { 15 | if (t.isExpression(value.expression)) { 16 | return value.expression; 17 | } 18 | return undefined; 19 | } 20 | if (t.isJSXEmptyExpression(value)) { 21 | return t.stringLiteral(''); 22 | } 23 | return value; 24 | }; 25 | 26 | /** 27 | * 将 JSX 元素转换为 JSON 对象数组。 28 | * @param child JSX 元素或表达式容器 29 | * @param index 元素索引 30 | * @returns JSON 对象数组或 null 31 | */ 32 | export const menuChildrenJsxElementToJSON = ( 33 | child: t.JSXElement | t.JSXFragment | t.JSXExpressionContainer | t.JSXSpreadChild | t.JSXText, 34 | index: number, 35 | ): 36 | | { 37 | name: string | t.JSXIdentifier; 38 | value: t.JSXAttribute | t.SpreadElement; 39 | parent?: t.JSXElement | undefined; 40 | }[] 41 | | null => { 42 | if (t.isJSXElement(child)) { 43 | const name = getJSXNodeName(child.openingElement?.name); 44 | if (name === 'Menu.Item' || name === 'MenuItem') { 45 | const propsList = attributesToMap(child).map((prop) => { 46 | if (prop.name === 'children') { 47 | return { 48 | ...prop, 49 | name: 'label', 50 | }; 51 | } 52 | return prop; 53 | }); 54 | 55 | // 自动加个 key 进去,好多人不喜欢写 key 56 | if (propsList.find((prop) => prop.name === 'key')) { 57 | return propsList; 58 | } 59 | return [ 60 | ...propsList, 61 | { 62 | name: 'key', 63 | value: t.jsxAttribute(t.jsxIdentifier('key'), t.stringLiteral('Item' + '-' + index)), 64 | }, 65 | ]; 66 | } 67 | 68 | if (name === 'Menu.Divider') { 69 | return [ 70 | { 71 | name: 'key', 72 | value: t.jsxAttribute(t.jsxIdentifier('key'), t.stringLiteral('Divider' + '-' + index)), 73 | }, 74 | { 75 | name: 'type', 76 | value: t.jsxAttribute(t.jsxIdentifier('type'), t.stringLiteral('divider')), 77 | }, 78 | ]; 79 | } 80 | 81 | // 如果是 div 之类的元素,变成 [key, label:div] 82 | return [ 83 | { 84 | name: 'key', 85 | value: t.jsxAttribute(t.jsxIdentifier('key'), t.stringLiteral(name + '-' + index)), 86 | }, 87 | { 88 | name: 'label', 89 | value: t.jsxAttribute(t.jsxIdentifier('label'), child), 90 | }, 91 | ]; 92 | } 93 | 94 | if (t.isJSXExpressionContainer(child) && t.isExpression(child.expression)) { 95 | const expression = child.expression; 96 | if (t.isLogicalExpression(expression)) { 97 | const jsxExpression = expression.right; 98 | if (t.isJSXElement(jsxExpression)) { 99 | const item = menuChildrenJsxElementToJSON(jsxExpression, 0); 100 | if (item) { 101 | child.expression = t.conditionalExpression( 102 | expression.left, 103 | jsxElementPropsListToArray([item!]), 104 | t.arrayExpression([]), 105 | ); 106 | } 107 | } 108 | if (t.isJSXFragment(jsxExpression)) { 109 | const childrenList = jsxExpression.children; 110 | const jsxItems: { 111 | name: string | t.JSXIdentifier; 112 | value: t.JSXAttribute | t.SpreadElement; 113 | parent?: t.JSXElement | undefined; 114 | }[][] = []; 115 | childrenList.forEach((item, index) => { 116 | const jsonItem = menuChildrenJsxElementToJSON(item, index); 117 | if (jsonItem) { 118 | jsxItems.push(jsonItem); 119 | } 120 | }); 121 | child.expression = t.conditionalExpression( 122 | expression.left, 123 | jsxElementPropsListToArray(jsxItems), 124 | t.arrayExpression([]), 125 | ); 126 | } 127 | } 128 | 129 | if (t.isCallExpression(child.expression)) { 130 | const expression = child.expression; 131 | // 转化使用 map 的用户 132 | // 133 | // {(paneData || []).map((item) => ( 134 | // changeProject(item?.project_id)}> 135 | // {item?.project_name} 136 | // 137 | // ))} 138 | // 139 | // ----------- 140 | // ({ 148 | // key: item?.project_id, 149 | // onClick: () => changeProject(item?.project_id), 150 | // children: ( 151 | // <> 152 | // {item?.project_name} 153 | // 154 | // ), 155 | // })), 156 | // ]} 157 | // > 158 | if ( 159 | expression.arguments.length === 1 && 160 | t.isMemberExpression(expression.callee) && 161 | t.isIdentifier(expression.callee.property) && 162 | expression.callee.property.name === 'map' 163 | ) { 164 | const argument = expression.arguments.at(0); 165 | if (!t.isArrowFunctionExpression(argument)) return null; 166 | if (t.isJSXElement(argument.body)) { 167 | argument.body = t.objectExpression( 168 | menuChildrenJsxElementToJSON(argument.body, 10 + index) 169 | ?.map((item) => { 170 | if (t.isSpreadElement(item.value)) { 171 | return item.value; 172 | } 173 | return t.objectProperty( 174 | t.stringLiteral(getJSXNodeName(item.value.name)), 175 | jsxValueToObjectValue(item.value.value) || t.booleanLiteral(true), 176 | ); 177 | }) 178 | .filter(Boolean) as Array, 179 | ); 180 | } 181 | } 182 | } 183 | return [ 184 | { 185 | name: '...', 186 | value: t.spreadElement(child.expression), 187 | }, 188 | ]; 189 | } 190 | 191 | return null; 192 | }; 193 | 194 | /** 195 | * 将 JSX 元素属性列表转换为数组 196 | * @param jsxElementList JSX 元素属性列表 197 | * @returns 转换后的数组表达式 198 | */ 199 | export const jsxElementPropsListToArray = ( 200 | jsxElementList: { 201 | name: string | t.JSXIdentifier; 202 | value: t.JSXAttribute | t.JSXEmptyExpression | t.SpreadElement; 203 | }[][], 204 | ) => { 205 | return t.arrayExpression( 206 | jsxElementList.map((item) => { 207 | const props = item 208 | .map((prop) => { 209 | if (t.isJSXEmptyExpression(prop?.value)) { 210 | return ''; 211 | } 212 | if (t.isSpreadElement(prop.value)) { 213 | return prop.value; 214 | } 215 | if (t.isJSXAttribute(prop.value)) { 216 | return t.objectProperty( 217 | t.stringLiteral((prop!.name as t.JSXIdentifier)?.name || (prop!.name as string)), 218 | jsxValueToObjectValue(prop!.value.value) || t.booleanLiteral(true), 219 | ); 220 | } 221 | }) 222 | .filter(Boolean) as t.ObjectProperty[]; 223 | if (props.find((prop) => t.isSpreadElement(prop))) { 224 | return props.at(0) as any as t.SpreadElement; 225 | } 226 | return t.objectExpression(props); 227 | }), 228 | ); 229 | }; 230 | 231 | /** 232 | * 将 JSXElement 的属性转换为映射对象 233 | * children 会被转换为 children 属性 234 | * @param JSXElement JSXOpeningElement 对象 235 | * @returns 属性映射对象数组 236 | */ 237 | export const attributesToMap = (jsxElement: t.JSXElement) => { 238 | const propList: { 239 | name: string | t.JSXIdentifier; 240 | value: t.JSXAttribute; 241 | parent?: t.JSXElement; 242 | }[] = []; 243 | const jsxOpeningElement = jsxElement.openingElement; 244 | jsxOpeningElement.attributes.forEach((item) => { 245 | if (t.isJSXAttribute(item)) { 246 | propList.push({ 247 | name: item.name.name, 248 | value: item, 249 | }); 250 | } 251 | 252 | if (t.isJSXSpreadAttribute(item)) { 253 | const argument = item.argument; 254 | if (t.isObjectExpression(argument)) { 255 | argument.properties.map((prop) => { 256 | if (t.isObjectProperty(prop) && t.isIdentifier(prop.key)) { 257 | propList.push({ 258 | name: prop.key.name, 259 | value: prop.value as any as t.JSXAttribute, 260 | }); 261 | } 262 | }); 263 | } 264 | } 265 | }); 266 | 267 | if (jsxElement.children?.length) { 268 | const value = t.jsxAttribute( 269 | t.jsxIdentifier('children'), 270 | t.jsxFragment(t.jsxOpeningFragment(), t.jsxClosingFragment(), jsxElement.children), 271 | ); 272 | value.loc = jsxElement.loc; 273 | propList.push({ 274 | name: 'children', 275 | value, 276 | parent: jsxElement, 277 | }); 278 | } 279 | return propList; 280 | }; 281 | 282 | /** 283 | * 获取 JSX 节点的名称。 284 | * @param name JSX 标识符、成员表达式或命名空间名称 285 | * @returns JSX 节点的名称 286 | */ 287 | export const getJSXNodeName = ( 288 | name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName, 289 | ): string => { 290 | // 这个是最简单的JSXIdentifier,用于表示JSX中的标识符。在React中,JSXIdentifier通常用于表示React组件的名称。 291 | // 292 | if (t.isJSXIdentifier(name)) { 293 | return name.name; 294 | } 295 | 296 | // 在React中,JSXMemberExpression是JSX中的一种语法,用于表示成员表达式。JSXMemberExpression通常用于访问React组件中的属性或方法。 297 | // const element = ; 298 | if (t.isJSXMemberExpression(name)) { 299 | return getJSXNodeName(name.object) + '.' + name.property.name; 300 | } 301 | 302 | // JSXNamespacedName是JSX中的一种特殊语法,用于表示命名空间的JSX元素。在React中,JSXNamespacedName用于表示命名空间的XML元素,通常用于SVG图形或其它XML命名空间中的元素。 303 | // 例如,下面是一个使用JSXNamespacedName的示例: 304 | // ```jsx 305 | // const element = ; 306 | // ``` 307 | // 在这个例子中,`svg:circle`是一个JSXNamespacedName,表示SVG命名空间中的`circle`元素。这种语法允许在React应用中使用XML命名空间中的元素,例如SVG元素。 308 | 309 | if (t.isJSXNamespacedName(name)) { 310 | return name.namespace.name; 311 | } 312 | return ''; 313 | }; 314 | 315 | /** 316 | * 将 bodyStyle 属性转换为 styles.body 属性。 317 | * @param prop 318 | * @returns 319 | */ 320 | export const xxxStyleToStylesBody = ( 321 | prop: t.JSXAttribute, 322 | type: 'body' | 'header' | 'mask' | 'wrapper' | 'content' | 'footer' = 'body', 323 | ) => { 324 | const bodyStyleValue = prop.value; 325 | if ( 326 | bodyStyleValue && 327 | t.isJSXExpressionContainer(bodyStyleValue) && 328 | !t.isJSXEmptyExpression(bodyStyleValue.expression) 329 | ) { 330 | prop.name = t.jsxIdentifier('styles'); 331 | prop.value = t.jsxExpressionContainer( 332 | t.objectExpression([ 333 | t.objectProperty( 334 | t.identifier(type), 335 | // body 应该不会给一个空对象吧 336 | bodyStyleValue.expression, 337 | ), 338 | ]), 339 | ); 340 | } 341 | 342 | return prop; 343 | }; 344 | 345 | /** 346 | * 将 visible 属性转换为 open 属性。 347 | * @param prop 348 | * @returns 349 | */ 350 | export const visibleToOpen = (prop: t.JSXAttribute, propsName: 'defaultOpen' | 'open' = 'open') => { 351 | prop.name = t.jsxIdentifier(propsName); 352 | return prop; 353 | }; 354 | 355 | /** 356 | * 将 afterVisibleChange 属性转换为 afterOpenChange 属性。 357 | * @param prop 358 | * @returns 359 | */ 360 | export const afterVisibleChangeToAfterOpenChange = (prop: t.JSXAttribute) => { 361 | prop.name = t.jsxIdentifier('afterOpenChange'); 362 | return prop; 363 | }; 364 | 365 | /** 366 | * 将 onVisibleChange 属性转换为 onOpenChange 属性。 367 | * @param prop 368 | * @returns 369 | */ 370 | export const onVisibleChangeChangeToOnOpenChange = ( 371 | prop: t.JSXAttribute, 372 | type: 'onOpenChange' | 'afterVisibleChange' = 'onOpenChange', 373 | ) => { 374 | prop.name = t.jsxIdentifier(type); 375 | return prop; 376 | }; 377 | 378 | export const borderedToVariant = (prop: t.JSXAttribute) => { 379 | if ( 380 | t.isJSXExpressionContainer(prop.value) && 381 | t.isBooleanLiteral(prop.value.expression) && 382 | prop.value.expression.value === false 383 | ) { 384 | const newProps = t.jsxAttribute(t.jsxIdentifier('variant'), t.stringLiteral('borderless')); 385 | prop = newProps; 386 | return { 387 | message: `将 bordered={false} 替换为 variant='borderless'`, 388 | props: prop, 389 | actionName: `将 bordered 删除`, 390 | }; 391 | } 392 | 393 | if (t.isJSXAttribute(prop) && prop.value === null) { 394 | return { 395 | message: `bordered 是默认值,可以直接删除`, 396 | props: '', 397 | actionName: `将 bordered 删除`, 398 | }; 399 | } 400 | if ( 401 | t.isJSXAttribute(prop) && 402 | t.isJSXExpressionContainer(prop.value) && 403 | t.isBinaryExpression(prop.value.expression) 404 | ) { 405 | const binaryExpression = prop.value.expression as t.BinaryExpression; 406 | const newProps = t.jsxAttribute( 407 | t.jsxIdentifier('variant'), 408 | t.jsxExpressionContainer( 409 | t.conditionalExpression( 410 | binaryExpression, 411 | t.stringLiteral('outlined'), 412 | t.stringLiteral('borderless'), 413 | ), 414 | ), 415 | ); 416 | return { 417 | message: `将 bordered 表达式替换为 variant 表达式`, 418 | props: newProps, 419 | actionName: `将 bordered 表达式替换为 variant 表达式`, 420 | }; 421 | } 422 | }; 423 | -------------------------------------------------------------------------------- /server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lsp-sample-server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "lsp-sample-server", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@ant-design/doc": "^1.0.6", 13 | "@babel/parser": "^7.23.9", 14 | "@babel/traverse": "^7.23.9", 15 | "@babel/types": "^7.23.9", 16 | "vscode-languageserver": "^9.0.1", 17 | "vscode-languageserver-textdocument": "^1.0.11" 18 | }, 19 | "engines": { 20 | "node": "*" 21 | } 22 | }, 23 | "node_modules/@ant-design/doc": { 24 | "version": "1.0.6", 25 | "resolved": "https://registry.npmjs.org/@ant-design/doc/-/doc-1.0.6.tgz", 26 | "integrity": "sha512-TC8Vm8R+A4cLGQpk23pUMdVrF2SS9XCuMo16js9/jg+y/FU4Z4Mx66vsNUO+I2WM3oNzwboDLKX0EW3ViMRnNA==" 27 | }, 28 | "node_modules/@babel/code-frame": { 29 | "version": "7.23.5", 30 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", 31 | "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", 32 | "dependencies": { 33 | "@babel/highlight": "^7.23.4", 34 | "chalk": "^2.4.2" 35 | }, 36 | "engines": { 37 | "node": ">=6.9.0" 38 | } 39 | }, 40 | "node_modules/@babel/generator": { 41 | "version": "7.23.6", 42 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", 43 | "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", 44 | "dependencies": { 45 | "@babel/types": "^7.23.6", 46 | "@jridgewell/gen-mapping": "^0.3.2", 47 | "@jridgewell/trace-mapping": "^0.3.17", 48 | "jsesc": "^2.5.1" 49 | }, 50 | "engines": { 51 | "node": ">=6.9.0" 52 | } 53 | }, 54 | "node_modules/@babel/helper-environment-visitor": { 55 | "version": "7.22.20", 56 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", 57 | "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", 58 | "engines": { 59 | "node": ">=6.9.0" 60 | } 61 | }, 62 | "node_modules/@babel/helper-function-name": { 63 | "version": "7.23.0", 64 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", 65 | "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", 66 | "dependencies": { 67 | "@babel/template": "^7.22.15", 68 | "@babel/types": "^7.23.0" 69 | }, 70 | "engines": { 71 | "node": ">=6.9.0" 72 | } 73 | }, 74 | "node_modules/@babel/helper-hoist-variables": { 75 | "version": "7.22.5", 76 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", 77 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", 78 | "dependencies": { 79 | "@babel/types": "^7.22.5" 80 | }, 81 | "engines": { 82 | "node": ">=6.9.0" 83 | } 84 | }, 85 | "node_modules/@babel/helper-split-export-declaration": { 86 | "version": "7.22.6", 87 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", 88 | "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", 89 | "dependencies": { 90 | "@babel/types": "^7.22.5" 91 | }, 92 | "engines": { 93 | "node": ">=6.9.0" 94 | } 95 | }, 96 | "node_modules/@babel/helper-string-parser": { 97 | "version": "7.23.4", 98 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", 99 | "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", 100 | "engines": { 101 | "node": ">=6.9.0" 102 | } 103 | }, 104 | "node_modules/@babel/helper-validator-identifier": { 105 | "version": "7.22.20", 106 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", 107 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", 108 | "engines": { 109 | "node": ">=6.9.0" 110 | } 111 | }, 112 | "node_modules/@babel/highlight": { 113 | "version": "7.23.4", 114 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", 115 | "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", 116 | "dependencies": { 117 | "@babel/helper-validator-identifier": "^7.22.20", 118 | "chalk": "^2.4.2", 119 | "js-tokens": "^4.0.0" 120 | }, 121 | "engines": { 122 | "node": ">=6.9.0" 123 | } 124 | }, 125 | "node_modules/@babel/parser": { 126 | "version": "7.23.9", 127 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", 128 | "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", 129 | "bin": { 130 | "parser": "bin/babel-parser.js" 131 | }, 132 | "engines": { 133 | "node": ">=6.0.0" 134 | } 135 | }, 136 | "node_modules/@babel/template": { 137 | "version": "7.23.9", 138 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", 139 | "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", 140 | "dependencies": { 141 | "@babel/code-frame": "^7.23.5", 142 | "@babel/parser": "^7.23.9", 143 | "@babel/types": "^7.23.9" 144 | }, 145 | "engines": { 146 | "node": ">=6.9.0" 147 | } 148 | }, 149 | "node_modules/@babel/traverse": { 150 | "version": "7.23.9", 151 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", 152 | "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", 153 | "dependencies": { 154 | "@babel/code-frame": "^7.23.5", 155 | "@babel/generator": "^7.23.6", 156 | "@babel/helper-environment-visitor": "^7.22.20", 157 | "@babel/helper-function-name": "^7.23.0", 158 | "@babel/helper-hoist-variables": "^7.22.5", 159 | "@babel/helper-split-export-declaration": "^7.22.6", 160 | "@babel/parser": "^7.23.9", 161 | "@babel/types": "^7.23.9", 162 | "debug": "^4.3.1", 163 | "globals": "^11.1.0" 164 | }, 165 | "engines": { 166 | "node": ">=6.9.0" 167 | } 168 | }, 169 | "node_modules/@babel/types": { 170 | "version": "7.23.9", 171 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", 172 | "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", 173 | "dependencies": { 174 | "@babel/helper-string-parser": "^7.23.4", 175 | "@babel/helper-validator-identifier": "^7.22.20", 176 | "to-fast-properties": "^2.0.0" 177 | }, 178 | "engines": { 179 | "node": ">=6.9.0" 180 | } 181 | }, 182 | "node_modules/@jridgewell/gen-mapping": { 183 | "version": "0.3.4", 184 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", 185 | "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", 186 | "dependencies": { 187 | "@jridgewell/set-array": "^1.0.1", 188 | "@jridgewell/sourcemap-codec": "^1.4.10", 189 | "@jridgewell/trace-mapping": "^0.3.9" 190 | }, 191 | "engines": { 192 | "node": ">=6.0.0" 193 | } 194 | }, 195 | "node_modules/@jridgewell/resolve-uri": { 196 | "version": "3.1.2", 197 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 198 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 199 | "engines": { 200 | "node": ">=6.0.0" 201 | } 202 | }, 203 | "node_modules/@jridgewell/set-array": { 204 | "version": "1.1.2", 205 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 206 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 207 | "engines": { 208 | "node": ">=6.0.0" 209 | } 210 | }, 211 | "node_modules/@jridgewell/sourcemap-codec": { 212 | "version": "1.4.15", 213 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 214 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 215 | }, 216 | "node_modules/@jridgewell/trace-mapping": { 217 | "version": "0.3.23", 218 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", 219 | "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", 220 | "dependencies": { 221 | "@jridgewell/resolve-uri": "^3.1.0", 222 | "@jridgewell/sourcemap-codec": "^1.4.14" 223 | } 224 | }, 225 | "node_modules/ansi-styles": { 226 | "version": "3.2.1", 227 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 228 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 229 | "dependencies": { 230 | "color-convert": "^1.9.0" 231 | }, 232 | "engines": { 233 | "node": ">=4" 234 | } 235 | }, 236 | "node_modules/chalk": { 237 | "version": "2.4.2", 238 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 239 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 240 | "dependencies": { 241 | "ansi-styles": "^3.2.1", 242 | "escape-string-regexp": "^1.0.5", 243 | "supports-color": "^5.3.0" 244 | }, 245 | "engines": { 246 | "node": ">=4" 247 | } 248 | }, 249 | "node_modules/color-convert": { 250 | "version": "1.9.3", 251 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 252 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 253 | "dependencies": { 254 | "color-name": "1.1.3" 255 | } 256 | }, 257 | "node_modules/color-name": { 258 | "version": "1.1.3", 259 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 260 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 261 | }, 262 | "node_modules/debug": { 263 | "version": "4.3.4", 264 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 265 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 266 | "dependencies": { 267 | "ms": "2.1.2" 268 | }, 269 | "engines": { 270 | "node": ">=6.0" 271 | }, 272 | "peerDependenciesMeta": { 273 | "supports-color": { 274 | "optional": true 275 | } 276 | } 277 | }, 278 | "node_modules/escape-string-regexp": { 279 | "version": "1.0.5", 280 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 281 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 282 | "engines": { 283 | "node": ">=0.8.0" 284 | } 285 | }, 286 | "node_modules/globals": { 287 | "version": "11.12.0", 288 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 289 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 290 | "engines": { 291 | "node": ">=4" 292 | } 293 | }, 294 | "node_modules/has-flag": { 295 | "version": "3.0.0", 296 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 297 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 298 | "engines": { 299 | "node": ">=4" 300 | } 301 | }, 302 | "node_modules/js-tokens": { 303 | "version": "4.0.0", 304 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 305 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 306 | }, 307 | "node_modules/jsesc": { 308 | "version": "2.5.2", 309 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 310 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 311 | "bin": { 312 | "jsesc": "bin/jsesc" 313 | }, 314 | "engines": { 315 | "node": ">=4" 316 | } 317 | }, 318 | "node_modules/ms": { 319 | "version": "2.1.2", 320 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 321 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 322 | }, 323 | "node_modules/supports-color": { 324 | "version": "5.5.0", 325 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 326 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 327 | "dependencies": { 328 | "has-flag": "^3.0.0" 329 | }, 330 | "engines": { 331 | "node": ">=4" 332 | } 333 | }, 334 | "node_modules/to-fast-properties": { 335 | "version": "2.0.0", 336 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 337 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 338 | "engines": { 339 | "node": ">=4" 340 | } 341 | }, 342 | "node_modules/vscode-jsonrpc": { 343 | "version": "8.2.0", 344 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", 345 | "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", 346 | "engines": { 347 | "node": ">=14.0.0" 348 | } 349 | }, 350 | "node_modules/vscode-languageserver": { 351 | "version": "9.0.1", 352 | "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", 353 | "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", 354 | "dependencies": { 355 | "vscode-languageserver-protocol": "3.17.5" 356 | }, 357 | "bin": { 358 | "installServerIntoExtension": "bin/installServerIntoExtension" 359 | } 360 | }, 361 | "node_modules/vscode-languageserver-protocol": { 362 | "version": "3.17.5", 363 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", 364 | "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", 365 | "dependencies": { 366 | "vscode-jsonrpc": "8.2.0", 367 | "vscode-languageserver-types": "3.17.5" 368 | } 369 | }, 370 | "node_modules/vscode-languageserver-textdocument": { 371 | "version": "1.0.11", 372 | "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", 373 | "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==" 374 | }, 375 | "node_modules/vscode-languageserver-types": { 376 | "version": "3.17.5", 377 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", 378 | "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" 379 | } 380 | }, 381 | "dependencies": { 382 | "@ant-design/doc": { 383 | "version": "1.0.6", 384 | "resolved": "https://registry.npmjs.org/@ant-design/doc/-/doc-1.0.6.tgz", 385 | "integrity": "sha512-TC8Vm8R+A4cLGQpk23pUMdVrF2SS9XCuMo16js9/jg+y/FU4Z4Mx66vsNUO+I2WM3oNzwboDLKX0EW3ViMRnNA==" 386 | }, 387 | "@babel/code-frame": { 388 | "version": "7.23.5", 389 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", 390 | "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", 391 | "requires": { 392 | "@babel/highlight": "^7.23.4", 393 | "chalk": "^2.4.2" 394 | } 395 | }, 396 | "@babel/generator": { 397 | "version": "7.23.6", 398 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", 399 | "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", 400 | "requires": { 401 | "@babel/types": "^7.23.6", 402 | "@jridgewell/gen-mapping": "^0.3.2", 403 | "@jridgewell/trace-mapping": "^0.3.17", 404 | "jsesc": "^2.5.1" 405 | } 406 | }, 407 | "@babel/helper-environment-visitor": { 408 | "version": "7.22.20", 409 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", 410 | "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" 411 | }, 412 | "@babel/helper-function-name": { 413 | "version": "7.23.0", 414 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", 415 | "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", 416 | "requires": { 417 | "@babel/template": "^7.22.15", 418 | "@babel/types": "^7.23.0" 419 | } 420 | }, 421 | "@babel/helper-hoist-variables": { 422 | "version": "7.22.5", 423 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", 424 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", 425 | "requires": { 426 | "@babel/types": "^7.22.5" 427 | } 428 | }, 429 | "@babel/helper-split-export-declaration": { 430 | "version": "7.22.6", 431 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", 432 | "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", 433 | "requires": { 434 | "@babel/types": "^7.22.5" 435 | } 436 | }, 437 | "@babel/helper-string-parser": { 438 | "version": "7.23.4", 439 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", 440 | "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" 441 | }, 442 | "@babel/helper-validator-identifier": { 443 | "version": "7.22.20", 444 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", 445 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" 446 | }, 447 | "@babel/highlight": { 448 | "version": "7.23.4", 449 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", 450 | "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", 451 | "requires": { 452 | "@babel/helper-validator-identifier": "^7.22.20", 453 | "chalk": "^2.4.2", 454 | "js-tokens": "^4.0.0" 455 | } 456 | }, 457 | "@babel/parser": { 458 | "version": "7.23.9", 459 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", 460 | "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==" 461 | }, 462 | "@babel/template": { 463 | "version": "7.23.9", 464 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", 465 | "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", 466 | "requires": { 467 | "@babel/code-frame": "^7.23.5", 468 | "@babel/parser": "^7.23.9", 469 | "@babel/types": "^7.23.9" 470 | } 471 | }, 472 | "@babel/traverse": { 473 | "version": "7.23.9", 474 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", 475 | "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", 476 | "requires": { 477 | "@babel/code-frame": "^7.23.5", 478 | "@babel/generator": "^7.23.6", 479 | "@babel/helper-environment-visitor": "^7.22.20", 480 | "@babel/helper-function-name": "^7.23.0", 481 | "@babel/helper-hoist-variables": "^7.22.5", 482 | "@babel/helper-split-export-declaration": "^7.22.6", 483 | "@babel/parser": "^7.23.9", 484 | "@babel/types": "^7.23.9", 485 | "debug": "^4.3.1", 486 | "globals": "^11.1.0" 487 | } 488 | }, 489 | "@babel/types": { 490 | "version": "7.23.9", 491 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", 492 | "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", 493 | "requires": { 494 | "@babel/helper-string-parser": "^7.23.4", 495 | "@babel/helper-validator-identifier": "^7.22.20", 496 | "to-fast-properties": "^2.0.0" 497 | } 498 | }, 499 | "@jridgewell/gen-mapping": { 500 | "version": "0.3.4", 501 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", 502 | "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", 503 | "requires": { 504 | "@jridgewell/set-array": "^1.0.1", 505 | "@jridgewell/sourcemap-codec": "^1.4.10", 506 | "@jridgewell/trace-mapping": "^0.3.9" 507 | } 508 | }, 509 | "@jridgewell/resolve-uri": { 510 | "version": "3.1.2", 511 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 512 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" 513 | }, 514 | "@jridgewell/set-array": { 515 | "version": "1.1.2", 516 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 517 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" 518 | }, 519 | "@jridgewell/sourcemap-codec": { 520 | "version": "1.4.15", 521 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 522 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 523 | }, 524 | "@jridgewell/trace-mapping": { 525 | "version": "0.3.23", 526 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", 527 | "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", 528 | "requires": { 529 | "@jridgewell/resolve-uri": "^3.1.0", 530 | "@jridgewell/sourcemap-codec": "^1.4.14" 531 | } 532 | }, 533 | "ansi-styles": { 534 | "version": "3.2.1", 535 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 536 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 537 | "requires": { 538 | "color-convert": "^1.9.0" 539 | } 540 | }, 541 | "chalk": { 542 | "version": "2.4.2", 543 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 544 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 545 | "requires": { 546 | "ansi-styles": "^3.2.1", 547 | "escape-string-regexp": "^1.0.5", 548 | "supports-color": "^5.3.0" 549 | } 550 | }, 551 | "color-convert": { 552 | "version": "1.9.3", 553 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 554 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 555 | "requires": { 556 | "color-name": "1.1.3" 557 | } 558 | }, 559 | "color-name": { 560 | "version": "1.1.3", 561 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 562 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 563 | }, 564 | "debug": { 565 | "version": "4.3.4", 566 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 567 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 568 | "requires": { 569 | "ms": "2.1.2" 570 | } 571 | }, 572 | "escape-string-regexp": { 573 | "version": "1.0.5", 574 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 575 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" 576 | }, 577 | "globals": { 578 | "version": "11.12.0", 579 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 580 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" 581 | }, 582 | "has-flag": { 583 | "version": "3.0.0", 584 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 585 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" 586 | }, 587 | "js-tokens": { 588 | "version": "4.0.0", 589 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 590 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 591 | }, 592 | "jsesc": { 593 | "version": "2.5.2", 594 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 595 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" 596 | }, 597 | "ms": { 598 | "version": "2.1.2", 599 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 600 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 601 | }, 602 | "supports-color": { 603 | "version": "5.5.0", 604 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 605 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 606 | "requires": { 607 | "has-flag": "^3.0.0" 608 | } 609 | }, 610 | "to-fast-properties": { 611 | "version": "2.0.0", 612 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 613 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" 614 | }, 615 | "vscode-jsonrpc": { 616 | "version": "8.2.0", 617 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", 618 | "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==" 619 | }, 620 | "vscode-languageserver": { 621 | "version": "9.0.1", 622 | "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", 623 | "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", 624 | "requires": { 625 | "vscode-languageserver-protocol": "3.17.5" 626 | } 627 | }, 628 | "vscode-languageserver-protocol": { 629 | "version": "3.17.5", 630 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", 631 | "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", 632 | "requires": { 633 | "vscode-jsonrpc": "8.2.0", 634 | "vscode-languageserver-types": "3.17.5" 635 | } 636 | }, 637 | "vscode-languageserver-textdocument": { 638 | "version": "1.0.11", 639 | "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", 640 | "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==" 641 | }, 642 | "vscode-languageserver-types": { 643 | "version": "3.17.5", 644 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", 645 | "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" 646 | } 647 | } 648 | } 649 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@ant-design/doc': 9 | specifier: ^1.0.6 10 | version: 1.0.6 11 | '@babel/core': 12 | specifier: ^7.23.9 13 | version: 7.24.0 14 | '@babel/generator': 15 | specifier: ^7.23.6 16 | version: 7.23.6 17 | '@babel/parser': 18 | specifier: ^7.23.9 19 | version: 7.24.0 20 | '@babel/traverse': 21 | specifier: ^7.23.9 22 | version: 7.24.0 23 | '@babel/types': 24 | specifier: ^7.23.9 25 | version: 7.24.0 26 | '@types/babel__traverse': 27 | specifier: ^7.20.5 28 | version: 7.20.5 29 | execa: 30 | specifier: ^7.1.1 31 | version: 7.1.1 32 | vscode-languageclient: 33 | specifier: ^9.0.1 34 | version: 9.0.1 35 | vscode-languageserver: 36 | specifier: ^9.0.1 37 | version: 9.0.1 38 | vscode-languageserver-textdocument: 39 | specifier: ^1.0.11 40 | version: 1.0.11 41 | 42 | devDependencies: 43 | '@types/babel__core': 44 | specifier: ^7.20.5 45 | version: 7.20.5 46 | '@types/git-url-parse': 47 | specifier: ^9.0.1 48 | version: 9.0.1 49 | '@types/glob': 50 | specifier: ^8.1.0 51 | version: 8.1.0 52 | '@types/mocha': 53 | specifier: ^10.0.1 54 | version: 10.0.1 55 | '@types/node': 56 | specifier: 20.2.5 57 | version: 20.2.5 58 | '@types/vscode': 59 | specifier: ^1.40.0 60 | version: 1.79.0 61 | '@typescript-eslint/eslint-plugin': 62 | specifier: ^5.59.8 63 | version: 5.59.8(@typescript-eslint/parser@5.59.8)(eslint@8.41.0)(typescript@5.1.3) 64 | '@typescript-eslint/parser': 65 | specifier: ^5.59.8 66 | version: 5.59.8(eslint@8.41.0)(typescript@5.1.3) 67 | '@vscode/test-electron': 68 | specifier: ^2.3.2 69 | version: 2.3.2 70 | eslint: 71 | specifier: ^8.41.0 72 | version: 8.41.0 73 | glob: 74 | specifier: ^8.1.0 75 | version: 8.1.0 76 | mocha: 77 | specifier: ^10.2.0 78 | version: 10.2.0 79 | prettier-plugin-organize-imports: 80 | specifier: ^3.2.3 81 | version: 3.2.4(prettier@3.2.5)(typescript@5.1.3) 82 | prettier-plugin-packagejson: 83 | specifier: ^2.4.5 84 | version: 2.4.12(prettier@3.2.5) 85 | prettier-plugin-two-style-order: 86 | specifier: ^1.0.1 87 | version: 1.0.1(prettier@3.2.5) 88 | ts-loader: 89 | specifier: ^9.4.3 90 | version: 9.4.3(typescript@5.1.3)(webpack@5.85.0) 91 | typescript: 92 | specifier: ^5.1.3 93 | version: 5.1.3 94 | webpack: 95 | specifier: ^5.85.0 96 | version: 5.85.0(webpack-cli@5.1.1) 97 | webpack-cli: 98 | specifier: ^5.1.1 99 | version: 5.1.1(webpack@5.85.0) 100 | 101 | packages: 102 | 103 | /@ampproject/remapping@2.3.0: 104 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 105 | engines: {node: '>=6.0.0'} 106 | dependencies: 107 | '@jridgewell/gen-mapping': 0.3.5 108 | '@jridgewell/trace-mapping': 0.3.25 109 | dev: false 110 | 111 | /@ant-design/doc@1.0.6: 112 | resolution: {integrity: sha512-TC8Vm8R+A4cLGQpk23pUMdVrF2SS9XCuMo16js9/jg+y/FU4Z4Mx66vsNUO+I2WM3oNzwboDLKX0EW3ViMRnNA==} 113 | dev: false 114 | 115 | /@babel/code-frame@7.23.5: 116 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} 117 | engines: {node: '>=6.9.0'} 118 | dependencies: 119 | '@babel/highlight': 7.23.4 120 | chalk: 2.4.2 121 | dev: false 122 | 123 | /@babel/compat-data@7.23.5: 124 | resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} 125 | engines: {node: '>=6.9.0'} 126 | dev: false 127 | 128 | /@babel/core@7.24.0: 129 | resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} 130 | engines: {node: '>=6.9.0'} 131 | dependencies: 132 | '@ampproject/remapping': 2.3.0 133 | '@babel/code-frame': 7.23.5 134 | '@babel/generator': 7.23.6 135 | '@babel/helper-compilation-targets': 7.23.6 136 | '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) 137 | '@babel/helpers': 7.24.0 138 | '@babel/parser': 7.24.0 139 | '@babel/template': 7.24.0 140 | '@babel/traverse': 7.24.0 141 | '@babel/types': 7.24.0 142 | convert-source-map: 2.0.0 143 | debug: 4.3.4(supports-color@8.1.1) 144 | gensync: 1.0.0-beta.2 145 | json5: 2.2.3 146 | semver: 6.3.1 147 | transitivePeerDependencies: 148 | - supports-color 149 | dev: false 150 | 151 | /@babel/generator@7.23.6: 152 | resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} 153 | engines: {node: '>=6.9.0'} 154 | dependencies: 155 | '@babel/types': 7.24.0 156 | '@jridgewell/gen-mapping': 0.3.3 157 | '@jridgewell/trace-mapping': 0.3.18 158 | jsesc: 2.5.2 159 | dev: false 160 | 161 | /@babel/helper-compilation-targets@7.23.6: 162 | resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} 163 | engines: {node: '>=6.9.0'} 164 | dependencies: 165 | '@babel/compat-data': 7.23.5 166 | '@babel/helper-validator-option': 7.23.5 167 | browserslist: 4.23.0 168 | lru-cache: 5.1.1 169 | semver: 6.3.1 170 | dev: false 171 | 172 | /@babel/helper-environment-visitor@7.22.20: 173 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 174 | engines: {node: '>=6.9.0'} 175 | dev: false 176 | 177 | /@babel/helper-function-name@7.23.0: 178 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 179 | engines: {node: '>=6.9.0'} 180 | dependencies: 181 | '@babel/template': 7.24.0 182 | '@babel/types': 7.24.0 183 | dev: false 184 | 185 | /@babel/helper-hoist-variables@7.22.5: 186 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 187 | engines: {node: '>=6.9.0'} 188 | dependencies: 189 | '@babel/types': 7.24.0 190 | dev: false 191 | 192 | /@babel/helper-module-imports@7.22.15: 193 | resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} 194 | engines: {node: '>=6.9.0'} 195 | dependencies: 196 | '@babel/types': 7.24.0 197 | dev: false 198 | 199 | /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): 200 | resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} 201 | engines: {node: '>=6.9.0'} 202 | peerDependencies: 203 | '@babel/core': ^7.0.0 204 | dependencies: 205 | '@babel/core': 7.24.0 206 | '@babel/helper-environment-visitor': 7.22.20 207 | '@babel/helper-module-imports': 7.22.15 208 | '@babel/helper-simple-access': 7.22.5 209 | '@babel/helper-split-export-declaration': 7.22.6 210 | '@babel/helper-validator-identifier': 7.22.20 211 | dev: false 212 | 213 | /@babel/helper-simple-access@7.22.5: 214 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 215 | engines: {node: '>=6.9.0'} 216 | dependencies: 217 | '@babel/types': 7.24.0 218 | dev: false 219 | 220 | /@babel/helper-split-export-declaration@7.22.6: 221 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 222 | engines: {node: '>=6.9.0'} 223 | dependencies: 224 | '@babel/types': 7.24.0 225 | dev: false 226 | 227 | /@babel/helper-string-parser@7.23.4: 228 | resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} 229 | engines: {node: '>=6.9.0'} 230 | 231 | /@babel/helper-validator-identifier@7.22.20: 232 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 233 | engines: {node: '>=6.9.0'} 234 | 235 | /@babel/helper-validator-option@7.23.5: 236 | resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} 237 | engines: {node: '>=6.9.0'} 238 | dev: false 239 | 240 | /@babel/helpers@7.24.0: 241 | resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} 242 | engines: {node: '>=6.9.0'} 243 | dependencies: 244 | '@babel/template': 7.24.0 245 | '@babel/traverse': 7.24.0 246 | '@babel/types': 7.24.0 247 | transitivePeerDependencies: 248 | - supports-color 249 | dev: false 250 | 251 | /@babel/highlight@7.23.4: 252 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 253 | engines: {node: '>=6.9.0'} 254 | dependencies: 255 | '@babel/helper-validator-identifier': 7.22.20 256 | chalk: 2.4.2 257 | js-tokens: 4.0.0 258 | dev: false 259 | 260 | /@babel/parser@7.24.0: 261 | resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} 262 | engines: {node: '>=6.0.0'} 263 | hasBin: true 264 | dependencies: 265 | '@babel/types': 7.24.0 266 | 267 | /@babel/template@7.24.0: 268 | resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} 269 | engines: {node: '>=6.9.0'} 270 | dependencies: 271 | '@babel/code-frame': 7.23.5 272 | '@babel/parser': 7.24.0 273 | '@babel/types': 7.24.0 274 | dev: false 275 | 276 | /@babel/traverse@7.24.0: 277 | resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} 278 | engines: {node: '>=6.9.0'} 279 | dependencies: 280 | '@babel/code-frame': 7.23.5 281 | '@babel/generator': 7.23.6 282 | '@babel/helper-environment-visitor': 7.22.20 283 | '@babel/helper-function-name': 7.23.0 284 | '@babel/helper-hoist-variables': 7.22.5 285 | '@babel/helper-split-export-declaration': 7.22.6 286 | '@babel/parser': 7.24.0 287 | '@babel/types': 7.24.0 288 | debug: 4.3.4(supports-color@8.1.1) 289 | globals: 11.12.0 290 | transitivePeerDependencies: 291 | - supports-color 292 | dev: false 293 | 294 | /@babel/types@7.24.0: 295 | resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} 296 | engines: {node: '>=6.9.0'} 297 | dependencies: 298 | '@babel/helper-string-parser': 7.23.4 299 | '@babel/helper-validator-identifier': 7.22.20 300 | to-fast-properties: 2.0.0 301 | 302 | /@discoveryjs/json-ext@0.5.7: 303 | resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} 304 | engines: {node: '>=10.0.0'} 305 | dev: true 306 | 307 | /@eslint-community/eslint-utils@4.4.0(eslint@8.41.0): 308 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 309 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 310 | peerDependencies: 311 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 312 | dependencies: 313 | eslint: 8.41.0 314 | eslint-visitor-keys: 3.4.1 315 | dev: true 316 | 317 | /@eslint-community/regexpp@4.5.1: 318 | resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} 319 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 320 | dev: true 321 | 322 | /@eslint/eslintrc@2.0.3: 323 | resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} 324 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 325 | dependencies: 326 | ajv: 6.12.6 327 | debug: 4.3.4(supports-color@8.1.1) 328 | espree: 9.5.2 329 | globals: 13.20.0 330 | ignore: 5.2.4 331 | import-fresh: 3.3.0 332 | js-yaml: 4.1.0 333 | minimatch: 3.1.2 334 | strip-json-comments: 3.1.1 335 | transitivePeerDependencies: 336 | - supports-color 337 | dev: true 338 | 339 | /@eslint/js@8.41.0: 340 | resolution: {integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==} 341 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 342 | dev: true 343 | 344 | /@humanwhocodes/config-array@0.11.10: 345 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} 346 | engines: {node: '>=10.10.0'} 347 | dependencies: 348 | '@humanwhocodes/object-schema': 1.2.1 349 | debug: 4.3.4(supports-color@8.1.1) 350 | minimatch: 3.1.2 351 | transitivePeerDependencies: 352 | - supports-color 353 | dev: true 354 | 355 | /@humanwhocodes/module-importer@1.0.1: 356 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 357 | engines: {node: '>=12.22'} 358 | dev: true 359 | 360 | /@humanwhocodes/object-schema@1.2.1: 361 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 362 | dev: true 363 | 364 | /@jridgewell/gen-mapping@0.3.3: 365 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 366 | engines: {node: '>=6.0.0'} 367 | dependencies: 368 | '@jridgewell/set-array': 1.1.2 369 | '@jridgewell/sourcemap-codec': 1.4.15 370 | '@jridgewell/trace-mapping': 0.3.18 371 | 372 | /@jridgewell/gen-mapping@0.3.5: 373 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 374 | engines: {node: '>=6.0.0'} 375 | dependencies: 376 | '@jridgewell/set-array': 1.2.1 377 | '@jridgewell/sourcemap-codec': 1.4.15 378 | '@jridgewell/trace-mapping': 0.3.25 379 | dev: false 380 | 381 | /@jridgewell/resolve-uri@3.1.0: 382 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 383 | engines: {node: '>=6.0.0'} 384 | 385 | /@jridgewell/set-array@1.1.2: 386 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 387 | engines: {node: '>=6.0.0'} 388 | 389 | /@jridgewell/set-array@1.2.1: 390 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 391 | engines: {node: '>=6.0.0'} 392 | dev: false 393 | 394 | /@jridgewell/source-map@0.3.3: 395 | resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} 396 | dependencies: 397 | '@jridgewell/gen-mapping': 0.3.3 398 | '@jridgewell/trace-mapping': 0.3.18 399 | dev: true 400 | 401 | /@jridgewell/sourcemap-codec@1.4.14: 402 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 403 | 404 | /@jridgewell/sourcemap-codec@1.4.15: 405 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 406 | 407 | /@jridgewell/trace-mapping@0.3.18: 408 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 409 | dependencies: 410 | '@jridgewell/resolve-uri': 3.1.0 411 | '@jridgewell/sourcemap-codec': 1.4.14 412 | 413 | /@jridgewell/trace-mapping@0.3.25: 414 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 415 | dependencies: 416 | '@jridgewell/resolve-uri': 3.1.0 417 | '@jridgewell/sourcemap-codec': 1.4.15 418 | dev: false 419 | 420 | /@nodelib/fs.scandir@2.1.5: 421 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 422 | engines: {node: '>= 8'} 423 | dependencies: 424 | '@nodelib/fs.stat': 2.0.5 425 | run-parallel: 1.2.0 426 | dev: true 427 | 428 | /@nodelib/fs.stat@2.0.5: 429 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 430 | engines: {node: '>= 8'} 431 | dev: true 432 | 433 | /@nodelib/fs.walk@1.2.8: 434 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 435 | engines: {node: '>= 8'} 436 | dependencies: 437 | '@nodelib/fs.scandir': 2.1.5 438 | fastq: 1.15.0 439 | dev: true 440 | 441 | /@pkgr/core@0.1.1: 442 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 443 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 444 | dev: true 445 | 446 | /@tootallnate/once@1.1.2: 447 | resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} 448 | engines: {node: '>= 6'} 449 | dev: true 450 | 451 | /@types/babel__core@7.20.5: 452 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 453 | dependencies: 454 | '@babel/parser': 7.24.0 455 | '@babel/types': 7.24.0 456 | '@types/babel__generator': 7.6.8 457 | '@types/babel__template': 7.4.4 458 | '@types/babel__traverse': 7.20.5 459 | dev: true 460 | 461 | /@types/babel__generator@7.6.8: 462 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 463 | dependencies: 464 | '@babel/types': 7.24.0 465 | dev: true 466 | 467 | /@types/babel__template@7.4.4: 468 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 469 | dependencies: 470 | '@babel/parser': 7.24.0 471 | '@babel/types': 7.24.0 472 | dev: true 473 | 474 | /@types/babel__traverse@7.20.5: 475 | resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} 476 | dependencies: 477 | '@babel/types': 7.24.0 478 | 479 | /@types/eslint-scope@3.7.4: 480 | resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} 481 | dependencies: 482 | '@types/eslint': 8.40.2 483 | '@types/estree': 1.0.1 484 | dev: true 485 | 486 | /@types/eslint@8.40.2: 487 | resolution: {integrity: sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==} 488 | dependencies: 489 | '@types/estree': 1.0.1 490 | '@types/json-schema': 7.0.12 491 | dev: true 492 | 493 | /@types/estree@1.0.1: 494 | resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} 495 | dev: true 496 | 497 | /@types/git-url-parse@9.0.1: 498 | resolution: {integrity: sha512-Zf9mY4Mz7N3Nyi341nUkOtgVUQn4j6NS4ndqEha/lOgEbTkHzpD7wZuRagYKzrXNtvawWfsrojoC1nhsQexvNA==} 499 | dev: true 500 | 501 | /@types/glob@8.1.0: 502 | resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} 503 | dependencies: 504 | '@types/minimatch': 5.1.2 505 | '@types/node': 20.2.5 506 | dev: true 507 | 508 | /@types/json-schema@7.0.12: 509 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} 510 | dev: true 511 | 512 | /@types/minimatch@5.1.2: 513 | resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} 514 | dev: true 515 | 516 | /@types/mocha@10.0.1: 517 | resolution: {integrity: sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==} 518 | dev: true 519 | 520 | /@types/node@20.2.5: 521 | resolution: {integrity: sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==} 522 | dev: true 523 | 524 | /@types/semver@7.5.0: 525 | resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} 526 | dev: true 527 | 528 | /@types/vscode@1.79.0: 529 | resolution: {integrity: sha512-Tfowu2rSW8hVGbqzQLSPlOEiIOYYryTkgJ+chMecpYiJcnw9n0essvSiclnK+Qh/TcSVJHgaK4EMrQDZjZJ/Sw==} 530 | dev: true 531 | 532 | /@typescript-eslint/eslint-plugin@5.59.8(@typescript-eslint/parser@5.59.8)(eslint@8.41.0)(typescript@5.1.3): 533 | resolution: {integrity: sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==} 534 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 535 | peerDependencies: 536 | '@typescript-eslint/parser': ^5.0.0 537 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 538 | typescript: '*' 539 | peerDependenciesMeta: 540 | typescript: 541 | optional: true 542 | dependencies: 543 | '@eslint-community/regexpp': 4.5.1 544 | '@typescript-eslint/parser': 5.59.8(eslint@8.41.0)(typescript@5.1.3) 545 | '@typescript-eslint/scope-manager': 5.59.8 546 | '@typescript-eslint/type-utils': 5.59.8(eslint@8.41.0)(typescript@5.1.3) 547 | '@typescript-eslint/utils': 5.59.8(eslint@8.41.0)(typescript@5.1.3) 548 | debug: 4.3.4(supports-color@8.1.1) 549 | eslint: 8.41.0 550 | grapheme-splitter: 1.0.4 551 | ignore: 5.2.4 552 | natural-compare-lite: 1.4.0 553 | semver: 7.5.3 554 | tsutils: 3.21.0(typescript@5.1.3) 555 | typescript: 5.1.3 556 | transitivePeerDependencies: 557 | - supports-color 558 | dev: true 559 | 560 | /@typescript-eslint/parser@5.59.8(eslint@8.41.0)(typescript@5.1.3): 561 | resolution: {integrity: sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==} 562 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 563 | peerDependencies: 564 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 565 | typescript: '*' 566 | peerDependenciesMeta: 567 | typescript: 568 | optional: true 569 | dependencies: 570 | '@typescript-eslint/scope-manager': 5.59.8 571 | '@typescript-eslint/types': 5.59.8 572 | '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.3) 573 | debug: 4.3.4(supports-color@8.1.1) 574 | eslint: 8.41.0 575 | typescript: 5.1.3 576 | transitivePeerDependencies: 577 | - supports-color 578 | dev: true 579 | 580 | /@typescript-eslint/scope-manager@5.59.8: 581 | resolution: {integrity: sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==} 582 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 583 | dependencies: 584 | '@typescript-eslint/types': 5.59.8 585 | '@typescript-eslint/visitor-keys': 5.59.8 586 | dev: true 587 | 588 | /@typescript-eslint/type-utils@5.59.8(eslint@8.41.0)(typescript@5.1.3): 589 | resolution: {integrity: sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==} 590 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 591 | peerDependencies: 592 | eslint: '*' 593 | typescript: '*' 594 | peerDependenciesMeta: 595 | typescript: 596 | optional: true 597 | dependencies: 598 | '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.3) 599 | '@typescript-eslint/utils': 5.59.8(eslint@8.41.0)(typescript@5.1.3) 600 | debug: 4.3.4(supports-color@8.1.1) 601 | eslint: 8.41.0 602 | tsutils: 3.21.0(typescript@5.1.3) 603 | typescript: 5.1.3 604 | transitivePeerDependencies: 605 | - supports-color 606 | dev: true 607 | 608 | /@typescript-eslint/types@5.59.8: 609 | resolution: {integrity: sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==} 610 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 611 | dev: true 612 | 613 | /@typescript-eslint/typescript-estree@5.59.8(typescript@5.1.3): 614 | resolution: {integrity: sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==} 615 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 616 | peerDependencies: 617 | typescript: '*' 618 | peerDependenciesMeta: 619 | typescript: 620 | optional: true 621 | dependencies: 622 | '@typescript-eslint/types': 5.59.8 623 | '@typescript-eslint/visitor-keys': 5.59.8 624 | debug: 4.3.4(supports-color@8.1.1) 625 | globby: 11.1.0 626 | is-glob: 4.0.3 627 | semver: 7.5.3 628 | tsutils: 3.21.0(typescript@5.1.3) 629 | typescript: 5.1.3 630 | transitivePeerDependencies: 631 | - supports-color 632 | dev: true 633 | 634 | /@typescript-eslint/utils@5.59.8(eslint@8.41.0)(typescript@5.1.3): 635 | resolution: {integrity: sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==} 636 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 637 | peerDependencies: 638 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 639 | dependencies: 640 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) 641 | '@types/json-schema': 7.0.12 642 | '@types/semver': 7.5.0 643 | '@typescript-eslint/scope-manager': 5.59.8 644 | '@typescript-eslint/types': 5.59.8 645 | '@typescript-eslint/typescript-estree': 5.59.8(typescript@5.1.3) 646 | eslint: 8.41.0 647 | eslint-scope: 5.1.1 648 | semver: 7.5.3 649 | transitivePeerDependencies: 650 | - supports-color 651 | - typescript 652 | dev: true 653 | 654 | /@typescript-eslint/visitor-keys@5.59.8: 655 | resolution: {integrity: sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==} 656 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 657 | dependencies: 658 | '@typescript-eslint/types': 5.59.8 659 | eslint-visitor-keys: 3.4.1 660 | dev: true 661 | 662 | /@vscode/test-electron@2.3.2: 663 | resolution: {integrity: sha512-CRfQIs5Wi5Ok5SUCC3PTvRRXa74LD43cSXHC8EuNlmHHEPaJa/AGrv76brcA1hVSxrdja9tiYwp95Lq8kwY0tw==} 664 | engines: {node: '>=16'} 665 | dependencies: 666 | http-proxy-agent: 4.0.1 667 | https-proxy-agent: 5.0.1 668 | jszip: 3.10.1 669 | semver: 7.5.3 670 | transitivePeerDependencies: 671 | - supports-color 672 | dev: true 673 | 674 | /@webassemblyjs/ast@1.11.6: 675 | resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} 676 | dependencies: 677 | '@webassemblyjs/helper-numbers': 1.11.6 678 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 679 | dev: true 680 | 681 | /@webassemblyjs/floating-point-hex-parser@1.11.6: 682 | resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} 683 | dev: true 684 | 685 | /@webassemblyjs/helper-api-error@1.11.6: 686 | resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} 687 | dev: true 688 | 689 | /@webassemblyjs/helper-buffer@1.11.6: 690 | resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} 691 | dev: true 692 | 693 | /@webassemblyjs/helper-numbers@1.11.6: 694 | resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} 695 | dependencies: 696 | '@webassemblyjs/floating-point-hex-parser': 1.11.6 697 | '@webassemblyjs/helper-api-error': 1.11.6 698 | '@xtuc/long': 4.2.2 699 | dev: true 700 | 701 | /@webassemblyjs/helper-wasm-bytecode@1.11.6: 702 | resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} 703 | dev: true 704 | 705 | /@webassemblyjs/helper-wasm-section@1.11.6: 706 | resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} 707 | dependencies: 708 | '@webassemblyjs/ast': 1.11.6 709 | '@webassemblyjs/helper-buffer': 1.11.6 710 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 711 | '@webassemblyjs/wasm-gen': 1.11.6 712 | dev: true 713 | 714 | /@webassemblyjs/ieee754@1.11.6: 715 | resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} 716 | dependencies: 717 | '@xtuc/ieee754': 1.2.0 718 | dev: true 719 | 720 | /@webassemblyjs/leb128@1.11.6: 721 | resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} 722 | dependencies: 723 | '@xtuc/long': 4.2.2 724 | dev: true 725 | 726 | /@webassemblyjs/utf8@1.11.6: 727 | resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} 728 | dev: true 729 | 730 | /@webassemblyjs/wasm-edit@1.11.6: 731 | resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} 732 | dependencies: 733 | '@webassemblyjs/ast': 1.11.6 734 | '@webassemblyjs/helper-buffer': 1.11.6 735 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 736 | '@webassemblyjs/helper-wasm-section': 1.11.6 737 | '@webassemblyjs/wasm-gen': 1.11.6 738 | '@webassemblyjs/wasm-opt': 1.11.6 739 | '@webassemblyjs/wasm-parser': 1.11.6 740 | '@webassemblyjs/wast-printer': 1.11.6 741 | dev: true 742 | 743 | /@webassemblyjs/wasm-gen@1.11.6: 744 | resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} 745 | dependencies: 746 | '@webassemblyjs/ast': 1.11.6 747 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 748 | '@webassemblyjs/ieee754': 1.11.6 749 | '@webassemblyjs/leb128': 1.11.6 750 | '@webassemblyjs/utf8': 1.11.6 751 | dev: true 752 | 753 | /@webassemblyjs/wasm-opt@1.11.6: 754 | resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} 755 | dependencies: 756 | '@webassemblyjs/ast': 1.11.6 757 | '@webassemblyjs/helper-buffer': 1.11.6 758 | '@webassemblyjs/wasm-gen': 1.11.6 759 | '@webassemblyjs/wasm-parser': 1.11.6 760 | dev: true 761 | 762 | /@webassemblyjs/wasm-parser@1.11.6: 763 | resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} 764 | dependencies: 765 | '@webassemblyjs/ast': 1.11.6 766 | '@webassemblyjs/helper-api-error': 1.11.6 767 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 768 | '@webassemblyjs/ieee754': 1.11.6 769 | '@webassemblyjs/leb128': 1.11.6 770 | '@webassemblyjs/utf8': 1.11.6 771 | dev: true 772 | 773 | /@webassemblyjs/wast-printer@1.11.6: 774 | resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} 775 | dependencies: 776 | '@webassemblyjs/ast': 1.11.6 777 | '@xtuc/long': 4.2.2 778 | dev: true 779 | 780 | /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.1)(webpack@5.85.0): 781 | resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} 782 | engines: {node: '>=14.15.0'} 783 | peerDependencies: 784 | webpack: 5.x.x 785 | webpack-cli: 5.x.x 786 | dependencies: 787 | webpack: 5.85.0(webpack-cli@5.1.1) 788 | webpack-cli: 5.1.1(webpack@5.85.0) 789 | dev: true 790 | 791 | /@webpack-cli/info@2.0.2(webpack-cli@5.1.1)(webpack@5.85.0): 792 | resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} 793 | engines: {node: '>=14.15.0'} 794 | peerDependencies: 795 | webpack: 5.x.x 796 | webpack-cli: 5.x.x 797 | dependencies: 798 | webpack: 5.85.0(webpack-cli@5.1.1) 799 | webpack-cli: 5.1.1(webpack@5.85.0) 800 | dev: true 801 | 802 | /@webpack-cli/serve@2.0.5(webpack-cli@5.1.1)(webpack@5.85.0): 803 | resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} 804 | engines: {node: '>=14.15.0'} 805 | peerDependencies: 806 | webpack: 5.x.x 807 | webpack-cli: 5.x.x 808 | webpack-dev-server: '*' 809 | peerDependenciesMeta: 810 | webpack-dev-server: 811 | optional: true 812 | dependencies: 813 | webpack: 5.85.0(webpack-cli@5.1.1) 814 | webpack-cli: 5.1.1(webpack@5.85.0) 815 | dev: true 816 | 817 | /@xtuc/ieee754@1.2.0: 818 | resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} 819 | dev: true 820 | 821 | /@xtuc/long@4.2.2: 822 | resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} 823 | dev: true 824 | 825 | /acorn-import-assertions@1.9.0(acorn@8.9.0): 826 | resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} 827 | peerDependencies: 828 | acorn: ^8 829 | dependencies: 830 | acorn: 8.9.0 831 | dev: true 832 | 833 | /acorn-jsx@5.3.2(acorn@8.9.0): 834 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 835 | peerDependencies: 836 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 837 | dependencies: 838 | acorn: 8.9.0 839 | dev: true 840 | 841 | /acorn@8.9.0: 842 | resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} 843 | engines: {node: '>=0.4.0'} 844 | hasBin: true 845 | dev: true 846 | 847 | /agent-base@6.0.2: 848 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 849 | engines: {node: '>= 6.0.0'} 850 | dependencies: 851 | debug: 4.3.4(supports-color@8.1.1) 852 | transitivePeerDependencies: 853 | - supports-color 854 | dev: true 855 | 856 | /ajv-keywords@3.5.2(ajv@6.12.6): 857 | resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} 858 | peerDependencies: 859 | ajv: ^6.9.1 860 | dependencies: 861 | ajv: 6.12.6 862 | dev: true 863 | 864 | /ajv@6.12.6: 865 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 866 | dependencies: 867 | fast-deep-equal: 3.1.3 868 | fast-json-stable-stringify: 2.1.0 869 | json-schema-traverse: 0.4.1 870 | uri-js: 4.4.1 871 | dev: true 872 | 873 | /ansi-colors@4.1.1: 874 | resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} 875 | engines: {node: '>=6'} 876 | dev: true 877 | 878 | /ansi-regex@5.0.1: 879 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 880 | engines: {node: '>=8'} 881 | dev: true 882 | 883 | /ansi-styles@3.2.1: 884 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 885 | engines: {node: '>=4'} 886 | dependencies: 887 | color-convert: 1.9.3 888 | dev: false 889 | 890 | /ansi-styles@4.3.0: 891 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 892 | engines: {node: '>=8'} 893 | dependencies: 894 | color-convert: 2.0.1 895 | dev: true 896 | 897 | /anymatch@3.1.3: 898 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 899 | engines: {node: '>= 8'} 900 | dependencies: 901 | normalize-path: 3.0.0 902 | picomatch: 2.3.1 903 | dev: true 904 | 905 | /argparse@2.0.1: 906 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 907 | dev: true 908 | 909 | /array-union@2.1.0: 910 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 911 | engines: {node: '>=8'} 912 | dev: true 913 | 914 | /balanced-match@1.0.2: 915 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 916 | 917 | /binary-extensions@2.2.0: 918 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 919 | engines: {node: '>=8'} 920 | dev: true 921 | 922 | /brace-expansion@1.1.11: 923 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 924 | dependencies: 925 | balanced-match: 1.0.2 926 | concat-map: 0.0.1 927 | dev: true 928 | 929 | /brace-expansion@2.0.1: 930 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 931 | dependencies: 932 | balanced-match: 1.0.2 933 | 934 | /braces@3.0.2: 935 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 936 | engines: {node: '>=8'} 937 | dependencies: 938 | fill-range: 7.0.1 939 | dev: true 940 | 941 | /browser-stdout@1.3.1: 942 | resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} 943 | dev: true 944 | 945 | /browserslist@4.21.9: 946 | resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} 947 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 948 | hasBin: true 949 | dependencies: 950 | caniuse-lite: 1.0.30001508 951 | electron-to-chromium: 1.4.441 952 | node-releases: 2.0.12 953 | update-browserslist-db: 1.0.11(browserslist@4.21.9) 954 | dev: true 955 | 956 | /browserslist@4.23.0: 957 | resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} 958 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 959 | hasBin: true 960 | dependencies: 961 | caniuse-lite: 1.0.30001593 962 | electron-to-chromium: 1.4.690 963 | node-releases: 2.0.14 964 | update-browserslist-db: 1.0.13(browserslist@4.23.0) 965 | dev: false 966 | 967 | /buffer-from@1.1.2: 968 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 969 | dev: true 970 | 971 | /callsites@3.1.0: 972 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 973 | engines: {node: '>=6'} 974 | dev: true 975 | 976 | /camelcase@6.3.0: 977 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 978 | engines: {node: '>=10'} 979 | dev: true 980 | 981 | /caniuse-lite@1.0.30001508: 982 | resolution: {integrity: sha512-sdQZOJdmt3GJs1UMNpCCCyeuS2IEGLXnHyAo9yIO5JJDjbjoVRij4M1qep6P6gFpptD1PqIYgzM+gwJbOi92mw==} 983 | dev: true 984 | 985 | /caniuse-lite@1.0.30001593: 986 | resolution: {integrity: sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==} 987 | dev: false 988 | 989 | /chalk@2.4.2: 990 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 991 | engines: {node: '>=4'} 992 | dependencies: 993 | ansi-styles: 3.2.1 994 | escape-string-regexp: 1.0.5 995 | supports-color: 5.5.0 996 | dev: false 997 | 998 | /chalk@4.1.2: 999 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1000 | engines: {node: '>=10'} 1001 | dependencies: 1002 | ansi-styles: 4.3.0 1003 | supports-color: 7.2.0 1004 | dev: true 1005 | 1006 | /chokidar@3.5.3: 1007 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 1008 | engines: {node: '>= 8.10.0'} 1009 | dependencies: 1010 | anymatch: 3.1.3 1011 | braces: 3.0.2 1012 | glob-parent: 5.1.2 1013 | is-binary-path: 2.1.0 1014 | is-glob: 4.0.3 1015 | normalize-path: 3.0.0 1016 | readdirp: 3.6.0 1017 | optionalDependencies: 1018 | fsevents: 2.3.2 1019 | dev: true 1020 | 1021 | /chrome-trace-event@1.0.3: 1022 | resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} 1023 | engines: {node: '>=6.0'} 1024 | dev: true 1025 | 1026 | /cliui@7.0.4: 1027 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 1028 | dependencies: 1029 | string-width: 4.2.3 1030 | strip-ansi: 6.0.1 1031 | wrap-ansi: 7.0.0 1032 | dev: true 1033 | 1034 | /clone-deep@4.0.1: 1035 | resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} 1036 | engines: {node: '>=6'} 1037 | dependencies: 1038 | is-plain-object: 2.0.4 1039 | kind-of: 6.0.3 1040 | shallow-clone: 3.0.1 1041 | dev: true 1042 | 1043 | /color-convert@1.9.3: 1044 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1045 | dependencies: 1046 | color-name: 1.1.3 1047 | dev: false 1048 | 1049 | /color-convert@2.0.1: 1050 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1051 | engines: {node: '>=7.0.0'} 1052 | dependencies: 1053 | color-name: 1.1.4 1054 | dev: true 1055 | 1056 | /color-name@1.1.3: 1057 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1058 | dev: false 1059 | 1060 | /color-name@1.1.4: 1061 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1062 | dev: true 1063 | 1064 | /colorette@2.0.20: 1065 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 1066 | dev: true 1067 | 1068 | /commander@10.0.1: 1069 | resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} 1070 | engines: {node: '>=14'} 1071 | dev: true 1072 | 1073 | /commander@2.20.3: 1074 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 1075 | dev: true 1076 | 1077 | /concat-map@0.0.1: 1078 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1079 | dev: true 1080 | 1081 | /convert-source-map@2.0.0: 1082 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 1083 | dev: false 1084 | 1085 | /core-util-is@1.0.3: 1086 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 1087 | dev: true 1088 | 1089 | /cross-spawn@7.0.3: 1090 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1091 | engines: {node: '>= 8'} 1092 | dependencies: 1093 | path-key: 3.1.1 1094 | shebang-command: 2.0.0 1095 | which: 2.0.2 1096 | 1097 | /debug@4.3.4(supports-color@8.1.1): 1098 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1099 | engines: {node: '>=6.0'} 1100 | peerDependencies: 1101 | supports-color: '*' 1102 | peerDependenciesMeta: 1103 | supports-color: 1104 | optional: true 1105 | dependencies: 1106 | ms: 2.1.2 1107 | supports-color: 8.1.1 1108 | 1109 | /decamelize@4.0.0: 1110 | resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} 1111 | engines: {node: '>=10'} 1112 | dev: true 1113 | 1114 | /deep-is@0.1.4: 1115 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1116 | dev: true 1117 | 1118 | /detect-indent@7.0.1: 1119 | resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} 1120 | engines: {node: '>=12.20'} 1121 | dev: true 1122 | 1123 | /detect-newline@4.0.1: 1124 | resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} 1125 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1126 | dev: true 1127 | 1128 | /diff@5.0.0: 1129 | resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} 1130 | engines: {node: '>=0.3.1'} 1131 | dev: true 1132 | 1133 | /dir-glob@3.0.1: 1134 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1135 | engines: {node: '>=8'} 1136 | dependencies: 1137 | path-type: 4.0.0 1138 | dev: true 1139 | 1140 | /doctrine@3.0.0: 1141 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1142 | engines: {node: '>=6.0.0'} 1143 | dependencies: 1144 | esutils: 2.0.3 1145 | dev: true 1146 | 1147 | /electron-to-chromium@1.4.441: 1148 | resolution: {integrity: sha512-LlCgQ8zgYZPymf5H4aE9itwiIWH4YlCiv1HFLmmcBeFYi5E+3eaIFnjHzYtcFQbaKfAW+CqZ9pgxo33DZuoqPg==} 1149 | dev: true 1150 | 1151 | /electron-to-chromium@1.4.690: 1152 | resolution: {integrity: sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA==} 1153 | dev: false 1154 | 1155 | /emoji-regex@8.0.0: 1156 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1157 | dev: true 1158 | 1159 | /enhanced-resolve@5.15.0: 1160 | resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} 1161 | engines: {node: '>=10.13.0'} 1162 | dependencies: 1163 | graceful-fs: 4.2.11 1164 | tapable: 2.2.1 1165 | dev: true 1166 | 1167 | /envinfo@7.10.0: 1168 | resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} 1169 | engines: {node: '>=4'} 1170 | hasBin: true 1171 | dev: true 1172 | 1173 | /es-module-lexer@1.3.0: 1174 | resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} 1175 | dev: true 1176 | 1177 | /escalade@3.1.1: 1178 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1179 | engines: {node: '>=6'} 1180 | 1181 | /escape-string-regexp@1.0.5: 1182 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1183 | engines: {node: '>=0.8.0'} 1184 | dev: false 1185 | 1186 | /escape-string-regexp@4.0.0: 1187 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1188 | engines: {node: '>=10'} 1189 | dev: true 1190 | 1191 | /eslint-scope@5.1.1: 1192 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1193 | engines: {node: '>=8.0.0'} 1194 | dependencies: 1195 | esrecurse: 4.3.0 1196 | estraverse: 4.3.0 1197 | dev: true 1198 | 1199 | /eslint-scope@7.2.0: 1200 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} 1201 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1202 | dependencies: 1203 | esrecurse: 4.3.0 1204 | estraverse: 5.3.0 1205 | dev: true 1206 | 1207 | /eslint-visitor-keys@3.4.1: 1208 | resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} 1209 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1210 | dev: true 1211 | 1212 | /eslint@8.41.0: 1213 | resolution: {integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==} 1214 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1215 | hasBin: true 1216 | dependencies: 1217 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) 1218 | '@eslint-community/regexpp': 4.5.1 1219 | '@eslint/eslintrc': 2.0.3 1220 | '@eslint/js': 8.41.0 1221 | '@humanwhocodes/config-array': 0.11.10 1222 | '@humanwhocodes/module-importer': 1.0.1 1223 | '@nodelib/fs.walk': 1.2.8 1224 | ajv: 6.12.6 1225 | chalk: 4.1.2 1226 | cross-spawn: 7.0.3 1227 | debug: 4.3.4(supports-color@8.1.1) 1228 | doctrine: 3.0.0 1229 | escape-string-regexp: 4.0.0 1230 | eslint-scope: 7.2.0 1231 | eslint-visitor-keys: 3.4.1 1232 | espree: 9.5.2 1233 | esquery: 1.5.0 1234 | esutils: 2.0.3 1235 | fast-deep-equal: 3.1.3 1236 | file-entry-cache: 6.0.1 1237 | find-up: 5.0.0 1238 | glob-parent: 6.0.2 1239 | globals: 13.20.0 1240 | graphemer: 1.4.0 1241 | ignore: 5.2.4 1242 | import-fresh: 3.3.0 1243 | imurmurhash: 0.1.4 1244 | is-glob: 4.0.3 1245 | is-path-inside: 3.0.3 1246 | js-yaml: 4.1.0 1247 | json-stable-stringify-without-jsonify: 1.0.1 1248 | levn: 0.4.1 1249 | lodash.merge: 4.6.2 1250 | minimatch: 3.1.2 1251 | natural-compare: 1.4.0 1252 | optionator: 0.9.1 1253 | strip-ansi: 6.0.1 1254 | strip-json-comments: 3.1.1 1255 | text-table: 0.2.0 1256 | transitivePeerDependencies: 1257 | - supports-color 1258 | dev: true 1259 | 1260 | /espree@9.5.2: 1261 | resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} 1262 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1263 | dependencies: 1264 | acorn: 8.9.0 1265 | acorn-jsx: 5.3.2(acorn@8.9.0) 1266 | eslint-visitor-keys: 3.4.1 1267 | dev: true 1268 | 1269 | /esquery@1.5.0: 1270 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1271 | engines: {node: '>=0.10'} 1272 | dependencies: 1273 | estraverse: 5.3.0 1274 | dev: true 1275 | 1276 | /esrecurse@4.3.0: 1277 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1278 | engines: {node: '>=4.0'} 1279 | dependencies: 1280 | estraverse: 5.3.0 1281 | dev: true 1282 | 1283 | /estraverse@4.3.0: 1284 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1285 | engines: {node: '>=4.0'} 1286 | dev: true 1287 | 1288 | /estraverse@5.3.0: 1289 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1290 | engines: {node: '>=4.0'} 1291 | dev: true 1292 | 1293 | /esutils@2.0.3: 1294 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1295 | engines: {node: '>=0.10.0'} 1296 | dev: true 1297 | 1298 | /events@3.3.0: 1299 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 1300 | engines: {node: '>=0.8.x'} 1301 | dev: true 1302 | 1303 | /execa@7.1.1: 1304 | resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} 1305 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} 1306 | dependencies: 1307 | cross-spawn: 7.0.3 1308 | get-stream: 6.0.1 1309 | human-signals: 4.3.1 1310 | is-stream: 3.0.0 1311 | merge-stream: 2.0.0 1312 | npm-run-path: 5.1.0 1313 | onetime: 6.0.0 1314 | signal-exit: 3.0.7 1315 | strip-final-newline: 3.0.0 1316 | dev: false 1317 | 1318 | /fast-deep-equal@3.1.3: 1319 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1320 | dev: true 1321 | 1322 | /fast-glob@3.2.12: 1323 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 1324 | engines: {node: '>=8.6.0'} 1325 | dependencies: 1326 | '@nodelib/fs.stat': 2.0.5 1327 | '@nodelib/fs.walk': 1.2.8 1328 | glob-parent: 5.1.2 1329 | merge2: 1.4.1 1330 | micromatch: 4.0.5 1331 | dev: true 1332 | 1333 | /fast-glob@3.3.2: 1334 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1335 | engines: {node: '>=8.6.0'} 1336 | dependencies: 1337 | '@nodelib/fs.stat': 2.0.5 1338 | '@nodelib/fs.walk': 1.2.8 1339 | glob-parent: 5.1.2 1340 | merge2: 1.4.1 1341 | micromatch: 4.0.5 1342 | dev: true 1343 | 1344 | /fast-json-stable-stringify@2.1.0: 1345 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1346 | dev: true 1347 | 1348 | /fast-levenshtein@2.0.6: 1349 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1350 | dev: true 1351 | 1352 | /fastest-levenshtein@1.0.16: 1353 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} 1354 | engines: {node: '>= 4.9.1'} 1355 | dev: true 1356 | 1357 | /fastq@1.15.0: 1358 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1359 | dependencies: 1360 | reusify: 1.0.4 1361 | dev: true 1362 | 1363 | /file-entry-cache@6.0.1: 1364 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1365 | engines: {node: ^10.12.0 || >=12.0.0} 1366 | dependencies: 1367 | flat-cache: 3.0.4 1368 | dev: true 1369 | 1370 | /fill-range@7.0.1: 1371 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1372 | engines: {node: '>=8'} 1373 | dependencies: 1374 | to-regex-range: 5.0.1 1375 | dev: true 1376 | 1377 | /find-up@4.1.0: 1378 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1379 | engines: {node: '>=8'} 1380 | dependencies: 1381 | locate-path: 5.0.0 1382 | path-exists: 4.0.0 1383 | dev: true 1384 | 1385 | /find-up@5.0.0: 1386 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1387 | engines: {node: '>=10'} 1388 | dependencies: 1389 | locate-path: 6.0.0 1390 | path-exists: 4.0.0 1391 | dev: true 1392 | 1393 | /flat-cache@3.0.4: 1394 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1395 | engines: {node: ^10.12.0 || >=12.0.0} 1396 | dependencies: 1397 | flatted: 3.2.7 1398 | rimraf: 3.0.2 1399 | dev: true 1400 | 1401 | /flat@5.0.2: 1402 | resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} 1403 | hasBin: true 1404 | dev: true 1405 | 1406 | /flatted@3.2.7: 1407 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1408 | dev: true 1409 | 1410 | /fs.realpath@1.0.0: 1411 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1412 | dev: true 1413 | 1414 | /fsevents@2.3.2: 1415 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1416 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1417 | os: [darwin] 1418 | requiresBuild: true 1419 | dev: true 1420 | optional: true 1421 | 1422 | /function-bind@1.1.1: 1423 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1424 | dev: true 1425 | 1426 | /gensync@1.0.0-beta.2: 1427 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1428 | engines: {node: '>=6.9.0'} 1429 | dev: false 1430 | 1431 | /get-caller-file@2.0.5: 1432 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1433 | engines: {node: 6.* || 8.* || >= 10.*} 1434 | dev: true 1435 | 1436 | /get-stdin@9.0.0: 1437 | resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} 1438 | engines: {node: '>=12'} 1439 | dev: true 1440 | 1441 | /get-stream@6.0.1: 1442 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1443 | engines: {node: '>=10'} 1444 | dev: false 1445 | 1446 | /git-hooks-list@3.1.0: 1447 | resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} 1448 | dev: true 1449 | 1450 | /glob-parent@5.1.2: 1451 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1452 | engines: {node: '>= 6'} 1453 | dependencies: 1454 | is-glob: 4.0.3 1455 | dev: true 1456 | 1457 | /glob-parent@6.0.2: 1458 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1459 | engines: {node: '>=10.13.0'} 1460 | dependencies: 1461 | is-glob: 4.0.3 1462 | dev: true 1463 | 1464 | /glob-to-regexp@0.4.1: 1465 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 1466 | dev: true 1467 | 1468 | /glob@7.2.0: 1469 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 1470 | dependencies: 1471 | fs.realpath: 1.0.0 1472 | inflight: 1.0.6 1473 | inherits: 2.0.4 1474 | minimatch: 3.1.2 1475 | once: 1.4.0 1476 | path-is-absolute: 1.0.1 1477 | dev: true 1478 | 1479 | /glob@8.1.0: 1480 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 1481 | engines: {node: '>=12'} 1482 | dependencies: 1483 | fs.realpath: 1.0.0 1484 | inflight: 1.0.6 1485 | inherits: 2.0.4 1486 | minimatch: 5.1.6 1487 | once: 1.4.0 1488 | dev: true 1489 | 1490 | /globals@11.12.0: 1491 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1492 | engines: {node: '>=4'} 1493 | dev: false 1494 | 1495 | /globals@13.20.0: 1496 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1497 | engines: {node: '>=8'} 1498 | dependencies: 1499 | type-fest: 0.20.2 1500 | dev: true 1501 | 1502 | /globby@11.1.0: 1503 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1504 | engines: {node: '>=10'} 1505 | dependencies: 1506 | array-union: 2.1.0 1507 | dir-glob: 3.0.1 1508 | fast-glob: 3.2.12 1509 | ignore: 5.2.4 1510 | merge2: 1.4.1 1511 | slash: 3.0.0 1512 | dev: true 1513 | 1514 | /globby@13.2.2: 1515 | resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} 1516 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1517 | dependencies: 1518 | dir-glob: 3.0.1 1519 | fast-glob: 3.3.2 1520 | ignore: 5.2.4 1521 | merge2: 1.4.1 1522 | slash: 4.0.0 1523 | dev: true 1524 | 1525 | /graceful-fs@4.2.11: 1526 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1527 | dev: true 1528 | 1529 | /grapheme-splitter@1.0.4: 1530 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1531 | dev: true 1532 | 1533 | /graphemer@1.4.0: 1534 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1535 | dev: true 1536 | 1537 | /has-flag@3.0.0: 1538 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1539 | engines: {node: '>=4'} 1540 | dev: false 1541 | 1542 | /has-flag@4.0.0: 1543 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1544 | engines: {node: '>=8'} 1545 | 1546 | /has@1.0.3: 1547 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1548 | engines: {node: '>= 0.4.0'} 1549 | dependencies: 1550 | function-bind: 1.1.1 1551 | dev: true 1552 | 1553 | /he@1.2.0: 1554 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1555 | hasBin: true 1556 | dev: true 1557 | 1558 | /http-proxy-agent@4.0.1: 1559 | resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} 1560 | engines: {node: '>= 6'} 1561 | dependencies: 1562 | '@tootallnate/once': 1.1.2 1563 | agent-base: 6.0.2 1564 | debug: 4.3.4(supports-color@8.1.1) 1565 | transitivePeerDependencies: 1566 | - supports-color 1567 | dev: true 1568 | 1569 | /https-proxy-agent@5.0.1: 1570 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 1571 | engines: {node: '>= 6'} 1572 | dependencies: 1573 | agent-base: 6.0.2 1574 | debug: 4.3.4(supports-color@8.1.1) 1575 | transitivePeerDependencies: 1576 | - supports-color 1577 | dev: true 1578 | 1579 | /human-signals@4.3.1: 1580 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} 1581 | engines: {node: '>=14.18.0'} 1582 | dev: false 1583 | 1584 | /ignore@5.2.4: 1585 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1586 | engines: {node: '>= 4'} 1587 | dev: true 1588 | 1589 | /immediate@3.0.6: 1590 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} 1591 | dev: true 1592 | 1593 | /import-fresh@3.3.0: 1594 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1595 | engines: {node: '>=6'} 1596 | dependencies: 1597 | parent-module: 1.0.1 1598 | resolve-from: 4.0.0 1599 | dev: true 1600 | 1601 | /import-local@3.1.0: 1602 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 1603 | engines: {node: '>=8'} 1604 | hasBin: true 1605 | dependencies: 1606 | pkg-dir: 4.2.0 1607 | resolve-cwd: 3.0.0 1608 | dev: true 1609 | 1610 | /imurmurhash@0.1.4: 1611 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1612 | engines: {node: '>=0.8.19'} 1613 | dev: true 1614 | 1615 | /inflight@1.0.6: 1616 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1617 | dependencies: 1618 | once: 1.4.0 1619 | wrappy: 1.0.2 1620 | dev: true 1621 | 1622 | /inherits@2.0.4: 1623 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1624 | dev: true 1625 | 1626 | /interpret@3.1.1: 1627 | resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} 1628 | engines: {node: '>=10.13.0'} 1629 | dev: true 1630 | 1631 | /is-binary-path@2.1.0: 1632 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1633 | engines: {node: '>=8'} 1634 | dependencies: 1635 | binary-extensions: 2.2.0 1636 | dev: true 1637 | 1638 | /is-core-module@2.12.1: 1639 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} 1640 | dependencies: 1641 | has: 1.0.3 1642 | dev: true 1643 | 1644 | /is-extglob@2.1.1: 1645 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1646 | engines: {node: '>=0.10.0'} 1647 | dev: true 1648 | 1649 | /is-fullwidth-code-point@3.0.0: 1650 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1651 | engines: {node: '>=8'} 1652 | dev: true 1653 | 1654 | /is-glob@4.0.3: 1655 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1656 | engines: {node: '>=0.10.0'} 1657 | dependencies: 1658 | is-extglob: 2.1.1 1659 | dev: true 1660 | 1661 | /is-number@7.0.0: 1662 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1663 | engines: {node: '>=0.12.0'} 1664 | dev: true 1665 | 1666 | /is-path-inside@3.0.3: 1667 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1668 | engines: {node: '>=8'} 1669 | dev: true 1670 | 1671 | /is-plain-obj@2.1.0: 1672 | resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} 1673 | engines: {node: '>=8'} 1674 | dev: true 1675 | 1676 | /is-plain-obj@4.1.0: 1677 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 1678 | engines: {node: '>=12'} 1679 | dev: true 1680 | 1681 | /is-plain-object@2.0.4: 1682 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} 1683 | engines: {node: '>=0.10.0'} 1684 | dependencies: 1685 | isobject: 3.0.1 1686 | dev: true 1687 | 1688 | /is-stream@3.0.0: 1689 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1690 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1691 | dev: false 1692 | 1693 | /is-unicode-supported@0.1.0: 1694 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} 1695 | engines: {node: '>=10'} 1696 | dev: true 1697 | 1698 | /isarray@1.0.0: 1699 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1700 | dev: true 1701 | 1702 | /isexe@2.0.0: 1703 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1704 | 1705 | /isobject@3.0.1: 1706 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} 1707 | engines: {node: '>=0.10.0'} 1708 | dev: true 1709 | 1710 | /jest-worker@27.5.1: 1711 | resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} 1712 | engines: {node: '>= 10.13.0'} 1713 | dependencies: 1714 | '@types/node': 20.2.5 1715 | merge-stream: 2.0.0 1716 | supports-color: 8.1.1 1717 | dev: true 1718 | 1719 | /js-tokens@4.0.0: 1720 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1721 | dev: false 1722 | 1723 | /js-yaml@4.1.0: 1724 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1725 | hasBin: true 1726 | dependencies: 1727 | argparse: 2.0.1 1728 | dev: true 1729 | 1730 | /jsesc@2.5.2: 1731 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1732 | engines: {node: '>=4'} 1733 | hasBin: true 1734 | dev: false 1735 | 1736 | /json-parse-even-better-errors@2.3.1: 1737 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1738 | dev: true 1739 | 1740 | /json-schema-traverse@0.4.1: 1741 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1742 | dev: true 1743 | 1744 | /json-stable-stringify-without-jsonify@1.0.1: 1745 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1746 | dev: true 1747 | 1748 | /json5@2.2.3: 1749 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1750 | engines: {node: '>=6'} 1751 | hasBin: true 1752 | dev: false 1753 | 1754 | /jszip@3.10.1: 1755 | resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} 1756 | dependencies: 1757 | lie: 3.3.0 1758 | pako: 1.0.11 1759 | readable-stream: 2.3.8 1760 | setimmediate: 1.0.5 1761 | dev: true 1762 | 1763 | /kind-of@6.0.3: 1764 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1765 | engines: {node: '>=0.10.0'} 1766 | dev: true 1767 | 1768 | /levn@0.4.1: 1769 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1770 | engines: {node: '>= 0.8.0'} 1771 | dependencies: 1772 | prelude-ls: 1.2.1 1773 | type-check: 0.4.0 1774 | dev: true 1775 | 1776 | /lie@3.3.0: 1777 | resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} 1778 | dependencies: 1779 | immediate: 3.0.6 1780 | dev: true 1781 | 1782 | /loader-runner@4.3.0: 1783 | resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} 1784 | engines: {node: '>=6.11.5'} 1785 | dev: true 1786 | 1787 | /locate-path@5.0.0: 1788 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1789 | engines: {node: '>=8'} 1790 | dependencies: 1791 | p-locate: 4.1.0 1792 | dev: true 1793 | 1794 | /locate-path@6.0.0: 1795 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1796 | engines: {node: '>=10'} 1797 | dependencies: 1798 | p-locate: 5.0.0 1799 | dev: true 1800 | 1801 | /lodash.merge@4.6.2: 1802 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1803 | dev: true 1804 | 1805 | /lodash@4.17.21: 1806 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1807 | dev: true 1808 | 1809 | /log-symbols@4.1.0: 1810 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} 1811 | engines: {node: '>=10'} 1812 | dependencies: 1813 | chalk: 4.1.2 1814 | is-unicode-supported: 0.1.0 1815 | dev: true 1816 | 1817 | /lru-cache@5.1.1: 1818 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1819 | dependencies: 1820 | yallist: 3.1.1 1821 | dev: false 1822 | 1823 | /lru-cache@6.0.0: 1824 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1825 | engines: {node: '>=10'} 1826 | dependencies: 1827 | yallist: 4.0.0 1828 | 1829 | /merge-stream@2.0.0: 1830 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1831 | 1832 | /merge2@1.4.1: 1833 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1834 | engines: {node: '>= 8'} 1835 | dev: true 1836 | 1837 | /micromatch@4.0.5: 1838 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1839 | engines: {node: '>=8.6'} 1840 | dependencies: 1841 | braces: 3.0.2 1842 | picomatch: 2.3.1 1843 | dev: true 1844 | 1845 | /mime-db@1.52.0: 1846 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1847 | engines: {node: '>= 0.6'} 1848 | dev: true 1849 | 1850 | /mime-types@2.1.35: 1851 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1852 | engines: {node: '>= 0.6'} 1853 | dependencies: 1854 | mime-db: 1.52.0 1855 | dev: true 1856 | 1857 | /mimic-fn@4.0.0: 1858 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1859 | engines: {node: '>=12'} 1860 | dev: false 1861 | 1862 | /minimatch@3.1.2: 1863 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1864 | dependencies: 1865 | brace-expansion: 1.1.11 1866 | dev: true 1867 | 1868 | /minimatch@5.0.1: 1869 | resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} 1870 | engines: {node: '>=10'} 1871 | dependencies: 1872 | brace-expansion: 2.0.1 1873 | dev: true 1874 | 1875 | /minimatch@5.1.6: 1876 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1877 | engines: {node: '>=10'} 1878 | dependencies: 1879 | brace-expansion: 2.0.1 1880 | 1881 | /mocha@10.2.0: 1882 | resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} 1883 | engines: {node: '>= 14.0.0'} 1884 | hasBin: true 1885 | dependencies: 1886 | ansi-colors: 4.1.1 1887 | browser-stdout: 1.3.1 1888 | chokidar: 3.5.3 1889 | debug: 4.3.4(supports-color@8.1.1) 1890 | diff: 5.0.0 1891 | escape-string-regexp: 4.0.0 1892 | find-up: 5.0.0 1893 | glob: 7.2.0 1894 | he: 1.2.0 1895 | js-yaml: 4.1.0 1896 | log-symbols: 4.1.0 1897 | minimatch: 5.0.1 1898 | ms: 2.1.3 1899 | nanoid: 3.3.3 1900 | serialize-javascript: 6.0.0 1901 | strip-json-comments: 3.1.1 1902 | supports-color: 8.1.1 1903 | workerpool: 6.2.1 1904 | yargs: 16.2.0 1905 | yargs-parser: 20.2.4 1906 | yargs-unparser: 2.0.0 1907 | dev: true 1908 | 1909 | /ms@2.1.2: 1910 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1911 | 1912 | /ms@2.1.3: 1913 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1914 | dev: true 1915 | 1916 | /nanoid@3.3.3: 1917 | resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} 1918 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1919 | hasBin: true 1920 | dev: true 1921 | 1922 | /nanoid@3.3.7: 1923 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1924 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1925 | hasBin: true 1926 | dev: true 1927 | 1928 | /natural-compare-lite@1.4.0: 1929 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 1930 | dev: true 1931 | 1932 | /natural-compare@1.4.0: 1933 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1934 | dev: true 1935 | 1936 | /neo-async@2.6.2: 1937 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 1938 | dev: true 1939 | 1940 | /node-releases@2.0.12: 1941 | resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} 1942 | dev: true 1943 | 1944 | /node-releases@2.0.14: 1945 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 1946 | dev: false 1947 | 1948 | /normalize-path@3.0.0: 1949 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1950 | engines: {node: '>=0.10.0'} 1951 | dev: true 1952 | 1953 | /npm-run-path@5.1.0: 1954 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} 1955 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1956 | dependencies: 1957 | path-key: 4.0.0 1958 | dev: false 1959 | 1960 | /once@1.4.0: 1961 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1962 | dependencies: 1963 | wrappy: 1.0.2 1964 | dev: true 1965 | 1966 | /onetime@6.0.0: 1967 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1968 | engines: {node: '>=12'} 1969 | dependencies: 1970 | mimic-fn: 4.0.0 1971 | dev: false 1972 | 1973 | /optionator@0.9.1: 1974 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1975 | engines: {node: '>= 0.8.0'} 1976 | dependencies: 1977 | deep-is: 0.1.4 1978 | fast-levenshtein: 2.0.6 1979 | levn: 0.4.1 1980 | prelude-ls: 1.2.1 1981 | type-check: 0.4.0 1982 | word-wrap: 1.2.3 1983 | dev: true 1984 | 1985 | /p-limit@2.3.0: 1986 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1987 | engines: {node: '>=6'} 1988 | dependencies: 1989 | p-try: 2.2.0 1990 | dev: true 1991 | 1992 | /p-limit@3.1.0: 1993 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1994 | engines: {node: '>=10'} 1995 | dependencies: 1996 | yocto-queue: 0.1.0 1997 | dev: true 1998 | 1999 | /p-locate@4.1.0: 2000 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2001 | engines: {node: '>=8'} 2002 | dependencies: 2003 | p-limit: 2.3.0 2004 | dev: true 2005 | 2006 | /p-locate@5.0.0: 2007 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2008 | engines: {node: '>=10'} 2009 | dependencies: 2010 | p-limit: 3.1.0 2011 | dev: true 2012 | 2013 | /p-try@2.2.0: 2014 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2015 | engines: {node: '>=6'} 2016 | dev: true 2017 | 2018 | /pako@1.0.11: 2019 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 2020 | dev: true 2021 | 2022 | /parent-module@1.0.1: 2023 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2024 | engines: {node: '>=6'} 2025 | dependencies: 2026 | callsites: 3.1.0 2027 | dev: true 2028 | 2029 | /path-exists@4.0.0: 2030 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2031 | engines: {node: '>=8'} 2032 | dev: true 2033 | 2034 | /path-is-absolute@1.0.1: 2035 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2036 | engines: {node: '>=0.10.0'} 2037 | dev: true 2038 | 2039 | /path-key@3.1.1: 2040 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2041 | engines: {node: '>=8'} 2042 | 2043 | /path-key@4.0.0: 2044 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2045 | engines: {node: '>=12'} 2046 | dev: false 2047 | 2048 | /path-parse@1.0.7: 2049 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2050 | dev: true 2051 | 2052 | /path-type@4.0.0: 2053 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2054 | engines: {node: '>=8'} 2055 | dev: true 2056 | 2057 | /picocolors@1.0.0: 2058 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2059 | 2060 | /picomatch@2.3.1: 2061 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2062 | engines: {node: '>=8.6'} 2063 | dev: true 2064 | 2065 | /pkg-dir@4.2.0: 2066 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2067 | engines: {node: '>=8'} 2068 | dependencies: 2069 | find-up: 4.1.0 2070 | dev: true 2071 | 2072 | /postcss-less@4.0.1: 2073 | resolution: {integrity: sha512-C92S4sHlbDpefJ2QQJjrucCcypq3+KZPstjfuvgOCNnGx0tF9h8hXgAlOIATGAxMXZXaF+nVp+/Mi8pCAWdSmw==} 2074 | engines: {node: '>=10'} 2075 | dependencies: 2076 | postcss: 8.4.35 2077 | dev: true 2078 | 2079 | /postcss-sorting@6.0.0(postcss@8.4.35): 2080 | resolution: {integrity: sha512-bYJ0vgAiGbjCBKi7B07CzsBc9eM84nLEbavUmwNp8rAa+PNyrgdH+6PpnqTtciLuUs99c4rFQQmCaYgeBQYmSQ==} 2081 | peerDependencies: 2082 | postcss: ^8.0.4 2083 | dependencies: 2084 | lodash: 4.17.21 2085 | postcss: 8.4.35 2086 | dev: true 2087 | 2088 | /postcss@8.4.35: 2089 | resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} 2090 | engines: {node: ^10 || ^12 || >=14} 2091 | dependencies: 2092 | nanoid: 3.3.7 2093 | picocolors: 1.0.0 2094 | source-map-js: 1.0.2 2095 | dev: true 2096 | 2097 | /prelude-ls@1.2.1: 2098 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2099 | engines: {node: '>= 0.8.0'} 2100 | dev: true 2101 | 2102 | /prettier-plugin-organize-imports@3.2.4(prettier@3.2.5)(typescript@5.1.3): 2103 | resolution: {integrity: sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==} 2104 | peerDependencies: 2105 | '@volar/vue-language-plugin-pug': ^1.0.4 2106 | '@volar/vue-typescript': ^1.0.4 2107 | prettier: '>=2.0' 2108 | typescript: '>=2.9' 2109 | peerDependenciesMeta: 2110 | '@volar/vue-language-plugin-pug': 2111 | optional: true 2112 | '@volar/vue-typescript': 2113 | optional: true 2114 | dependencies: 2115 | prettier: 3.2.5 2116 | typescript: 5.1.3 2117 | dev: true 2118 | 2119 | /prettier-plugin-packagejson@2.4.12(prettier@3.2.5): 2120 | resolution: {integrity: sha512-hifuuOgw5rHHTdouw9VrhT8+Nd7UwxtL1qco8dUfd4XUFQL6ia3xyjSxhPQTsGnSYFraTWy5Omb+MZm/OWDTpQ==} 2121 | peerDependencies: 2122 | prettier: '>= 1.16.0' 2123 | peerDependenciesMeta: 2124 | prettier: 2125 | optional: true 2126 | dependencies: 2127 | prettier: 3.2.5 2128 | sort-package-json: 2.8.0 2129 | synckit: 0.9.0 2130 | dev: true 2131 | 2132 | /prettier-plugin-two-style-order@1.0.1(prettier@3.2.5): 2133 | resolution: {integrity: sha512-ETltO2FRR/Pxc7bsgz2XwuzWSPwafl7/v5+5Rria4S579CTas7dya+xsmbkix0q1tYQiuRjVVdfGnCKlH/aOuQ==} 2134 | peerDependencies: 2135 | prettier: '>= 2.0.0' 2136 | dependencies: 2137 | postcss: 8.4.35 2138 | postcss-less: 4.0.1 2139 | postcss-sorting: 6.0.0(postcss@8.4.35) 2140 | prettier: 3.2.5 2141 | dev: true 2142 | 2143 | /prettier@3.2.5: 2144 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} 2145 | engines: {node: '>=14'} 2146 | hasBin: true 2147 | dev: true 2148 | 2149 | /process-nextick-args@2.0.1: 2150 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 2151 | dev: true 2152 | 2153 | /punycode@2.3.0: 2154 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2155 | engines: {node: '>=6'} 2156 | dev: true 2157 | 2158 | /queue-microtask@1.2.3: 2159 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2160 | dev: true 2161 | 2162 | /randombytes@2.1.0: 2163 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 2164 | dependencies: 2165 | safe-buffer: 5.2.1 2166 | dev: true 2167 | 2168 | /readable-stream@2.3.8: 2169 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 2170 | dependencies: 2171 | core-util-is: 1.0.3 2172 | inherits: 2.0.4 2173 | isarray: 1.0.0 2174 | process-nextick-args: 2.0.1 2175 | safe-buffer: 5.1.2 2176 | string_decoder: 1.1.1 2177 | util-deprecate: 1.0.2 2178 | dev: true 2179 | 2180 | /readdirp@3.6.0: 2181 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2182 | engines: {node: '>=8.10.0'} 2183 | dependencies: 2184 | picomatch: 2.3.1 2185 | dev: true 2186 | 2187 | /rechoir@0.8.0: 2188 | resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} 2189 | engines: {node: '>= 10.13.0'} 2190 | dependencies: 2191 | resolve: 1.22.2 2192 | dev: true 2193 | 2194 | /require-directory@2.1.1: 2195 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2196 | engines: {node: '>=0.10.0'} 2197 | dev: true 2198 | 2199 | /resolve-cwd@3.0.0: 2200 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 2201 | engines: {node: '>=8'} 2202 | dependencies: 2203 | resolve-from: 5.0.0 2204 | dev: true 2205 | 2206 | /resolve-from@4.0.0: 2207 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2208 | engines: {node: '>=4'} 2209 | dev: true 2210 | 2211 | /resolve-from@5.0.0: 2212 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2213 | engines: {node: '>=8'} 2214 | dev: true 2215 | 2216 | /resolve@1.22.2: 2217 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 2218 | hasBin: true 2219 | dependencies: 2220 | is-core-module: 2.12.1 2221 | path-parse: 1.0.7 2222 | supports-preserve-symlinks-flag: 1.0.0 2223 | dev: true 2224 | 2225 | /reusify@1.0.4: 2226 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2227 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2228 | dev: true 2229 | 2230 | /rimraf@3.0.2: 2231 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2232 | hasBin: true 2233 | dependencies: 2234 | glob: 7.2.0 2235 | dev: true 2236 | 2237 | /run-parallel@1.2.0: 2238 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2239 | dependencies: 2240 | queue-microtask: 1.2.3 2241 | dev: true 2242 | 2243 | /safe-buffer@5.1.2: 2244 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 2245 | dev: true 2246 | 2247 | /safe-buffer@5.2.1: 2248 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2249 | dev: true 2250 | 2251 | /schema-utils@3.3.0: 2252 | resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} 2253 | engines: {node: '>= 10.13.0'} 2254 | dependencies: 2255 | '@types/json-schema': 7.0.12 2256 | ajv: 6.12.6 2257 | ajv-keywords: 3.5.2(ajv@6.12.6) 2258 | dev: true 2259 | 2260 | /semver@6.3.1: 2261 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2262 | hasBin: true 2263 | dev: false 2264 | 2265 | /semver@7.5.3: 2266 | resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} 2267 | engines: {node: '>=10'} 2268 | hasBin: true 2269 | dependencies: 2270 | lru-cache: 6.0.0 2271 | 2272 | /serialize-javascript@6.0.0: 2273 | resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} 2274 | dependencies: 2275 | randombytes: 2.1.0 2276 | dev: true 2277 | 2278 | /serialize-javascript@6.0.1: 2279 | resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} 2280 | dependencies: 2281 | randombytes: 2.1.0 2282 | dev: true 2283 | 2284 | /setimmediate@1.0.5: 2285 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} 2286 | dev: true 2287 | 2288 | /shallow-clone@3.0.1: 2289 | resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} 2290 | engines: {node: '>=8'} 2291 | dependencies: 2292 | kind-of: 6.0.3 2293 | dev: true 2294 | 2295 | /shebang-command@2.0.0: 2296 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2297 | engines: {node: '>=8'} 2298 | dependencies: 2299 | shebang-regex: 3.0.0 2300 | 2301 | /shebang-regex@3.0.0: 2302 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2303 | engines: {node: '>=8'} 2304 | 2305 | /signal-exit@3.0.7: 2306 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2307 | dev: false 2308 | 2309 | /slash@3.0.0: 2310 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2311 | engines: {node: '>=8'} 2312 | dev: true 2313 | 2314 | /slash@4.0.0: 2315 | resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} 2316 | engines: {node: '>=12'} 2317 | dev: true 2318 | 2319 | /sort-object-keys@1.1.3: 2320 | resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} 2321 | dev: true 2322 | 2323 | /sort-package-json@2.8.0: 2324 | resolution: {integrity: sha512-PxeNg93bTJWmDGnu0HADDucoxfFiKkIr73Kv85EBThlI1YQPdc0XovBgg2llD0iABZbu2SlKo8ntGmOP9wOj/g==} 2325 | hasBin: true 2326 | dependencies: 2327 | detect-indent: 7.0.1 2328 | detect-newline: 4.0.1 2329 | get-stdin: 9.0.0 2330 | git-hooks-list: 3.1.0 2331 | globby: 13.2.2 2332 | is-plain-obj: 4.1.0 2333 | sort-object-keys: 1.1.3 2334 | dev: true 2335 | 2336 | /source-map-js@1.0.2: 2337 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2338 | engines: {node: '>=0.10.0'} 2339 | dev: true 2340 | 2341 | /source-map-support@0.5.21: 2342 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 2343 | dependencies: 2344 | buffer-from: 1.1.2 2345 | source-map: 0.6.1 2346 | dev: true 2347 | 2348 | /source-map@0.6.1: 2349 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2350 | engines: {node: '>=0.10.0'} 2351 | dev: true 2352 | 2353 | /string-width@4.2.3: 2354 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2355 | engines: {node: '>=8'} 2356 | dependencies: 2357 | emoji-regex: 8.0.0 2358 | is-fullwidth-code-point: 3.0.0 2359 | strip-ansi: 6.0.1 2360 | dev: true 2361 | 2362 | /string_decoder@1.1.1: 2363 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 2364 | dependencies: 2365 | safe-buffer: 5.1.2 2366 | dev: true 2367 | 2368 | /strip-ansi@6.0.1: 2369 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2370 | engines: {node: '>=8'} 2371 | dependencies: 2372 | ansi-regex: 5.0.1 2373 | dev: true 2374 | 2375 | /strip-final-newline@3.0.0: 2376 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 2377 | engines: {node: '>=12'} 2378 | dev: false 2379 | 2380 | /strip-json-comments@3.1.1: 2381 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2382 | engines: {node: '>=8'} 2383 | dev: true 2384 | 2385 | /supports-color@5.5.0: 2386 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2387 | engines: {node: '>=4'} 2388 | dependencies: 2389 | has-flag: 3.0.0 2390 | dev: false 2391 | 2392 | /supports-color@7.2.0: 2393 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2394 | engines: {node: '>=8'} 2395 | dependencies: 2396 | has-flag: 4.0.0 2397 | dev: true 2398 | 2399 | /supports-color@8.1.1: 2400 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 2401 | engines: {node: '>=10'} 2402 | dependencies: 2403 | has-flag: 4.0.0 2404 | 2405 | /supports-preserve-symlinks-flag@1.0.0: 2406 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2407 | engines: {node: '>= 0.4'} 2408 | dev: true 2409 | 2410 | /synckit@0.9.0: 2411 | resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} 2412 | engines: {node: ^14.18.0 || >=16.0.0} 2413 | dependencies: 2414 | '@pkgr/core': 0.1.1 2415 | tslib: 2.6.2 2416 | dev: true 2417 | 2418 | /tapable@2.2.1: 2419 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 2420 | engines: {node: '>=6'} 2421 | dev: true 2422 | 2423 | /terser-webpack-plugin@5.3.9(webpack@5.85.0): 2424 | resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} 2425 | engines: {node: '>= 10.13.0'} 2426 | peerDependencies: 2427 | '@swc/core': '*' 2428 | esbuild: '*' 2429 | uglify-js: '*' 2430 | webpack: ^5.1.0 2431 | peerDependenciesMeta: 2432 | '@swc/core': 2433 | optional: true 2434 | esbuild: 2435 | optional: true 2436 | uglify-js: 2437 | optional: true 2438 | dependencies: 2439 | '@jridgewell/trace-mapping': 0.3.18 2440 | jest-worker: 27.5.1 2441 | schema-utils: 3.3.0 2442 | serialize-javascript: 6.0.1 2443 | terser: 5.18.2 2444 | webpack: 5.85.0(webpack-cli@5.1.1) 2445 | dev: true 2446 | 2447 | /terser@5.18.2: 2448 | resolution: {integrity: sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==} 2449 | engines: {node: '>=10'} 2450 | hasBin: true 2451 | dependencies: 2452 | '@jridgewell/source-map': 0.3.3 2453 | acorn: 8.9.0 2454 | commander: 2.20.3 2455 | source-map-support: 0.5.21 2456 | dev: true 2457 | 2458 | /text-table@0.2.0: 2459 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2460 | dev: true 2461 | 2462 | /to-fast-properties@2.0.0: 2463 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2464 | engines: {node: '>=4'} 2465 | 2466 | /to-regex-range@5.0.1: 2467 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2468 | engines: {node: '>=8.0'} 2469 | dependencies: 2470 | is-number: 7.0.0 2471 | dev: true 2472 | 2473 | /ts-loader@9.4.3(typescript@5.1.3)(webpack@5.85.0): 2474 | resolution: {integrity: sha512-n3hBnm6ozJYzwiwt5YRiJZkzktftRpMiBApHaJPoWLA+qetQBAXkHqCLM6nwSdRDimqVtA5ocIkcTRLMTt7yzA==} 2475 | engines: {node: '>=12.0.0'} 2476 | peerDependencies: 2477 | typescript: '*' 2478 | webpack: ^5.0.0 2479 | dependencies: 2480 | chalk: 4.1.2 2481 | enhanced-resolve: 5.15.0 2482 | micromatch: 4.0.5 2483 | semver: 7.5.3 2484 | typescript: 5.1.3 2485 | webpack: 5.85.0(webpack-cli@5.1.1) 2486 | dev: true 2487 | 2488 | /tslib@1.14.1: 2489 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2490 | dev: true 2491 | 2492 | /tslib@2.6.2: 2493 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2494 | dev: true 2495 | 2496 | /tsutils@3.21.0(typescript@5.1.3): 2497 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2498 | engines: {node: '>= 6'} 2499 | peerDependencies: 2500 | 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' 2501 | dependencies: 2502 | tslib: 1.14.1 2503 | typescript: 5.1.3 2504 | dev: true 2505 | 2506 | /type-check@0.4.0: 2507 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2508 | engines: {node: '>= 0.8.0'} 2509 | dependencies: 2510 | prelude-ls: 1.2.1 2511 | dev: true 2512 | 2513 | /type-fest@0.20.2: 2514 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2515 | engines: {node: '>=10'} 2516 | dev: true 2517 | 2518 | /typescript@5.1.3: 2519 | resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} 2520 | engines: {node: '>=14.17'} 2521 | hasBin: true 2522 | dev: true 2523 | 2524 | /update-browserslist-db@1.0.11(browserslist@4.21.9): 2525 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 2526 | hasBin: true 2527 | peerDependencies: 2528 | browserslist: '>= 4.21.0' 2529 | dependencies: 2530 | browserslist: 4.21.9 2531 | escalade: 3.1.1 2532 | picocolors: 1.0.0 2533 | dev: true 2534 | 2535 | /update-browserslist-db@1.0.13(browserslist@4.23.0): 2536 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 2537 | hasBin: true 2538 | peerDependencies: 2539 | browserslist: '>= 4.21.0' 2540 | dependencies: 2541 | browserslist: 4.23.0 2542 | escalade: 3.1.1 2543 | picocolors: 1.0.0 2544 | dev: false 2545 | 2546 | /uri-js@4.4.1: 2547 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2548 | dependencies: 2549 | punycode: 2.3.0 2550 | dev: true 2551 | 2552 | /util-deprecate@1.0.2: 2553 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2554 | dev: true 2555 | 2556 | /vscode-jsonrpc@8.2.0: 2557 | resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} 2558 | engines: {node: '>=14.0.0'} 2559 | dev: false 2560 | 2561 | /vscode-languageclient@9.0.1: 2562 | resolution: {integrity: sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==} 2563 | engines: {vscode: ^1.82.0} 2564 | dependencies: 2565 | minimatch: 5.1.6 2566 | semver: 7.5.3 2567 | vscode-languageserver-protocol: 3.17.5 2568 | dev: false 2569 | 2570 | /vscode-languageserver-protocol@3.17.5: 2571 | resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} 2572 | dependencies: 2573 | vscode-jsonrpc: 8.2.0 2574 | vscode-languageserver-types: 3.17.5 2575 | dev: false 2576 | 2577 | /vscode-languageserver-textdocument@1.0.11: 2578 | resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} 2579 | dev: false 2580 | 2581 | /vscode-languageserver-types@3.17.5: 2582 | resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} 2583 | dev: false 2584 | 2585 | /vscode-languageserver@9.0.1: 2586 | resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} 2587 | hasBin: true 2588 | dependencies: 2589 | vscode-languageserver-protocol: 3.17.5 2590 | dev: false 2591 | 2592 | /watchpack@2.4.0: 2593 | resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} 2594 | engines: {node: '>=10.13.0'} 2595 | dependencies: 2596 | glob-to-regexp: 0.4.1 2597 | graceful-fs: 4.2.11 2598 | dev: true 2599 | 2600 | /webpack-cli@5.1.1(webpack@5.85.0): 2601 | resolution: {integrity: sha512-OLJwVMoXnXYH2ncNGU8gxVpUtm3ybvdioiTvHgUyBuyMLKiVvWy+QObzBsMtp5pH7qQoEuWgeEUQ/sU3ZJFzAw==} 2602 | engines: {node: '>=14.15.0'} 2603 | hasBin: true 2604 | peerDependencies: 2605 | '@webpack-cli/generators': '*' 2606 | webpack: 5.x.x 2607 | webpack-bundle-analyzer: '*' 2608 | webpack-dev-server: '*' 2609 | peerDependenciesMeta: 2610 | '@webpack-cli/generators': 2611 | optional: true 2612 | webpack-bundle-analyzer: 2613 | optional: true 2614 | webpack-dev-server: 2615 | optional: true 2616 | dependencies: 2617 | '@discoveryjs/json-ext': 0.5.7 2618 | '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.1)(webpack@5.85.0) 2619 | '@webpack-cli/info': 2.0.2(webpack-cli@5.1.1)(webpack@5.85.0) 2620 | '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.1)(webpack@5.85.0) 2621 | colorette: 2.0.20 2622 | commander: 10.0.1 2623 | cross-spawn: 7.0.3 2624 | envinfo: 7.10.0 2625 | fastest-levenshtein: 1.0.16 2626 | import-local: 3.1.0 2627 | interpret: 3.1.1 2628 | rechoir: 0.8.0 2629 | webpack: 5.85.0(webpack-cli@5.1.1) 2630 | webpack-merge: 5.9.0 2631 | dev: true 2632 | 2633 | /webpack-merge@5.9.0: 2634 | resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==} 2635 | engines: {node: '>=10.0.0'} 2636 | dependencies: 2637 | clone-deep: 4.0.1 2638 | wildcard: 2.0.1 2639 | dev: true 2640 | 2641 | /webpack-sources@3.2.3: 2642 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} 2643 | engines: {node: '>=10.13.0'} 2644 | dev: true 2645 | 2646 | /webpack@5.85.0(webpack-cli@5.1.1): 2647 | resolution: {integrity: sha512-7gazTiYqwo5OSqwH1tigLDL2r3qDeP2dOKYgd+LlXpsUMqDTklg6tOghexqky0/+6QY38kb/R/uRPUleuL43zg==} 2648 | engines: {node: '>=10.13.0'} 2649 | hasBin: true 2650 | peerDependencies: 2651 | webpack-cli: '*' 2652 | peerDependenciesMeta: 2653 | webpack-cli: 2654 | optional: true 2655 | dependencies: 2656 | '@types/eslint-scope': 3.7.4 2657 | '@types/estree': 1.0.1 2658 | '@webassemblyjs/ast': 1.11.6 2659 | '@webassemblyjs/wasm-edit': 1.11.6 2660 | '@webassemblyjs/wasm-parser': 1.11.6 2661 | acorn: 8.9.0 2662 | acorn-import-assertions: 1.9.0(acorn@8.9.0) 2663 | browserslist: 4.21.9 2664 | chrome-trace-event: 1.0.3 2665 | enhanced-resolve: 5.15.0 2666 | es-module-lexer: 1.3.0 2667 | eslint-scope: 5.1.1 2668 | events: 3.3.0 2669 | glob-to-regexp: 0.4.1 2670 | graceful-fs: 4.2.11 2671 | json-parse-even-better-errors: 2.3.1 2672 | loader-runner: 4.3.0 2673 | mime-types: 2.1.35 2674 | neo-async: 2.6.2 2675 | schema-utils: 3.3.0 2676 | tapable: 2.2.1 2677 | terser-webpack-plugin: 5.3.9(webpack@5.85.0) 2678 | watchpack: 2.4.0 2679 | webpack-cli: 5.1.1(webpack@5.85.0) 2680 | webpack-sources: 3.2.3 2681 | transitivePeerDependencies: 2682 | - '@swc/core' 2683 | - esbuild 2684 | - uglify-js 2685 | dev: true 2686 | 2687 | /which@2.0.2: 2688 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2689 | engines: {node: '>= 8'} 2690 | hasBin: true 2691 | dependencies: 2692 | isexe: 2.0.0 2693 | 2694 | /wildcard@2.0.1: 2695 | resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} 2696 | dev: true 2697 | 2698 | /word-wrap@1.2.3: 2699 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 2700 | engines: {node: '>=0.10.0'} 2701 | dev: true 2702 | 2703 | /workerpool@6.2.1: 2704 | resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} 2705 | dev: true 2706 | 2707 | /wrap-ansi@7.0.0: 2708 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2709 | engines: {node: '>=10'} 2710 | dependencies: 2711 | ansi-styles: 4.3.0 2712 | string-width: 4.2.3 2713 | strip-ansi: 6.0.1 2714 | dev: true 2715 | 2716 | /wrappy@1.0.2: 2717 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2718 | dev: true 2719 | 2720 | /y18n@5.0.8: 2721 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2722 | engines: {node: '>=10'} 2723 | dev: true 2724 | 2725 | /yallist@3.1.1: 2726 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 2727 | dev: false 2728 | 2729 | /yallist@4.0.0: 2730 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2731 | 2732 | /yargs-parser@20.2.4: 2733 | resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} 2734 | engines: {node: '>=10'} 2735 | dev: true 2736 | 2737 | /yargs-unparser@2.0.0: 2738 | resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} 2739 | engines: {node: '>=10'} 2740 | dependencies: 2741 | camelcase: 6.3.0 2742 | decamelize: 4.0.0 2743 | flat: 5.0.2 2744 | is-plain-obj: 2.1.0 2745 | dev: true 2746 | 2747 | /yargs@16.2.0: 2748 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 2749 | engines: {node: '>=10'} 2750 | dependencies: 2751 | cliui: 7.0.4 2752 | escalade: 3.1.1 2753 | get-caller-file: 2.0.5 2754 | require-directory: 2.1.1 2755 | string-width: 4.2.3 2756 | y18n: 5.0.8 2757 | yargs-parser: 20.2.4 2758 | dev: true 2759 | 2760 | /yocto-queue@0.1.0: 2761 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2762 | engines: {node: '>=10'} 2763 | dev: true 2764 | --------------------------------------------------------------------------------