├── src ├── utils │ ├── index.ts │ ├── getCurrentDocument.ts │ ├── getCurrentWorkspaceFolder.ts │ ├── getCurrentTabSize.ts │ ├── getJsonKeyComments.ts │ ├── getDocumentRelativePath.ts │ ├── getConfig.ts │ ├── onConfigChange.ts │ ├── getJsonPathAtPosition.ts │ ├── getDocumentComments.ts │ ├── clearDocumentComments.ts │ ├── getComments.ts │ ├── updateJsonFile.ts │ ├── updateComments.ts │ ├── getCommentsConfig.ts │ ├── removeJsonKeyComments.ts │ ├── updateJsonKeyComments.ts │ ├── getPathFromJson.ts │ ├── updateJsonSchema.ts │ └── traverseJson.ts ├── consts.ts ├── hovers │ ├── index.ts │ └── jsonKeyHover.ts ├── codeLens │ ├── index.ts │ └── jsonCommentsCodeLens.ts ├── test │ ├── suite │ │ ├── extension.test.ts │ │ └── index.ts │ └── runTest.ts ├── commands │ ├── index.ts │ ├── clearComments.ts │ ├── editComments.ts │ └── addComments.ts ├── types.ts ├── extension.ts └── eventListeners │ └── index.ts ├── .npmrc ├── .gitignore ├── json.png ├── preview.gif ├── preview2.gif ├── .vscode ├── extensions.json ├── settings.json ├── tasks.json └── launch.json ├── .vscodeignore ├── CHANGELOG.md ├── tsconfig.json ├── l10n ├── bundle.l10n.zh-cn.json ├── bundle.l10n.ko.json ├── bundle.l10n.jp.json ├── bundle.l10n.json ├── bundle.l10n.it.json ├── bundle.l10n.ru.json ├── bundle.l10n.es.json ├── bundle.l10n.fr.json └── bundle.l10n.de.json ├── .eslintrc.json ├── package.nls.zh-cn.json ├── package.nls.ko.json ├── package.nls.jp.json ├── package.nls.json ├── package.nls.it.json ├── LICENSE ├── package.nls.ru.json ├── package.nls.de.json ├── package.nls.es.json ├── package.nls.fr.json ├── README_CN.md ├── webpack.config.js ├── vsc-extension-quickstart.md ├── README.md ├── package.json └── pnpm-lock.yaml /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export {} -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | enable-pre-post-scripts = true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | node_modules 4 | .vscode-test/ 5 | *.vsix 6 | -------------------------------------------------------------------------------- /json.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangfisher/json_comments_extension/HEAD/json.png -------------------------------------------------------------------------------- /preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangfisher/json_comments_extension/HEAD/preview.gif -------------------------------------------------------------------------------- /preview2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangfisher/json_comments_extension/HEAD/preview2.gif -------------------------------------------------------------------------------- /src/consts.ts: -------------------------------------------------------------------------------- 1 | // 当指定saveFile为package.json时的默认入口键名 2 | export const DEFAULT_ENTRY_KEY = 'json-comments' 3 | 4 | export const JSON_COMMENTS_CONFIG_KEY = 'json-comments' -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /src/hovers/index.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/semi */ 2 | import * as vscode from 'vscode'; 3 | import { jsonKeyHover } from './jsonKeyHover' 4 | 5 | 6 | export default (context: vscode.ExtensionContext) => { 7 | jsonKeyHover(context); 8 | }; 9 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## [0.0.4] - 2023-12-1 4 | 5 | - Added: use `editor.tabSize` when saving JSON comment content 6 | 7 | ## [0.0.3] - 2023-11-29 8 | 9 | - Added: Automatically update comment information when moving or renaming JSON files to ensure that the comment information is not lost. -------------------------------------------------------------------------------- /src/utils/getCurrentDocument.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 返回当前文件对象 4 | * 5 | */ 6 | 7 | 8 | import { TextDocument, window } from "vscode"; 9 | 10 | export function getCurrentDocument():TextDocument | undefined{ 11 | const editor = window.activeTextEditor; 12 | if (!editor) { 13 | return 14 | } 15 | return editor.document; 16 | } -------------------------------------------------------------------------------- /src/utils/getCurrentWorkspaceFolder.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @description 获取当前工作区路径 3 | */ 4 | import { getCurrentDocument } from "./getCurrentDocument"; 5 | import { workspace } from "vscode"; 6 | 7 | export function getCurrentWorkspaceFolder(): string | undefined { 8 | const doc = getCurrentDocument(); 9 | if(!doc) return; 10 | return workspace.getWorkspaceFolder(doc.uri)?.uri.fsPath 11 | } -------------------------------------------------------------------------------- /src/utils/getCurrentTabSize.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | 3 | 4 | export function getCurrentTabSize(): number { 5 | const activeEditor = vscode.window.activeTextEditor; 6 | if (activeEditor) { 7 | return activeEditor.options.tabSize as number; 8 | } 9 | // 如果没有活动的编辑器,则返回默认值 10 | return vscode.workspace.getConfiguration().get('editor.tabSize') as number; 11 | } -------------------------------------------------------------------------------- /src/codeLens/index.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/semi */ 2 | import * as vscode from 'vscode'; 3 | import jsonCommentsCodeLens from './jsonCommentsCodeLens' 4 | 5 | 6 | export default (context: vscode.ExtensionContext) => { 7 | context.subscriptions.push(...[ 8 | vscode.languages.registerCodeLensProvider( 9 | { language: 'json' }, 10 | jsonCommentsCodeLens(context) 11 | ) 12 | ]) 13 | }; 14 | -------------------------------------------------------------------------------- /src/utils/getJsonKeyComments.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 获取指定文件中的 4 | * 5 | */ 6 | 7 | import { getDocumentComments } from './getDocumentComments'; 8 | 9 | /** 10 | * 11 | * 获取指定文档中jsonpath指向的注释 12 | * 13 | * @param docRelUri 文档相对于工作区的路径 14 | * @param jsonPath 15 | */ 16 | export function getJsonKeyComments(docRelUri:string,jsonPath:string):string | undefined{ 17 | const comments = getDocumentComments(docRelUri) 18 | return comments[jsonPath] 19 | } 20 | -------------------------------------------------------------------------------- /src/utils/getDocumentRelativePath.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 获取文档相对于工作区文件夹的路径 4 | * 5 | */ 6 | import * as vscode from 'vscode'; 7 | 8 | 9 | export function getDocumentRelativePath(document: vscode.TextDocument) { 10 | const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri); 11 | if (workspaceFolder) { 12 | // 将文档的绝对路径转换为相对于工作区文件夹的路径 13 | const relativePath = vscode.workspace.asRelativePath(document.uri); 14 | return relativePath 15 | } 16 | 17 | 18 | } -------------------------------------------------------------------------------- /src/utils/getConfig.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import { JsonCommentsConfigs } from '../types'; 3 | import { JSON_COMMENTS_CONFIG_KEY } from '../consts'; 4 | 5 | 6 | export function getConfig(key:JsonCommentsConfigs,defaultValue?:T):T | undefined{ 7 | const config = vscode.workspace.getConfiguration(JSON_COMMENTS_CONFIG_KEY); 8 | let value:any = config.get(key); 9 | if (typeof value === 'undefined' || value === '') { 10 | value = defaultValue; 11 | } 12 | return value 13 | } -------------------------------------------------------------------------------- /src/test/suite/extension.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from 'assert'; 2 | 3 | // You can import and use all API from the 'vscode' module 4 | // as well as import your extension to test it 5 | import * as vscode from 'vscode'; 6 | // import * as myExtension from '../../extension'; 7 | 8 | suite('Extension Test Suite', () => { 9 | vscode.window.showInformationMessage('Start all tests.'); 10 | 11 | test('Sample test', () => { 12 | assert.strictEqual(-1, [1, 2, 3].indexOf(5)); 13 | assert.strictEqual(-1, [1, 2, 3].indexOf(0)); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /src/utils/onConfigChange.ts: -------------------------------------------------------------------------------- 1 | import { workspace } from "vscode"; 2 | import { getConfig } from "./getConfig"; 3 | import { JSON_COMMENTS_CONFIG_KEY } from '../consts'; 4 | import { JsonCommentsConfigs } from "../types"; 5 | 6 | export function onConfigChange(key:JsonCommentsConfigs,callback:(newValue:T)=>void) { 7 | workspace.onDidChangeConfiguration((eventNames)=>{ 8 | if(eventNames.affectsConfiguration(`${JSON_COMMENTS_CONFIG_KEY}.${key}`)) { 9 | let newValue:T = getConfig(key) as T; 10 | callback(newValue); 11 | } 12 | }); 13 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "Node16", 4 | "target": "ES2022", 5 | "lib": [ 6 | "ES2022" 7 | ], 8 | "sourceMap": true, 9 | "rootDir": "src", 10 | "strict": true, /* enable all strict type-checking options */ 11 | "noImplicitReturns": false, /* Report error when not all code paths in function return a value. */ 12 | /* Additional Checks */ 13 | 14 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 15 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/commands/index.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import { addComments } from './addComments' 3 | import { clearComments } from './clearComments' 4 | import { editComments } from './editComments' 5 | 6 | 7 | export default (context: vscode.ExtensionContext) => { 8 | context.subscriptions.push(...[ 9 | vscode.commands.registerCommand('json-comments.addComments',addComments(context)), 10 | vscode.commands.registerCommand('json-comments.clearComments',clearComments(context)), 11 | vscode.commands.registerCommand('json-comments.editComments',editComments(context)) 12 | ]) 13 | } 14 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | export interface JsonKeyComments{ 4 | comments:string // 注释内容 5 | } 6 | 7 | export type JsonDocUri = string 8 | export type JsonDocJSONPath = string 9 | export type JsonDocComments = Record 10 | export type JsonComments = Record 11 | 12 | 13 | export enum JsonCommentsConfigs{ 14 | // 保存注释的JSON文件 15 | SaveFile="saveFile", 16 | // 保存注释的JSON文件中的入口key 17 | EntryKey="entryKey", 18 | /// 是否启用注释功能 19 | Enable="enable", 20 | // 当保存JSON时采用缩进 21 | IndentSpaces = "indentSpaces" 22 | } -------------------------------------------------------------------------------- /l10n/bundle.l10n.zh-cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension": "请安装JSONComments插件为JSON文件提供注释功能, 详见: https://github.com/zhangfisher/json_comments_extension", 3 | "Add Comment": "添加注释", 4 | "Edit This Comment": "编辑此注释", 5 | "Delete This Comment": "删除此注释", 6 | "Select Action": "选择操作", 7 | "Select How to Handle This Comment": "选择如何操作此注释", 8 | "Enter Comment Content for <{0}>:": "为<{0}>输入注释内容:", 9 | "Enter Comment": "输入注释内容", 10 | "Are you sure want to clear all comments for {0}?":"确认要清除{0}的所有注释吗?" 11 | } 12 | -------------------------------------------------------------------------------- /.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 | } 14 | -------------------------------------------------------------------------------- /src/utils/getJsonPathAtPosition.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 获取当前光标所在位置的json路径 4 | * 5 | */ 6 | 7 | import { window } from "vscode"; 8 | import { getCurrentDocument } from "./getCurrentDocument"; 9 | import { getPathFromJson } from "./getPathFromJson"; 10 | 11 | 12 | /** 13 | * 提供当前位置的json路径 14 | * @param json 15 | * @param pos 16 | */ 17 | export function getJsonPathAtPosition() { 18 | 19 | const editor = window.activeTextEditor; 20 | if(!editor) return; 21 | const doc = getCurrentDocument(); 22 | if (!doc) return; 23 | 24 | return getPathFromJson(doc.getText(),{ 25 | line:editor.selection.start.line+1, 26 | column:editor.selection.start.character+1 27 | }) 28 | } 29 | -------------------------------------------------------------------------------- /l10n/bundle.l10n.ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension": "JSON 파일에 주석 기능을 활성화하려면 JsonComments 플러그인을 설치하세요. 자세한 내용은 https://github.com/zhangfisher/json_comments_extension을 참조하세요", 3 | "Add Comment": "댓글 추가", 4 | "Edit This Comment": "이 댓글 편집", 5 | "Delete This Comment": "이 댓글 삭제", 6 | "Select Operate": "작업 선택", 7 | "Select How to Handle This Comment": "이 댓글을 처리하는 방법 선택", 8 | "Enter Comment Content for <{0}>:": "<{0}>에 대한 댓글 내용을 입력하세요:", 9 | "Enter Comment": "댓글 입력", 10 | "Are you sure want to clear all comments for {0}?":"{0}에 대한 모든 댓글을 지우시겠습니까?" 11 | } -------------------------------------------------------------------------------- /l10n/bundle.l10n.jp.json: -------------------------------------------------------------------------------- 1 | { 2 | "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension": "JSON ファイルのコメント機能を有効にするには、JsonComments プラグインをインストールしてください。詳細については、https://github.com/zhangfisher/json_comments_extension を参照してください", 3 | "Add Comment": "コメントを追加", 4 | "Edit This Comment": "このコメントを編集", 5 | "Delete This Comment": "このコメントを削除", 6 | "Select Operate": "操作を選択", 7 | "Select How to Handle This Comment": "このコメントの処理方法を選択", 8 | "Enter Comment Content for <{0}>:": "<{0}> のコメントの内容を入力してください:", 9 | "Enter Comment": "コメントを入力", 10 | "Are you sure want to clear all comments for {0}?":"{0} のすべてのコメントを削除してもよろしいですか?" 11 | } -------------------------------------------------------------------------------- /src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | 3 | import { runTests } from '@vscode/test-electron'; 4 | 5 | async function main() { 6 | try { 7 | // The folder containing the Extension Manifest package.json 8 | // Passed to `--extensionDevelopmentPath` 9 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 10 | 11 | // The path to test runner 12 | // Passed to --extensionTestsPath 13 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 14 | 15 | // Download VS Code, unzip it and run the integration test 16 | await runTests({ extensionDevelopmentPath, extensionTestsPath }); 17 | } catch (err) { 18 | console.error('Failed to run tests', err); 19 | process.exit(1); 20 | } 21 | } 22 | 23 | main(); 24 | -------------------------------------------------------------------------------- /.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": [ 13 | "warn", 14 | { 15 | "selector": "import", 16 | "format": [ "camelCase", "PascalCase" ] 17 | } 18 | ], 19 | "@typescript-eslint/semi": "off", 20 | "curly": "off", 21 | "eqeqeq": "warn", 22 | "no-throw-literal": "warn" 23 | 24 | }, 25 | "ignorePatterns": [ 26 | "out", 27 | "dist", 28 | "**/*.d.ts" 29 | ] 30 | } -------------------------------------------------------------------------------- /l10n/bundle.l10n.json: -------------------------------------------------------------------------------- 1 | { 2 | "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension": "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension", 3 | "Add Comment": "Add Comment", 4 | "Edit This Comment": "Edit This Comment", 5 | "Delete This Comment": "Delete This Comment", 6 | "Select Operate": "Select Operate", 7 | "Select How to Handle This Comment": "Select How to Handle This Comment", 8 | "Enter Comment Content for <{0}>:": "Enter Comment Content for <{0}>:", 9 | "Enter Comment": "Enter Comment", 10 | "Are you sure want to clear all comments for {0}?": "Are you sure want to clear all comments for {0}?" 11 | } -------------------------------------------------------------------------------- /package.nls.zh-cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonComments.displayName": "JsonComments", 3 | "jsonComments.installTips": "请安装JsonComments插件为JSON文件启用注释功能, 详见:https://github.com/zhangfisher/json_comments_extension", 4 | "jsonComments.description": "在JSON文件中添加注释", 5 | "jsonComments.saveFile.title": "注释保存文件:", 6 | "jsonComments.saveFile.description": "保存所有注释到此JSON文件:", 7 | "jsonComments.entryKey.title": "注释保存位置键", 8 | "jsonComments.entryKey.description": "注释保存JSON文件中的位置键名称", 9 | "jsonComments.enable.title": "显示注释", 10 | "jsonComments.enable.description": "是否显示注释", 11 | "jsonComments.command.addComments.title": "添加注释", 12 | "jsonComments.command.removeComments.title": "删除注释", 13 | "jsonComments.command.editComments.title": "编辑注释", 14 | "jsonComments.command.clearComments.title": "清空当前文档所有注释" 15 | } -------------------------------------------------------------------------------- /src/test/suite/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import Mocha from 'mocha'; 3 | import { glob } from 'glob'; 4 | 5 | export async function run(): Promise { 6 | // Create the mocha test 7 | const mocha = new Mocha({ 8 | ui: 'tdd', 9 | color: true 10 | }); 11 | 12 | const testsRoot = path.resolve(__dirname, '..'); 13 | const files = await glob('**/**.test.js', { cwd: testsRoot }); 14 | 15 | // Add files to the test suite 16 | files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); 17 | 18 | try { 19 | return new Promise((c, e) => { 20 | // Run the mocha test 21 | mocha.run(failures => { 22 | if (failures > 0) { 23 | e(new Error(`${failures} tests failed.`)); 24 | } else { 25 | c(); 26 | } 27 | }); 28 | }); 29 | } catch (err) { 30 | console.error(err); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /l10n/bundle.l10n.it.json: -------------------------------------------------------------------------------- 1 | { 2 | "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension": "Installare il plugin JsonComments per abilitare la funzionalità di commento per i file JSON, vedere: https://github.com/zhangfisher/json_comments_extension", 3 | "Add Comment": "Aggiungi commento", 4 | "Edit This Comment": "Modifica questo commento", 5 | "Delete This Comment": "Elimina questo commento", 6 | "Select Operate": "Seleziona operazione", 7 | "Select How to Handle This Comment": "Seleziona come gestire questo commento", 8 | "Enter Comment Content for <{0}>:": "Inserisci il contenuto del commento per <{0}>:", 9 | "Enter Comment": "Inserisci un commento", 10 | "Are you sure want to clear all comments for {0}?":"Sei sicuro di voler cancellare tutti i commenti per {0}?" 11 | } -------------------------------------------------------------------------------- /l10n/bundle.l10n.ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension": "Установите плагин JsonComments, чтобы активировать возможность комментирования для файлов JSON. См.: https://github.com/zhangfisher/json_comments_extension", 3 | "Add Comment": "Добавить комментарий", 4 | "Edit This Comment": "Редактировать этот комментарий", 5 | "Delete This Comment": "Удалить этот комментарий", 6 | "Select Operate": "Выбрать действие", 7 | "Select How to Handle This Comment": "Выберите, как обработать этот комментарий", 8 | "Enter Comment Content for <{0}>:": "Введите содержимое комментария для <{0}>:", 9 | "Enter Comment": "Введите комментарий", 10 | "Are you sure want to clear all comments for {0}?":"Вы уверены, что хотите удалить все комментарии для {0}?" 11 | } -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | 2 | import * as vscode from 'vscode'; 3 | import registerCommands from './commands'; 4 | import registerHovers from './hovers'; 5 | import registerCodeLens from './codeLens'; 6 | import registerEventListeners from './eventListeners'; 7 | 8 | import * as l10n from '@vscode/l10n'; 9 | 10 | 11 | // Load the translations for the current locale 12 | if (process.env['EXTENSION_BUNDLE_PATH']) { 13 | l10n.config({ 14 | fsPath: process.env['EXTENSION_BUNDLE_PATH'] 15 | }); 16 | } 17 | 18 | // This method is called when your extension is activated 19 | // Your extension is activated the very first time the command is executed 20 | export function activate(context: vscode.ExtensionContext) { 21 | registerCommands(context) 22 | registerHovers(context) 23 | registerCodeLens(context) 24 | registerEventListeners(context) 25 | 26 | } 27 | export function deactivate() {} 28 | -------------------------------------------------------------------------------- /package.nls.ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonComments.displayName": "JsonComments", 3 | "jsonComments.installTips": "JSON 파일에 주석 기능을 활성화하려면 JsonComments 플러그인을 설치하십시오. 자세한 내용은 다음을 참조하십시오: https://github.com/zhangfisher/json_comments_extension", 4 | "jsonComments.description": "JSON 파일에 주석 추가", 5 | "jsonComments.saveFile.title": "주석을 파일에 저장:", 6 | "jsonComments.saveFile.description": "모든 주석을 이 JSON 파일에 저장:", 7 | "jsonComments.entryKey.title": "주석 저장 위치 키", 8 | "jsonComments.entryKey.description": "주석을 저장할 JSON 파일 내 키 이름", 9 | "jsonComments.enable.title": "주석 표시", 10 | "jsonComments.enable.description": "주석을 표시할지 여부", 11 | "jsonComments.command.addComments.title": "주석 추가", 12 | "jsonComments.command.removeComments.title": "주석 삭제", 13 | "jsonComments.command.editComments.title": "주석 편집", 14 | "jsonComments.command.clearComments.title": "현재 문서의 모든 주석 지우기" 15 | } -------------------------------------------------------------------------------- /l10n/bundle.l10n.es.json: -------------------------------------------------------------------------------- 1 | { 2 | "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension": "Instale el complemento JsonComments para habilitar la funcionalidad de comentarios para archivos JSON, consulte: https://github.com/zhangfisher/json_comments_extension", 3 | "Add Comment": "Agregar comentario", 4 | "Edit This Comment": "Editar este comentario", 5 | "Delete This Comment": "Eliminar este comentario", 6 | "Select Operate": "Seleccionar operación", 7 | "Select How to Handle This Comment": "Seleccione cómo manejar este comentario", 8 | "Enter Comment Content for <{0}>:": "Ingrese el contenido del comentario para <{0}>:", 9 | "Enter Comment": "Ingresar comentario", 10 | "Are you sure want to clear all comments for {0}?":"¿Estás seguro de que quieres borrar todos los comentarios para {0}?" 11 | } -------------------------------------------------------------------------------- /l10n/bundle.l10n.fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension": "Veuillez installer le plugin JsonComments pour activer la fonctionnalité de commentaires pour les fichiers JSON, voir : https://github.com/zhangfisher/json_comments_extension", 3 | "Add Comment": "Ajouter un commentaire", 4 | "Edit This Comment": "Modifier ce commentaire", 5 | "Delete This Comment": "Supprimer ce commentaire", 6 | "Select Operate": "Sélectionner une opération", 7 | "Select How to Handle This Comment": "Sélectionnez comment gérer ce commentaire", 8 | "Enter Comment Content for <{0}>:": "Entrez le contenu du commentaire pour <{0}> :", 9 | "Enter Comment": "Entrer un commentaire", 10 | "Are you sure want to clear all comments for {0}?":"Êtes-vous sûr de vouloir effacer tous les commentaires pour {0} ?" 11 | } -------------------------------------------------------------------------------- /package.nls.jp.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonComments.displayName": "JsonComments", 3 | "jsonComments.installTips": "Jsonファイルのコメント機能を有効にするためにJsonCommentsプラグインをインストールしてください。詳細はこちら: https://github.com/zhangfisher/json_comments_extension", 4 | "jsonComments.description": "JSONファイルにコメントを追加する", 5 | "jsonComments.saveFile.title": "コメントを保存するファイル:", 6 | "jsonComments.saveFile.description": "すべてのコメントをこのJSONファイルに保存する:", 7 | "jsonComments.entryKey.title": "コメントのエントリキー", 8 | "jsonComments.entryKey.description": "コメントを保存するJSONファイル内のキーの名前", 9 | "jsonComments.enable.title": "コメントを表示する", 10 | "jsonComments.enable.description": "コメントを表示するかどうか", 11 | "jsonComments.command.addComments.title": "コメントを追加する", 12 | "jsonComments.command.removeComments.title": "コメントを削除する", 13 | "jsonComments.command.editComments.title": "コメントを編集する", 14 | "jsonComments.command.clearComments.title": "現在のドキュメントのすべてのコメントを削除する" 15 | } -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /l10n/bundle.l10n.de.json: -------------------------------------------------------------------------------- 1 | { 2 | "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension": "Installieren Sie das JsonComments-Plug-In, um die Kommentarfunktion für JSON-Dateien zu aktivieren. Weitere Informationen finden Sie unter: https://github.com/zhangfisher/json_comments_extension", 3 | "Add Comment": "Kommentar hinzufügen", 4 | "Edit This Comment": "Diesen Kommentar bearbeiten", 5 | "Delete This Comment": "Diesen Kommentar löschen", 6 | "Select Operate": "Operation auswählen", 7 | "Select How to Handle This Comment": "Wählen Sie aus, wie dieser Kommentar behandelt werden soll", 8 | "Enter Comment Content for <{0}>:": "Geben Sie den Kommentarinhalt für <{0}> ein:", 9 | "Enter Comment": "Kommentar eingeben", 10 | "Are you sure want to clear all comments for {0}?":"Möchten Sie wirklich alle Kommentare für {0} löschen?" 11 | } -------------------------------------------------------------------------------- /package.nls.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonComments.displayName": "JsonComments", 3 | "jsonComments.installTips": "Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension", 4 | "jsonComments.description": "Add comments to JSON files", 5 | "jsonComments.saveFile.title": "Save comments to file:", 6 | "jsonComments.saveFile.description": "Save all comments to this JSON file:", 7 | "jsonComments.entryKey.title": "Comment entry key", 8 | "jsonComments.entryKey.description": "Name of the key in the JSON file where comments are saved", 9 | "jsonComments.enable.title": "Show comments", 10 | "jsonComments.enable.description": "Whether to show comments", 11 | "jsonComments.command.addComments.title": "Add comments", 12 | "jsonComments.command.removeComments.title": "Remove comments", 13 | "jsonComments.command.editComments.title": "Edit comments", 14 | "jsonComments.command.clearComments.title": "Clear comments" 15 | 16 | } -------------------------------------------------------------------------------- /src/eventListeners/index.ts: -------------------------------------------------------------------------------- 1 | import { workspace ,ExtensionContext} from "vscode"; 2 | import { getComments } from "../utils/getComments"; 3 | import { updateComments } from "../utils/updateComments"; 4 | 5 | // 监听文件更名和移动事件 6 | const fileRenameDisposable = workspace.onDidRenameFiles(event => { 7 | const comments = getComments() 8 | // 处理文件更名和移动事件 9 | event.files.forEach(file => { 10 | // 原始文件的 Uri 11 | const oldUri = workspace.asRelativePath(file.oldUri) 12 | if(oldUri in comments){ 13 | const newUri = workspace.asRelativePath(file.newUri); 14 | updateComments((jsonComments)=>{ 15 | if(oldUri in jsonComments){ 16 | jsonComments[newUri] = Object.assign({},jsonComments[oldUri]) 17 | delete jsonComments[oldUri] 18 | } 19 | }) 20 | } 21 | }); 22 | }); 23 | 24 | 25 | export default (context: ExtensionContext) => { 26 | context.subscriptions.push(fileRenameDisposable) 27 | } 28 | -------------------------------------------------------------------------------- /src/utils/getDocumentComments.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 获取指定文件中的 4 | * 5 | */ 6 | 7 | 8 | 9 | import * as vscode from 'vscode'; 10 | import { JsonDocComments } from '../types'; 11 | import { getCurrentWorkspaceFolder } from './getCurrentWorkspaceFolder'; 12 | import { getDocumentRelativePath } from './getDocumentRelativePath'; 13 | import { getCommentsConfig } from './getCommentsConfig'; 14 | import fs from 'fs'; 15 | import { getComments } from './getComments'; 16 | 17 | 18 | 19 | 20 | /** 21 | * 22 | * 获取指定文档中jsonpath指向的注释 23 | * 24 | * @param docOrUri 文档相对于工作区的路径 25 | * @param jsonPath 26 | */ 27 | export function getDocumentComments(docOrUri:string | vscode.TextDocument ):JsonDocComments{ 28 | let docRelPath:string = typeof docOrUri === 'string' ? docOrUri : getDocumentRelativePath(docOrUri)! 29 | let comments =getComments() 30 | if(docRelPath in comments){ 31 | return comments[docRelPath] as Record 32 | }else{ 33 | return {} as Record 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /src/commands/clearComments.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 清空当前文档的所有注释 3 | * 4 | */ 5 | import { l10n,ExtensionContext,window } from 'vscode'; 6 | import { getCurrentDocument } from '../utils/getCurrentDocument'; 7 | import { getDocumentRelativePath } from '../utils/getDocumentRelativePath'; 8 | import { clearDocumentComments } from '../utils/clearDocumentComments'; 9 | 10 | 11 | 12 | 13 | export function clearComments(context: ExtensionContext) { 14 | return async () => { 15 | // The code you place here will be executed every time your command is executed 16 | // Display a message box to the user 17 | //vscode.window.showInformationMessage('translate-markdown-sites file!') 18 | const doc = getCurrentDocument() 19 | if(!doc) return 20 | const docRelPath = getDocumentRelativePath(doc) 21 | let result =await window.showQuickPick(['Yes', 'No'], { 22 | title: l10n.t('Are you sure want to clear all comments for {0}?',docRelPath!), 23 | }) 24 | if(result && result === 'Yes'){ 25 | clearDocumentComments(docRelPath!) 26 | } 27 | } 28 | } 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/utils/clearDocumentComments.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 清空所有注释 4 | * 5 | */ 6 | 7 | 8 | 9 | import { updateJsonFile } from './updateJsonFile'; 10 | import { getCurrentWorkspaceFolder } from './getCurrentWorkspaceFolder'; 11 | import { getCommentsConfig } from './getCommentsConfig'; 12 | 13 | /** 14 | * 15 | * 获取指定文档的所有注释 16 | * 17 | * @param docRelUri 文档相对于工作区的路径 18 | * @param jsonPath 19 | */ 20 | export function clearDocumentComments(docRelUri:string){ 21 | const wsFolder = getCurrentWorkspaceFolder() 22 | if(!wsFolder) return; 23 | const { entryKey , commentsFile } = getCommentsConfig() 24 | updateJsonFile(commentsFile,(jsonComments)=>{ 25 | const docComments = entryKey.length===0 ? jsonComments : jsonComments[entryKey] 26 | if(docComments){ 27 | if(docRelUri in docComments){ 28 | try{ 29 | delete docComments[docRelUri] 30 | }catch(e){ 31 | console.log(e) 32 | } 33 | } 34 | } 35 | }) 36 | } 37 | 38 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /package.nls.it.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonComments.displayName": "JsonComments", 3 | "jsonComments.installTips": "Si prega di installare il plugin JsonComments per abilitare la funzionalità di commento per i file JSON, vedi: https://github.com/zhangfisher/json_comments_extension", 4 | "jsonComments.description": "Aggiungi commenti ai file JSON", 5 | "jsonComments.saveFile.title": "Salva commenti nel file:", 6 | "jsonComments.saveFile.description": "Salva tutti i commenti in questo file JSON:", 7 | "jsonComments.entryKey.title": "Chiave di inserimento commento", 8 | "jsonComments.entryKey.description": "Nome della chiave nel file JSON in cui vengono salvati i commenti", 9 | "jsonComments.enable.title": "Mostra commenti", 10 | "jsonComments.enable.description": "Indica se mostrare i commenti", 11 | "jsonComments.command.addComments.title": "Aggiungi commenti", 12 | "jsonComments.command.removeComments.title": "Rimuovi commenti", 13 | "jsonComments.command.editComments.title": "Modifica commenti", 14 | "jsonComments.command.clearComments.title": "Cancella tutti i commenti nel documento corrente" 15 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 zhangfisher 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/utils/getComments.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 获取指定文件中的 4 | * 5 | */ 6 | 7 | 8 | 9 | import * as vscode from 'vscode'; 10 | import { JsonDocComments } from '../types'; 11 | import { getCurrentWorkspaceFolder } from './getCurrentWorkspaceFolder'; 12 | import { getDocumentRelativePath } from './getDocumentRelativePath'; 13 | import { getCommentsConfig } from './getCommentsConfig'; 14 | import fs from 'fs'; 15 | 16 | 17 | 18 | 19 | /** 20 | * 21 | * 获取所有注释内容 22 | * 23 | * @param docOrUri 24 | * @param jsonPath 25 | */ 26 | export function getComments():Record{ 27 | const wsFolder = getCurrentWorkspaceFolder() 28 | if(!wsFolder) return {}; 29 | 30 | // 1. 读取注释文件配置信息 31 | const { entryKey , commentsFile } = getCommentsConfig() 32 | if(!fs.existsSync(commentsFile)){ 33 | return {} 34 | } 35 | // 2. 读取注释文件 36 | let comments = JSON.parse(fs.readFileSync(commentsFile).toString()) 37 | 38 | // 3. 获取注释 39 | if(entryKey.length>0){ 40 | if(!(entryKey in comments)) comments[entryKey]={} 41 | comments = comments[entryKey] 42 | } 43 | return comments 44 | } 45 | 46 | -------------------------------------------------------------------------------- /package.nls.ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonComments.displayName": "JsonComments", 3 | "jsonComments.installTips": "Пожалуйста, установите плагин JsonComments, чтобы включить функцию комментирования для файлов JSON. Подробнее: https://github.com/zhangfisher/json_comments_extension", 4 | "jsonComments.description": "Добавление комментариев в файлы JSON", 5 | "jsonComments.saveFile.title": "Сохранить комментарии в файле:", 6 | "jsonComments.saveFile.description": "Сохранить все комментарии в этом файле JSON:", 7 | "jsonComments.entryKey.title": "Ключ для сохранения комментариев", 8 | "jsonComments.entryKey.description": "Имя ключа в файле JSON, где сохраняются комментарии", 9 | "jsonComments.enable.title": "Показывать комментарии", 10 | "jsonComments.enable.description": "Определяет, должны ли отображаться комментарии", 11 | "jsonComments.command.addComments.title": "Добавить комментарии", 12 | "jsonComments.command.removeComments.title": "Удалить комментарии", 13 | "jsonComments.command.editComments.title": "Редактировать комментарии", 14 | "jsonComments.command.clearComments.title": "Очистить все комментарии в текущем документе" 15 | } -------------------------------------------------------------------------------- /package.nls.de.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonComments.displayName": "JsonComments", 3 | "jsonComments.installTips": "Bitte installieren Sie das JsonComments-Plugin, um die Kommentarfunktion für JSON-Dateien zu aktivieren, siehe: https://github.com/zhangfisher/json_comments_extension", 4 | "jsonComments.description": "Kommentare zu JSON-Dateien hinzufügen", 5 | "jsonComments.saveFile.title": "Kommentare in Datei speichern:", 6 | "jsonComments.saveFile.description": "Alle Kommentare in dieser JSON-Datei speichern:", 7 | "jsonComments.entryKey.title": "Kommentar-Eintragschlüssel", 8 | "jsonComments.entryKey.description": "Name des Schlüssels in der JSON-Datei, unter dem die Kommentare gespeichert werden", 9 | "jsonComments.enable.title": "Kommentare anzeigen", 10 | "jsonComments.enable.description": "Ob Kommentare angezeigt werden sollen", 11 | "jsonComments.command.addComments.title": "Kommentare hinzufügen", 12 | "jsonComments.command.removeComments.title": "Kommentare entfernen", 13 | "jsonComments.command.editComments.title": "Kommentare bearbeiten", 14 | "jsonComments.command.clearComments.title": "Lösche alle Kommentare im aktuellen Dokument" 15 | } -------------------------------------------------------------------------------- /package.nls.es.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonComments.displayName": "JsonComments", 3 | "jsonComments.installTips": "Por favor, instale el complemento JsonComments para habilitar la funcionalidad de comentarios en archivos JSON, consulta: https://github.com/zhangfisher/json_comments_extension", 4 | "jsonComments.description": "Agregar comentarios a archivos JSON", 5 | "jsonComments.saveFile.title": "Guardar comentarios en archivo:", 6 | "jsonComments.saveFile.description": "Guardar todos los comentarios en este archivo JSON:", 7 | "jsonComments.entryKey.title": "Clave de entrada de comentarios", 8 | "jsonComments.entryKey.description": "Nombre de la clave en el archivo JSON donde se guardan los comentarios", 9 | "jsonComments.enable.title": "Mostrar comentarios", 10 | "jsonComments.enable.description": "Si se deben mostrar los comentarios", 11 | "jsonComments.command.addComments.title": "Agregar comentarios", 12 | "jsonComments.command.removeComments.title": "Eliminar comentarios", 13 | "jsonComments.command.editComments.title": "Editar comentarios", 14 | "jsonComments.command.clearComments.title": "Borrar todos los comentarios del documento actual" 15 | } -------------------------------------------------------------------------------- /src/utils/updateJsonFile.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * updateJsonFile("package.json","version.a.b.c","1.0.0") 4 | * 5 | * 支持键名中包括.的情况 6 | * 7 | * { 8 | * "version":{ 9 | * "config.dfault":{ 10 | * "a":{ 11 | * } 12 | * }} 13 | * } 14 | * 15 | * 16 | * 17 | * @param filename 18 | * @param key 19 | * @param value 20 | */ 21 | 22 | import fs from 'fs' 23 | import { getCurrentTabSize } from './getCurrentTabSize' 24 | 25 | export function updateJsonFile(filename:string,updater:(json:Record)=>void){ 26 | const indentSpaces = getCurrentTabSize() 27 | fs.readFile(filename,(err,data)=>{ 28 | let jsonConents = {} 29 | if(err){ 30 | if(err.code === 'ENOENT'){ 31 | jsonConents={} 32 | }else{ 33 | throw err 34 | } 35 | }else{ 36 | jsonConents = JSON.parse(data.toString()) 37 | } 38 | updater(jsonConents) 39 | fs.writeFile(filename,JSON.stringify(jsonConents,null,indentSpaces),{ 40 | encoding:'utf-8' 41 | },(err)=>{ 42 | console.error(err) 43 | }) 44 | }) 45 | } -------------------------------------------------------------------------------- /src/utils/updateComments.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 获取指定文件中的 4 | * 5 | */ 6 | 7 | 8 | 9 | import { l10n } from 'vscode'; 10 | import { JsonComments } from '../types'; 11 | import { updateJsonFile } from './updateJsonFile'; 12 | import { getCommentsConfig } from './getCommentsConfig'; 13 | 14 | 15 | 16 | 17 | /** 18 | * 19 | * 更新指定文档所有注释 20 | * 21 | * @param docRelUri 文档相对于工作区的路径 22 | * @param jsonPath 23 | */ 24 | export function updateComments(updater:(comments:JsonComments)=>void){ 25 | const { entryKey , commentsFile } = getCommentsConfig() 26 | updateJsonFile(commentsFile,(jsonComments)=>{ 27 | let docCommects = entryKey.length===0 ? jsonComments : jsonComments[entryKey] 28 | if(typeof(docCommects)!=='object') docCommects ={} 29 | if(Object.keys(docCommects).length===0){ 30 | docCommects.tips = l10n.t("Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension") 31 | } 32 | updater(docCommects) 33 | Object.assign(jsonComments,entryKey.length===0 ? docCommects : {[entryKey]:docCommects}) 34 | }) 35 | } 36 | 37 | -------------------------------------------------------------------------------- /src/hovers/jsonKeyHover.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 注册一个Hover,当鼠标悬停在JSON的键名时位置时,显示一个提示框 4 | * 5 | * @param context 6 | * @param canLanguages 7 | */ 8 | 9 | 10 | import { ExtensionContext, Hover, languages, MarkdownString,l10n } from "vscode"; 11 | 12 | 13 | 14 | export function jsonKeyHover(context: ExtensionContext) { 15 | let hoverProviderDisposable = languages.registerHoverProvider('json', { 16 | async provideHover(document, position, token) { 17 | // 获取当前鼠标位置的JSON Key 18 | const jsonKeyRange = document.getWordRangeAtPosition(position, /(?<=")([^"]*)(?="\s*:)/); 19 | if (!jsonKeyRange) { 20 | return; 21 | } 22 | // 获取 JSON 键的文本 23 | const jsonKey = document.getText(jsonKeyRange); 24 | 25 | const cmds = [ 26 | `[$(keybindings-add)${l10n.t('Add Comment')}](command:json-comments.addComments?${encodeURIComponent(JSON.stringify({key:jsonKey,rang:jsonKeyRange}))})` 27 | ] 28 | 29 | // 根据 JSON 键返回相应的 Hover 内容 30 | const addComments = new MarkdownString(cmds.join(" "),true) 31 | addComments.isTrusted = true; 32 | return new Hover(addComments); 33 | 34 | } 35 | }); 36 | context.subscriptions.push(hoverProviderDisposable); 37 | } -------------------------------------------------------------------------------- /package.nls.fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonComments.displayName": "JsonComments", 3 | "jsonComments.installTips": "Veuillez installer le plugin JsonComments pour activer la fonctionnalité de commentaires pour les fichiers JSON, voir: https://github.com/zhangfisher/json_comments_extension", 4 | "jsonComments.description": "Ajouter des commentaires aux fichiers JSON", 5 | "jsonComments.saveFile.title": "Enregistrer les commentaires dans le fichier :", 6 | "jsonComments.saveFile.description": "Enregistrer tous les commentaires dans ce fichier JSON :", 7 | "jsonComments.entryKey.title": "Clé d'entrée des commentaires", 8 | "jsonComments.entryKey.description": "Nom de la clé dans le fichier JSON où les commentaires sont enregistrés", 9 | "jsonComments.enable.title": "Afficher les commentaires", 10 | "jsonComments.enable.description": "Indique si les commentaires doivent être affichés", 11 | "jsonComments.command.addComments.title": "Ajouter des commentaires", 12 | "jsonComments.command.removeComments.title": "Supprimer les commentaires", 13 | "jsonComments.command.editComments.title": "Modifier les commentaires", 14 | "jsonComments.command.clearComments.title": "Effacer tous les commentaires du document actuel" 15 | } -------------------------------------------------------------------------------- /src/utils/getCommentsConfig.ts: -------------------------------------------------------------------------------- 1 | import path from "path" 2 | import { JsonCommentsConfigs } from "../types" 3 | import { getConfig } from "./getConfig" 4 | import { getCurrentWorkspaceFolder } from "./getCurrentWorkspaceFolder"; 5 | import { DEFAULT_ENTRY_KEY } from "../consts"; 6 | 7 | export interface GetCommentsConfig{ 8 | entryKey:string // 注释key 9 | commentsFile:string // 注释存储文件 10 | } 11 | 12 | /** 13 | * 获取当前工作区的注释配置参数 14 | * @returns 15 | */ 16 | export function getCommentsConfig():GetCommentsConfig{ 17 | const wsFolder = getCurrentWorkspaceFolder() 18 | if(!wsFolder) return { 19 | entryKey:'', 20 | commentsFile:'package.json' 21 | }; 22 | 23 | const commentsFileName = getConfig(JsonCommentsConfigs.SaveFile) || "package.json" 24 | const commentsFile =path.join(wsFolder,commentsFileName) 25 | const commentsBaseFile = path.basename(commentsFileName).toLowerCase() 26 | 27 | // 28 | let entryKey = getConfig(JsonCommentsConfigs.EntryKey,'')! 29 | 30 | // 如果将注释保存在package.json中,则不能使用整个文件作为注释 31 | // 而是使用package.json中的某个key来保存注释 32 | if(commentsBaseFile === 'package.json' ){ 33 | entryKey = entryKey || DEFAULT_ENTRY_KEY 34 | if(entryKey.length===0) entryKey = DEFAULT_ENTRY_KEY 35 | } 36 | 37 | 38 | return { 39 | entryKey, 40 | commentsFile 41 | } 42 | } -------------------------------------------------------------------------------- /src/utils/removeJsonKeyComments.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 获取指定文件中的 4 | * 5 | */ 6 | 7 | 8 | 9 | import * as vscode from 'vscode'; 10 | import { workspace } from 'vscode'; 11 | import { getDocumentComments } from './getDocumentComments'; 12 | import { JsonCommentsConfigs, JsonKeyComments } from '../types'; 13 | import { updateJsonFile } from './updateJsonFile'; 14 | import { getConfig } from './getConfig'; 15 | import path from 'path'; 16 | import { getCurrentWorkspaceFolder } from './getCurrentWorkspaceFolder'; 17 | import { getCommentsConfig } from './getCommentsConfig'; 18 | 19 | /** 20 | * 21 | * 获取指定文档中jsonpath指向的注释 22 | * 23 | * @param docRelUri 文档相对于工作区的路径 24 | * @param jsonPath 25 | */ 26 | export function removeJsonKeyComments(docRelUri:string,jsonPath:string){ 27 | const wsFolder = getCurrentWorkspaceFolder() 28 | if(!wsFolder) return; 29 | const { entryKey , commentsFile } = getCommentsConfig() 30 | updateJsonFile(commentsFile,(jsonComments)=>{ 31 | const docComments = entryKey.length===0 ? jsonComments : jsonComments[entryKey] 32 | if(docComments){ 33 | if(docRelUri in docComments){ 34 | try{ 35 | delete docComments[docRelUri][jsonPath] 36 | }catch(e){ 37 | console.log(e) 38 | } 39 | } 40 | } 41 | }) 42 | } 43 | 44 | -------------------------------------------------------------------------------- /src/utils/updateJsonKeyComments.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 获取指定文件中的 4 | * 5 | */ 6 | 7 | 8 | 9 | import { l10n } from 'vscode'; 10 | import { updateJsonFile } from './updateJsonFile'; 11 | import { getCurrentWorkspaceFolder } from './getCurrentWorkspaceFolder'; 12 | import { getCommentsConfig } from './getCommentsConfig'; 13 | 14 | 15 | 16 | 17 | /** 18 | * 19 | * 获取指定文档中jsonpath指向的注释 20 | * 21 | * @param docRelUri 文档相对于工作区的路径 22 | * @param jsonPath 23 | */ 24 | export function updateJsonKeyComments(docRelUri:string,jsonPath:string,comments:string){ 25 | const wsFolder = getCurrentWorkspaceFolder() 26 | if(!wsFolder) return; 27 | const { entryKey , commentsFile } = getCommentsConfig() 28 | updateJsonFile(commentsFile,(jsonComments)=>{ 29 | let docCommects = entryKey.length===0 ? jsonComments : jsonComments[entryKey] 30 | if(typeof(docCommects)!=='object') docCommects ={} 31 | if(Object.keys(docCommects).length===0){ 32 | docCommects.tips = l10n.t("Please install the JsonComments plugin to enable commenting functionality for JSON files, see: https://github.com/zhangfisher/json_comments_extension") 33 | } 34 | if(!(docRelUri in docCommects)){ 35 | docCommects[docRelUri] = {} 36 | } 37 | docCommects[docRelUri][jsonPath] = comments 38 | Object.assign(jsonComments,entryKey.length===0 ? docCommects : {[entryKey]:docCommects}) 39 | }) 40 | } 41 | 42 | -------------------------------------------------------------------------------- /src/commands/editComments.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 增加注释 3 | * 4 | */ 5 | import * as vscode from 'vscode'; 6 | import { l10n } from "vscode" 7 | import { getJsonKeyComments } from '../utils/getJsonKeyComments'; 8 | import { updateJsonKeyComments } from '../utils/updateJsonKeyComments'; 9 | import { removeJsonKeyComments } from '../utils/removeJsonKeyComments'; 10 | 11 | export interface EditCommentsParams{ 12 | jsonpath:string 13 | document:string 14 | } 15 | 16 | /** 17 | * 选择操作 18 | */ 19 | async function selctOperation() { 20 | 21 | 22 | } 23 | 24 | export function editComments(context: vscode.ExtensionContext) { 25 | return async ({jsonpath,document}:EditCommentsParams) => { 26 | //vscode.window.showInformationMessage('jsonpath='+jsonpath,'document='+document); 27 | 28 | const options = [l10n.t('Edit This Comment'), l10n.t('Delete This Comment')]; 29 | const selectedOption = await vscode.window.showQuickPick(options,{ 30 | placeHolder: l10n.t('Select Operate'), 31 | title: l10n.t('Select How to Handle This Comment') 32 | }) 33 | if (selectedOption ===options[0]) { 34 | const comments =await vscode.window.showInputBox({ 35 | prompt:l10n.t('Enter Comment Content for <{0}>:',jsonpath), 36 | placeHolder: l10n.t('Enter Comment'), 37 | value: getJsonKeyComments(document,jsonpath) 38 | }); 39 | if(!comments) return 40 | await updateJsonKeyComments(document,jsonpath,comments) 41 | }else if (selectedOption === options[1]) { 42 | removeJsonKeyComments(document,jsonpath) 43 | } 44 | } 45 | } 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/commands/addComments.ts: -------------------------------------------------------------------------------- 1 | 2 | import { ExtensionContext,Position,Range,window,Selection ,l10n} from 'vscode'; 3 | import * as vscode from 'vscode'; 4 | import { getCurrentDocument } from '../utils/getCurrentDocument'; 5 | import { getPathFromJson } from '../utils/getPathFromJson'; 6 | import { getDocumentRelativePath } from '../utils/getDocumentRelativePath'; 7 | import { updateJsonKeyComments } from '../utils/updateJsonKeyComments'; 8 | import { getJsonKeyComments } from '../utils/getJsonKeyComments'; 9 | 10 | 11 | export interface AddCommentsParams{ 12 | key:string, 13 | rang:[ 14 | Position, 15 | Position 16 | ] 17 | } 18 | 19 | /** 20 | * 增加注释 21 | * 22 | * @param {string} key 点击时的JSON Key 23 | * @param {[{}]} rang 24 | * 25 | */ 26 | export function addComments(context: ExtensionContext) { 27 | return async function({key,rang}:AddCommentsParams){ 28 | const currentDocument = getCurrentDocument() 29 | if(!currentDocument){ 30 | return 31 | } 32 | // 1. 获取所点击的JSON Key的路径 33 | const jsonpath = getPathFromJson(currentDocument.getText(),{ 34 | line:rang[0].line+1, 35 | column:rang[0].character+1 36 | }) 37 | if(!jsonpath) return 38 | 39 | const docRelPath = getDocumentRelativePath(currentDocument)! 40 | 41 | // 2. 获取当前 42 | const comments =await vscode.window.showInputBox({ 43 | prompt: l10n.t("Enter Comment Content for <{0}>:",jsonpath), 44 | placeHolder: l10n.t('Enter Comment'), 45 | value: getJsonKeyComments(docRelPath,jsonpath) 46 | }); 47 | if(!comments) return 48 | 49 | // 3. 更新注释到文件 50 | await updateJsonKeyComments(docRelPath,jsonpath,comments) 51 | 52 | } 53 | } 54 | 55 | -------------------------------------------------------------------------------- /README_CN.md: -------------------------------------------------------------------------------- 1 | # json-comments 2 | 3 | [中文](./README_CN.md) | [English](./README.md) 4 | 5 | 为任意`JSON`文件添加自定义注释,效果如下: 6 | 7 | ![](./preview.gif) 8 | 9 | ![](./preview2.gif) 10 | 11 | ## 安装 12 | 13 | 打开`VSCode`扩展,搜索`JsonComments`,然后安装即可。 14 | 15 | [链接](https://marketplace.visualstudio.com/items?itemName=wxzhang.json-comments&ssr=false#review-details) 16 | 17 | ## 使用方法 18 | 19 | - **添加注释** 20 | 21 | 打开当前工作区任意`JSON`文件,在任意键上悬停,在悬停提示中点击`Add Comment`,即可输入并添加注释。 22 | 添加的注释将以`CodeLens`的形式显示在所注释的键上方。 23 | 24 | - **删除注释** 25 | 26 | 直接点击注释内容,选择`删除注释`即可。 27 | 28 | - **清空注释** 29 | 30 | 按下`Ctrl+Shift+P`,输入`Clear All Comments`,即可清空当前文档的所有注释。 31 | 32 | 33 | ## 问题 34 | 35 | 36 | - **注释内容保存在哪里?** 37 | 38 | 默认情况下,注释内容保存在当前工作区的`package.json`文件中的`json-comments`中。 39 | 如果你想要修改保存位置,可以工作区配置中进行修改。 40 | 41 | - **如何更改注释保存位置?** 42 | 43 | 修改工作区配置`JsonComments`中的`commentsFile`和`entryKey`即可。 44 | 例如: 45 | 46 | ```js 47 | // 保存在当前工作区的comments.json文件中 48 | "json-comments": { 49 | "commentsFile": "comments.json", 50 | "entryKey": "" 51 | } 52 | ``` 53 | 54 | 55 | - **注释会修改原始的JSON文件吗?** 56 | 57 | 不会,所有的注释默认均保存在package.json文件中的中。 58 | 59 | - **注释提交到到Git后会丢失吗?** 60 | 61 | 不会,只要你将保存注释的文件一起提交即可。 62 | 63 | - **开发团队中其他人可以看到注释吗?** 64 | 65 | 可以,只需要安装`JsonComments`插件即可。 66 | 67 | - **当JSON文件编辑后注释内容会丢失吗?** 68 | 69 | 只要所注释的键的`jsonpath`路径没有变化就不会丢失。`JsonComments`是以`jsonpath`路径为键来保存注释内容的。 70 | 71 | - **当移动JSON文件时会导致注释丢失吗?** 72 | 73 | 不会,插件会侦听文件移动来自动更新注释信息。但是如果你脱离了`VSCode`环境移动或更名了文件,那么注释关联信息就会丢失。此时你可以手动修改`package.json`文件中的`json-comments`中的路径即可。 74 | 75 | 76 | ## 推荐 77 | 78 | [VoerkaI18n](https://github.com/zhangfisher/voerka-i18n) - Internationalization solution for 'Javascript/Typescript/Vue/React/Solidjs/SvelteJs/ReactNative' 79 | 80 | -------------------------------------------------------------------------------- /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 ]; -------------------------------------------------------------------------------- /src/codeLens/jsonCommentsCodeLens.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import { getConfig } from '../utils/getConfig'; 3 | import { JsonCommentsConfigs } from '../types'; 4 | import { getDocumentComments } from '../utils/getDocumentComments'; 5 | import { traverseJson,ABORT } from '../utils/traverseJson'; 6 | import { isNothing } from 'flex-tools/typecheck/isNothing'; 7 | import { getDocumentRelativePath } from '../utils/getDocumentRelativePath'; 8 | 9 | /** 10 | * CodelensProvider 11 | */ 12 | export class jsonCommentsCodeLensProvider implements vscode.CodeLensProvider { 13 | 14 | private codeLenses: vscode.CodeLens[] = []; 15 | private _onDidChangeCodeLenses: vscode.EventEmitter = new vscode.EventEmitter(); 16 | public readonly onDidChangeCodeLenses: vscode.Event = this._onDidChangeCodeLenses.event; 17 | 18 | constructor() { 19 | // 监听配置变化 20 | vscode.workspace.onDidChangeConfiguration((_) => { 21 | this._onDidChangeCodeLenses.fire(); 22 | }); 23 | } 24 | 25 | public provideCodeLenses(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.CodeLens[] | Thenable { 26 | if (getConfig(JsonCommentsConfigs.Enable)) { 27 | this.codeLenses = []; 28 | // 读取当前文档的注释 = {[jsonpath]:comment,...,[jsonpath]:comment} 29 | const comments = getDocumentComments(document) 30 | // 遍历注释 31 | traverseJson(document.getText(), ({jsonpath,line,column}) => { 32 | if(jsonpath in comments){ 33 | const commentsText = comments[jsonpath] 34 | if(!commentsText) return 35 | const range = new vscode.Range(new vscode.Position(line-1, column-1), new vscode.Position(line-1, column-1)); 36 | const params = { 37 | jsonpath, 38 | document:getDocumentRelativePath(document)! 39 | } 40 | this.codeLenses.push(new vscode.CodeLens(range, { 41 | title: `$(output-view-icon)${commentsText}`, 42 | command: `json-comments.editComments`, // 点击可以修改 43 | arguments: [params] 44 | })); 45 | 46 | delete comments[jsonpath] 47 | } 48 | if(isNothing(comments)) return ABORT 49 | }) 50 | return this.codeLenses; 51 | } 52 | return []; 53 | } 54 | 55 | public resolveCodeLens(codeLens: vscode.CodeLens, token: vscode.CancellationToken) { 56 | if (getConfig(JsonCommentsConfigs.Enable)) { 57 | return codeLens; 58 | } 59 | return null; 60 | } 61 | } 62 | export default (context: vscode.ExtensionContext) => { 63 | return new jsonCommentsCodeLensProvider() 64 | } -------------------------------------------------------------------------------- /vsc-extension-quickstart.md: -------------------------------------------------------------------------------- 1 | # Welcome to your VS Code Extension 2 | 3 | ## What's in the folder 4 | 5 | * This folder contains all of the files necessary for your extension. 6 | * `package.json` - this is the manifest file in which you declare your extension and command. 7 | * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. 8 | * `src/extension.ts` - this is the main file where you will provide the implementation of your command. 9 | * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. 10 | * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. 11 | 12 | ## Setup 13 | 14 | * install the recommended extensions (amodio.tsl-problem-matcher and dbaeumer.vscode-eslint) 15 | 16 | 17 | ## Get up and running straight away 18 | 19 | * Press `F5` to open a new window with your extension loaded. 20 | * Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. 21 | * Set breakpoints in your code inside `src/extension.ts` to debug your extension. 22 | * Find output from your extension in the debug console. 23 | 24 | ## Make changes 25 | 26 | * You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. 27 | * You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. 28 | 29 | 30 | ## Explore the API 31 | 32 | * You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. 33 | 34 | ## Run tests 35 | 36 | * Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. 37 | * Press `F5` to run the tests in a new window with your extension loaded. 38 | * See the output of the test result in the debug console. 39 | * Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder. 40 | * The provided test runner will only consider files matching the name pattern `**.test.ts`. 41 | * You can create folders inside the `test` folder to structure your tests any way you want. 42 | 43 | ## Go further 44 | 45 | * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). 46 | * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VS Code extension marketplace. 47 | * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). 48 | -------------------------------------------------------------------------------- /src/utils/getPathFromJson.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 获取当前光标所在位置的json路径 4 | * 5 | */ 6 | 7 | import astParser, { Location,ASTNode,ObjectNode,ArrayNode,PropertyNode } from "json-to-ast"; 8 | 9 | 10 | type Position = { 11 | line:number 12 | column:number 13 | } 14 | 15 | function inPosition(this: ParseJsonPathContext,loc:Location){ 16 | if(!loc) return false 17 | return loc.start.line === this.pos.line //&& loc.start.column >= this.pos.column && loc.end.column <= this.pos.column 18 | 19 | } 20 | 21 | const ABORT = Symbol("abort") 22 | 23 | 24 | interface TraverseContext { 25 | parent?:ASTNode 26 | path: string[]; 27 | index?: string | number; 28 | } 29 | 30 | 31 | function traverseAST(this: ParseJsonPathContext, ast: ASTNode,context:TraverseContext):typeof ABORT | void{ 32 | if (ast.type === "Array") { 33 | return traverseArrayNode.call(this, ast as ArrayNode,context); 34 | } else if (ast.type === "Object") { 35 | return traverseObjectNode.call(this, ast as ObjectNode,context); 36 | } else { 37 | // Handle other types of nodes if needed 38 | } 39 | } 40 | 41 | function traverseArrayNode(this: ParseJsonPathContext, node: ArrayNode,context:TraverseContext) { 42 | context.parent = node 43 | 44 | for (let i=0;i{ 72 | if(/^\[\d+\]$/.test(cur)){ 73 | return r.length===0 ? cur : r+cur 74 | }else{ 75 | return r.length===0 ? cur : r + "."+cur 76 | } 77 | },"") 78 | this.result = jsonpath 79 | return ABORT 80 | } 81 | //console.log(`Path = ${context.path.join(".")}.${key}`); 82 | 83 | context.path.push(key) 84 | if(traverseAST.call(this, value,context)===ABORT){ 85 | 86 | } 87 | context.path.pop() 88 | 89 | } 90 | 91 | interface ParseJsonPathContext { 92 | pos: Position; 93 | result?:string 94 | } 95 | 96 | /** 97 | * 98 | * 返回指定位置的JsonPath 99 | * 100 | * @returns 101 | */ 102 | export function getPathFromJson(json:string,pos: Position) { 103 | const ast = astParser(json, { loc: true }); 104 | const context: ParseJsonPathContext = { 105 | pos 106 | }; 107 | traverseAST.call(context, ast,{path:[]}); 108 | return context.result 109 | } 110 | 111 | 112 | -------------------------------------------------------------------------------- /src/utils/updateJsonSchema.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 更新指定路径的JSON Schema 4 | * 5 | * updateJsonSchema(,"a.b.c",{ 6 | * description:"" 7 | * }) 8 | * 9 | * 本函数会修改传入的schema json 10 | * 11 | * 12 | */ 13 | 14 | import { isNothing } from "flex-tools/typecheck/isNothing" 15 | 16 | /** 17 | * 18 | * @param schema 19 | * @param path 有效的JSON Path 20 | */ 21 | export function updateJsonSchema(schema:Record,jsonpath:string,comments:Record):Record{ 22 | 23 | const paths = jsonpath.split(".") 24 | 25 | let current = schema 26 | 27 | for(let i=0;i{ 61 | if(/^\[\d+\]$/.test(cur)){ 62 | return r.length===0 ? cur : r+cur 63 | }else{ 64 | return r.length===0 ? cur : r + "."+cur 65 | } 66 | },"") 67 | this.callback({ 68 | path:context.path, 69 | jsonpath, 70 | value:'value' in value ? value.value :undefined , 71 | line:node.loc!.start.line, 72 | column:node.loc!.start.column 73 | }) 74 | } 75 | 76 | if(traverseAST.call(this, value,context)===ABORT){ 77 | return 78 | } 79 | context.path.pop() 80 | 81 | } 82 | 83 | 84 | export type TraverseJsonCallback = (args:{path:string[],jsonpath:string,value:any,line:number,column:number})=>void 85 | 86 | export interface TraverseJsonContext{ 87 | callback:TraverseJsonCallback 88 | } 89 | 90 | 91 | /** 92 | * 93 | * 返回指定位置的JsonPath 94 | * 95 | * traverseJson(jsonString,({path,line,value,column}=>{ 96 | * 97 | * }) 98 | * 99 | * @returns 100 | */ 101 | export function traverseJson(json:string,callback:TraverseJsonCallback) { 102 | const ast = astParser(json, { loc: true }); 103 | const context: TraverseJsonContext = { 104 | callback 105 | } 106 | traverseAST.call(context, ast,{path:[]}); 107 | } 108 | 109 | 110 | 111 | // import fs from "fs" 112 | // import path from "path" 113 | 114 | // const json = fs.readFileSync(path.join(__dirname,"../../package.json")).toString() 115 | 116 | // traverseJson(json,({path,jsonpath,value,line,column})=>{ 117 | // console.log(line,column,jsonpath,typeof(value)!=="object" ? value : JSON.stringify(value)) 118 | // }) -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "json-comments", 3 | "displayName": "%jsonComments.displayName%", 4 | "description": "%jsonComments.description%", 5 | "version": "0.0.4", 6 | "publisher": "wxzhang", 7 | "homepage": "https://github.com/zhangfisher/json_comments_extension", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/zhangfisher/json_comments_extension" 11 | }, 12 | "engines": { 13 | "vscode": "^1.80.0" 14 | }, 15 | "categories": [ 16 | "Other" 17 | ], 18 | "icon": "json.png", 19 | "author": { 20 | "name": "wxzhang", 21 | "email": "wxzhang@126.com" 22 | }, 23 | "keywords": [ 24 | "json", 25 | "comments" 26 | ], 27 | "activationEvents": [ 28 | "onLanguage:json", 29 | "onFileSystemRenameFile" 30 | ], 31 | "main": "./dist/extension.js", 32 | "contributes": { 33 | "commands": [ 34 | { 35 | "command": "json-comments.addComments", 36 | "title": "%jsonComments.command.addComment.title%" 37 | }, 38 | { 39 | "command": "json-comments.clearComments", 40 | "title": "%jsonComments.command.clearComments.title%" 41 | }, 42 | { 43 | "command": "json-comments.editComments", 44 | "title": "%jsonComments.command.editComments.title%" 45 | } 46 | ], 47 | "configuration": [ 48 | { 49 | "title": "JsonComments", 50 | "description": "JsonComments extension settings", 51 | "properties": { 52 | "json-comments.saveFile": { 53 | "type": "string", 54 | "title": "%jsonComments.saveFile.title%", 55 | "default": "package.json", 56 | "description": "%jsonComments.saveFile.description%" 57 | }, 58 | "json-comments.entryKey": { 59 | "type": "string", 60 | "title": "%jsonComments.entryKey.title%", 61 | "default": "json-comments", 62 | "description": "%jsonComments.entryKey.description%" 63 | }, 64 | "json-comments.enable": { 65 | "type": "boolean", 66 | "title": "%jsonComments.enable.title%", 67 | "default": true, 68 | "description": "%jsonComments.enable.description%" 69 | } 70 | } 71 | } 72 | ] 73 | }, 74 | "l10n": "./l10n", 75 | "scripts": { 76 | "vscode:prepublish": "pnpm run package", 77 | "compile": "webpack", 78 | "watch": "webpack --watch", 79 | "package": "webpack --mode production --devtool hidden-source-map", 80 | "compile-tests": "tsc -p . --outDir out", 81 | "watch-tests": "tsc -p . -w --outDir out", 82 | "pretest": "pnpm run compile-tests && pnpm run compile && pnpm run lint", 83 | "lint": "eslint src --ext ts", 84 | "test": "node ./out/test/runTest.js", 85 | "l10n:extract": "pnpx @vscode/l10n-dev export --outDir ./l10n ./src", 86 | "release": "vsce publish patch", 87 | "package:vsix": "vsce package" 88 | }, 89 | "devDependencies": { 90 | "@types/mocha": "^10.0.3", 91 | "@types/node": "18.x", 92 | "@types/vscode": "^1.80.0", 93 | "@typescript-eslint/eslint-plugin": "^6.9.0", 94 | "@typescript-eslint/parser": "^6.9.0", 95 | "@vscode/l10n-dev": "^0.0.30", 96 | "@vscode/test-electron": "^2.3.6", 97 | "eslint": "^8.52.0", 98 | "glob": "^10.3.10", 99 | "mocha": "^10.2.0", 100 | "ts-loader": "^9.5.0", 101 | "tsx": "^4.4.0", 102 | "typescript": "^5.2.2", 103 | "vsce": "latest", 104 | "webpack": "^5.89.0", 105 | "webpack-cli": "^5.1.4" 106 | }, 107 | "dependencies": { 108 | "@types/json-to-ast": "^2.1.4", 109 | "@types/jsonpath": "^0.2.4", 110 | "@vscode/l10n": "^0.0.17", 111 | "flex-tools": "^1.3.50", 112 | "fluent-json-schema": "^4.2.1", 113 | "json-schema-from-path": "^2.0.1", 114 | "json-to-ast": "^2.1.0", 115 | "jsonpath": "^1.1.1" 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@types/json-to-ast': 9 | specifier: ^2.1.4 10 | version: 2.1.4 11 | '@types/jsonpath': 12 | specifier: ^0.2.4 13 | version: 0.2.4 14 | '@vscode/l10n': 15 | specifier: ^0.0.17 16 | version: 0.0.17 17 | flex-tools: 18 | specifier: ^1.3.50 19 | version: 1.3.50 20 | fluent-json-schema: 21 | specifier: ^4.2.1 22 | version: 4.2.1 23 | json-schema-from-path: 24 | specifier: ^2.0.1 25 | version: 2.0.1 26 | json-to-ast: 27 | specifier: ^2.1.0 28 | version: 2.1.0 29 | jsonpath: 30 | specifier: ^1.1.1 31 | version: 1.1.1 32 | 33 | devDependencies: 34 | '@types/mocha': 35 | specifier: ^10.0.3 36 | version: 10.0.3 37 | '@types/node': 38 | specifier: 18.x 39 | version: 18.0.0 40 | '@types/vscode': 41 | specifier: ^1.84.0 42 | version: 1.84.0 43 | '@typescript-eslint/eslint-plugin': 44 | specifier: ^6.9.0 45 | version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2) 46 | '@typescript-eslint/parser': 47 | specifier: ^6.9.0 48 | version: 6.9.0(eslint@8.52.0)(typescript@5.2.2) 49 | '@vscode/l10n-dev': 50 | specifier: ^0.0.30 51 | version: 0.0.30 52 | '@vscode/test-electron': 53 | specifier: ^2.3.6 54 | version: 2.3.6 55 | eslint: 56 | specifier: ^8.52.0 57 | version: 8.52.0 58 | glob: 59 | specifier: ^10.3.10 60 | version: 10.3.10 61 | mocha: 62 | specifier: ^10.2.0 63 | version: 10.2.0 64 | ts-loader: 65 | specifier: ^9.5.0 66 | version: 9.5.0(typescript@5.2.2)(webpack@5.89.0) 67 | tsx: 68 | specifier: ^4.4.0 69 | version: 4.4.0 70 | typescript: 71 | specifier: ^5.2.2 72 | version: 5.2.2 73 | webpack: 74 | specifier: ^5.89.0 75 | version: 5.89.0(webpack-cli@5.1.4) 76 | webpack-cli: 77 | specifier: ^5.1.4 78 | version: 5.1.4(webpack@5.89.0) 79 | 80 | packages: 81 | 82 | /@aashutoshrathi/word-wrap@1.2.6: 83 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 84 | engines: {node: '>=0.10.0'} 85 | dev: true 86 | 87 | /@discoveryjs/json-ext@0.5.7: 88 | resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} 89 | engines: {node: '>=10.0.0'} 90 | dev: true 91 | 92 | /@esbuild/android-arm64@0.18.20: 93 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 94 | engines: {node: '>=12'} 95 | cpu: [arm64] 96 | os: [android] 97 | requiresBuild: true 98 | dev: true 99 | optional: true 100 | 101 | /@esbuild/android-arm@0.18.20: 102 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} 103 | engines: {node: '>=12'} 104 | cpu: [arm] 105 | os: [android] 106 | requiresBuild: true 107 | dev: true 108 | optional: true 109 | 110 | /@esbuild/android-x64@0.18.20: 111 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 112 | engines: {node: '>=12'} 113 | cpu: [x64] 114 | os: [android] 115 | requiresBuild: true 116 | dev: true 117 | optional: true 118 | 119 | /@esbuild/darwin-arm64@0.18.20: 120 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 121 | engines: {node: '>=12'} 122 | cpu: [arm64] 123 | os: [darwin] 124 | requiresBuild: true 125 | dev: true 126 | optional: true 127 | 128 | /@esbuild/darwin-x64@0.18.20: 129 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 130 | engines: {node: '>=12'} 131 | cpu: [x64] 132 | os: [darwin] 133 | requiresBuild: true 134 | dev: true 135 | optional: true 136 | 137 | /@esbuild/freebsd-arm64@0.18.20: 138 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} 139 | engines: {node: '>=12'} 140 | cpu: [arm64] 141 | os: [freebsd] 142 | requiresBuild: true 143 | dev: true 144 | optional: true 145 | 146 | /@esbuild/freebsd-x64@0.18.20: 147 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 148 | engines: {node: '>=12'} 149 | cpu: [x64] 150 | os: [freebsd] 151 | requiresBuild: true 152 | dev: true 153 | optional: true 154 | 155 | /@esbuild/linux-arm64@0.18.20: 156 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 157 | engines: {node: '>=12'} 158 | cpu: [arm64] 159 | os: [linux] 160 | requiresBuild: true 161 | dev: true 162 | optional: true 163 | 164 | /@esbuild/linux-arm@0.18.20: 165 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 166 | engines: {node: '>=12'} 167 | cpu: [arm] 168 | os: [linux] 169 | requiresBuild: true 170 | dev: true 171 | optional: true 172 | 173 | /@esbuild/linux-ia32@0.18.20: 174 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 175 | engines: {node: '>=12'} 176 | cpu: [ia32] 177 | os: [linux] 178 | requiresBuild: true 179 | dev: true 180 | optional: true 181 | 182 | /@esbuild/linux-loong64@0.18.20: 183 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} 184 | engines: {node: '>=12'} 185 | cpu: [loong64] 186 | os: [linux] 187 | requiresBuild: true 188 | dev: true 189 | optional: true 190 | 191 | /@esbuild/linux-mips64el@0.18.20: 192 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 193 | engines: {node: '>=12'} 194 | cpu: [mips64el] 195 | os: [linux] 196 | requiresBuild: true 197 | dev: true 198 | optional: true 199 | 200 | /@esbuild/linux-ppc64@0.18.20: 201 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 202 | engines: {node: '>=12'} 203 | cpu: [ppc64] 204 | os: [linux] 205 | requiresBuild: true 206 | dev: true 207 | optional: true 208 | 209 | /@esbuild/linux-riscv64@0.18.20: 210 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 211 | engines: {node: '>=12'} 212 | cpu: [riscv64] 213 | os: [linux] 214 | requiresBuild: true 215 | dev: true 216 | optional: true 217 | 218 | /@esbuild/linux-s390x@0.18.20: 219 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 220 | engines: {node: '>=12'} 221 | cpu: [s390x] 222 | os: [linux] 223 | requiresBuild: true 224 | dev: true 225 | optional: true 226 | 227 | /@esbuild/linux-x64@0.18.20: 228 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} 229 | engines: {node: '>=12'} 230 | cpu: [x64] 231 | os: [linux] 232 | requiresBuild: true 233 | dev: true 234 | optional: true 235 | 236 | /@esbuild/netbsd-x64@0.18.20: 237 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} 238 | engines: {node: '>=12'} 239 | cpu: [x64] 240 | os: [netbsd] 241 | requiresBuild: true 242 | dev: true 243 | optional: true 244 | 245 | /@esbuild/openbsd-x64@0.18.20: 246 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} 247 | engines: {node: '>=12'} 248 | cpu: [x64] 249 | os: [openbsd] 250 | requiresBuild: true 251 | dev: true 252 | optional: true 253 | 254 | /@esbuild/sunos-x64@0.18.20: 255 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} 256 | engines: {node: '>=12'} 257 | cpu: [x64] 258 | os: [sunos] 259 | requiresBuild: true 260 | dev: true 261 | optional: true 262 | 263 | /@esbuild/win32-arm64@0.18.20: 264 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 265 | engines: {node: '>=12'} 266 | cpu: [arm64] 267 | os: [win32] 268 | requiresBuild: true 269 | dev: true 270 | optional: true 271 | 272 | /@esbuild/win32-ia32@0.18.20: 273 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} 274 | engines: {node: '>=12'} 275 | cpu: [ia32] 276 | os: [win32] 277 | requiresBuild: true 278 | dev: true 279 | optional: true 280 | 281 | /@esbuild/win32-x64@0.18.20: 282 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 283 | engines: {node: '>=12'} 284 | cpu: [x64] 285 | os: [win32] 286 | requiresBuild: true 287 | dev: true 288 | optional: true 289 | 290 | /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): 291 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 292 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 293 | peerDependencies: 294 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 295 | dependencies: 296 | eslint: 8.52.0 297 | eslint-visitor-keys: 3.4.3 298 | dev: true 299 | 300 | /@eslint-community/regexpp@4.10.0: 301 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 302 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 303 | dev: true 304 | 305 | /@eslint/eslintrc@2.1.3: 306 | resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} 307 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 308 | dependencies: 309 | ajv: 6.12.6 310 | debug: 4.3.4(supports-color@8.1.1) 311 | espree: 9.6.1 312 | globals: 13.23.0 313 | ignore: 5.3.0 314 | import-fresh: 3.3.0 315 | js-yaml: 4.1.0 316 | minimatch: 3.1.2 317 | strip-json-comments: 3.1.1 318 | transitivePeerDependencies: 319 | - supports-color 320 | dev: true 321 | 322 | /@eslint/js@8.52.0: 323 | resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} 324 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 325 | dev: true 326 | 327 | /@fastify/deepmerge@1.3.0: 328 | resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} 329 | dev: false 330 | 331 | /@humanwhocodes/config-array@0.11.13: 332 | resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} 333 | engines: {node: '>=10.10.0'} 334 | dependencies: 335 | '@humanwhocodes/object-schema': 2.0.1 336 | debug: 4.3.4(supports-color@8.1.1) 337 | minimatch: 3.1.2 338 | transitivePeerDependencies: 339 | - supports-color 340 | dev: true 341 | 342 | /@humanwhocodes/module-importer@1.0.1: 343 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 344 | engines: {node: '>=12.22'} 345 | dev: true 346 | 347 | /@humanwhocodes/object-schema@2.0.1: 348 | resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} 349 | dev: true 350 | 351 | /@isaacs/cliui@8.0.2: 352 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 353 | engines: {node: '>=12'} 354 | dependencies: 355 | string-width: 5.1.2 356 | string-width-cjs: /string-width@4.2.3 357 | strip-ansi: 7.1.0 358 | strip-ansi-cjs: /strip-ansi@6.0.1 359 | wrap-ansi: 8.1.0 360 | wrap-ansi-cjs: /wrap-ansi@7.0.0 361 | 362 | /@jridgewell/gen-mapping@0.3.3: 363 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 364 | engines: {node: '>=6.0.0'} 365 | dependencies: 366 | '@jridgewell/set-array': 1.1.2 367 | '@jridgewell/sourcemap-codec': 1.4.15 368 | '@jridgewell/trace-mapping': 0.3.20 369 | dev: true 370 | 371 | /@jridgewell/resolve-uri@3.1.1: 372 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 373 | engines: {node: '>=6.0.0'} 374 | dev: true 375 | 376 | /@jridgewell/set-array@1.1.2: 377 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 378 | engines: {node: '>=6.0.0'} 379 | dev: true 380 | 381 | /@jridgewell/source-map@0.3.5: 382 | resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} 383 | dependencies: 384 | '@jridgewell/gen-mapping': 0.3.3 385 | '@jridgewell/trace-mapping': 0.3.20 386 | dev: true 387 | 388 | /@jridgewell/sourcemap-codec@1.4.15: 389 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 390 | dev: true 391 | 392 | /@jridgewell/trace-mapping@0.3.20: 393 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 394 | dependencies: 395 | '@jridgewell/resolve-uri': 3.1.1 396 | '@jridgewell/sourcemap-codec': 1.4.15 397 | dev: true 398 | 399 | /@nodelib/fs.scandir@2.1.5: 400 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 401 | engines: {node: '>= 8'} 402 | dependencies: 403 | '@nodelib/fs.stat': 2.0.5 404 | run-parallel: 1.2.0 405 | dev: true 406 | 407 | /@nodelib/fs.stat@2.0.5: 408 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 409 | engines: {node: '>= 8'} 410 | dev: true 411 | 412 | /@nodelib/fs.walk@1.2.8: 413 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 414 | engines: {node: '>= 8'} 415 | dependencies: 416 | '@nodelib/fs.scandir': 2.1.5 417 | fastq: 1.15.0 418 | dev: true 419 | 420 | /@pkgjs/parseargs@0.11.0: 421 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 422 | engines: {node: '>=14'} 423 | requiresBuild: true 424 | optional: true 425 | 426 | /@tootallnate/once@1.1.2: 427 | resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} 428 | engines: {node: '>= 6'} 429 | dev: true 430 | 431 | /@types/eslint-scope@3.7.7: 432 | resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} 433 | dependencies: 434 | '@types/eslint': 8.44.7 435 | '@types/estree': 1.0.5 436 | dev: true 437 | 438 | /@types/eslint@8.44.7: 439 | resolution: {integrity: sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==} 440 | dependencies: 441 | '@types/estree': 1.0.5 442 | '@types/json-schema': 7.0.15 443 | dev: true 444 | 445 | /@types/estree@1.0.5: 446 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 447 | dev: true 448 | 449 | /@types/json-schema@7.0.15: 450 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 451 | dev: true 452 | 453 | /@types/json-to-ast@2.1.4: 454 | resolution: {integrity: sha512-131wOmuwDg8ypYCSQ437bGdP+K2lJ8GJUu+ng4iQQxAc3irRnb7mGHbexsPChBcKWLctTR9V5LJdX5A8WWk44A==} 455 | dev: false 456 | 457 | /@types/jsonpath@0.2.4: 458 | resolution: {integrity: sha512-K3hxB8Blw0qgW6ExKgMbXQv2UPZBoE2GqLpVY+yr7nMD2Pq86lsuIzyAaiQ7eMqFL5B6di6pxSkogLJEyEHoGA==} 459 | dev: false 460 | 461 | /@types/mocha@10.0.3: 462 | resolution: {integrity: sha512-RsOPImTriV/OE4A9qKjMtk2MnXiuLLbcO3nCXK+kvq4nr0iMfFgpjaX3MPLb6f7+EL1FGSelYvuJMV6REH+ZPQ==} 463 | dev: true 464 | 465 | /@types/node@18.0.0: 466 | resolution: {integrity: sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==} 467 | dev: true 468 | 469 | /@types/semver@7.5.6: 470 | resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} 471 | dev: true 472 | 473 | /@types/vscode@1.84.0: 474 | resolution: {integrity: sha512-lCGOSrhT3cL+foUEqc8G1PVZxoDbiMmxgnUZZTEnHF4mC47eKAUtBGAuMLY6o6Ua8PAuNCoKXbqPmJd1JYnQfg==} 475 | dev: true 476 | 477 | /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2): 478 | resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==} 479 | engines: {node: ^16.0.0 || >=18.0.0} 480 | peerDependencies: 481 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 482 | eslint: ^7.0.0 || ^8.0.0 483 | typescript: '*' 484 | peerDependenciesMeta: 485 | typescript: 486 | optional: true 487 | dependencies: 488 | '@eslint-community/regexpp': 4.10.0 489 | '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2) 490 | '@typescript-eslint/scope-manager': 6.9.0 491 | '@typescript-eslint/type-utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) 492 | '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) 493 | '@typescript-eslint/visitor-keys': 6.9.0 494 | debug: 4.3.4(supports-color@8.1.1) 495 | eslint: 8.52.0 496 | graphemer: 1.4.0 497 | ignore: 5.3.0 498 | natural-compare: 1.4.0 499 | semver: 7.5.4 500 | ts-api-utils: 1.0.3(typescript@5.2.2) 501 | typescript: 5.2.2 502 | transitivePeerDependencies: 503 | - supports-color 504 | dev: true 505 | 506 | /@typescript-eslint/parser@6.9.0(eslint@8.52.0)(typescript@5.2.2): 507 | resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==} 508 | engines: {node: ^16.0.0 || >=18.0.0} 509 | peerDependencies: 510 | eslint: ^7.0.0 || ^8.0.0 511 | typescript: '*' 512 | peerDependenciesMeta: 513 | typescript: 514 | optional: true 515 | dependencies: 516 | '@typescript-eslint/scope-manager': 6.9.0 517 | '@typescript-eslint/types': 6.9.0 518 | '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) 519 | '@typescript-eslint/visitor-keys': 6.9.0 520 | debug: 4.3.4(supports-color@8.1.1) 521 | eslint: 8.52.0 522 | typescript: 5.2.2 523 | transitivePeerDependencies: 524 | - supports-color 525 | dev: true 526 | 527 | /@typescript-eslint/scope-manager@6.9.0: 528 | resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==} 529 | engines: {node: ^16.0.0 || >=18.0.0} 530 | dependencies: 531 | '@typescript-eslint/types': 6.9.0 532 | '@typescript-eslint/visitor-keys': 6.9.0 533 | dev: true 534 | 535 | /@typescript-eslint/type-utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): 536 | resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==} 537 | engines: {node: ^16.0.0 || >=18.0.0} 538 | peerDependencies: 539 | eslint: ^7.0.0 || ^8.0.0 540 | typescript: '*' 541 | peerDependenciesMeta: 542 | typescript: 543 | optional: true 544 | dependencies: 545 | '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) 546 | '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2) 547 | debug: 4.3.4(supports-color@8.1.1) 548 | eslint: 8.52.0 549 | ts-api-utils: 1.0.3(typescript@5.2.2) 550 | typescript: 5.2.2 551 | transitivePeerDependencies: 552 | - supports-color 553 | dev: true 554 | 555 | /@typescript-eslint/types@6.9.0: 556 | resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==} 557 | engines: {node: ^16.0.0 || >=18.0.0} 558 | dev: true 559 | 560 | /@typescript-eslint/typescript-estree@6.9.0(typescript@5.2.2): 561 | resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==} 562 | engines: {node: ^16.0.0 || >=18.0.0} 563 | peerDependencies: 564 | typescript: '*' 565 | peerDependenciesMeta: 566 | typescript: 567 | optional: true 568 | dependencies: 569 | '@typescript-eslint/types': 6.9.0 570 | '@typescript-eslint/visitor-keys': 6.9.0 571 | debug: 4.3.4(supports-color@8.1.1) 572 | globby: 11.1.0 573 | is-glob: 4.0.3 574 | semver: 7.5.4 575 | ts-api-utils: 1.0.3(typescript@5.2.2) 576 | typescript: 5.2.2 577 | transitivePeerDependencies: 578 | - supports-color 579 | dev: true 580 | 581 | /@typescript-eslint/utils@6.9.0(eslint@8.52.0)(typescript@5.2.2): 582 | resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==} 583 | engines: {node: ^16.0.0 || >=18.0.0} 584 | peerDependencies: 585 | eslint: ^7.0.0 || ^8.0.0 586 | dependencies: 587 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) 588 | '@types/json-schema': 7.0.15 589 | '@types/semver': 7.5.6 590 | '@typescript-eslint/scope-manager': 6.9.0 591 | '@typescript-eslint/types': 6.9.0 592 | '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2) 593 | eslint: 8.52.0 594 | semver: 7.5.4 595 | transitivePeerDependencies: 596 | - supports-color 597 | - typescript 598 | dev: true 599 | 600 | /@typescript-eslint/visitor-keys@6.9.0: 601 | resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==} 602 | engines: {node: ^16.0.0 || >=18.0.0} 603 | dependencies: 604 | '@typescript-eslint/types': 6.9.0 605 | eslint-visitor-keys: 3.4.3 606 | dev: true 607 | 608 | /@ungap/structured-clone@1.2.0: 609 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 610 | dev: true 611 | 612 | /@vscode/l10n-dev@0.0.30: 613 | resolution: {integrity: sha512-m/5voX3NtGCVQ/UjKajvwW9PPvjjvcuvEKiKRkf7dS8Q/JT+Sa5XJK70JrVuuwbfGwZktrBBhF25Eu9SXv4Q6A==} 614 | hasBin: true 615 | dependencies: 616 | debug: 4.3.4(supports-color@8.1.1) 617 | deepmerge-json: 1.5.0 618 | glob: 10.3.10 619 | pseudo-localization: 2.4.0 620 | web-tree-sitter: 0.20.8 621 | xml2js: 0.5.0 622 | yargs: 17.7.2 623 | transitivePeerDependencies: 624 | - supports-color 625 | dev: true 626 | 627 | /@vscode/l10n@0.0.17: 628 | resolution: {integrity: sha512-ilT9j32+bI5FcP3TlfO3fhM39VF+qQZuxmZfUn0ABkntyJMEDREw3OKBT7ySfUCkc5ijgDjZF7KCeolfB3OVzA==} 629 | dev: false 630 | 631 | /@vscode/test-electron@2.3.6: 632 | resolution: {integrity: sha512-M31xGH0RgqNU6CZ4/9g39oUMJ99nLzfjA+4UbtIQ6TcXQ6+2qkjOOxedmPBDDCg26/3Al5ubjY80hIoaMwKYSw==} 633 | engines: {node: '>=16'} 634 | dependencies: 635 | http-proxy-agent: 4.0.1 636 | https-proxy-agent: 5.0.1 637 | jszip: 3.10.1 638 | semver: 7.5.4 639 | transitivePeerDependencies: 640 | - supports-color 641 | dev: true 642 | 643 | /@webassemblyjs/ast@1.11.6: 644 | resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} 645 | dependencies: 646 | '@webassemblyjs/helper-numbers': 1.11.6 647 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 648 | dev: true 649 | 650 | /@webassemblyjs/floating-point-hex-parser@1.11.6: 651 | resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} 652 | dev: true 653 | 654 | /@webassemblyjs/helper-api-error@1.11.6: 655 | resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} 656 | dev: true 657 | 658 | /@webassemblyjs/helper-buffer@1.11.6: 659 | resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} 660 | dev: true 661 | 662 | /@webassemblyjs/helper-numbers@1.11.6: 663 | resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} 664 | dependencies: 665 | '@webassemblyjs/floating-point-hex-parser': 1.11.6 666 | '@webassemblyjs/helper-api-error': 1.11.6 667 | '@xtuc/long': 4.2.2 668 | dev: true 669 | 670 | /@webassemblyjs/helper-wasm-bytecode@1.11.6: 671 | resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} 672 | dev: true 673 | 674 | /@webassemblyjs/helper-wasm-section@1.11.6: 675 | resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} 676 | dependencies: 677 | '@webassemblyjs/ast': 1.11.6 678 | '@webassemblyjs/helper-buffer': 1.11.6 679 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 680 | '@webassemblyjs/wasm-gen': 1.11.6 681 | dev: true 682 | 683 | /@webassemblyjs/ieee754@1.11.6: 684 | resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} 685 | dependencies: 686 | '@xtuc/ieee754': 1.2.0 687 | dev: true 688 | 689 | /@webassemblyjs/leb128@1.11.6: 690 | resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} 691 | dependencies: 692 | '@xtuc/long': 4.2.2 693 | dev: true 694 | 695 | /@webassemblyjs/utf8@1.11.6: 696 | resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} 697 | dev: true 698 | 699 | /@webassemblyjs/wasm-edit@1.11.6: 700 | resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} 701 | dependencies: 702 | '@webassemblyjs/ast': 1.11.6 703 | '@webassemblyjs/helper-buffer': 1.11.6 704 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 705 | '@webassemblyjs/helper-wasm-section': 1.11.6 706 | '@webassemblyjs/wasm-gen': 1.11.6 707 | '@webassemblyjs/wasm-opt': 1.11.6 708 | '@webassemblyjs/wasm-parser': 1.11.6 709 | '@webassemblyjs/wast-printer': 1.11.6 710 | dev: true 711 | 712 | /@webassemblyjs/wasm-gen@1.11.6: 713 | resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} 714 | dependencies: 715 | '@webassemblyjs/ast': 1.11.6 716 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 717 | '@webassemblyjs/ieee754': 1.11.6 718 | '@webassemblyjs/leb128': 1.11.6 719 | '@webassemblyjs/utf8': 1.11.6 720 | dev: true 721 | 722 | /@webassemblyjs/wasm-opt@1.11.6: 723 | resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} 724 | dependencies: 725 | '@webassemblyjs/ast': 1.11.6 726 | '@webassemblyjs/helper-buffer': 1.11.6 727 | '@webassemblyjs/wasm-gen': 1.11.6 728 | '@webassemblyjs/wasm-parser': 1.11.6 729 | dev: true 730 | 731 | /@webassemblyjs/wasm-parser@1.11.6: 732 | resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} 733 | dependencies: 734 | '@webassemblyjs/ast': 1.11.6 735 | '@webassemblyjs/helper-api-error': 1.11.6 736 | '@webassemblyjs/helper-wasm-bytecode': 1.11.6 737 | '@webassemblyjs/ieee754': 1.11.6 738 | '@webassemblyjs/leb128': 1.11.6 739 | '@webassemblyjs/utf8': 1.11.6 740 | dev: true 741 | 742 | /@webassemblyjs/wast-printer@1.11.6: 743 | resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} 744 | dependencies: 745 | '@webassemblyjs/ast': 1.11.6 746 | '@xtuc/long': 4.2.2 747 | dev: true 748 | 749 | /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.89.0): 750 | resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} 751 | engines: {node: '>=14.15.0'} 752 | peerDependencies: 753 | webpack: 5.x.x 754 | webpack-cli: 5.x.x 755 | dependencies: 756 | webpack: 5.89.0(webpack-cli@5.1.4) 757 | webpack-cli: 5.1.4(webpack@5.89.0) 758 | dev: true 759 | 760 | /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.89.0): 761 | resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} 762 | engines: {node: '>=14.15.0'} 763 | peerDependencies: 764 | webpack: 5.x.x 765 | webpack-cli: 5.x.x 766 | dependencies: 767 | webpack: 5.89.0(webpack-cli@5.1.4) 768 | webpack-cli: 5.1.4(webpack@5.89.0) 769 | dev: true 770 | 771 | /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.89.0): 772 | resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} 773 | engines: {node: '>=14.15.0'} 774 | peerDependencies: 775 | webpack: 5.x.x 776 | webpack-cli: 5.x.x 777 | webpack-dev-server: '*' 778 | peerDependenciesMeta: 779 | webpack-dev-server: 780 | optional: true 781 | dependencies: 782 | webpack: 5.89.0(webpack-cli@5.1.4) 783 | webpack-cli: 5.1.4(webpack@5.89.0) 784 | dev: true 785 | 786 | /@xtuc/ieee754@1.2.0: 787 | resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} 788 | dev: true 789 | 790 | /@xtuc/long@4.2.2: 791 | resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} 792 | dev: true 793 | 794 | /acorn-import-assertions@1.9.0(acorn@8.11.2): 795 | resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} 796 | peerDependencies: 797 | acorn: ^8 798 | dependencies: 799 | acorn: 8.11.2 800 | dev: true 801 | 802 | /acorn-jsx@5.3.2(acorn@8.11.2): 803 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 804 | peerDependencies: 805 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 806 | dependencies: 807 | acorn: 8.11.2 808 | dev: true 809 | 810 | /acorn@5.7.4: 811 | resolution: {integrity: sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==} 812 | engines: {node: '>=0.4.0'} 813 | hasBin: true 814 | dev: false 815 | 816 | /acorn@8.11.2: 817 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 818 | engines: {node: '>=0.4.0'} 819 | hasBin: true 820 | dev: true 821 | 822 | /agent-base@6.0.2: 823 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 824 | engines: {node: '>= 6.0.0'} 825 | dependencies: 826 | debug: 4.3.4(supports-color@8.1.1) 827 | transitivePeerDependencies: 828 | - supports-color 829 | dev: true 830 | 831 | /ajv-keywords@3.5.2(ajv@6.12.6): 832 | resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} 833 | peerDependencies: 834 | ajv: ^6.9.1 835 | dependencies: 836 | ajv: 6.12.6 837 | dev: true 838 | 839 | /ajv@6.12.6: 840 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 841 | dependencies: 842 | fast-deep-equal: 3.1.3 843 | fast-json-stable-stringify: 2.1.0 844 | json-schema-traverse: 0.4.1 845 | uri-js: 4.4.1 846 | dev: true 847 | 848 | /ansi-colors@4.1.1: 849 | resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} 850 | engines: {node: '>=6'} 851 | dev: true 852 | 853 | /ansi-regex@5.0.1: 854 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 855 | engines: {node: '>=8'} 856 | 857 | /ansi-regex@6.0.1: 858 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 859 | engines: {node: '>=12'} 860 | 861 | /ansi-styles@4.3.0: 862 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 863 | engines: {node: '>=8'} 864 | dependencies: 865 | color-convert: 2.0.1 866 | 867 | /ansi-styles@6.2.1: 868 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 869 | engines: {node: '>=12'} 870 | 871 | /anymatch@3.1.3: 872 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 873 | engines: {node: '>= 8'} 874 | dependencies: 875 | normalize-path: 3.0.0 876 | picomatch: 2.3.1 877 | dev: true 878 | 879 | /argparse@2.0.1: 880 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 881 | dev: true 882 | 883 | /array-union@2.1.0: 884 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 885 | engines: {node: '>=8'} 886 | dev: true 887 | 888 | /art-template@4.13.2: 889 | resolution: {integrity: sha512-04ws5k+ndA5DghfheY4c8F1304XJKeTcaXqZCLpxFkNMSkaR3ChW1pX2i9d3sEEOZuLy7de8lFriRaik1jEeOQ==} 890 | engines: {node: '>= 1.0.0'} 891 | dependencies: 892 | acorn: 5.7.4 893 | escodegen: 1.14.3 894 | estraverse: 4.3.0 895 | html-minifier: 3.5.21 896 | is-keyword-js: 1.0.3 897 | js-tokens: 3.0.2 898 | merge-source-map: 1.1.0 899 | source-map: 0.5.7 900 | dev: false 901 | 902 | /balanced-match@1.0.2: 903 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 904 | 905 | /binary-extensions@2.2.0: 906 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 907 | engines: {node: '>=8'} 908 | dev: true 909 | 910 | /brace-expansion@1.1.11: 911 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 912 | dependencies: 913 | balanced-match: 1.0.2 914 | concat-map: 0.0.1 915 | dev: true 916 | 917 | /brace-expansion@2.0.1: 918 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 919 | dependencies: 920 | balanced-match: 1.0.2 921 | 922 | /braces@3.0.2: 923 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 924 | engines: {node: '>=8'} 925 | dependencies: 926 | fill-range: 7.0.1 927 | dev: true 928 | 929 | /browser-stdout@1.3.1: 930 | resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} 931 | dev: true 932 | 933 | /browserslist@4.22.1: 934 | resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} 935 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 936 | hasBin: true 937 | dependencies: 938 | caniuse-lite: 1.0.30001563 939 | electron-to-chromium: 1.4.590 940 | node-releases: 2.0.13 941 | update-browserslist-db: 1.0.13(browserslist@4.22.1) 942 | dev: true 943 | 944 | /buffer-from@1.1.2: 945 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 946 | dev: true 947 | 948 | /callsites@3.1.0: 949 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 950 | engines: {node: '>=6'} 951 | dev: true 952 | 953 | /camel-case@3.0.0: 954 | resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} 955 | dependencies: 956 | no-case: 2.3.2 957 | upper-case: 1.1.3 958 | dev: false 959 | 960 | /camelcase@6.3.0: 961 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 962 | engines: {node: '>=10'} 963 | dev: true 964 | 965 | /caniuse-lite@1.0.30001563: 966 | resolution: {integrity: sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==} 967 | dev: true 968 | 969 | /chalk@4.1.2: 970 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 971 | engines: {node: '>=10'} 972 | dependencies: 973 | ansi-styles: 4.3.0 974 | supports-color: 7.2.0 975 | dev: true 976 | 977 | /chokidar@3.5.3: 978 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 979 | engines: {node: '>= 8.10.0'} 980 | dependencies: 981 | anymatch: 3.1.3 982 | braces: 3.0.2 983 | glob-parent: 5.1.2 984 | is-binary-path: 2.1.0 985 | is-glob: 4.0.3 986 | normalize-path: 3.0.0 987 | readdirp: 3.6.0 988 | optionalDependencies: 989 | fsevents: 2.3.3 990 | dev: true 991 | 992 | /chrome-trace-event@1.0.3: 993 | resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} 994 | engines: {node: '>=6.0'} 995 | dev: true 996 | 997 | /clean-css@4.2.4: 998 | resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} 999 | engines: {node: '>= 4.0'} 1000 | dependencies: 1001 | source-map: 0.6.1 1002 | dev: false 1003 | 1004 | /cliui@7.0.4: 1005 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 1006 | dependencies: 1007 | string-width: 4.2.3 1008 | strip-ansi: 6.0.1 1009 | wrap-ansi: 7.0.0 1010 | dev: true 1011 | 1012 | /cliui@8.0.1: 1013 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 1014 | engines: {node: '>=12'} 1015 | dependencies: 1016 | string-width: 4.2.3 1017 | strip-ansi: 6.0.1 1018 | wrap-ansi: 7.0.0 1019 | dev: true 1020 | 1021 | /clone-deep@4.0.1: 1022 | resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} 1023 | engines: {node: '>=6'} 1024 | dependencies: 1025 | is-plain-object: 2.0.4 1026 | kind-of: 6.0.3 1027 | shallow-clone: 3.0.1 1028 | dev: true 1029 | 1030 | /code-error-fragment@0.0.230: 1031 | resolution: {integrity: sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==} 1032 | engines: {node: '>= 4'} 1033 | dev: false 1034 | 1035 | /color-convert@2.0.1: 1036 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1037 | engines: {node: '>=7.0.0'} 1038 | dependencies: 1039 | color-name: 1.1.4 1040 | 1041 | /color-name@1.1.4: 1042 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1043 | 1044 | /colorette@2.0.20: 1045 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 1046 | dev: true 1047 | 1048 | /commander@10.0.1: 1049 | resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} 1050 | engines: {node: '>=14'} 1051 | dev: true 1052 | 1053 | /commander@2.17.1: 1054 | resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==} 1055 | dev: false 1056 | 1057 | /commander@2.19.0: 1058 | resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==} 1059 | dev: false 1060 | 1061 | /commander@2.20.3: 1062 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 1063 | dev: true 1064 | 1065 | /concat-map@0.0.1: 1066 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1067 | dev: true 1068 | 1069 | /core-util-is@1.0.3: 1070 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 1071 | dev: true 1072 | 1073 | /cross-spawn@7.0.3: 1074 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1075 | engines: {node: '>= 8'} 1076 | dependencies: 1077 | path-key: 3.1.1 1078 | shebang-command: 2.0.0 1079 | which: 2.0.2 1080 | 1081 | /debug@4.3.4(supports-color@8.1.1): 1082 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1083 | engines: {node: '>=6.0'} 1084 | peerDependencies: 1085 | supports-color: '*' 1086 | peerDependenciesMeta: 1087 | supports-color: 1088 | optional: true 1089 | dependencies: 1090 | ms: 2.1.2 1091 | supports-color: 8.1.1 1092 | dev: true 1093 | 1094 | /decamelize@4.0.0: 1095 | resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} 1096 | engines: {node: '>=10'} 1097 | dev: true 1098 | 1099 | /deep-is@0.1.4: 1100 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1101 | 1102 | /deepmerge-json@1.5.0: 1103 | resolution: {integrity: sha512-jZRrDmBKjmGcqMFEUJ14FjMJwm05Qaked+1vxaALRtF0UAl7lPU8OLWXFxvoeg3jbQM249VPFVn8g2znaQkEtA==} 1104 | engines: {node: '>=4.0.0'} 1105 | dev: true 1106 | 1107 | /diff@5.0.0: 1108 | resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} 1109 | engines: {node: '>=0.3.1'} 1110 | dev: true 1111 | 1112 | /dir-glob@3.0.1: 1113 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1114 | engines: {node: '>=8'} 1115 | dependencies: 1116 | path-type: 4.0.0 1117 | dev: true 1118 | 1119 | /doctrine@3.0.0: 1120 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1121 | engines: {node: '>=6.0.0'} 1122 | dependencies: 1123 | esutils: 2.0.3 1124 | dev: true 1125 | 1126 | /eastasianwidth@0.2.0: 1127 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 1128 | 1129 | /electron-to-chromium@1.4.590: 1130 | resolution: {integrity: sha512-hohItzsQcG7/FBsviCYMtQwUSWvVF7NVqPOnJCErWsAshsP/CR2LAXdmq276RbESNdhxiAq5/vRo1g2pxGXVww==} 1131 | dev: true 1132 | 1133 | /emoji-regex@8.0.0: 1134 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1135 | 1136 | /emoji-regex@9.2.2: 1137 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1138 | 1139 | /enhanced-resolve@5.15.0: 1140 | resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} 1141 | engines: {node: '>=10.13.0'} 1142 | dependencies: 1143 | graceful-fs: 4.2.11 1144 | tapable: 2.2.1 1145 | dev: true 1146 | 1147 | /envinfo@7.11.0: 1148 | resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} 1149 | engines: {node: '>=4'} 1150 | hasBin: true 1151 | dev: true 1152 | 1153 | /es-module-lexer@1.4.1: 1154 | resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} 1155 | dev: true 1156 | 1157 | /esbuild@0.18.20: 1158 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} 1159 | engines: {node: '>=12'} 1160 | hasBin: true 1161 | requiresBuild: true 1162 | optionalDependencies: 1163 | '@esbuild/android-arm': 0.18.20 1164 | '@esbuild/android-arm64': 0.18.20 1165 | '@esbuild/android-x64': 0.18.20 1166 | '@esbuild/darwin-arm64': 0.18.20 1167 | '@esbuild/darwin-x64': 0.18.20 1168 | '@esbuild/freebsd-arm64': 0.18.20 1169 | '@esbuild/freebsd-x64': 0.18.20 1170 | '@esbuild/linux-arm': 0.18.20 1171 | '@esbuild/linux-arm64': 0.18.20 1172 | '@esbuild/linux-ia32': 0.18.20 1173 | '@esbuild/linux-loong64': 0.18.20 1174 | '@esbuild/linux-mips64el': 0.18.20 1175 | '@esbuild/linux-ppc64': 0.18.20 1176 | '@esbuild/linux-riscv64': 0.18.20 1177 | '@esbuild/linux-s390x': 0.18.20 1178 | '@esbuild/linux-x64': 0.18.20 1179 | '@esbuild/netbsd-x64': 0.18.20 1180 | '@esbuild/openbsd-x64': 0.18.20 1181 | '@esbuild/sunos-x64': 0.18.20 1182 | '@esbuild/win32-arm64': 0.18.20 1183 | '@esbuild/win32-ia32': 0.18.20 1184 | '@esbuild/win32-x64': 0.18.20 1185 | dev: true 1186 | 1187 | /escalade@3.1.1: 1188 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1189 | engines: {node: '>=6'} 1190 | dev: true 1191 | 1192 | /escape-string-regexp@4.0.0: 1193 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1194 | engines: {node: '>=10'} 1195 | dev: true 1196 | 1197 | /escodegen@1.14.3: 1198 | resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} 1199 | engines: {node: '>=4.0'} 1200 | hasBin: true 1201 | dependencies: 1202 | esprima: 4.0.1 1203 | estraverse: 4.3.0 1204 | esutils: 2.0.3 1205 | optionator: 0.8.3 1206 | optionalDependencies: 1207 | source-map: 0.6.1 1208 | dev: false 1209 | 1210 | /eslint-scope@5.1.1: 1211 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1212 | engines: {node: '>=8.0.0'} 1213 | dependencies: 1214 | esrecurse: 4.3.0 1215 | estraverse: 4.3.0 1216 | dev: true 1217 | 1218 | /eslint-scope@7.2.2: 1219 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1220 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1221 | dependencies: 1222 | esrecurse: 4.3.0 1223 | estraverse: 5.3.0 1224 | dev: true 1225 | 1226 | /eslint-visitor-keys@3.4.3: 1227 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1228 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1229 | dev: true 1230 | 1231 | /eslint@8.52.0: 1232 | resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} 1233 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1234 | hasBin: true 1235 | dependencies: 1236 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) 1237 | '@eslint-community/regexpp': 4.10.0 1238 | '@eslint/eslintrc': 2.1.3 1239 | '@eslint/js': 8.52.0 1240 | '@humanwhocodes/config-array': 0.11.13 1241 | '@humanwhocodes/module-importer': 1.0.1 1242 | '@nodelib/fs.walk': 1.2.8 1243 | '@ungap/structured-clone': 1.2.0 1244 | ajv: 6.12.6 1245 | chalk: 4.1.2 1246 | cross-spawn: 7.0.3 1247 | debug: 4.3.4(supports-color@8.1.1) 1248 | doctrine: 3.0.0 1249 | escape-string-regexp: 4.0.0 1250 | eslint-scope: 7.2.2 1251 | eslint-visitor-keys: 3.4.3 1252 | espree: 9.6.1 1253 | esquery: 1.5.0 1254 | esutils: 2.0.3 1255 | fast-deep-equal: 3.1.3 1256 | file-entry-cache: 6.0.1 1257 | find-up: 5.0.0 1258 | glob-parent: 6.0.2 1259 | globals: 13.23.0 1260 | graphemer: 1.4.0 1261 | ignore: 5.3.0 1262 | imurmurhash: 0.1.4 1263 | is-glob: 4.0.3 1264 | is-path-inside: 3.0.3 1265 | js-yaml: 4.1.0 1266 | json-stable-stringify-without-jsonify: 1.0.1 1267 | levn: 0.4.1 1268 | lodash.merge: 4.6.2 1269 | minimatch: 3.1.2 1270 | natural-compare: 1.4.0 1271 | optionator: 0.9.3 1272 | strip-ansi: 6.0.1 1273 | text-table: 0.2.0 1274 | transitivePeerDependencies: 1275 | - supports-color 1276 | dev: true 1277 | 1278 | /espree@9.6.1: 1279 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1280 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1281 | dependencies: 1282 | acorn: 8.11.2 1283 | acorn-jsx: 5.3.2(acorn@8.11.2) 1284 | eslint-visitor-keys: 3.4.3 1285 | dev: true 1286 | 1287 | /esprima@1.2.2: 1288 | resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} 1289 | engines: {node: '>=0.4.0'} 1290 | hasBin: true 1291 | dev: false 1292 | 1293 | /esprima@4.0.1: 1294 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1295 | engines: {node: '>=4'} 1296 | hasBin: true 1297 | dev: false 1298 | 1299 | /esquery@1.5.0: 1300 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1301 | engines: {node: '>=0.10'} 1302 | dependencies: 1303 | estraverse: 5.3.0 1304 | dev: true 1305 | 1306 | /esrecurse@4.3.0: 1307 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1308 | engines: {node: '>=4.0'} 1309 | dependencies: 1310 | estraverse: 5.3.0 1311 | dev: true 1312 | 1313 | /estraverse@4.3.0: 1314 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1315 | engines: {node: '>=4.0'} 1316 | 1317 | /estraverse@5.3.0: 1318 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1319 | engines: {node: '>=4.0'} 1320 | dev: true 1321 | 1322 | /esutils@2.0.3: 1323 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1324 | engines: {node: '>=0.10.0'} 1325 | 1326 | /events@3.3.0: 1327 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 1328 | engines: {node: '>=0.8.x'} 1329 | dev: true 1330 | 1331 | /fast-deep-equal@3.1.3: 1332 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1333 | dev: true 1334 | 1335 | /fast-glob@3.3.2: 1336 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1337 | engines: {node: '>=8.6.0'} 1338 | dependencies: 1339 | '@nodelib/fs.stat': 2.0.5 1340 | '@nodelib/fs.walk': 1.2.8 1341 | glob-parent: 5.1.2 1342 | merge2: 1.4.1 1343 | micromatch: 4.0.5 1344 | dev: true 1345 | 1346 | /fast-json-stable-stringify@2.1.0: 1347 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1348 | dev: true 1349 | 1350 | /fast-levenshtein@2.0.6: 1351 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1352 | 1353 | /fastest-levenshtein@1.0.16: 1354 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} 1355 | engines: {node: '>= 4.9.1'} 1356 | dev: true 1357 | 1358 | /fastq@1.15.0: 1359 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1360 | dependencies: 1361 | reusify: 1.0.4 1362 | dev: true 1363 | 1364 | /file-entry-cache@6.0.1: 1365 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1366 | engines: {node: ^10.12.0 || >=12.0.0} 1367 | dependencies: 1368 | flat-cache: 3.2.0 1369 | dev: true 1370 | 1371 | /fill-range@7.0.1: 1372 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1373 | engines: {node: '>=8'} 1374 | dependencies: 1375 | to-regex-range: 5.0.1 1376 | dev: true 1377 | 1378 | /find-up@4.1.0: 1379 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1380 | engines: {node: '>=8'} 1381 | dependencies: 1382 | locate-path: 5.0.0 1383 | path-exists: 4.0.0 1384 | dev: true 1385 | 1386 | /find-up@5.0.0: 1387 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1388 | engines: {node: '>=10'} 1389 | dependencies: 1390 | locate-path: 6.0.0 1391 | path-exists: 4.0.0 1392 | dev: true 1393 | 1394 | /flat-cache@3.2.0: 1395 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1396 | engines: {node: ^10.12.0 || >=12.0.0} 1397 | dependencies: 1398 | flatted: 3.2.9 1399 | keyv: 4.5.4 1400 | rimraf: 3.0.2 1401 | dev: true 1402 | 1403 | /flat@5.0.2: 1404 | resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} 1405 | hasBin: true 1406 | dev: true 1407 | 1408 | /flatted@3.2.9: 1409 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 1410 | dev: true 1411 | 1412 | /flex-tools@1.3.50: 1413 | resolution: {integrity: sha512-bz5BiMWYYnF8jelU+M6y2WPpH5LQIJdDRoP5n3AAW9jmWuzh452TXJQfIIf2BusNyPAhkJII5JnoRJCoHQMMsQ==} 1414 | dependencies: 1415 | art-template: 4.13.2 1416 | glob: 10.3.10 1417 | dev: false 1418 | 1419 | /fluent-json-schema@4.2.1: 1420 | resolution: {integrity: sha512-vSvURY8BBRqxOFquy/wwjdnT4z07j2NZ+Cm3Nj881NHXKPSdiE4ZNyRImDh+SIk2yFZKzj7Clt+ENb5ha4uYJA==} 1421 | dependencies: 1422 | '@fastify/deepmerge': 1.3.0 1423 | dev: false 1424 | 1425 | /foreground-child@3.1.1: 1426 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 1427 | engines: {node: '>=14'} 1428 | dependencies: 1429 | cross-spawn: 7.0.3 1430 | signal-exit: 4.1.0 1431 | 1432 | /fs.realpath@1.0.0: 1433 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1434 | dev: true 1435 | 1436 | /fsevents@2.3.3: 1437 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1438 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1439 | os: [darwin] 1440 | requiresBuild: true 1441 | dev: true 1442 | optional: true 1443 | 1444 | /function-bind@1.1.2: 1445 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1446 | dev: true 1447 | 1448 | /get-caller-file@2.0.5: 1449 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1450 | engines: {node: 6.* || 8.* || >= 10.*} 1451 | dev: true 1452 | 1453 | /get-stdin@7.0.0: 1454 | resolution: {integrity: sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==} 1455 | engines: {node: '>=8'} 1456 | dev: true 1457 | 1458 | /get-tsconfig@4.7.2: 1459 | resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} 1460 | dependencies: 1461 | resolve-pkg-maps: 1.0.0 1462 | dev: true 1463 | 1464 | /glob-parent@5.1.2: 1465 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1466 | engines: {node: '>= 6'} 1467 | dependencies: 1468 | is-glob: 4.0.3 1469 | dev: true 1470 | 1471 | /glob-parent@6.0.2: 1472 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1473 | engines: {node: '>=10.13.0'} 1474 | dependencies: 1475 | is-glob: 4.0.3 1476 | dev: true 1477 | 1478 | /glob-to-regexp@0.4.1: 1479 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 1480 | dev: true 1481 | 1482 | /glob@10.3.10: 1483 | resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} 1484 | engines: {node: '>=16 || 14 >=14.17'} 1485 | hasBin: true 1486 | dependencies: 1487 | foreground-child: 3.1.1 1488 | jackspeak: 2.3.6 1489 | minimatch: 9.0.3 1490 | minipass: 7.0.4 1491 | path-scurry: 1.10.1 1492 | 1493 | /glob@7.2.0: 1494 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 1495 | dependencies: 1496 | fs.realpath: 1.0.0 1497 | inflight: 1.0.6 1498 | inherits: 2.0.4 1499 | minimatch: 3.1.2 1500 | once: 1.4.0 1501 | path-is-absolute: 1.0.1 1502 | dev: true 1503 | 1504 | /glob@7.2.3: 1505 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1506 | dependencies: 1507 | fs.realpath: 1.0.0 1508 | inflight: 1.0.6 1509 | inherits: 2.0.4 1510 | minimatch: 3.1.2 1511 | once: 1.4.0 1512 | path-is-absolute: 1.0.1 1513 | dev: true 1514 | 1515 | /globals@13.23.0: 1516 | resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} 1517 | engines: {node: '>=8'} 1518 | dependencies: 1519 | type-fest: 0.20.2 1520 | dev: true 1521 | 1522 | /globby@11.1.0: 1523 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1524 | engines: {node: '>=10'} 1525 | dependencies: 1526 | array-union: 2.1.0 1527 | dir-glob: 3.0.1 1528 | fast-glob: 3.3.2 1529 | ignore: 5.3.0 1530 | merge2: 1.4.1 1531 | slash: 3.0.0 1532 | dev: true 1533 | 1534 | /graceful-fs@4.2.11: 1535 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1536 | dev: true 1537 | 1538 | /grapheme-splitter@1.0.4: 1539 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1540 | dev: false 1541 | 1542 | /graphemer@1.4.0: 1543 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1544 | dev: true 1545 | 1546 | /has-flag@4.0.0: 1547 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1548 | engines: {node: '>=8'} 1549 | dev: true 1550 | 1551 | /hasown@2.0.0: 1552 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1553 | engines: {node: '>= 0.4'} 1554 | dependencies: 1555 | function-bind: 1.1.2 1556 | dev: true 1557 | 1558 | /he@1.2.0: 1559 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1560 | hasBin: true 1561 | 1562 | /html-minifier@3.5.21: 1563 | resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==} 1564 | engines: {node: '>=4'} 1565 | hasBin: true 1566 | dependencies: 1567 | camel-case: 3.0.0 1568 | clean-css: 4.2.4 1569 | commander: 2.17.1 1570 | he: 1.2.0 1571 | param-case: 2.1.1 1572 | relateurl: 0.2.7 1573 | uglify-js: 3.4.10 1574 | dev: false 1575 | 1576 | /http-proxy-agent@4.0.1: 1577 | resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} 1578 | engines: {node: '>= 6'} 1579 | dependencies: 1580 | '@tootallnate/once': 1.1.2 1581 | agent-base: 6.0.2 1582 | debug: 4.3.4(supports-color@8.1.1) 1583 | transitivePeerDependencies: 1584 | - supports-color 1585 | dev: true 1586 | 1587 | /https-proxy-agent@5.0.1: 1588 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 1589 | engines: {node: '>= 6'} 1590 | dependencies: 1591 | agent-base: 6.0.2 1592 | debug: 4.3.4(supports-color@8.1.1) 1593 | transitivePeerDependencies: 1594 | - supports-color 1595 | dev: true 1596 | 1597 | /ignore@5.3.0: 1598 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 1599 | engines: {node: '>= 4'} 1600 | dev: true 1601 | 1602 | /immediate@3.0.6: 1603 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} 1604 | dev: true 1605 | 1606 | /import-fresh@3.3.0: 1607 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1608 | engines: {node: '>=6'} 1609 | dependencies: 1610 | parent-module: 1.0.1 1611 | resolve-from: 4.0.0 1612 | dev: true 1613 | 1614 | /import-local@3.1.0: 1615 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} 1616 | engines: {node: '>=8'} 1617 | hasBin: true 1618 | dependencies: 1619 | pkg-dir: 4.2.0 1620 | resolve-cwd: 3.0.0 1621 | dev: true 1622 | 1623 | /imurmurhash@0.1.4: 1624 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1625 | engines: {node: '>=0.8.19'} 1626 | dev: true 1627 | 1628 | /inflight@1.0.6: 1629 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1630 | dependencies: 1631 | once: 1.4.0 1632 | wrappy: 1.0.2 1633 | dev: true 1634 | 1635 | /inherits@2.0.4: 1636 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1637 | dev: true 1638 | 1639 | /interpret@3.1.1: 1640 | resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} 1641 | engines: {node: '>=10.13.0'} 1642 | dev: true 1643 | 1644 | /is-binary-path@2.1.0: 1645 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1646 | engines: {node: '>=8'} 1647 | dependencies: 1648 | binary-extensions: 2.2.0 1649 | dev: true 1650 | 1651 | /is-core-module@2.13.1: 1652 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1653 | dependencies: 1654 | hasown: 2.0.0 1655 | dev: true 1656 | 1657 | /is-extglob@2.1.1: 1658 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1659 | engines: {node: '>=0.10.0'} 1660 | dev: true 1661 | 1662 | /is-fullwidth-code-point@3.0.0: 1663 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1664 | engines: {node: '>=8'} 1665 | 1666 | /is-glob@4.0.3: 1667 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1668 | engines: {node: '>=0.10.0'} 1669 | dependencies: 1670 | is-extglob: 2.1.1 1671 | dev: true 1672 | 1673 | /is-keyword-js@1.0.3: 1674 | resolution: {integrity: sha512-EW8wNCNvomPa/jsH1g0DmLfPakkRCRTcTML1v1fZMLiVCvQ/1YB+tKsRzShBiWQhqrYCi5a+WsepA4Z8TA9iaA==} 1675 | engines: {node: '>=0.10.0'} 1676 | dev: false 1677 | 1678 | /is-number@7.0.0: 1679 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1680 | engines: {node: '>=0.12.0'} 1681 | dev: true 1682 | 1683 | /is-path-inside@3.0.3: 1684 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1685 | engines: {node: '>=8'} 1686 | dev: true 1687 | 1688 | /is-plain-obj@2.1.0: 1689 | resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} 1690 | engines: {node: '>=8'} 1691 | dev: true 1692 | 1693 | /is-plain-object@2.0.4: 1694 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} 1695 | engines: {node: '>=0.10.0'} 1696 | dependencies: 1697 | isobject: 3.0.1 1698 | dev: true 1699 | 1700 | /is-unicode-supported@0.1.0: 1701 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} 1702 | engines: {node: '>=10'} 1703 | dev: true 1704 | 1705 | /isarray@1.0.0: 1706 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1707 | dev: true 1708 | 1709 | /isexe@2.0.0: 1710 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1711 | 1712 | /isobject@3.0.1: 1713 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} 1714 | engines: {node: '>=0.10.0'} 1715 | dev: true 1716 | 1717 | /jackspeak@2.3.6: 1718 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} 1719 | engines: {node: '>=14'} 1720 | dependencies: 1721 | '@isaacs/cliui': 8.0.2 1722 | optionalDependencies: 1723 | '@pkgjs/parseargs': 0.11.0 1724 | 1725 | /jest-worker@27.5.1: 1726 | resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} 1727 | engines: {node: '>= 10.13.0'} 1728 | dependencies: 1729 | '@types/node': 18.0.0 1730 | merge-stream: 2.0.0 1731 | supports-color: 8.1.1 1732 | dev: true 1733 | 1734 | /js-tokens@3.0.2: 1735 | resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} 1736 | dev: false 1737 | 1738 | /js-yaml@4.1.0: 1739 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1740 | hasBin: true 1741 | dependencies: 1742 | argparse: 2.0.1 1743 | dev: true 1744 | 1745 | /json-buffer@3.0.1: 1746 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1747 | dev: true 1748 | 1749 | /json-parse-even-better-errors@2.3.1: 1750 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1751 | dev: true 1752 | 1753 | /json-schema-from-path@2.0.1: 1754 | resolution: {integrity: sha512-sVQMNzI2HcNnVofmJvTfdS3EFBed+wn8uMcvwcnm9ujkZT5uee6r5bnCb85JHUXfDR6vLj0ZQigV+QfKkpei/Q==} 1755 | dev: false 1756 | 1757 | /json-schema-traverse@0.4.1: 1758 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1759 | dev: true 1760 | 1761 | /json-stable-stringify-without-jsonify@1.0.1: 1762 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1763 | dev: true 1764 | 1765 | /json-to-ast@2.1.0: 1766 | resolution: {integrity: sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==} 1767 | engines: {node: '>= 4'} 1768 | dependencies: 1769 | code-error-fragment: 0.0.230 1770 | grapheme-splitter: 1.0.4 1771 | dev: false 1772 | 1773 | /jsonpath@1.1.1: 1774 | resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} 1775 | dependencies: 1776 | esprima: 1.2.2 1777 | static-eval: 2.0.2 1778 | underscore: 1.12.1 1779 | dev: false 1780 | 1781 | /jszip@3.10.1: 1782 | resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} 1783 | dependencies: 1784 | lie: 3.3.0 1785 | pako: 1.0.11 1786 | readable-stream: 2.3.8 1787 | setimmediate: 1.0.5 1788 | dev: true 1789 | 1790 | /keyv@4.5.4: 1791 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1792 | dependencies: 1793 | json-buffer: 3.0.1 1794 | dev: true 1795 | 1796 | /kind-of@6.0.3: 1797 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1798 | engines: {node: '>=0.10.0'} 1799 | dev: true 1800 | 1801 | /levn@0.3.0: 1802 | resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} 1803 | engines: {node: '>= 0.8.0'} 1804 | dependencies: 1805 | prelude-ls: 1.1.2 1806 | type-check: 0.3.2 1807 | dev: false 1808 | 1809 | /levn@0.4.1: 1810 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1811 | engines: {node: '>= 0.8.0'} 1812 | dependencies: 1813 | prelude-ls: 1.2.1 1814 | type-check: 0.4.0 1815 | dev: true 1816 | 1817 | /lie@3.3.0: 1818 | resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} 1819 | dependencies: 1820 | immediate: 3.0.6 1821 | dev: true 1822 | 1823 | /loader-runner@4.3.0: 1824 | resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} 1825 | engines: {node: '>=6.11.5'} 1826 | dev: true 1827 | 1828 | /locate-path@5.0.0: 1829 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1830 | engines: {node: '>=8'} 1831 | dependencies: 1832 | p-locate: 4.1.0 1833 | dev: true 1834 | 1835 | /locate-path@6.0.0: 1836 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1837 | engines: {node: '>=10'} 1838 | dependencies: 1839 | p-locate: 5.0.0 1840 | dev: true 1841 | 1842 | /lodash.merge@4.6.2: 1843 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1844 | dev: true 1845 | 1846 | /log-symbols@4.1.0: 1847 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} 1848 | engines: {node: '>=10'} 1849 | dependencies: 1850 | chalk: 4.1.2 1851 | is-unicode-supported: 0.1.0 1852 | dev: true 1853 | 1854 | /lower-case@1.1.4: 1855 | resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} 1856 | dev: false 1857 | 1858 | /lru-cache@10.0.3: 1859 | resolution: {integrity: sha512-B7gr+F6MkqB3uzINHXNctGieGsRTMwIBgxkp0yq/5BwcuDzD4A8wQpHQW6vDAm1uKSLQghmRdD9sKqf2vJ1cEg==} 1860 | engines: {node: 14 || >=16.14} 1861 | 1862 | /lru-cache@6.0.0: 1863 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1864 | engines: {node: '>=10'} 1865 | dependencies: 1866 | yallist: 4.0.0 1867 | dev: true 1868 | 1869 | /merge-source-map@1.1.0: 1870 | resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==} 1871 | dependencies: 1872 | source-map: 0.6.1 1873 | dev: false 1874 | 1875 | /merge-stream@2.0.0: 1876 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1877 | dev: true 1878 | 1879 | /merge2@1.4.1: 1880 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1881 | engines: {node: '>= 8'} 1882 | dev: true 1883 | 1884 | /micromatch@4.0.5: 1885 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1886 | engines: {node: '>=8.6'} 1887 | dependencies: 1888 | braces: 3.0.2 1889 | picomatch: 2.3.1 1890 | dev: true 1891 | 1892 | /mime-db@1.52.0: 1893 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1894 | engines: {node: '>= 0.6'} 1895 | dev: true 1896 | 1897 | /mime-types@2.1.35: 1898 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1899 | engines: {node: '>= 0.6'} 1900 | dependencies: 1901 | mime-db: 1.52.0 1902 | dev: true 1903 | 1904 | /minimatch@3.1.2: 1905 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1906 | dependencies: 1907 | brace-expansion: 1.1.11 1908 | dev: true 1909 | 1910 | /minimatch@5.0.1: 1911 | resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} 1912 | engines: {node: '>=10'} 1913 | dependencies: 1914 | brace-expansion: 2.0.1 1915 | dev: true 1916 | 1917 | /minimatch@9.0.3: 1918 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 1919 | engines: {node: '>=16 || 14 >=14.17'} 1920 | dependencies: 1921 | brace-expansion: 2.0.1 1922 | 1923 | /minipass@7.0.4: 1924 | resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} 1925 | engines: {node: '>=16 || 14 >=14.17'} 1926 | 1927 | /mocha@10.2.0: 1928 | resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} 1929 | engines: {node: '>= 14.0.0'} 1930 | hasBin: true 1931 | dependencies: 1932 | ansi-colors: 4.1.1 1933 | browser-stdout: 1.3.1 1934 | chokidar: 3.5.3 1935 | debug: 4.3.4(supports-color@8.1.1) 1936 | diff: 5.0.0 1937 | escape-string-regexp: 4.0.0 1938 | find-up: 5.0.0 1939 | glob: 7.2.0 1940 | he: 1.2.0 1941 | js-yaml: 4.1.0 1942 | log-symbols: 4.1.0 1943 | minimatch: 5.0.1 1944 | ms: 2.1.3 1945 | nanoid: 3.3.3 1946 | serialize-javascript: 6.0.0 1947 | strip-json-comments: 3.1.1 1948 | supports-color: 8.1.1 1949 | workerpool: 6.2.1 1950 | yargs: 16.2.0 1951 | yargs-parser: 20.2.4 1952 | yargs-unparser: 2.0.0 1953 | dev: true 1954 | 1955 | /ms@2.1.2: 1956 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1957 | dev: true 1958 | 1959 | /ms@2.1.3: 1960 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1961 | dev: true 1962 | 1963 | /nanoid@3.3.3: 1964 | resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} 1965 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1966 | hasBin: true 1967 | dev: true 1968 | 1969 | /natural-compare@1.4.0: 1970 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1971 | dev: true 1972 | 1973 | /neo-async@2.6.2: 1974 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 1975 | dev: true 1976 | 1977 | /no-case@2.3.2: 1978 | resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} 1979 | dependencies: 1980 | lower-case: 1.1.4 1981 | dev: false 1982 | 1983 | /node-releases@2.0.13: 1984 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 1985 | dev: true 1986 | 1987 | /normalize-path@3.0.0: 1988 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1989 | engines: {node: '>=0.10.0'} 1990 | dev: true 1991 | 1992 | /once@1.4.0: 1993 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1994 | dependencies: 1995 | wrappy: 1.0.2 1996 | dev: true 1997 | 1998 | /optionator@0.8.3: 1999 | resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} 2000 | engines: {node: '>= 0.8.0'} 2001 | dependencies: 2002 | deep-is: 0.1.4 2003 | fast-levenshtein: 2.0.6 2004 | levn: 0.3.0 2005 | prelude-ls: 1.1.2 2006 | type-check: 0.3.2 2007 | word-wrap: 1.2.5 2008 | dev: false 2009 | 2010 | /optionator@0.9.3: 2011 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2012 | engines: {node: '>= 0.8.0'} 2013 | dependencies: 2014 | '@aashutoshrathi/word-wrap': 1.2.6 2015 | deep-is: 0.1.4 2016 | fast-levenshtein: 2.0.6 2017 | levn: 0.4.1 2018 | prelude-ls: 1.2.1 2019 | type-check: 0.4.0 2020 | dev: true 2021 | 2022 | /p-limit@2.3.0: 2023 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2024 | engines: {node: '>=6'} 2025 | dependencies: 2026 | p-try: 2.2.0 2027 | dev: true 2028 | 2029 | /p-limit@3.1.0: 2030 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2031 | engines: {node: '>=10'} 2032 | dependencies: 2033 | yocto-queue: 0.1.0 2034 | dev: true 2035 | 2036 | /p-locate@4.1.0: 2037 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2038 | engines: {node: '>=8'} 2039 | dependencies: 2040 | p-limit: 2.3.0 2041 | dev: true 2042 | 2043 | /p-locate@5.0.0: 2044 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2045 | engines: {node: '>=10'} 2046 | dependencies: 2047 | p-limit: 3.1.0 2048 | dev: true 2049 | 2050 | /p-try@2.2.0: 2051 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2052 | engines: {node: '>=6'} 2053 | dev: true 2054 | 2055 | /pako@1.0.11: 2056 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 2057 | dev: true 2058 | 2059 | /param-case@2.1.1: 2060 | resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} 2061 | dependencies: 2062 | no-case: 2.3.2 2063 | dev: false 2064 | 2065 | /parent-module@1.0.1: 2066 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2067 | engines: {node: '>=6'} 2068 | dependencies: 2069 | callsites: 3.1.0 2070 | dev: true 2071 | 2072 | /path-exists@4.0.0: 2073 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2074 | engines: {node: '>=8'} 2075 | dev: true 2076 | 2077 | /path-is-absolute@1.0.1: 2078 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2079 | engines: {node: '>=0.10.0'} 2080 | dev: true 2081 | 2082 | /path-key@3.1.1: 2083 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2084 | engines: {node: '>=8'} 2085 | 2086 | /path-parse@1.0.7: 2087 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2088 | dev: true 2089 | 2090 | /path-scurry@1.10.1: 2091 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} 2092 | engines: {node: '>=16 || 14 >=14.17'} 2093 | dependencies: 2094 | lru-cache: 10.0.3 2095 | minipass: 7.0.4 2096 | 2097 | /path-type@4.0.0: 2098 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2099 | engines: {node: '>=8'} 2100 | dev: true 2101 | 2102 | /picocolors@1.0.0: 2103 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2104 | dev: true 2105 | 2106 | /picomatch@2.3.1: 2107 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2108 | engines: {node: '>=8.6'} 2109 | dev: true 2110 | 2111 | /pkg-dir@4.2.0: 2112 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 2113 | engines: {node: '>=8'} 2114 | dependencies: 2115 | find-up: 4.1.0 2116 | dev: true 2117 | 2118 | /prelude-ls@1.1.2: 2119 | resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} 2120 | engines: {node: '>= 0.8.0'} 2121 | dev: false 2122 | 2123 | /prelude-ls@1.2.1: 2124 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2125 | engines: {node: '>= 0.8.0'} 2126 | dev: true 2127 | 2128 | /process-nextick-args@2.0.1: 2129 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 2130 | dev: true 2131 | 2132 | /pseudo-localization@2.4.0: 2133 | resolution: {integrity: sha512-ISYMOKY8+f+PmiXMFw2y6KLY74LBrv/8ml/VjjoVEV2k+MS+OJZz7ydciK5ntJwxPrKQPTU1+oXq9Mx2b0zEzg==} 2134 | hasBin: true 2135 | dependencies: 2136 | flat: 5.0.2 2137 | get-stdin: 7.0.0 2138 | typescript: 4.9.5 2139 | yargs: 17.7.2 2140 | dev: true 2141 | 2142 | /punycode@2.3.1: 2143 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2144 | engines: {node: '>=6'} 2145 | dev: true 2146 | 2147 | /queue-microtask@1.2.3: 2148 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2149 | dev: true 2150 | 2151 | /randombytes@2.1.0: 2152 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 2153 | dependencies: 2154 | safe-buffer: 5.2.1 2155 | dev: true 2156 | 2157 | /readable-stream@2.3.8: 2158 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 2159 | dependencies: 2160 | core-util-is: 1.0.3 2161 | inherits: 2.0.4 2162 | isarray: 1.0.0 2163 | process-nextick-args: 2.0.1 2164 | safe-buffer: 5.1.2 2165 | string_decoder: 1.1.1 2166 | util-deprecate: 1.0.2 2167 | dev: true 2168 | 2169 | /readdirp@3.6.0: 2170 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2171 | engines: {node: '>=8.10.0'} 2172 | dependencies: 2173 | picomatch: 2.3.1 2174 | dev: true 2175 | 2176 | /rechoir@0.8.0: 2177 | resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} 2178 | engines: {node: '>= 10.13.0'} 2179 | dependencies: 2180 | resolve: 1.22.8 2181 | dev: true 2182 | 2183 | /relateurl@0.2.7: 2184 | resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} 2185 | engines: {node: '>= 0.10'} 2186 | dev: false 2187 | 2188 | /require-directory@2.1.1: 2189 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 2190 | engines: {node: '>=0.10.0'} 2191 | dev: true 2192 | 2193 | /resolve-cwd@3.0.0: 2194 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 2195 | engines: {node: '>=8'} 2196 | dependencies: 2197 | resolve-from: 5.0.0 2198 | dev: true 2199 | 2200 | /resolve-from@4.0.0: 2201 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2202 | engines: {node: '>=4'} 2203 | dev: true 2204 | 2205 | /resolve-from@5.0.0: 2206 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 2207 | engines: {node: '>=8'} 2208 | dev: true 2209 | 2210 | /resolve-pkg-maps@1.0.0: 2211 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 2212 | dev: true 2213 | 2214 | /resolve@1.22.8: 2215 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 2216 | hasBin: true 2217 | dependencies: 2218 | is-core-module: 2.13.1 2219 | path-parse: 1.0.7 2220 | supports-preserve-symlinks-flag: 1.0.0 2221 | dev: true 2222 | 2223 | /reusify@1.0.4: 2224 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2225 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2226 | dev: true 2227 | 2228 | /rimraf@3.0.2: 2229 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2230 | hasBin: true 2231 | dependencies: 2232 | glob: 7.2.3 2233 | dev: true 2234 | 2235 | /run-parallel@1.2.0: 2236 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2237 | dependencies: 2238 | queue-microtask: 1.2.3 2239 | dev: true 2240 | 2241 | /safe-buffer@5.1.2: 2242 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 2243 | dev: true 2244 | 2245 | /safe-buffer@5.2.1: 2246 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 2247 | dev: true 2248 | 2249 | /sax@1.3.0: 2250 | resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} 2251 | dev: true 2252 | 2253 | /schema-utils@3.3.0: 2254 | resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} 2255 | engines: {node: '>= 10.13.0'} 2256 | dependencies: 2257 | '@types/json-schema': 7.0.15 2258 | ajv: 6.12.6 2259 | ajv-keywords: 3.5.2(ajv@6.12.6) 2260 | dev: true 2261 | 2262 | /semver@7.5.4: 2263 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2264 | engines: {node: '>=10'} 2265 | hasBin: true 2266 | dependencies: 2267 | lru-cache: 6.0.0 2268 | dev: true 2269 | 2270 | /serialize-javascript@6.0.0: 2271 | resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} 2272 | dependencies: 2273 | randombytes: 2.1.0 2274 | dev: true 2275 | 2276 | /serialize-javascript@6.0.1: 2277 | resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} 2278 | dependencies: 2279 | randombytes: 2.1.0 2280 | dev: true 2281 | 2282 | /setimmediate@1.0.5: 2283 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} 2284 | dev: true 2285 | 2286 | /shallow-clone@3.0.1: 2287 | resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} 2288 | engines: {node: '>=8'} 2289 | dependencies: 2290 | kind-of: 6.0.3 2291 | dev: true 2292 | 2293 | /shebang-command@2.0.0: 2294 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2295 | engines: {node: '>=8'} 2296 | dependencies: 2297 | shebang-regex: 3.0.0 2298 | 2299 | /shebang-regex@3.0.0: 2300 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2301 | engines: {node: '>=8'} 2302 | 2303 | /signal-exit@4.1.0: 2304 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 2305 | engines: {node: '>=14'} 2306 | 2307 | /slash@3.0.0: 2308 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2309 | engines: {node: '>=8'} 2310 | dev: true 2311 | 2312 | /source-map-support@0.5.21: 2313 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 2314 | dependencies: 2315 | buffer-from: 1.1.2 2316 | source-map: 0.6.1 2317 | dev: true 2318 | 2319 | /source-map@0.5.7: 2320 | resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} 2321 | engines: {node: '>=0.10.0'} 2322 | dev: false 2323 | 2324 | /source-map@0.6.1: 2325 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2326 | engines: {node: '>=0.10.0'} 2327 | 2328 | /source-map@0.7.4: 2329 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} 2330 | engines: {node: '>= 8'} 2331 | dev: true 2332 | 2333 | /static-eval@2.0.2: 2334 | resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} 2335 | dependencies: 2336 | escodegen: 1.14.3 2337 | dev: false 2338 | 2339 | /string-width@4.2.3: 2340 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 2341 | engines: {node: '>=8'} 2342 | dependencies: 2343 | emoji-regex: 8.0.0 2344 | is-fullwidth-code-point: 3.0.0 2345 | strip-ansi: 6.0.1 2346 | 2347 | /string-width@5.1.2: 2348 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 2349 | engines: {node: '>=12'} 2350 | dependencies: 2351 | eastasianwidth: 0.2.0 2352 | emoji-regex: 9.2.2 2353 | strip-ansi: 7.1.0 2354 | 2355 | /string_decoder@1.1.1: 2356 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 2357 | dependencies: 2358 | safe-buffer: 5.1.2 2359 | dev: true 2360 | 2361 | /strip-ansi@6.0.1: 2362 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2363 | engines: {node: '>=8'} 2364 | dependencies: 2365 | ansi-regex: 5.0.1 2366 | 2367 | /strip-ansi@7.1.0: 2368 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 2369 | engines: {node: '>=12'} 2370 | dependencies: 2371 | ansi-regex: 6.0.1 2372 | 2373 | /strip-json-comments@3.1.1: 2374 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2375 | engines: {node: '>=8'} 2376 | dev: true 2377 | 2378 | /supports-color@7.2.0: 2379 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2380 | engines: {node: '>=8'} 2381 | dependencies: 2382 | has-flag: 4.0.0 2383 | dev: true 2384 | 2385 | /supports-color@8.1.1: 2386 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 2387 | engines: {node: '>=10'} 2388 | dependencies: 2389 | has-flag: 4.0.0 2390 | dev: true 2391 | 2392 | /supports-preserve-symlinks-flag@1.0.0: 2393 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2394 | engines: {node: '>= 0.4'} 2395 | dev: true 2396 | 2397 | /tapable@2.2.1: 2398 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 2399 | engines: {node: '>=6'} 2400 | dev: true 2401 | 2402 | /terser-webpack-plugin@5.3.9(webpack@5.89.0): 2403 | resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} 2404 | engines: {node: '>= 10.13.0'} 2405 | peerDependencies: 2406 | '@swc/core': '*' 2407 | esbuild: '*' 2408 | uglify-js: '*' 2409 | webpack: ^5.1.0 2410 | peerDependenciesMeta: 2411 | '@swc/core': 2412 | optional: true 2413 | esbuild: 2414 | optional: true 2415 | uglify-js: 2416 | optional: true 2417 | dependencies: 2418 | '@jridgewell/trace-mapping': 0.3.20 2419 | jest-worker: 27.5.1 2420 | schema-utils: 3.3.0 2421 | serialize-javascript: 6.0.1 2422 | terser: 5.24.0 2423 | webpack: 5.89.0(webpack-cli@5.1.4) 2424 | dev: true 2425 | 2426 | /terser@5.24.0: 2427 | resolution: {integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==} 2428 | engines: {node: '>=10'} 2429 | hasBin: true 2430 | dependencies: 2431 | '@jridgewell/source-map': 0.3.5 2432 | acorn: 8.11.2 2433 | commander: 2.20.3 2434 | source-map-support: 0.5.21 2435 | dev: true 2436 | 2437 | /text-table@0.2.0: 2438 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2439 | dev: true 2440 | 2441 | /to-regex-range@5.0.1: 2442 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2443 | engines: {node: '>=8.0'} 2444 | dependencies: 2445 | is-number: 7.0.0 2446 | dev: true 2447 | 2448 | /ts-api-utils@1.0.3(typescript@5.2.2): 2449 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} 2450 | engines: {node: '>=16.13.0'} 2451 | peerDependencies: 2452 | typescript: '>=4.2.0' 2453 | dependencies: 2454 | typescript: 5.2.2 2455 | dev: true 2456 | 2457 | /ts-loader@9.5.0(typescript@5.2.2)(webpack@5.89.0): 2458 | resolution: {integrity: sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==} 2459 | engines: {node: '>=12.0.0'} 2460 | peerDependencies: 2461 | typescript: '*' 2462 | webpack: ^5.0.0 2463 | dependencies: 2464 | chalk: 4.1.2 2465 | enhanced-resolve: 5.15.0 2466 | micromatch: 4.0.5 2467 | semver: 7.5.4 2468 | source-map: 0.7.4 2469 | typescript: 5.2.2 2470 | webpack: 5.89.0(webpack-cli@5.1.4) 2471 | dev: true 2472 | 2473 | /tsx@4.4.0: 2474 | resolution: {integrity: sha512-4fwcEjRUxW20ciSaMB8zkpGwCPxuRGnadDuj/pBk5S9uT29zvWz15PK36GrKJo45mSJomDxVejZ73c6lr3811Q==} 2475 | engines: {node: '>=18.0.0'} 2476 | hasBin: true 2477 | dependencies: 2478 | esbuild: 0.18.20 2479 | get-tsconfig: 4.7.2 2480 | optionalDependencies: 2481 | fsevents: 2.3.3 2482 | dev: true 2483 | 2484 | /type-check@0.3.2: 2485 | resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} 2486 | engines: {node: '>= 0.8.0'} 2487 | dependencies: 2488 | prelude-ls: 1.1.2 2489 | dev: false 2490 | 2491 | /type-check@0.4.0: 2492 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2493 | engines: {node: '>= 0.8.0'} 2494 | dependencies: 2495 | prelude-ls: 1.2.1 2496 | dev: true 2497 | 2498 | /type-fest@0.20.2: 2499 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2500 | engines: {node: '>=10'} 2501 | dev: true 2502 | 2503 | /typescript@4.9.5: 2504 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 2505 | engines: {node: '>=4.2.0'} 2506 | hasBin: true 2507 | dev: true 2508 | 2509 | /typescript@5.2.2: 2510 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} 2511 | engines: {node: '>=14.17'} 2512 | hasBin: true 2513 | dev: true 2514 | 2515 | /uglify-js@3.4.10: 2516 | resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==} 2517 | engines: {node: '>=0.8.0'} 2518 | hasBin: true 2519 | dependencies: 2520 | commander: 2.19.0 2521 | source-map: 0.6.1 2522 | dev: false 2523 | 2524 | /underscore@1.12.1: 2525 | resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} 2526 | dev: false 2527 | 2528 | /update-browserslist-db@1.0.13(browserslist@4.22.1): 2529 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 2530 | hasBin: true 2531 | peerDependencies: 2532 | browserslist: '>= 4.21.0' 2533 | dependencies: 2534 | browserslist: 4.22.1 2535 | escalade: 3.1.1 2536 | picocolors: 1.0.0 2537 | dev: true 2538 | 2539 | /upper-case@1.1.3: 2540 | resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} 2541 | dev: false 2542 | 2543 | /uri-js@4.4.1: 2544 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2545 | dependencies: 2546 | punycode: 2.3.1 2547 | dev: true 2548 | 2549 | /util-deprecate@1.0.2: 2550 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2551 | dev: true 2552 | 2553 | /watchpack@2.4.0: 2554 | resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} 2555 | engines: {node: '>=10.13.0'} 2556 | dependencies: 2557 | glob-to-regexp: 0.4.1 2558 | graceful-fs: 4.2.11 2559 | dev: true 2560 | 2561 | /web-tree-sitter@0.20.8: 2562 | resolution: {integrity: sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==} 2563 | dev: true 2564 | 2565 | /webpack-cli@5.1.4(webpack@5.89.0): 2566 | resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} 2567 | engines: {node: '>=14.15.0'} 2568 | hasBin: true 2569 | peerDependencies: 2570 | '@webpack-cli/generators': '*' 2571 | webpack: 5.x.x 2572 | webpack-bundle-analyzer: '*' 2573 | webpack-dev-server: '*' 2574 | peerDependenciesMeta: 2575 | '@webpack-cli/generators': 2576 | optional: true 2577 | webpack-bundle-analyzer: 2578 | optional: true 2579 | webpack-dev-server: 2580 | optional: true 2581 | dependencies: 2582 | '@discoveryjs/json-ext': 0.5.7 2583 | '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.89.0) 2584 | '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.89.0) 2585 | '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.89.0) 2586 | colorette: 2.0.20 2587 | commander: 10.0.1 2588 | cross-spawn: 7.0.3 2589 | envinfo: 7.11.0 2590 | fastest-levenshtein: 1.0.16 2591 | import-local: 3.1.0 2592 | interpret: 3.1.1 2593 | rechoir: 0.8.0 2594 | webpack: 5.89.0(webpack-cli@5.1.4) 2595 | webpack-merge: 5.10.0 2596 | dev: true 2597 | 2598 | /webpack-merge@5.10.0: 2599 | resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} 2600 | engines: {node: '>=10.0.0'} 2601 | dependencies: 2602 | clone-deep: 4.0.1 2603 | flat: 5.0.2 2604 | wildcard: 2.0.1 2605 | dev: true 2606 | 2607 | /webpack-sources@3.2.3: 2608 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} 2609 | engines: {node: '>=10.13.0'} 2610 | dev: true 2611 | 2612 | /webpack@5.89.0(webpack-cli@5.1.4): 2613 | resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} 2614 | engines: {node: '>=10.13.0'} 2615 | hasBin: true 2616 | peerDependencies: 2617 | webpack-cli: '*' 2618 | peerDependenciesMeta: 2619 | webpack-cli: 2620 | optional: true 2621 | dependencies: 2622 | '@types/eslint-scope': 3.7.7 2623 | '@types/estree': 1.0.5 2624 | '@webassemblyjs/ast': 1.11.6 2625 | '@webassemblyjs/wasm-edit': 1.11.6 2626 | '@webassemblyjs/wasm-parser': 1.11.6 2627 | acorn: 8.11.2 2628 | acorn-import-assertions: 1.9.0(acorn@8.11.2) 2629 | browserslist: 4.22.1 2630 | chrome-trace-event: 1.0.3 2631 | enhanced-resolve: 5.15.0 2632 | es-module-lexer: 1.4.1 2633 | eslint-scope: 5.1.1 2634 | events: 3.3.0 2635 | glob-to-regexp: 0.4.1 2636 | graceful-fs: 4.2.11 2637 | json-parse-even-better-errors: 2.3.1 2638 | loader-runner: 4.3.0 2639 | mime-types: 2.1.35 2640 | neo-async: 2.6.2 2641 | schema-utils: 3.3.0 2642 | tapable: 2.2.1 2643 | terser-webpack-plugin: 5.3.9(webpack@5.89.0) 2644 | watchpack: 2.4.0 2645 | webpack-cli: 5.1.4(webpack@5.89.0) 2646 | webpack-sources: 3.2.3 2647 | transitivePeerDependencies: 2648 | - '@swc/core' 2649 | - esbuild 2650 | - uglify-js 2651 | dev: true 2652 | 2653 | /which@2.0.2: 2654 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2655 | engines: {node: '>= 8'} 2656 | hasBin: true 2657 | dependencies: 2658 | isexe: 2.0.0 2659 | 2660 | /wildcard@2.0.1: 2661 | resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} 2662 | dev: true 2663 | 2664 | /word-wrap@1.2.5: 2665 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2666 | engines: {node: '>=0.10.0'} 2667 | dev: false 2668 | 2669 | /workerpool@6.2.1: 2670 | resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} 2671 | dev: true 2672 | 2673 | /wrap-ansi@7.0.0: 2674 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2675 | engines: {node: '>=10'} 2676 | dependencies: 2677 | ansi-styles: 4.3.0 2678 | string-width: 4.2.3 2679 | strip-ansi: 6.0.1 2680 | 2681 | /wrap-ansi@8.1.0: 2682 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2683 | engines: {node: '>=12'} 2684 | dependencies: 2685 | ansi-styles: 6.2.1 2686 | string-width: 5.1.2 2687 | strip-ansi: 7.1.0 2688 | 2689 | /wrappy@1.0.2: 2690 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2691 | dev: true 2692 | 2693 | /xml2js@0.5.0: 2694 | resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} 2695 | engines: {node: '>=4.0.0'} 2696 | dependencies: 2697 | sax: 1.3.0 2698 | xmlbuilder: 11.0.1 2699 | dev: true 2700 | 2701 | /xmlbuilder@11.0.1: 2702 | resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} 2703 | engines: {node: '>=4.0'} 2704 | dev: true 2705 | 2706 | /y18n@5.0.8: 2707 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 2708 | engines: {node: '>=10'} 2709 | dev: true 2710 | 2711 | /yallist@4.0.0: 2712 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2713 | dev: true 2714 | 2715 | /yargs-parser@20.2.4: 2716 | resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} 2717 | engines: {node: '>=10'} 2718 | dev: true 2719 | 2720 | /yargs-parser@21.1.1: 2721 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 2722 | engines: {node: '>=12'} 2723 | dev: true 2724 | 2725 | /yargs-unparser@2.0.0: 2726 | resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} 2727 | engines: {node: '>=10'} 2728 | dependencies: 2729 | camelcase: 6.3.0 2730 | decamelize: 4.0.0 2731 | flat: 5.0.2 2732 | is-plain-obj: 2.1.0 2733 | dev: true 2734 | 2735 | /yargs@16.2.0: 2736 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 2737 | engines: {node: '>=10'} 2738 | dependencies: 2739 | cliui: 7.0.4 2740 | escalade: 3.1.1 2741 | get-caller-file: 2.0.5 2742 | require-directory: 2.1.1 2743 | string-width: 4.2.3 2744 | y18n: 5.0.8 2745 | yargs-parser: 20.2.4 2746 | dev: true 2747 | 2748 | /yargs@17.7.2: 2749 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 2750 | engines: {node: '>=12'} 2751 | dependencies: 2752 | cliui: 8.0.1 2753 | escalade: 3.1.1 2754 | get-caller-file: 2.0.5 2755 | require-directory: 2.1.1 2756 | string-width: 4.2.3 2757 | y18n: 5.0.8 2758 | yargs-parser: 21.1.1 2759 | dev: true 2760 | 2761 | /yocto-queue@0.1.0: 2762 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2763 | engines: {node: '>=10'} 2764 | dev: true 2765 | --------------------------------------------------------------------------------